@tiba-spark/client-shared-lib 25.1.0-1155 → 25.1.0-1160

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.
@@ -95,7 +95,7 @@ let NotificationsState = class NotificationsState {
95
95
  this.onAlertChange(ctx, notification, guid);
96
96
  break;
97
97
  case NotificationType.DynamicPricingCondition:
98
- this.onDyanmicPricingConditionChange(ctx, notification, guid);
98
+ this.onDynamicPricingConditionChange(ctx, notification, guid);
99
99
  break;
100
100
  default:
101
101
  console.log("unsupported notification type");
@@ -186,6 +186,8 @@ let NotificationsState = class NotificationsState {
186
186
  confirmMessages: [this.translateService.instant(Localization.dynamic_pricing_alert_message)],
187
187
  confirmTitle: this.translateService.instant(Localization.dynamic_pricing_alert_title),
188
188
  confirmSubTitle: this.translateService.instant(Localization.dynamic_pricing_alert_sub_title, { conditionName: notification.dynamicPricingCondition.conditionName }),
189
+ parkName: notification.dynamicPricingCondition.parkingLotName,
190
+ zoneName: notification.dynamicPricingCondition.zone?.name,
189
191
  okText: this.translateService.instant(Localization.yes),
190
192
  cancelText: this.translateService.instant(Localization.cancel),
191
193
  };
@@ -259,7 +261,7 @@ let NotificationsState = class NotificationsState {
259
261
  const notificationsMap = { ...ctx.getState().notificationsMap };
260
262
  // Whether we want to close or have a duplicate alert
261
263
  const notificationExists = notifications.find(notification => notification.guid === notificationDto.guid &&
262
- notification.dynamicPricingCondition?.cloudParkId === notificationDto.dynamicPricingCondition.cloudParkId);
264
+ notification.dynamicPricingCondition?.parkingLotId === notificationDto.dynamicPricingCondition.parkingLotId);
263
265
  if (notificationExists) {
264
266
  const notificationPK = this.notificationPK(notificationExists, guid);
265
267
  const toastId = notificationsMap[notificationPK];
@@ -416,7 +418,7 @@ let NotificationsState = class NotificationsState {
416
418
  }
417
419
  return alertDeviceType;
418
420
  }
419
- onDyanmicPricingConditionChange(ctx, notification, guid) {
421
+ onDynamicPricingConditionChange(ctx, notification, guid) {
420
422
  this.handleNotificationForClosing(ctx, notification, guid);
421
423
  this.handleTriggeredDynamicPricingConditionNotification(ctx, notification, guid);
422
424
  if (notification.dynamicPricingCondition.isTriggered) {
@@ -551,4 +553,4 @@ export { NotificationsState };
551
553
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NotificationsState, decorators: [{
552
554
  type: Injectable
553
555
  }], 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: [] } });
554
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFbkgsT0FBTyxFQUFFLDhCQUE4QixFQUE2Qix1QkFBdUIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQ3BMLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBRWpJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3RJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE9BQU8sRUFBeUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSwyQkFBMkIsRUFBRSwwQkFB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QzsyREFLcEM7QUFHRDtJQURDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQzt3RUFHcEM7QUFHSztJQURMLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztvRUFlaEM7QUFHRDtJQURDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztvRUFPaEM7QUE3RU07SUFETixRQUFRLEVBQUU7c0NBR1Y7QUFwQlUsa0JBQWtCO0lBYjlCLEtBQUssQ0FBcUI7UUFDekIsSUFBSSxFQUFFLGVBQWU7UUFDckIsUUFBUSxFQUFFO1lBQ1IsTUFBTSxFQUFFO2dCQUNOLGFBQWEsRUFBRSxFQUFFO2dCQUNqQiw4QkFBOEIsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHO2dCQUN4RCxVQUFVLEVBQUUsQ0FBQztnQkFDYixZQUFZLEVBQUUsS0FBSzthQUNwQjtZQUNELGdCQUFnQixFQUFFLEVBQUU7U0FDckI7S0FDRixDQUFDO0dBRVcsa0JBQWtCLENBMmpCOUI7U0EzakJZLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVO3dkQXdCVCxtQ0FBbUMsTUFVbkMseUJBQXlCLE1BY3pCLDBCQUEwQixNQWExQixpQkFBaUIsTUFPakIsOEJBQThCLE1BS3hCLDBCQUEwQixNQWlCaEMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uL2FsZXJ0LW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2xhc3MsIE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMsIE5vdGlmaWNhdGlvblZQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl85XzJfMCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcgfSBmcm9tICcuLi8uLi9lbnVtcy9hbGVydHMtZGV2aWNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jbG91ZC1jb25maXJtLWRpYWxvZy1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uU2VydmljZVByb3h5LCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFJhdGVTZXJ2aWNlUHJveHksIFpvbmVTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOdW1iZXJNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4uL2F1dGgvc2Vzc2lvbi5zdGF0ZSc7XG5pbXBvcnQgeyBGYWNpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9mYWNpbGl0eSc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi4vZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUnO1xuaW1wb3J0IHsgUGFya01hbmFnZXJTdGF0ZSB9IGZyb20gJy4uL3BhcmstbWFuYWdlci9wYXJrLW1hbmFnZXIuc3RhdGUnO1xuaW1wb3J0IHsgU2lkZW5hdlN0YXRlIH0gZnJvbSAnLi4vc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbiB9IGZyb20gJy4uL3VzZXItc2V0dGluZ3MvdXNlci1zZXR0aW5ncy5hY3Rpb25zJztcbmltcG9ydCB7XG4gIENsZWFyTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nLCBMb2FkTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uLFxuICBTZXROb3RpZmljYXRpb25zQ29uZmlnQWN0aW9uLCBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb25cbn0gZnJvbSAnLi9ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWxlcnRzUHJlZmVyZW5jZXNNYXAsIEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwLCBGYWNpbGl0eVByZWZlcmVuY2VzTWFwLCBOb3RpZmljYXRpb25zQ29uZmlnIH0gZnJvbSAnLi9ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25zTW9kZWwge1xuICBjb25maWc6IE5vdGlmaWNhdGlvbnNDb25maWc7XG4gIG5vdGlmaWNhdGlvbnNNYXA6IE51bWJlck1hcDxudW1iZXI+O1xufVxuXG5AU3RhdGU8Tm90aWZpY2F0aW9uc01vZGVsPih7XG4gIG5hbWU6ICdub3RpZmljYXRpb25zJyxcbiAgZGVmYXVsdHM6IHtcbiAgICBjb25maWc6IHtcbiAgICAgIG5vdGlmaWNhdGlvbnM6IFtdLFxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Mb3csXG4gICAgICBiYWRnZVZhbHVlOiAwLFxuICAgICAgZGlzcGxheUJhZGdlOiBmYWxzZSxcbiAgICB9LFxuICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9LFxuICB9LFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zU3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZVByb3h5OiBOb3RpZmljYXRpb25TZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhbGVydE5vdGlmaWNhdGlvblNlcnZpY2U6IEFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbnNTZXJ2aWNlOiBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlOiBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlOiBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2U6IEZhY2lsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIHpvbmVTZXJ2aWNlUHJveHk6IFpvbmVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSByYXRlU2VydmljZVByb3h5OiBSYXRlU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSkge1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNvbmZpZyhzdGF0ZTogTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uc0NvbmZpZyB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbmZpZztcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKVxuICBvblVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbikge1xuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyxcbiAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5zdHJpbmdpZnkoYWN0aW9uLnVzZXJOb3RpZmljYXRpb25zUHJlZmVyZW5jZXMpLFxuICAgIH0pO1xuXG4gICAgY3R4LmRpc3BhdGNoKG5ldyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24oc2V0dGluZykpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25Mb2FkTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCB7IG1pbnV0ZXNBZ28gfTogTG9hZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zJCA9IHRoaXMubm90aWZpY2F0aW9uU2VydmljZVByb3h5LmdldEFsbE5vdGlmaWNhdGlvbnMobWludXRlc0Fnbyk7XG5cbiAgICByZXR1cm4gbm90aWZpY2F0aW9ucyQucGlwZSh0YXAoYXN5bmMgbm90aWZpY2F0aW9ucyA9PiB7XG4gICAgICBjb25zdCBwb3B1bGF0ZU5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbkR0b1tdID0gYXdhaXQgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZU5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9ucy5kYXRhKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNDb25maWc6IE5vdGlmaWNhdGlvbnNDb25maWcgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKHBvcHVsYXRlTm90aWZpY2F0aW9ucyk7XG5cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY29uZmlnOiBub3RpZmljYXRpb25zQ29uZmlnLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhck5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uQ2xlYXJOb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogQ2xlYXJOb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IFtdLFxuICAgICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICAgICAgYmFkZ2VWYWx1ZTogMCxcbiAgICAgICAgZGlzcGxheUJhZGdlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBub3RpZmljYXRpb25zTWFwOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0Tm90aWZpY2F0aW9uc0NvbmZpZ0FjdGlvbilcbiAgb25TZXRDb25maWdBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBTZXROb3RpZmljYXRpb25zQ29uZmlnQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY29uZmlnOiBhY3Rpb24ubm90aWZpY2F0aW9uc0NvbmZpZyxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZylcbiAgb25IYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uLCBndWlkIH06IEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcpIHtcbiAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICB9XG5cbiAgQEFjdGlvbihOb3RpZmljYXRpb25DaGFuZ2VBY3Rpb24pXG4gIGFzeW5jIG9uTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uLCBndWlkIH06IE5vdGlmaWNhdGlvbkNoYW5nZUFjdGlvbikge1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5BbGVydDpcbiAgICAgICAgdGhpcy5vbkFsZXJ0Q2hhbmdlKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgdGhpcy5vbkR5YW5taWNQcmljaW5nQ29uZGl0aW9uQ2hhbmdlKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKVxuICBvbkhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pIHtcbiAgICBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uPy5oYW5kbGVkQnlVc2VySWQgPiAwKSB7XG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2Nlc3NOb3RpZmljYXRpb25VcGRhdGUoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NOb3RpZmljYXRpb25VcGRhdGUoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBoYW5kbGUgdXNlciAtIGFuZCBzYXZlIGluIHN0YXRlXG4gICAgbGV0IGV4aXN0Tm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG87XG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICBleGlzdE5vdGlmaWNhdGlvbkR0byA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkFsZXJ0OlxuICAgICAgICBleGlzdE5vdGlmaWNhdGlvbkR0byA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlTWF0Y2hlcyhub3RpZmljYXRpb24uYWxlcnQsIG5vdGlmaWNhdGlvbkR0by5hbGVydC5ldmVudFN0YXRlKSk7XG5cbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxwci1taXNtYXRjaC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbG9zdC10aWNrZXQtbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChleGlzdE5vdGlmaWNhdGlvbkR0bykge1xuICAgICAgZXhpc3ROb3RpZmljYXRpb25EdG8uaGFuZGxpbmdCeVVzZXIgPSBub3RpZmljYXRpb25EdG8uaGFuZGxpbmdCeVVzZXI7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhub3RpZmljYXRpb25zKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGNyaXRpY2FsIGFsZXJ0IG1vZGFsXG4gICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFsZXJ0VHlwZU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3JbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl0pO1xuICAgIGNvbnN0IGNsb3VkQ29uZmlybURpYWxvZ0RhdGE6IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgPSB7XG4gICAgICBjb25maXJtTWVzc2FnZXM6IFt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY3JpdGljYWxfYWxlcnRfbWVzc2FnZSwge1xuICAgICAgICBhbGVydFR5cGVOYW1lXG4gICAgICB9KV0sXG4gICAgICBjb25maXJtVGl0bGU6IGFsZXJ0VHlwZU5hbWUsXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgICBkZXZpY2U6IHtcbiAgICAgICAgY29tbUlkOiBhbGVydC5yZWFkZXJJRC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBhbGVydC5kZXZpY2VOYW1lXG4gICAgICB9LFxuICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxuICAgICAgem9uZU5hbWU6IGFsZXJ0LnBhcmtab25lTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Dcml0aWNhbCxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5SW52ZXJ0OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBwYW5lbENsYXNzOiBgdGItY3JpdGljYWwtbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBkYXRhOiBjbG91ZENvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcbiAgICAgICAgY29uc3QgaGFuZGxlQWxlcnQ6IEhhbmRsaW5nQWxlcnREdG8gPSBuZXcgSGFuZGxpbmdBbGVydER0byh7XG4gICAgICAgICAgZ3VpZDogZ3VpZCxcbiAgICAgICAgICBwYXJrSWQ6IGFsZXJ0LnBhcmtJZCxcbiAgICAgICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXG4gICAgICAgICAgZGV2aWNlSWQ6IGFsZXJ0LmRldmljZUlELFxuICAgICAgICAgIGV2ZW50RGVzY3JpcHRpb246IGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgdXNlckZ1bGxOYW1lOiB1c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBpZDogYWxlcnQuaWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2VQcm94eS5oYW5kbGVBbGVydE5vdGlmaWNhdGlvbihoYW5kbGVBbGVydCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KHJlcy5kYXRhIHx8IGFsZXJ0LCBndWlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbkRpYWxvZyhub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfbWVzc2FnZSldLFxuICAgICAgY29uZmlybVRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3RpdGxlKSxcbiAgICAgIGNvbmZpcm1TdWJUaXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9zdWJfdGl0bGUsIHsgY29uZGl0aW9uTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNvbmRpdGlvbk5hbWUgfSksXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgfTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIGd1aWQpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBwYW5lbENsYXNzOiBgdGItZHluYW1pYy1wcmljaW5nLWNvbmRpdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvbi5pZH1gLFxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgICAgICBjb25zdCBoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvOiBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvID0gbmV3IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8oe1xuICAgICAgICAgIGNsb3VkUGFya0lkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQsXG4gICAgICAgICAgdXNlckZ1bGxOYW1lOiB1c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBpZDogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlUHJveHkuaGFuZGxlRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oaGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bykuc3Vic2NyaWJlKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgZHBjID0gcmVzLmRhdGEgfHwgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgICAgIGNvbnN0IHJhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJhdGVTZXJ2aWNlUHJveHkuZ2V0UmF0ZUJ5SWQoZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcbiAgICAgICAgICBkcGMucmF0ZU5hbWUgPSByYXRlPy5kYXRhPy5uYW1lO1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckR5bmFtaWNQcmljaW5nVG9hc3RFdmVudChyZXMuZGF0YSB8fCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheUFsZXJ0KGFsZXJ0LCBndWlkKTtcbiAgICBpZiAobm90aWZpY2F0aW9uKSB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS10gPSBub3RpZmljYXRpb24udG9hc3RJZDtcblxuICAgICAgbm90aWZpY2F0aW9uLm9uVGFwLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KGFsZXJ0LCBndWlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRGlhbG9nQnlJZChkaWFsb2dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlbkRpYWxvZ3MgPSB0aGlzLm1vZGFsU2VydmljZS5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGNvbnN0IGRpYWxvZyA9IG9wZW5EaWFsb2dzLmZpbmQoZGlhbG9nID0+IGRpYWxvZy5pZCA9PT0gZGlhbG9nSWQpO1xuXG4gICAgaWYgKGRpYWxvZykge1xuICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBbGVydEZvckNsb3NpbmcoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnREdG86IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0RHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3QgYWxlcnRFeGlzdHMgPSBub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uID0+XG4gICAgICB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIGFsZXJ0UEspICYmIHRoaXMuc3RhdGVNYXRjaGVzKG5vdGlmaWNhdGlvbi5hbGVydCwgYWxlcnREdG8uZXZlbnRTdGF0ZSlcbiAgICApO1xuICAgIGlmICghYWxlcnREdG8uZXZlbnRTdGF0ZSB8fCBhbGVydEV4aXN0cykge1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihub3RpZmljYXRpb24gPT4gIW5vdGlmaWNhdGlvbi5hbGVydCB8fCAhKHRoaXMuYWxlcnRQSyhub3RpZmljYXRpb24uYWxlcnQsIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gYWxlcnRQSykpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBjb25maWc6IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY29udmVydE5vdGlmaWNhdGlvbnNUb05vdGlmaWNhdGlvbnNDb25maWcoZmlsdGVyZWROb3RpZmljYXRpb25zKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDbG9zZSByZWxldmFudCBvcGVuIG1vZGFsc1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke2FsZXJ0UEt9YCk7XG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbHByLW1pc21hdGNoLW1vZGFsLSR7YWxlcnRQS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBsb3N0LXRpY2tldC1tb2RhbC0ke2FsZXJ0UEt9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gbm90aWZpY2F0aW9uLmd1aWQgPT09IG5vdGlmaWNhdGlvbkR0by5ndWlkICYmXG4gICAgICBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LmNsb3VkUGFya0lkID09PSBub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQpO1xuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25FeGlzdHMsIGd1aWQpO1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHJlbGV2YW50IG9wZW4gbW9kYWxzXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihub3RpZmljYXRpb24gPT5cbiAgICAgICAgISh0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmd1aWQpID09PSBub3RpZmljYXRpb25QSykpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBjb25maWc6IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY29udmVydE5vdGlmaWNhdGlvbnNUb05vdGlmaWNhdGlvbnNDb25maWcoZmlsdGVyZWROb3RpZmljYXRpb25zKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDbG9zZSByZWxldmFudCBvcGVuIG1vZGFsc1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBscHItbWlzbWF0Y2gtbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBsb3N0LXRpY2tldC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IHBhcmtJZCA9IG5vdGlmaWNhdGlvbkR0bz8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LnBhcmtJZDtcblxuICAgIC8vIGZpbmQgYWxsIHRoZSBkeW5hbWljIHByaWNpbmcgdHJpZ2dlcmVkIGNvbmRpdGlvbnMgb2Ygc2FtZSBndWlkIGFuZCBwYXJrSWQgdG8gYmUgY2xvc2VcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhIW5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiAmJlxuICAgICAgbm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKTtcblxuICAgIGlmIChkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGRwIG9mIGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhkcCwgZ3VpZCk7XG4gICAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgICAvLyBDbG9zZSByZWxldmFudCBvcGVuIG1vZGFsc1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uIHx8ICEobm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yYXRlU2VydmljZVByb3h5LmdldFJhdGVCeUlkKGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsIG51bGwsIGRwYyk7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfcmV2ZXJ0ZWRfdG9fZGVmYXVsdF9yYXRlKTtcbiAgICBjb25zdCBzdWJUaXRsZSA9IGAke2RwYy5wYXJraW5nTG90TmFtZX0ke2RwYy56b25lPy5uYW1lID8gJyB8ICcgKyBkcGMuem9uZT8ubmFtZSA6ICcnfWA7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7XG4gICAgICAgIHZhbHVlOiB0aXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnRpdGxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHN1YlRpdGxlLFxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3Muc3ViVGl0bGUsXG4gICAgICB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfTtcblxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyQWxlcnRzUHJlZmVyZW5jZXM6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyk7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyB1c2VyQWxlcnRzUHJlZmVyZW5jZXMgd2UgZG9uJ3QgZmlsdGVyIGF0IGFsbFxuICAgIGlmICghIXVzZXJBbGVydHNQcmVmZXJlbmNlcykge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgZW5hYmxlZCB0aGUgbm90aWZpY2F0aW9uc1xuICAgICAgLy8gRWxzZSB0aGUgdXNlciBkaXNhYmxlZCBhbGwgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIGlmICh1c2VyQWxlcnRzUHJlZmVyZW5jZXMuaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgICBjb25zdCBpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMl8wKTtcblxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjEuMCBvciBiZWxvdywgYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWRcbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4yLjAgYW5kIGFib3ZlLCB3ZSBmaWx0ZXIgYnkgdGhlIHByZWZlcmVuY2VzXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gIWlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkIHx8IHRoaXMuaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0LCBndWlkLCB1c2VyQWxlcnRzUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZywgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydHNQcmVmZXJlbmNlc01hcCkge1xuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBmYWNpbGl0eSBzZWxlY3RlZCwgd2UgY29udGludWUgdG8gY2hlY2tcbiAgICAvLyBFbHNlIHdlIGFsbG93IGFsbCB0byBwYXNzIGFzIHRoZSB1c2VyIGRpZG4ndCBzZXQgcHJlZmVyZW5jZXMgeWV0XG4gICAgaWYgKE9iamVjdC5rZXlzKHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcCkubGVuZ3RoKSB7XG4gICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlSWQgb2YgdGhlIHRlbmFudCAtIEluIGNhc2UgdGhlIHVzZXIgc2VsZWN0ZWQgXCJBbGwgVGVuYW50IFBhcmtpbmcgTG90c1wiXG4gICAgICBjb25zdCB0ZW5hbnRUcmVlSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlIHBhcmsgSWQgb2YgdGhlIGFsZXJ0XG4gICAgICBjb25zdCBhbGVydFRyZWVQYXJrSWQgPSB0aGlzLmdldENsb3VkUGFya0lkKGFsZXJ0LCBndWlkKTtcblxuICAgICAgLy8gV2UgR2V0IHRoZSBzZXR0aW5nIG9mIHRoZSBQYXJrLCBQYXJlbnRQYXJrIG9yIFBhcmtzVHJlZVJvb3RcbiAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXA6IEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAgPSB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnRUcmVlUGFya0lkXSB8fCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbdGVuYW50VHJlZUlkXTtcblxuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGZhY2lsaXR5IHdhcyBzZWxlY3RlZFxuICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXNNYXApIHtcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwID0gZmFjaWxpdHlQcmVmZXJlbmNlc01hcFthbGVydC5ldmVudERlc2NyaXB0aW9uXTtcblxuICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgYWxlcnQgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgICAgY29uc3QgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlID0gdGhpcy5nZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0KTtcblxuICAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBpZiB0aGUgZGV2aWNlIHR5cGUgd2FzIHNlbGVjdGVkXG4gICAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBhbGVydFR5cGVQcmVmZXJlbmNlc01hcFthbGVydERldmljZVR5cGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0OiBBbGVydER0byk6IEFsZXJ0c0RldmljZVR5cGUge1xuICAgIGxldCBhbGVydERldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGU7XG4gICAgY29uc3QgYWxlcnRzRGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZVtdID0gRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nLmdldChhbGVydC5kZXZpY2VUeXBlKTtcblxuICAgIHN3aXRjaCAoYWxlcnQuZGV2aWNlVHlwZSkge1xuICAgICAgY2FzZSBEZXZpY2VUeXBlLkNhc2g6XG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0LnJlYWRlcklEID09PSAwID8gQWxlcnRzRGV2aWNlVHlwZS5NYXN0ZXIgOiBBbGVydHNEZXZpY2VUeXBlLkNhc2hSZWdpc3RlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydHNEZXZpY2VUeXBlPy5bMF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBhbGVydERldmljZVR5cGU7XG4gIH1cblxuICBwcml2YXRlIG9uRHlhbm1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgdGhpcy5oYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG5cbiAgICBpZiAobm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzVHJpZ2dlcmVkKSB7XG4gICAgICAvLyBXZSBkbyBub3Qgb3BlbiB0aGUgbm90aWZpY2F0aW9uIGlmIHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gdGhpcy5mYWNpbGl0eVNlcnZpY2UuaGFzUGVybWlzc2lvblR5cGVCeVBhcmsoXG4gICAgICAgIFBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25EeW5hbWljUHJpY2luZywgbm90aWZpY2F0aW9uLmd1aWQsIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJraW5nTG90SWRcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGRvIG5vdCBvcGVuIHRoZSBub3RpZmljYXRpb24gaW4gbW9iaWxlIG1vZGVcbiAgICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG4gICAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlICYmIGhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgdGhpcy5vcGVuRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb25EaWFsb2cobm90aWZpY2F0aW9uLCBndWlkKTtcblxuICAgICAgICAvLyBQdXNoIHRoZSBuZXcgbm90aWZpY2F0aW9uIHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgICBub3RpZmljYXRpb24udGltZUFnb0luU2Vjb25kcyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZ2V0VGltZUFnb0luU2Vjb25kcyhub3RpZmljYXRpb24pO1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgICAgICBub3RpZmljYXRpb25zLnVuc2hpZnQobm90aWZpY2F0aW9uKTtcblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKG5vdGlmaWNhdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc0FjdGl2YXRlZCkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBmYWxsZW4gYmFjayB0byB0aGUgZGVmYXVsdCByYXRlXG4gICAgICB0aGlzLnNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uKS50aGVuKCk7XG4gICAgfSBlbHNlIGlmIChub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24udHJpZ2dlckFjdGlvbiA9PT0gRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLkF1dG9tYXRpY1N3aXRjaFJhdGUpIHtcbiAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgYXV0b21hdGljIHN3aXRjaFxuICAgICAgdGhpcy5zaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb24pLnRoZW4oKTtcbiAgICAgIHRoaXMuY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25BbGVydENoYW5nZShjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnQgPSBub3RpZmljYXRpb24/LmFsZXJ0O1xuICAgIGlmIChhbGVydCAmJiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmlzQWxlcnRUeXBlRGVmaW5lZChhbGVydC5ldmVudERlc2NyaXB0aW9uKSkge1xuICAgICAgdGhpcy5oYW5kbGVBbGVydEZvckNsb3NpbmcoY3R4LCBhbGVydCwgZ3VpZCk7XG5cbiAgICAgIGlmIChhbGVydC5ldmVudFN0YXRlICYmIHRoaXMuaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0LCBndWlkKSkge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuXG4gICAgICAgIGlmICghYWxlcnQuZGV2aWNlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHBhcmtEZXZpY2VzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChQYXJrTWFuYWdlclN0YXRlLmRldmljZXMpO1xuICAgICAgICAgIGFsZXJ0LmRldmljZU5hbWUgPSBwYXJrRGV2aWNlcz8uZmluZChkID0+IGQuaWQgPT09IGFsZXJ0LmRldmljZUlEKT8ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWxlcnQucGFya05hbWUpIHtcbiAgICAgICAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgICAgICAgaWYgKGxvdHNNYXApIHtcbiAgICAgICAgICAgIGFsZXJ0LnBhcmtOYW1lID0gbG90c01hcFthbGVydC5wYXJrSWRdPy5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFsZXJ0LnBhcmtab25lTmFtZSA9IFwiXCI7XG5cbiAgICAgICAgLy8gV2UgZG8gbm90IG9wZW4gdGhlIG5vdGlmaWNhdGlvbiBpbiBtb2JpbGUgbW9kZVxuICAgICAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG4gICAgICAgIGlmICghaXNNb2JpbGVBcHBNb2RlICYmIGlzQ2NNb2R1bGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLkxPU1RfVElDS0VUOlxuICAgICAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTFJQX05PVF9NQVRDSDpcbiAgICAgICAgICAgICAgdGhpcy5vcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggdGhlIG5ldyBhbGVydCB0byB0aGUgYXJyYXkgYW5kIHNhdmUgaW4gc3RhdGVcbiAgICAgICAgbm90aWZpY2F0aW9uLnRpbWVBZ29JblNlY29uZHMgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmdldFRpbWVBZ29JblNlY29uZHMobm90aWZpY2F0aW9uKTtcbiAgICAgICAgbm90aWZpY2F0aW9ucy51bnNoaWZ0KG5vdGlmaWNhdGlvbik7XG5cbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhub3RpZmljYXRpb25zKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZFBhcmtJZChhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgYWxlcnRQYXJrSWQgPSBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA+IDAgPyBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA6IGFsZXJ0LnBhcmtJZDtcbiAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgcmV0dXJuIGxvdHNNYXBbYWxlcnRQYXJrSWRdPy5jbG91ZElkO1xuICB9XG5cbiAgcHJpdmF0ZSBwa01hdGNoZXMgPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLOiBzdHJpbmcpID0+IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25EdG8uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLO1xuICBwcml2YXRlIHN0YXRlTWF0Y2hlcyA9IChhbGVydER0bzogQWxlcnREdG8sIGV2ZW50U3RhdGU6IGJvb2xlYW4pID0+IGFsZXJ0RHRvLmV2ZW50U3RhdGUgPT09IGV2ZW50U3RhdGU7XG4gIHByaXZhdGUgYWxlcnRQSyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBgJHtndWlkfV8ke2FsZXJ0RHRvLnBhcmtJZH1fJHthbGVydER0by5yZWFkZXJJRH1fJHthbGVydER0by5kZXZpY2VJRH1fJHthbGVydER0by5ldmVudERlc2NyaXB0aW9ufWA7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGxldCBrZXk6IHN0cmluZyA9ICcnO1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uRHRvLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5BbGVydDpcbiAgICAgICAga2V5ID0gdGhpcy5hbGVydFBLKG5vdGlmaWNhdGlvbkR0by5hbGVydCwgZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGtleSA9IGAke2d1aWR9XyR7bm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlkfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xuICB9XG59XG4iXX0=
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFFbkgsT0FBTyxFQUFFLDhCQUE4QixFQUE2Qix1QkFBdUIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQ3BMLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1GQUFtRixDQUFDO0FBRWpJLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3RJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE9BQU8sRUFBeUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSwyQkFBMkIsRUFBRSwwQkFB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QU0sQ0FBQyx1QkFBdUIsQ0FBQzttRUFZL0I7QUFHRDtJQURDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztvRUFXaEM7QUFHRDtJQURDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQzsyREFLcEM7QUFHRDtJQURDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQzt3RUFHcEM7QUFHSztJQURMLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztvRUFlaEM7QUFHRDtJQURDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQztvRUFPaEM7QUE3RU07SUFETixRQUFRLEVBQUU7c0NBR1Y7QUFwQlUsa0JBQWtCO0lBYjlCLEtBQUssQ0FBcUI7UUFDekIsSUFBSSxFQUFFLGVBQWU7UUFDckIsUUFBUSxFQUFFO1lBQ1IsTUFBTSxFQUFFO2dCQUNOLGFBQWEsRUFBRSxFQUFFO2dCQUNqQiw4QkFBOEIsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHO2dCQUN4RCxVQUFVLEVBQUUsQ0FBQztnQkFDYixZQUFZLEVBQUUsS0FBSzthQUNwQjtZQUNELGdCQUFnQixFQUFFLEVBQUU7U0FDckI7S0FDRixDQUFDO0dBRVcsa0JBQWtCLENBNmpCOUI7U0E3akJZLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVO3dkQXdCVCxtQ0FBbUMsTUFVbkMseUJBQXlCLE1BY3pCLDBCQUEwQixNQWExQixpQkFBaUIsTUFPakIsOEJBQThCLE1BS3hCLDBCQUEwQixNQWlCaEMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uL2FsZXJ0LW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2xhc3MsIE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMsIE5vdGlmaWNhdGlvblZQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl85XzJfMCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcgfSBmcm9tICcuLi8uLi9lbnVtcy9hbGVydHMtZGV2aWNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jbG91ZC1jb25maXJtLWRpYWxvZy1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uU2VydmljZVByb3h5LCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFJhdGVTZXJ2aWNlUHJveHksIFpvbmVTZXJ2aWNlUHJveHkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOdW1iZXJNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4uL2F1dGgvc2Vzc2lvbi5zdGF0ZSc7XG5pbXBvcnQgeyBGYWNpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9mYWNpbGl0eSc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi4vZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUnO1xuaW1wb3J0IHsgUGFya01hbmFnZXJTdGF0ZSB9IGZyb20gJy4uL3BhcmstbWFuYWdlci9wYXJrLW1hbmFnZXIuc3RhdGUnO1xuaW1wb3J0IHsgU2lkZW5hdlN0YXRlIH0gZnJvbSAnLi4vc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IFVwZGF0ZVVzZXJTZXR0aW5nc0FjdGlvbiB9IGZyb20gJy4uL3VzZXItc2V0dGluZ3MvdXNlci1zZXR0aW5ncy5hY3Rpb25zJztcbmltcG9ydCB7XG4gIENsZWFyTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nLCBMb2FkTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uLFxuICBTZXROb3RpZmljYXRpb25zQ29uZmlnQWN0aW9uLCBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb25cbn0gZnJvbSAnLi9ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWxlcnRzUHJlZmVyZW5jZXNNYXAsIEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwLCBGYWNpbGl0eVByZWZlcmVuY2VzTWFwLCBOb3RpZmljYXRpb25zQ29uZmlnIH0gZnJvbSAnLi9ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25zTW9kZWwge1xuICBjb25maWc6IE5vdGlmaWNhdGlvbnNDb25maWc7XG4gIG5vdGlmaWNhdGlvbnNNYXA6IE51bWJlck1hcDxudW1iZXI+O1xufVxuXG5AU3RhdGU8Tm90aWZpY2F0aW9uc01vZGVsPih7XG4gIG5hbWU6ICdub3RpZmljYXRpb25zJyxcbiAgZGVmYXVsdHM6IHtcbiAgICBjb25maWc6IHtcbiAgICAgIG5vdGlmaWNhdGlvbnM6IFtdLFxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Mb3csXG4gICAgICBiYWRnZVZhbHVlOiAwLFxuICAgICAgZGlzcGxheUJhZGdlOiBmYWxzZSxcbiAgICB9LFxuICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9LFxuICB9LFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zU3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZVByb3h5OiBOb3RpZmljYXRpb25TZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhbGVydE5vdGlmaWNhdGlvblNlcnZpY2U6IEFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbnNTZXJ2aWNlOiBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlOiBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlOiBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2U6IEZhY2lsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIHpvbmVTZXJ2aWNlUHJveHk6IFpvbmVTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSByYXRlU2VydmljZVByb3h5OiBSYXRlU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSkge1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNvbmZpZyhzdGF0ZTogTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uc0NvbmZpZyB7XG4gICAgcmV0dXJuIHN0YXRlLmNvbmZpZztcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVXNlckFsZXJ0c1ByZWZlcmVuY2VzQWN0aW9uKVxuICBvblVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbikge1xuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyxcbiAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5zdHJpbmdpZnkoYWN0aW9uLnVzZXJOb3RpZmljYXRpb25zUHJlZmVyZW5jZXMpLFxuICAgIH0pO1xuXG4gICAgY3R4LmRpc3BhdGNoKG5ldyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24oc2V0dGluZykpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25Mb2FkTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCB7IG1pbnV0ZXNBZ28gfTogTG9hZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zJCA9IHRoaXMubm90aWZpY2F0aW9uU2VydmljZVByb3h5LmdldEFsbE5vdGlmaWNhdGlvbnMobWludXRlc0Fnbyk7XG5cbiAgICByZXR1cm4gbm90aWZpY2F0aW9ucyQucGlwZSh0YXAoYXN5bmMgbm90aWZpY2F0aW9ucyA9PiB7XG4gICAgICBjb25zdCBwb3B1bGF0ZU5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbkR0b1tdID0gYXdhaXQgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZU5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9ucy5kYXRhKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNDb25maWc6IE5vdGlmaWNhdGlvbnNDb25maWcgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKHBvcHVsYXRlTm90aWZpY2F0aW9ucyk7XG5cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY29uZmlnOiBub3RpZmljYXRpb25zQ29uZmlnLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhck5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uQ2xlYXJOb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogQ2xlYXJOb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IFtdLFxuICAgICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICAgICAgYmFkZ2VWYWx1ZTogMCxcbiAgICAgICAgZGlzcGxheUJhZGdlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBub3RpZmljYXRpb25zTWFwOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0Tm90aWZpY2F0aW9uc0NvbmZpZ0FjdGlvbilcbiAgb25TZXRDb25maWdBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBTZXROb3RpZmljYXRpb25zQ29uZmlnQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgY29uZmlnOiBhY3Rpb24ubm90aWZpY2F0aW9uc0NvbmZpZyxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZylcbiAgb25IYW5kbGVOb3RpZmljYXRpb25Gb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uLCBndWlkIH06IEhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcpIHtcbiAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICB9XG5cbiAgQEFjdGlvbihOb3RpZmljYXRpb25DaGFuZ2VBY3Rpb24pXG4gIGFzeW5jIG9uTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uLCBndWlkIH06IE5vdGlmaWNhdGlvbkNoYW5nZUFjdGlvbikge1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5BbGVydDpcbiAgICAgICAgdGhpcy5vbkFsZXJ0Q2hhbmdlKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgdGhpcy5vbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uQ2hhbmdlKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKVxuICBvbkhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pIHtcbiAgICBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uPy5oYW5kbGVkQnlVc2VySWQgPiAwKSB7XG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkZvckNsb3NpbmcoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2Nlc3NOb3RpZmljYXRpb25VcGRhdGUoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NOb3RpZmljYXRpb25VcGRhdGUoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBoYW5kbGUgdXNlciAtIGFuZCBzYXZlIGluIHN0YXRlXG4gICAgbGV0IGV4aXN0Tm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG87XG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICBleGlzdE5vdGlmaWNhdGlvbkR0byA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkFsZXJ0OlxuICAgICAgICBleGlzdE5vdGlmaWNhdGlvbkR0byA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlTWF0Y2hlcyhub3RpZmljYXRpb24uYWxlcnQsIG5vdGlmaWNhdGlvbkR0by5hbGVydC5ldmVudFN0YXRlKSk7XG5cbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxwci1taXNtYXRjaC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbG9zdC10aWNrZXQtbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChleGlzdE5vdGlmaWNhdGlvbkR0bykge1xuICAgICAgZXhpc3ROb3RpZmljYXRpb25EdG8uaGFuZGxpbmdCeVVzZXIgPSBub3RpZmljYXRpb25EdG8uaGFuZGxpbmdCeVVzZXI7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhub3RpZmljYXRpb25zKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGNyaXRpY2FsIGFsZXJ0IG1vZGFsXG4gICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFsZXJ0VHlwZU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3JbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl0pO1xuICAgIGNvbnN0IGNsb3VkQ29uZmlybURpYWxvZ0RhdGE6IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgPSB7XG4gICAgICBjb25maXJtTWVzc2FnZXM6IFt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY3JpdGljYWxfYWxlcnRfbWVzc2FnZSwge1xuICAgICAgICBhbGVydFR5cGVOYW1lXG4gICAgICB9KV0sXG4gICAgICBjb25maXJtVGl0bGU6IGFsZXJ0VHlwZU5hbWUsXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgICBkZXZpY2U6IHtcbiAgICAgICAgY29tbUlkOiBhbGVydC5yZWFkZXJJRC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBhbGVydC5kZXZpY2VOYW1lXG4gICAgICB9LFxuICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxuICAgICAgem9uZU5hbWU6IGFsZXJ0LnBhcmtab25lTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Dcml0aWNhbCxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5SW52ZXJ0OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBwYW5lbENsYXNzOiBgdGItY3JpdGljYWwtbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBkYXRhOiBjbG91ZENvbmZpcm1EaWFsb2dEYXRhLFxuICAgICAgaWQ6IGBub3RpZmljYXRpb24tbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcbiAgICAgICAgY29uc3QgaGFuZGxlQWxlcnQ6IEhhbmRsaW5nQWxlcnREdG8gPSBuZXcgSGFuZGxpbmdBbGVydER0byh7XG4gICAgICAgICAgZ3VpZDogZ3VpZCxcbiAgICAgICAgICBwYXJrSWQ6IGFsZXJ0LnBhcmtJZCxcbiAgICAgICAgICBwYXJrTmFtZTogYWxlcnQucGFya05hbWUsXG4gICAgICAgICAgZGV2aWNlSWQ6IGFsZXJ0LmRldmljZUlELFxuICAgICAgICAgIGV2ZW50RGVzY3JpcHRpb246IGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24sXG4gICAgICAgICAgdXNlckZ1bGxOYW1lOiB1c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBpZDogYWxlcnQuaWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2VQcm94eS5oYW5kbGVBbGVydE5vdGlmaWNhdGlvbihoYW5kbGVBbGVydCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KHJlcy5kYXRhIHx8IGFsZXJ0LCBndWlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbkRpYWxvZyhub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfbWVzc2FnZSldLFxuICAgICAgY29uZmlybVRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3RpdGxlKSxcbiAgICAgIGNvbmZpcm1TdWJUaXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9zdWJfdGl0bGUsIHsgY29uZGl0aW9uTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNvbmRpdGlvbk5hbWUgfSksXG4gICAgICBwYXJrTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtpbmdMb3ROYW1lLFxuICAgICAgem9uZU5hbWU6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi56b25lPy5uYW1lLFxuICAgICAgb2tUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ueWVzKSxcbiAgICAgIGNhbmNlbFRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYW5jZWwpLFxuICAgIH07XG5cbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuPGJvb2xlYW4+KENsb3VkQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgcGFuZWxDbGFzczogYHRiLWR5bmFtaWMtcHJpY2luZy1jb25kaXRpb24tbW9kYWwtJHtub3RpZmljYXRpb24uaWR9YCxcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICBpZDogYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWAsXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcbiAgICAgICAgY29uc3QgaGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bzogSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IG5ldyBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKHtcbiAgICAgICAgICBjbG91ZFBhcmtJZDogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNsb3VkUGFya0lkLFxuICAgICAgICAgIHVzZXJGdWxsTmFtZTogdXNlckluZm8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZVByb3h5LmhhbmRsZUR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8pLnN1YnNjcmliZShhc3luYyByZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGRwYyA9IHJlcy5kYXRhIHx8IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgICAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yYXRlU2VydmljZVByb3h5LmdldFJhdGVCeUlkKGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgICAgICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJEeW5hbWljUHJpY2luZ1RvYXN0RXZlbnQocmVzLmRhdGEgfHwgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BsYXlBbGVydChjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmRpc3BsYXlBbGVydChhbGVydCwgZ3VpZCk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCk7XG4gICAgICBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdID0gbm90aWZpY2F0aW9uLnRvYXN0SWQ7XG5cbiAgICAgIG5vdGlmaWNhdGlvbi5vblRhcC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckFsZXJ0VG9hc3RFdmVudChhbGVydCwgZ3VpZCk7XG4gICAgICB9KTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZURpYWxvZ0J5SWQoZGlhbG9nSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9wZW5EaWFsb2dzID0gdGhpcy5tb2RhbFNlcnZpY2UuZ2V0T3BlbkRpYWxvZ3MoKTtcbiAgICBjb25zdCBkaWFsb2cgPSBvcGVuRGlhbG9ncy5maW5kKGRpYWxvZyA9PiBkaWFsb2cuaWQgPT09IGRpYWxvZ0lkKTtcblxuICAgIGlmIChkaWFsb2cpIHtcbiAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWxlcnRGb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydER0bywgZ3VpZCk7XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IGFsZXJ0RXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBhbGVydFBLKSAmJiB0aGlzLnN0YXRlTWF0Y2hlcyhub3RpZmljYXRpb24uYWxlcnQsIGFsZXJ0RHRvLmV2ZW50U3RhdGUpXG4gICAgKTtcbiAgICBpZiAoIWFsZXJ0RHRvLmV2ZW50U3RhdGUgfHwgYWxlcnRFeGlzdHMpIHtcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICFub3RpZmljYXRpb24uYWxlcnQgfHwgISh0aGlzLmFsZXJ0UEsobm90aWZpY2F0aW9uLmFsZXJ0LCBub3RpZmljYXRpb24uZ3VpZCkgPT09IGFsZXJ0UEspKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKGZpbHRlcmVkTm90aWZpY2F0aW9ucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xvc2UgcmVsZXZhbnQgb3BlbiBtb2RhbHNcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBub3RpZmljYXRpb24tbW9kYWwtJHthbGVydFBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGxwci1taXNtYXRjaC1tb2RhbC0ke2FsZXJ0UEt9YCk7XG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbG9zdC10aWNrZXQtbW9kYWwtJHthbGVydFBLfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuXG4gICAgLy8gV2hldGhlciB3ZSB3YW50IHRvIGNsb3NlIG9yIGhhdmUgYSBkdXBsaWNhdGUgYWxlcnRcbiAgICBjb25zdCBub3RpZmljYXRpb25FeGlzdHMgPSBub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uID0+IG5vdGlmaWNhdGlvbi5ndWlkID09PSBub3RpZmljYXRpb25EdG8uZ3VpZCAmJlxuICAgICAgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uPy5wYXJraW5nTG90SWQgPT09IG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJraW5nTG90SWQpO1xuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25FeGlzdHMsIGd1aWQpO1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3NlIHJlbGV2YW50IG9wZW4gbW9kYWxzXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgZHluYW1pYy1wcmljaW5nLWNvbmZpcm1hdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHsgLi4uY3R4LmdldFN0YXRlKCkuY29uZmlnIH0ubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgIGNvbnN0IHRvYXN0SWQgPSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihub3RpZmljYXRpb24gPT5cbiAgICAgICAgISh0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmd1aWQpID09PSBub3RpZmljYXRpb25QSykpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBjb25maWc6IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY29udmVydE5vdGlmaWNhdGlvbnNUb05vdGlmaWNhdGlvbnNDb25maWcoZmlsdGVyZWROb3RpZmljYXRpb25zKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDbG9zZSByZWxldmFudCBvcGVuIG1vZGFsc1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBscHItbWlzbWF0Y2gtbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBsb3N0LXRpY2tldC1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLmNvbmZpZyB9Lm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IHBhcmtJZCA9IG5vdGlmaWNhdGlvbkR0bz8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LnBhcmtJZDtcblxuICAgIC8vIGZpbmQgYWxsIHRoZSBkeW5hbWljIHByaWNpbmcgdHJpZ2dlcmVkIGNvbmRpdGlvbnMgb2Ygc2FtZSBndWlkIGFuZCBwYXJrSWQgdG8gYmUgY2xvc2VcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhIW5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiAmJlxuICAgICAgbm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKTtcblxuICAgIGlmIChkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGRwIG9mIGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhkcCwgZ3VpZCk7XG4gICAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgICAvLyBDbG9zZSByZWxldmFudCBvcGVuIG1vZGFsc1xuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nQnlJZChgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uIHx8ICEobm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhmaWx0ZXJlZE5vdGlmaWNhdGlvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yYXRlU2VydmljZVByb3h5LmdldFJhdGVCeUlkKGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsIG51bGwsIGRwYyk7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfcmV2ZXJ0ZWRfdG9fZGVmYXVsdF9yYXRlKTtcbiAgICBjb25zdCBzdWJUaXRsZSA9IGAke2RwYy5wYXJraW5nTG90TmFtZX0ke2RwYy56b25lPy5uYW1lID8gJyB8ICcgKyBkcGMuem9uZT8ubmFtZSA6ICcnfWA7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7XG4gICAgICAgIHZhbHVlOiB0aXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnRpdGxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHN1YlRpdGxlLFxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3Muc3ViVGl0bGUsXG4gICAgICB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfTtcblxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyQWxlcnRzUHJlZmVyZW5jZXM6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyk7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyB1c2VyQWxlcnRzUHJlZmVyZW5jZXMgd2UgZG9uJ3QgZmlsdGVyIGF0IGFsbFxuICAgIGlmICghIXVzZXJBbGVydHNQcmVmZXJlbmNlcykge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgZW5hYmxlZCB0aGUgbm90aWZpY2F0aW9uc1xuICAgICAgLy8gRWxzZSB0aGUgdXNlciBkaXNhYmxlZCBhbGwgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIGlmICh1c2VyQWxlcnRzUHJlZmVyZW5jZXMuaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgICBjb25zdCBpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMl8wKTtcblxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjEuMCBvciBiZWxvdywgYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWRcbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4yLjAgYW5kIGFib3ZlLCB3ZSBmaWx0ZXIgYnkgdGhlIHByZWZlcmVuY2VzXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gIWlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkIHx8IHRoaXMuaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0LCBndWlkLCB1c2VyQWxlcnRzUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZywgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydHNQcmVmZXJlbmNlc01hcCkge1xuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBmYWNpbGl0eSBzZWxlY3RlZCwgd2UgY29udGludWUgdG8gY2hlY2tcbiAgICAvLyBFbHNlIHdlIGFsbG93IGFsbCB0byBwYXNzIGFzIHRoZSB1c2VyIGRpZG4ndCBzZXQgcHJlZmVyZW5jZXMgeWV0XG4gICAgaWYgKE9iamVjdC5rZXlzKHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcCkubGVuZ3RoKSB7XG4gICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlSWQgb2YgdGhlIHRlbmFudCAtIEluIGNhc2UgdGhlIHVzZXIgc2VsZWN0ZWQgXCJBbGwgVGVuYW50IFBhcmtpbmcgTG90c1wiXG4gICAgICBjb25zdCB0ZW5hbnRUcmVlSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlIHBhcmsgSWQgb2YgdGhlIGFsZXJ0XG4gICAgICBjb25zdCBhbGVydFRyZWVQYXJrSWQgPSB0aGlzLmdldENsb3VkUGFya0lkKGFsZXJ0LCBndWlkKTtcblxuICAgICAgLy8gV2UgR2V0IHRoZSBzZXR0aW5nIG9mIHRoZSBQYXJrLCBQYXJlbnRQYXJrIG9yIFBhcmtzVHJlZVJvb3RcbiAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXA6IEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAgPSB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnRUcmVlUGFya0lkXSB8fCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbdGVuYW50VHJlZUlkXTtcblxuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGZhY2lsaXR5IHdhcyBzZWxlY3RlZFxuICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXNNYXApIHtcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwID0gZmFjaWxpdHlQcmVmZXJlbmNlc01hcFthbGVydC5ldmVudERlc2NyaXB0aW9uXTtcblxuICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgYWxlcnQgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgICAgY29uc3QgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlID0gdGhpcy5nZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0KTtcblxuICAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBpZiB0aGUgZGV2aWNlIHR5cGUgd2FzIHNlbGVjdGVkXG4gICAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBhbGVydFR5cGVQcmVmZXJlbmNlc01hcFthbGVydERldmljZVR5cGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0OiBBbGVydER0byk6IEFsZXJ0c0RldmljZVR5cGUge1xuICAgIGxldCBhbGVydERldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGU7XG4gICAgY29uc3QgYWxlcnRzRGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZVtdID0gRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nLmdldChhbGVydC5kZXZpY2VUeXBlKTtcblxuICAgIHN3aXRjaCAoYWxlcnQuZGV2aWNlVHlwZSkge1xuICAgICAgY2FzZSBEZXZpY2VUeXBlLkNhc2g6XG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0LnJlYWRlcklEID09PSAwID8gQWxlcnRzRGV2aWNlVHlwZS5NYXN0ZXIgOiBBbGVydHNEZXZpY2VUeXBlLkNhc2hSZWdpc3RlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydHNEZXZpY2VUeXBlPy5bMF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBhbGVydERldmljZVR5cGU7XG4gIH1cblxuICBwcml2YXRlIG9uRHluYW1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4OiBTdGF0ZUNvbnRleHQ8Tm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uRm9yQ2xvc2luZyhjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG4gICAgdGhpcy5oYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHgsIG5vdGlmaWNhdGlvbiwgZ3VpZCk7XG5cbiAgICBpZiAobm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzVHJpZ2dlcmVkKSB7XG4gICAgICAvLyBXZSBkbyBub3Qgb3BlbiB0aGUgbm90aWZpY2F0aW9uIGlmIHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gdGhpcy5mYWNpbGl0eVNlcnZpY2UuaGFzUGVybWlzc2lvblR5cGVCeVBhcmsoXG4gICAgICAgIFBlcm1pc3Npb25UeXBlLkxvdENvbmZpZ3VyYXRpb25EeW5hbWljUHJpY2luZywgbm90aWZpY2F0aW9uLmd1aWQsIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5wYXJraW5nTG90SWRcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGRvIG5vdCBvcGVuIHRoZSBub3RpZmljYXRpb24gaW4gbW9iaWxlIG1vZGVcbiAgICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG4gICAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlICYmIGhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgdGhpcy5vcGVuRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb25EaWFsb2cobm90aWZpY2F0aW9uLCBndWlkKTtcblxuICAgICAgICAvLyBQdXNoIHRoZSBuZXcgbm90aWZpY2F0aW9uIHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgICBub3RpZmljYXRpb24udGltZUFnb0luU2Vjb25kcyA9IHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZ2V0VGltZUFnb0luU2Vjb25kcyhub3RpZmljYXRpb24pO1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuICAgICAgICBub3RpZmljYXRpb25zLnVuc2hpZnQobm90aWZpY2F0aW9uKTtcblxuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgY29uZmlnOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmNvbnZlcnROb3RpZmljYXRpb25zVG9Ob3RpZmljYXRpb25zQ29uZmlnKG5vdGlmaWNhdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc0FjdGl2YXRlZCkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBmYWxsZW4gYmFjayB0byB0aGUgZGVmYXVsdCByYXRlXG4gICAgICB0aGlzLnNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uKS50aGVuKCk7XG4gICAgfSBlbHNlIGlmIChub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24udHJpZ2dlckFjdGlvbiA9PT0gRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLkF1dG9tYXRpY1N3aXRjaFJhdGUpIHtcbiAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgYXV0b21hdGljIHN3aXRjaFxuICAgICAgdGhpcy5zaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb24pLnRoZW4oKTtcbiAgICAgIHRoaXMuY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25BbGVydENoYW5nZShjdHg6IFN0YXRlQ29udGV4dDxOb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnQgPSBub3RpZmljYXRpb24/LmFsZXJ0O1xuICAgIGlmIChhbGVydCAmJiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmlzQWxlcnRUeXBlRGVmaW5lZChhbGVydC5ldmVudERlc2NyaXB0aW9uKSkge1xuICAgICAgdGhpcy5oYW5kbGVBbGVydEZvckNsb3NpbmcoY3R4LCBhbGVydCwgZ3VpZCk7XG5cbiAgICAgIGlmIChhbGVydC5ldmVudFN0YXRlICYmIHRoaXMuaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0LCBndWlkKSkge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0geyAuLi5jdHguZ2V0U3RhdGUoKS5jb25maWcgfS5ub3RpZmljYXRpb25zO1xuXG4gICAgICAgIGlmICghYWxlcnQuZGV2aWNlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHBhcmtEZXZpY2VzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChQYXJrTWFuYWdlclN0YXRlLmRldmljZXMpO1xuICAgICAgICAgIGFsZXJ0LmRldmljZU5hbWUgPSBwYXJrRGV2aWNlcz8uZmluZChkID0+IGQuaWQgPT09IGFsZXJ0LmRldmljZUlEKT8ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWxlcnQucGFya05hbWUpIHtcbiAgICAgICAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgICAgICAgaWYgKGxvdHNNYXApIHtcbiAgICAgICAgICAgIGFsZXJ0LnBhcmtOYW1lID0gbG90c01hcFthbGVydC5wYXJrSWRdPy5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFsZXJ0LnBhcmtab25lTmFtZSA9IFwiXCI7XG5cbiAgICAgICAgLy8gV2UgZG8gbm90IG9wZW4gdGhlIG5vdGlmaWNhdGlvbiBpbiBtb2JpbGUgbW9kZVxuICAgICAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG4gICAgICAgIGlmICghaXNNb2JpbGVBcHBNb2RlICYmIGlzQ2NNb2R1bGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLkxPU1RfVElDS0VUOlxuICAgICAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTFJQX05PVF9NQVRDSDpcbiAgICAgICAgICAgICAgdGhpcy5vcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggdGhlIG5ldyBhbGVydCB0byB0aGUgYXJyYXkgYW5kIHNhdmUgaW4gc3RhdGVcbiAgICAgICAgbm90aWZpY2F0aW9uLnRpbWVBZ29JblNlY29uZHMgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmdldFRpbWVBZ29JblNlY29uZHMobm90aWZpY2F0aW9uKTtcbiAgICAgICAgbm90aWZpY2F0aW9ucy51bnNoaWZ0KG5vdGlmaWNhdGlvbik7XG5cbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGNvbmZpZzogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5jb252ZXJ0Tm90aWZpY2F0aW9uc1RvTm90aWZpY2F0aW9uc0NvbmZpZyhub3RpZmljYXRpb25zKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZFBhcmtJZChhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgYWxlcnRQYXJrSWQgPSBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA+IDAgPyBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA6IGFsZXJ0LnBhcmtJZDtcbiAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgcmV0dXJuIGxvdHNNYXBbYWxlcnRQYXJrSWRdPy5jbG91ZElkO1xuICB9XG5cbiAgcHJpdmF0ZSBwa01hdGNoZXMgPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLOiBzdHJpbmcpID0+IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25EdG8uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLO1xuICBwcml2YXRlIHN0YXRlTWF0Y2hlcyA9IChhbGVydER0bzogQWxlcnREdG8sIGV2ZW50U3RhdGU6IGJvb2xlYW4pID0+IGFsZXJ0RHRvLmV2ZW50U3RhdGUgPT09IGV2ZW50U3RhdGU7XG4gIHByaXZhdGUgYWxlcnRQSyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBgJHtndWlkfV8ke2FsZXJ0RHRvLnBhcmtJZH1fJHthbGVydER0by5yZWFkZXJJRH1fJHthbGVydER0by5kZXZpY2VJRH1fJHthbGVydER0by5ldmVudERlc2NyaXB0aW9ufWA7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGxldCBrZXk6IHN0cmluZyA9ICcnO1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uRHRvLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5BbGVydDpcbiAgICAgICAga2V5ID0gdGhpcy5hbGVydFBLKG5vdGlmaWNhdGlvbkR0by5hbGVydCwgZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGtleSA9IGAke2d1aWR9XyR7bm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlkfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xuICB9XG59XG4iXX0=