@tiba-spark/client-shared-lib 25.3.0-8 → 25.3.0-86

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.
@@ -85,27 +85,21 @@ let AlertsAndNotificationsState = class AlertsAndNotificationsState {
85
85
  const alertsAndNotifications$ = this.alertsAndNotificationsServiceProxy.getAlertsAndNotifications(minutesAgo);
86
86
  return alertsAndNotifications$.pipe(tap(async (alertsAndNotifications) => {
87
87
  const populateNotifications = await this.alertsAndNotificationsService.populateAlertsAndNotifications(alertsAndNotifications.data);
88
- const badgeValue = populateNotifications.alerts.length + populateNotifications.notifications.length;
89
88
  ctx.patchState({
90
- aggregatedNotificationSeverity: populateNotifications.aggregatedNotificationSeverity,
91
89
  alerts: populateNotifications.alerts ?? [],
92
90
  notifications: populateNotifications.notifications ?? [],
93
- badgeValue,
94
- displayBadge: badgeValue > 0
95
91
  });
92
+ this.recalculateBadgeAndSeverity(ctx);
96
93
  }));
97
94
  }
98
95
  onLoadMobileNotificationsAction(ctx, { minutesAgo }) {
99
96
  const alertsAndNotifications$ = this.mobileServiceProxy.getMobileAlertsAndNotification(minutesAgo, VERSION_V1);
100
97
  return alertsAndNotifications$.pipe(tap(async (alertsAndNotifications) => {
101
- const badgeValue = alertsAndNotifications.data.alerts.length + alertsAndNotifications.data.notifications.length;
102
98
  ctx.patchState({
103
- aggregatedNotificationSeverity: alertsAndNotifications.data.aggregatedNotificationSeverity,
104
99
  alerts: alertsAndNotifications.data.alerts ?? [],
105
100
  notifications: alertsAndNotifications.data.notifications ?? [],
106
- badgeValue,
107
- displayBadge: badgeValue > 0
108
101
  });
102
+ this.recalculateBadgeAndSeverity(ctx);
109
103
  }));
110
104
  }
111
105
  onClearAlertsAndNotificationsAction(ctx, _) {
@@ -675,4 +669,4 @@ export { AlertsAndNotificationsState };
675
669
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AlertsAndNotificationsState, decorators: [{
676
670
  type: Injectable
677
671
  }], ctorParameters: function () { return [{ type: i1.AppConfigService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Store }, { type: i5.AlertsAndNotificationsServiceProxy }, { type: i6.AlertNotificationService }, { type: i7.AlertsAndNotificationsService }, { type: i8.CommandNotificationService }, { type: i9.BaseFacilityCommandsService }, { type: i10.FacilityService }, { type: i11.FacilityServiceProxy }, { type: i1.AppConfigService }, { type: i5.MobileServiceProxy }]; }, propDecorators: { onUpdateUserAlertsPreferencesAction: [], onUpdateUserNotificaitonsPreferencesAction: [], onLoadAlertsAndNotificationsAction: [], onLoadMobileNotificationsAction: [], onClearAlertsAndNotificationsAction: [], onRemoveExpiredAlertsAndNotificationsAction: [], onAlertChangedAction: [], onNotificationChangeAction: [], onHandledNotificationAction: [], onHandleNotificationAction: [], onHandleAlertsAction: [] } });
678
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSw4QkFBOEIsRUFBNkIsdUJBQXVCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwTCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUVqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JB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QVEsRUFBRTtzREFHVjtBQUdNO0lBRE4sUUFBUSxFQUFFO3VFQUdWO0FBR007SUFETixRQUFRLEVBQUU7bURBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTtxREFHVjtBQXpDVSwyQkFBMkI7SUFadkMsS0FBSyxDQUE4QjtRQUNsQyxJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLFFBQVEsRUFBRTtZQUNSLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsOEJBQThCLEVBQUUsb0JBQW9CLENBQUMsR0FBRztZQUN4RCxVQUFVLEVBQUUsQ0FBQztZQUNiLFlBQVksRUFBRSxLQUFLO1lBQ25CLGdCQUFnQixFQUFFLEVBQUU7U0FDckI7S0FDRixDQUFDO0dBRVcsMkJBQTJCLENBd3NCdkM7U0F4c0JZLDJCQUEyQjs0RkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVOytnQkE2Q1QsbUNBQW1DLE1BVW5DLDBDQUEwQyxNQVUxQyxrQ0FBa0MsTUFrQmxDLCtCQUErQixNQWdCL0IsbUNBQW1DLE1BWW5DLDJDQUEyQyxNQWEzQyxvQkFBb0IsTUFpQ3BCLDBCQUEwQixNQWUxQiwyQkFBMkIsTUEwQjNCLDBCQUEwQixNQXFCMUIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uL2FsZXJ0LW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2xhc3MsIE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMsIE5vdGlmaWNhdGlvblZQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl85XzJfMCwgVkVSU0lPTl9WMSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcgfSBmcm9tICcuLi8uLi9lbnVtcy9hbGVydHMtZGV2aWNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jbG91ZC1jb25maXJtLWRpYWxvZy1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE1vYmlsZVNlcnZpY2VQcm94eSwgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZVByb3h5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVyTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uc3RhdGUnO1xuaW1wb3J0IHsgRmFjaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZmFjaWxpdHknO1xuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFBhcmtNYW5hZ2VyU3RhdGUgfSBmcm9tICcuLi9wYXJrLW1hbmFnZXIvcGFyay1tYW5hZ2VyLnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24gfSBmcm9tICcuLi91c2VyLXNldHRpbmdzL3VzZXItc2V0dGluZ3MuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBBbGVydENoYW5nZWRBY3Rpb24sXG4gIENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sXG4gIExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uLFxuICBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbixcbiAgUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24sIFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbixcbiAgVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvblxufSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IEFsZXJ0c1ByZWZlcmVuY2VzTWFwLCBBbGVydFR5cGVQcmVmZXJlbmNlc01hcCwgRmFjaWxpdHlQcmVmZXJlbmNlc01hcCB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCB7XG4gIGFsZXJ0czogQWxlcnREdG9bXTtcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW107XG4gIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIGJhZGdlVmFsdWU6IG51bWJlcixcbiAgZGlzcGxheUJhZGdlOiBib29sZWFuLFxuICBub3RpZmljYXRpb25zTWFwOiBOdW1iZXJNYXA8bnVtYmVyPjtcbn1cblxuQFN0YXRlPEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4oe1xuICBuYW1lOiAnYWxlcnRzQW5kTm90aWZpY2F0aW9ucycsXG4gIGRlZmF1bHRzOiB7XG4gICAgYWxlcnRzOiBbXSxcbiAgICBub3RpZmljYXRpb25zOiBbXSxcbiAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICBiYWRnZVZhbHVlOiAwLFxuICAgIGRpc3BsYXlCYWRnZTogZmFsc2UsXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXG4gIH0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5OiBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlOiBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tYW5kTm90aWZpY2F0aW9uU2VydmljZTogQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlOiBGYWNpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2VQcm94eTogRmFjaWxpdHlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5OiBNb2JpbGVTZXJ2aWNlUHJveHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBhbGVydHMoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IEFsZXJ0RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5hbGVydHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgbm90aWZpY2F0aW9ucyhzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ub3RpZmljYXRpb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uU2V2ZXJpdHkge1xuICAgIHJldHVybiBzdGF0ZS5hZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgYmFkZ2VWYWx1ZShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuYmFkZ2VWYWx1ZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBkaXNwbGF5QmFkZ2Uoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5QmFkZ2U7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbilcbiAgb25VcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pIHtcbiAgICBjb25zdCBzZXR0aW5nOiBTcGFya1NldHRpbmdzRHRvID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xuICAgICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnkuQWxlcnRzUHJlZmVyZW5jZXMsXG4gICAgICBzZXR0aW5nc0pzb246IEpTT04uc3RyaW5naWZ5KGFjdGlvbi51c2VyTm90aWZpY2F0aW9uc1ByZWZlcmVuY2VzKSxcbiAgICB9KTtcblxuICAgIGN0eC5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uKHNldHRpbmcpKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbilcbiAgb25VcGRhdGVVc2VyTm90aWZpY2FpdG9uc1ByZWZlcmVuY2VzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbikge1xuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyxcbiAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5zdHJpbmdpZnkoYWN0aW9uLnVzZXJOb3RpZmljYXRpb25zUHJlZmVyZW5jZXMpLFxuICAgIH0pO1xuXG4gICAgY3R4LmRpc3BhdGNoKG5ldyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24oc2V0dGluZykpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25Mb2FkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG1pbnV0ZXNBZ28gfTogTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBhbGVydHNBbmROb3RpZmljYXRpb25zJCA9IHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5nZXRBbGVydHNBbmROb3RpZmljYXRpb25zKG1pbnV0ZXNBZ28pO1xuXG4gICAgcmV0dXJuIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkLnBpcGUodGFwKGFzeW5jIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMgPT4ge1xuICAgICAgY29uc3QgcG9wdWxhdGVOb3RpZmljYXRpb25zOiBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvID0gYXdhaXQgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZUFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMoYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhKTtcblxuICAgICAgY29uc3QgYmFkZ2VWYWx1ZSA9IHBvcHVsYXRlTm90aWZpY2F0aW9ucy5hbGVydHMubGVuZ3RoICsgcG9wdWxhdGVOb3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnMubGVuZ3RoO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IHBvcHVsYXRlTm90aWZpY2F0aW9ucy5hZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHksXG4gICAgICAgIGFsZXJ0czogcG9wdWxhdGVOb3RpZmljYXRpb25zLmFsZXJ0cyA/PyBbXSxcbiAgICAgICAgbm90aWZpY2F0aW9uczogcG9wdWxhdGVOb3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbnMgPz8gW10sXG4gICAgICAgIGJhZGdlVmFsdWUsXG4gICAgICAgIGRpc3BsYXlCYWRnZTogYmFkZ2VWYWx1ZSA+IDBcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBtaW51dGVzQWdvIH06IExvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY29uc3QgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQgPSB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eS5nZXRNb2JpbGVBbGVydHNBbmROb3RpZmljYXRpb24obWludXRlc0FnbywgVkVSU0lPTl9WMSk7XG5cbiAgICByZXR1cm4gYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQucGlwZSh0YXAoYXN5bmMgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyA9PiB7XG4gICAgICBjb25zdCBiYWRnZVZhbHVlID0gYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLmFsZXJ0cy5sZW5ndGggKyBhbGVydHNBbmROb3RpZmljYXRpb25zLmRhdGEubm90aWZpY2F0aW9ucy5sZW5ndGg7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLmFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eSxcbiAgICAgICAgYWxlcnRzOiBhbGVydHNBbmROb3RpZmljYXRpb25zLmRhdGEuYWxlcnRzID8/IFtdLFxuICAgICAgICBub3RpZmljYXRpb25zOiBhbGVydHNBbmROb3RpZmljYXRpb25zLmRhdGEubm90aWZpY2F0aW9ucyA/PyBbXSxcbiAgICAgICAgYmFkZ2VWYWx1ZSxcbiAgICAgICAgZGlzcGxheUJhZGdlOiBiYWRnZVZhbHVlID4gMFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uQ2xlYXJBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIF86IENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGFsZXJ0czogW10sXG4gICAgICBub3RpZmljYXRpb25zOiBbXSxcbiAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHkuTG93LFxuICAgICAgYmFkZ2VWYWx1ZTogMCxcbiAgICAgIGRpc3BsYXlCYWRnZTogZmFsc2UsXG4gICAgICBub3RpZmljYXRpb25zTWFwOiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihSZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25SZW1vdmVFeHBpcmVkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhY3Rpb246IFJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY29uc3Qgbm93VXRjID0gbW9tZW50LnV0YygpOyAvLyBDdXJyZW50IFVUQyB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzXG4gICAgY29uc3QgbWludXRlc0FnbyA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFjdGl2ZU5vdGlmaWNhdGlvbnMubWludXRlc0FnbztcbiAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHMuZmlsdGVyKGFsZXJ0ID0+IG1vbWVudC51dGMoYWxlcnQuY2xvdWRFdmVudERhdGVUaW1lKS5hZGQobWludXRlc0FnbywgJ21pbnV0ZXMnKS5pc0FmdGVyKG5vd1V0YykpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYWxlcnRzXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihBbGVydENoYW5nZWRBY3Rpb24pXG4gIG9uQWxlcnRDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgYWxlcnQsIGd1aWQgfTogQWxlcnRDaGFuZ2VkQWN0aW9uKSB7XG4gICAgaWYgKGFsZXJ0ICYmIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UuaXNBbGVydFR5cGVEZWZpbmVkKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pKSB7XG4gICAgICB0aGlzLmhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHgsIGFsZXJ0LCBndWlkKTtcblxuICAgICAgaWYgKGFsZXJ0LmV2ZW50U3RhdGUgJiYgdGhpcy5pc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQsIGd1aWQpKSB7XG5cbiAgICAgICAgaWYgKCFhbGVydC5kZXZpY2VOYW1lKSB7XG4gICAgICAgICAgY29uc3QgcGFya0RldmljZXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFBhcmtNYW5hZ2VyU3RhdGUuZGV2aWNlcyk7XG4gICAgICAgICAgYWxlcnQuZGV2aWNlTmFtZSA9IHBhcmtEZXZpY2VzPy5maW5kKGQgPT4gZC5pZCA9PT0gYWxlcnQuZGV2aWNlSUQpPy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbGVydC5wYXJrTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGxvdHNNYXAgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KVtndWlkXTtcbiAgICAgICAgICBpZiAobG90c01hcCkge1xuICAgICAgICAgICAgYWxlcnQucGFya05hbWUgPSBsb3RzTWFwW2FsZXJ0LnBhcmtJZF0/Lm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzQW5kRGlzcGxheUFsZXJ0KGN0eCwgYWxlcnQsIGd1aWQpO1xuXG4gICAgICAgIC8vIFB1c2ggdGhlIG5ldyBhbGVydCB0byB0aGUgYXJyYXkgYW5kIHNhdmUgaW4gc3RhdGVcbiAgICAgICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xuICAgICAgICBhbGVydHMudW5zaGlmdChhbGVydCk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBhbGVydHNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24pXG4gIG9uTm90aWZpY2F0aW9uQ2hhbmdlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uLCBndWlkIH06IE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24pIHtcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGlmICh0aGlzLmlzTm90aWZpY2F0aW9uRW5hYmxlZEZvclVzZXIobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQpKSB7XG4gICAgICAgICAgdGhpcy5vbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uQ2hhbmdlKGN0eCwgbm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKVxuICBvbkhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfTogSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbikge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XG5cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgbm90aWZpY2F0aW9uczogZmlsdGVyZWROb3RpZmljYXRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSyk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24pXG4gIG9uSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH06IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbikge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBub3RpZmljYXRpb24gd2l0aCB0aGUgaGFuZGxlIHVzZXIgLSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uRHRvLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgdGhpcy51cGRhdGVIYW5kbGVkVXNlckZvckR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uKGN0eCwgbm90aWZpY2F0aW9ucywgbm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25QSyk7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBjcml0aWNhbCBhbGVydCBtb2RhbFxuICAgIHRoaXMuY2xvc2VEaWFsb2dCeUlkKGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgfVxuXG4gIEBBY3Rpb24oSGFuZGxlQWxlcnRzQWN0aW9uKVxuICBvbkhhbmRsZUFsZXJ0c0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IGFsZXJ0RHRvLCBndWlkIH06IEhhbmRsZUFsZXJ0c0FjdGlvbikge1xuICAgIGNvbnN0IGFsZXJ0UEsgPSB0aGlzLmFsZXJ0UEsoYWxlcnREdG8sIGd1aWQpO1xuICAgIGNvbnN0IGFsZXJ0cyA9IGN0eC5nZXRTdGF0ZSgpLmFsZXJ0cztcbiAgICBjb25zdCBleGlzdEFsZXJ0SW5kZXggPSBhbGVydHMuZmluZEluZGV4KGFsZXJ0ID0+IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCkgPT09IGFsZXJ0UEsgJiZcbiAgICAgIHRoaXMuc3RhdGVNYXRjaGVzKGFsZXJ0LCBhbGVydER0by5ldmVudFN0YXRlKSk7XG5cbiAgICBpZiAoZXhpc3RBbGVydEluZGV4ICE9PSAtMSkge1xuICAgICAgYWxlcnRzW2V4aXN0QWxlcnRJbmRleF0uaGFuZGxpbmdCeVVzZXIgPSBhbGVydER0by5oYW5kbGluZ0J5VXNlcjtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgYWxlcnRzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZUFsZXJ0RGlhbG9ncyhhbGVydFBLKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkNyaXRpY2FsQWxlcnREaWFsb2coYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhbGVydFR5cGVOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yW2FsZXJ0LmV2ZW50RGVzY3JpcHRpb25dKTtcbiAgICBjb25zdCBjbG91ZENvbmZpcm1EaWFsb2dEYXRhOiBDbG91ZENvbmZpcm1EaWFsb2dEYXRhID0ge1xuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNyaXRpY2FsX2FsZXJ0X21lc3NhZ2UsIHtcbiAgICAgICAgYWxlcnRUeXBlTmFtZVxuICAgICAgfSldLFxuICAgICAgY29uZmlybVRpdGxlOiBhbGVydFR5cGVOYW1lLFxuICAgICAgb2tUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ueWVzKSxcbiAgICAgIGNhbmNlbFRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYW5jZWwpLFxuICAgICAgZGV2aWNlOiB7XG4gICAgICAgIGNvbW1JZDogYWxlcnQucmVhZGVySUQudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogYWxlcnQuZGV2aWNlTmFtZVxuICAgICAgfSxcbiAgICAgIHBhcmtOYW1lOiBhbGVydC5wYXJrTmFtZSxcbiAgICAgIHpvbmVOYW1lOiBhbGVydC5wYXJrWm9uZU5hbWUsXG4gICAgICBub3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHkuQ3JpdGljYWwsXG4gICAgICBub3RpZmljYXRpb25TZXZlcml0eUludmVydDogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBhbGVydC5kZXNjcmlwdGlvbixcbiAgICAgIGNhclBsYXRlOiBhbGVydC5jYXJQbGF0ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCk7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbjxib29sZWFuPihDbG91ZENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHBhbmVsQ2xhc3M6IGB0Yi1jcml0aWNhbC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICBpZDogYG5vdGlmaWNhdGlvbi1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgICAgICBjb25zdCBoYW5kbGVBbGVydDogSGFuZGxpbmdBbGVydER0byA9IG5ldyBIYW5kbGluZ0FsZXJ0RHRvKHtcbiAgICAgICAgICBndWlkOiBndWlkLFxuICAgICAgICAgIHBhcmtJZDogYWxlcnQucGFya0lkLFxuICAgICAgICAgIHBhcmtOYW1lOiBhbGVydC5wYXJrTmFtZSxcbiAgICAgICAgICBkZXZpY2VJZDogYWxlcnQuZGV2aWNlSUQsXG4gICAgICAgICAgZXZlbnREZXNjcmlwdGlvbjogYWxlcnQuZXZlbnREZXNjcmlwdGlvbixcbiAgICAgICAgICB1c2VyRnVsbE5hbWU6IHVzZXJJbmZvLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIGlkOiBhbGVydC5pZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5oYW5kbGVBbGVydE5vdGlmaWNhdGlvbihoYW5kbGVBbGVydCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KHJlcy5kYXRhIHx8IGFsZXJ0LCBndWlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbkRpYWxvZyhub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xvdWRDb25maXJtRGlhbG9nRGF0YTogQ2xvdWRDb25maXJtRGlhbG9nRGF0YSA9IHtcbiAgICAgIGNvbmZpcm1NZXNzYWdlczogW3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfbWVzc2FnZSldLFxuICAgICAgY29uZmlybVRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3RpdGxlKSxcbiAgICAgIGNvbmZpcm1TdWJUaXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9zdWJfdGl0bGUsIHsgY29uZGl0aW9uTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNvbmRpdGlvbk5hbWUgfSksXG4gICAgICBwYXJrTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtpbmdMb3ROYW1lLFxuICAgICAgem9uZU5hbWU6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi56b25lPy5uYW1lLFxuICAgICAgb2tUZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ueWVzKSxcbiAgICAgIGNhbmNlbFRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYW5jZWwpLFxuICAgIH07XG5cbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBndWlkKTtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuPGJvb2xlYW4+KENsb3VkQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgcGFuZWxDbGFzczogYHRiLWR5bmFtaWMtcHJpY2luZy1jb25kaXRpb24tbW9kYWwtJHtub3RpZmljYXRpb24uaWR9YCxcbiAgICAgIGRhdGE6IGNsb3VkQ29uZmlybURpYWxvZ0RhdGEsXG4gICAgICBpZDogYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWAsXG4gICAgICBlbmFibGVkTWluaW1pemVkOiB0cnVlLFxuICAgIH0pLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcbiAgICAgICAgY29uc3QgaGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bzogSGFuZGxpbmdEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IG5ldyBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKHtcbiAgICAgICAgICBjbG91ZFBhcmtJZDogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmNsb3VkUGFya0lkLFxuICAgICAgICAgIHVzZXJGdWxsTmFtZTogdXNlckluZm8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5oYW5kbGVEeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvKS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBkcGMgPSByZXMuZGF0YSB8fCBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgICAgICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0QmFzZVJhdGVCeUlkKGRwYy5wYXJraW5nTG90SWQsIGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgICAgICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJEeW5hbWljUHJpY2luZ1RvYXN0RXZlbnQoZHBjKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BsYXlBbGVydChjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmRpc3BsYXlBbGVydChhbGVydCwgZ3VpZCk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbikge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCk7XG4gICAgICBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdID0gbm90aWZpY2F0aW9uLnRvYXN0SWQ7XG5cbiAgICAgIG5vdGlmaWNhdGlvbi5vblRhcC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckFsZXJ0VG9hc3RFdmVudChhbGVydCwgZ3VpZCk7XG4gICAgICB9KTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZURpYWxvZ3MoZGlhbG9nSWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk/LmZvckVhY2goZGlhbG9nID0+IHtcbiAgICAgIGlmIChkaWFsb2dJZHMuaGFzKGRpYWxvZy5pZCkpIHtcbiAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRGlhbG9nQnlJZChkaWFsb2dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlbkRpYWxvZ3MgPSB0aGlzLm1vZGFsU2VydmljZS5nZXRPcGVuRGlhbG9ncygpO1xuICAgIGNvbnN0IGRpYWxvZyA9IG9wZW5EaWFsb2dzLmZpbmQoZGlhbG9nID0+IGRpYWxvZy5pZCA9PT0gZGlhbG9nSWQpO1xuXG4gICAgaWYgKGRpYWxvZykge1xuICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUFsZXJ0RGlhbG9ncyhhbGVydFBLOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbEtleXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgICAgYG5vdGlmaWNhdGlvbi1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGBscHItbWlzbWF0Y2gtbW9kYWwtJHthbGVydFBLfWAsXG4gICAgICBgbG9zdC10aWNrZXQtbW9kYWwtJHthbGVydFBLfWAsXG4gICAgXSk7XG5cbiAgICB0aGlzLmNsb3NlRGlhbG9ncyhtb2RhbEtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU5vdGlmaWNhdGlvbkRpYWxvZ3Mobm90aWZpY2F0aW9uUEs6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICBgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcbiAgICAgIGBkeW5hbWljLXByaWNpbmctY29uZmlybWF0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcbiAgICBdKTtcblxuICAgIHRoaXMuY2xvc2VEaWFsb2dzKG1vZGFsS2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFsZXJ0Rm9yQ2xvc2luZyhjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFsZXJ0cyA9IGN0eC5nZXRTdGF0ZSgpLmFsZXJ0cztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydER0bywgZ3VpZCk7XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IGFsZXJ0RXhpc3RzID0gYWxlcnRzLmZpbmQoYWxlcnQgPT5cbiAgICAgIHRoaXMuYWxlcnRQSyhhbGVydCwgZ3VpZCkgPT09IGFsZXJ0UEsgJiYgdGhpcy5zdGF0ZU1hdGNoZXMoYWxlcnQsIGFsZXJ0RHRvLmV2ZW50U3RhdGUpXG4gICAgKTtcblxuICAgIGlmICghYWxlcnREdG8uZXZlbnRTdGF0ZSB8fCBhbGVydEV4aXN0cykge1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW2FsZXJ0UEtdO1xuXG4gICAgICBjb25zdCBmaWx0ZXJlZEFsZXJ0cyA9IGFsZXJ0cy5maWx0ZXIoYWxlcnQgPT4gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSAhPT0gYWxlcnRQSyk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIGFsZXJ0czogZmlsdGVyZWRBbGVydHNcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgICAgdGhpcy5jbG9zZUFsZXJ0RGlhbG9ncyhhbGVydFBLKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAvLyBXaGV0aGVyIHdlIHdhbnQgdG8gY2xvc2Ugb3IgaGF2ZSBhIGR1cGxpY2F0ZSBhbGVydFxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmluZChub3RpZmljYXRpb24gPT4gdGhpcy5wa01hdGNoZXMobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb25QSykpO1xuICAgIGlmIChub3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25FeGlzdHMsIGd1aWQpO1xuICAgICAgY29uc3QgdG9hc3RJZCA9IG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuICAgICAgdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJUb2FzdHModG9hc3RJZCk7XG4gICAgICBkZWxldGUgbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PlxuICAgICAgICAhKHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLKSk7XG5cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgbm90aWZpY2F0aW9uczogZmlsdGVyZWROb3RpZmljYXRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IHBhcmtJZCA9IG5vdGlmaWNhdGlvbkR0bz8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LnBhcmtJZDtcblxuICAgIC8vIGZpbmQgYWxsIHRoZSBkeW5hbWljIHByaWNpbmcgdHJpZ2dlcmVkIGNvbmRpdGlvbnMgb2Ygc2FtZSBndWlkIGFuZCBwYXJrSWQgdG8gYmUgY2xvc2VcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhIW5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbiAmJlxuICAgICAgbm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKTtcblxuICAgIGlmIChkeW5hbWljUHJpY2luZ05vdGlmaWNhdGlvbkV4aXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGRwIG9mIGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhkcCwgZ3VpZCk7XG4gICAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgICB0aGlzLmNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKG5vdGlmaWNhdGlvbiA9PiAhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uIHx8ICEobm90aWZpY2F0aW9uLmd1aWQgPT09IGd1aWQgJiYgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtJZCA9PT0gcGFya0lkKSk7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IGZpbHRlcmVkTm90aWZpY2F0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dSYXRlQXV0b21hdGljU3dpdGNoVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvKSB7XG4gICAgY29uc3QgZHBjID0gbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgIGNvbnN0IHJhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldEJhc2VSYXRlQnlJZChkcGMucGFya2luZ0xvdElkLCBkcGMucmF0ZUlkLCBkcGMuZ3VpZCkpO1xuICAgIGRwYy5yYXRlTmFtZSA9IHJhdGU/LmRhdGE/Lm5hbWU7XG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLmdldENvbW1hbmROb3RpZmljYXRpb25Db25maWdNZXNzYWdlcyhGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5TZXRBY3RpdmVSYXRlLCBudWxsLCBkcGMpO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmZhY2lsaXR5X3JlbW90ZV9jb21tYW5kX3NldF9hY3RpdmVfcmF0ZSksXG4gICAgICBoUG9zaXRpb246IE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMuUmlnaHQsXG4gICAgICB2UG9zaXRpb246IE5vdGlmaWNhdGlvblZQb3NpdGlvbnMuQm90dG9tLFxuICAgICAgZHVyYXRpb246IDcgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyxcbiAgICAgIGNsYXNzOiBDb21tYW5kTm90aWZpY2F0aW9uQm9yZGVyQ2xhc3MuU3VjY2VzcyxcbiAgICAgIHR5cGU6IENvbW1hbmROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcbiAgICB9O1xuXG4gICAgdGhpcy5jb21tYW5kTm90aWZpY2F0aW9uU2VydmljZS5zaG93KGNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pIHtcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX3JldmVydGVkX3RvX2RlZmF1bHRfcmF0ZSk7XG4gICAgY29uc3Qgc3ViVGl0bGUgPSBgJHtkcGMucGFya2luZ0xvdE5hbWV9JHtkcGMuem9uZT8ubmFtZSA/ICcgfCAnICsgZHBjLnpvbmU/Lm5hbWUgOiAnJ31gO1xuICAgIGNvbnN0IGNvbmZpZzogQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZyA9IHtcbiAgICAgIG1lc3NhZ2VzOiBbe1xuICAgICAgICB2YWx1ZTogdGl0bGUsXG4gICAgICAgIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy50aXRsZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBzdWJUaXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnN1YlRpdGxlLFxuICAgICAgfV0sXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBbGVydEVuYWJsZWRGb3JVc2VyKGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzQWxlcnRFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVzZXJTZXR0aW5ncyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLm1hcHBlZFVzZXJTZXR0aW5ncyk7XG4gICAgY29uc3QgdXNlckFsZXJ0c1ByZWZlcmVuY2VzOiBBbGVydFByZWZlcmVuY2VzU2V0dGluZ3NEdG8gPSB1c2VyU2V0dGluZ3MuZ2V0KFNldHRpbmdzQ2F0ZWdvcnkuQWxlcnRzUHJlZmVyZW5jZXMpO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gdXNlckFsZXJ0c1ByZWZlcmVuY2VzIHdlIGRvbid0IGZpbHRlciBhdCBhbGxcbiAgICBpZiAoISF1c2VyQWxlcnRzUHJlZmVyZW5jZXMpIHtcbiAgICAgIC8vIElmIHRoZSB1c2VyIGVuYWJsZWQgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIC8vIEVsc2UgdGhlIHVzZXIgZGlzYWJsZWQgYWxsIHRoZSBub3RpZmljYXRpb25zXG4gICAgICBpZiAodXNlckFsZXJ0c1ByZWZlcmVuY2VzLmlzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICAgICAgY29uc3QgaXNBbGVydEZpbHRlclZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgVkVSU0lPTl85XzJfMCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4xLjAgb3IgYmVsb3csIGFsbCBub3RpZmljYXRpb25zIGFyZSBlbmFibGVkXG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIDkuMi4wIGFuZCBhYm92ZSwgd2UgZmlsdGVyIGJ5IHRoZSBwcmVmZXJlbmNlc1xuICAgICAgICBpc0FsZXJ0RW5hYmxlZCA9ICFpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCB8fCB0aGlzLmlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydCwgZ3VpZCwgdXNlckFsZXJ0c1ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEluUHJlZmVyZW5jZXMoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcsIHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcDogQWxlcnRzUHJlZmVyZW5jZXNNYXApIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBhbnkgZmFjaWxpdHkgc2VsZWN0ZWQsIHdlIGNvbnRpbnVlIHRvIGNoZWNrXG4gICAgLy8gRWxzZSB3ZSBhbGxvdyBhbGwgdG8gcGFzcyBhcyB0aGUgdXNlciBkaWRuJ3Qgc2V0IHByZWZlcmVuY2VzIHlldFxuICAgIGlmIChPYmplY3Qua2V5cyh1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXApLmxlbmd0aCkge1xuICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcblxuICAgICAgLy8gR2V0cyB0aGUgdHJlZUlkIG9mIHRoZSB0ZW5hbnQgLSBJbiBjYXNlIHRoZSB1c2VyIHNlbGVjdGVkIFwiQWxsIFRlbmFudCBQYXJraW5nIExvdHNcIlxuICAgICAgY29uc3QgdGVuYW50VHJlZUlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk/LnRyZWVJZDtcblxuICAgICAgLy8gR2V0cyB0aGUgdHJlZSBwYXJrIElkIG9mIHRoZSBhbGVydFxuICAgICAgY29uc3QgYWxlcnRUcmVlUGFya0lkID0gdGhpcy5nZXRDbG91ZFBhcmtJZChhbGVydCwgZ3VpZCk7XG5cbiAgICAgIC8vIFdlIEdldCB0aGUgc2V0dGluZyBvZiB0aGUgUGFyaywgUGFyZW50UGFyayBvciBQYXJrc1RyZWVSb290XG4gICAgICBjb25zdCBmYWNpbGl0eVByZWZlcmVuY2VzTWFwOiBGYWNpbGl0eVByZWZlcmVuY2VzTWFwID0gdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW2FsZXJ0VHJlZVBhcmtJZF0gfHwgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwW3RlbmFudFRyZWVJZF07XG5cbiAgICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBmYWNpbGl0eSB3YXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmYWNpbGl0eVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgIGNvbnN0IGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydFR5cGVQcmVmZXJlbmNlc01hcCA9IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXBbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl07XG5cbiAgICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGFsZXJ0IHR5cGUgd2FzIHNlbGVjdGVkXG4gICAgICAgIGlmIChhbGVydFR5cGVQcmVmZXJlbmNlc01hcCkge1xuICAgICAgICAgIGNvbnN0IGFsZXJ0RGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZSA9IHRoaXMuZ2V0QWxlcnRzRGV2aWNlVHlwZShhbGVydCk7XG5cbiAgICAgICAgICAvLyBXZSBjaGVjayB0aGUgaWYgdGhlIGRldmljZSB0eXBlIHdhcyBzZWxlY3RlZFxuICAgICAgICAgIGlzQWxlcnRFbmFibGVkID0gYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnREZXZpY2VUeXBlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc0FsZXJ0RW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxlcnRzRGV2aWNlVHlwZShhbGVydDogQWxlcnREdG8pOiBBbGVydHNEZXZpY2VUeXBlIHtcbiAgICBsZXQgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlO1xuICAgIGNvbnN0IGFsZXJ0c0RldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGVbXSA9IERldmljZVR5cGVzQWxlcnRzTWFwcGluZy5nZXQoYWxlcnQuZGV2aWNlVHlwZSk7XG5cbiAgICBzd2l0Y2ggKGFsZXJ0LmRldmljZVR5cGUpIHtcbiAgICAgIGNhc2UgRGV2aWNlVHlwZS5DYXNoOlxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydC5yZWFkZXJJRCA9PT0gMCA/IEFsZXJ0c0RldmljZVR5cGUuTWFzdGVyIDogQWxlcnRzRGV2aWNlVHlwZS5DYXNoUmVnaXN0ZXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYWxlcnREZXZpY2VUeXBlID0gYWxlcnRzRGV2aWNlVHlwZT8uWzBdO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gYWxlcnREZXZpY2VUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uQ2hhbmdlKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihjdHgsIHsgbm90aWZpY2F0aW9uRHRvLCBndWlkIH0pO1xuXG4gICAgdGhpcy5oYW5kbGVUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbihjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzVHJpZ2dlcmVkKSB7XG4gICAgICB0aGlzLnByb2Nlc3NBbmREaXNwbGF5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCwgY3R4KTtcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5pc0FjdGl2YXRlZCkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBmYWxsZW4gYmFjayB0byB0aGUgZGVmYXVsdCByYXRlXG4gICAgICB0aGlzLnNob3dSYXRlRmFsbGVuQmFja1RvRGVmYXVsdFJhdGVUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uRHRvKS50aGVuKCk7XG4gICAgfSBlbHNlIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24udHJpZ2dlckFjdGlvbiA9PT0gRHluYW1pY1ByaWNpbmdUcmlnZ2VyQWN0aW9uLkF1dG9tYXRpY1N3aXRjaFJhdGUpIHtcbiAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb24gaW5kaWNhdGluZyB0aGUgcmF0ZSBoYXMgYXV0b21hdGljIHN3aXRjaFxuICAgICAgdGhpcy5zaG93UmF0ZUF1dG9tYXRpY1N3aXRjaFRvYXN0TWVzc2FnZShub3RpZmljYXRpb25EdG8pLnRoZW4oKTtcbiAgICAgIHRoaXMuY2xvc2VUcmlnZ2VyZWREeW5hbWljUHJpY2luZ0NvbmRpdGlvbnMoY3R4LCBub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xvdWRQYXJrSWQoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGFsZXJ0UGFya0lkID0gYWxlcnQubXVsdGlQYXJrUGFyZW50SWQgPiAwID8gYWxlcnQubXVsdGlQYXJrUGFyZW50SWQgOiBhbGVydC5wYXJrSWQ7XG4gICAgY29uc3QgbG90c01hcCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpW2d1aWRdO1xuICAgIHJldHVybiBsb3RzTWFwW2FsZXJ0UGFya0lkXT8uY2xvdWRJZDtcbiAgfVxuXG4gIHByaXZhdGUgcGtNYXRjaGVzID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25QSzogc3RyaW5nKSA9PiB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgbm90aWZpY2F0aW9uRHRvLmd1aWQpID09PSBub3RpZmljYXRpb25QSztcbiAgcHJpdmF0ZSBzdGF0ZU1hdGNoZXMgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBldmVudFN0YXRlOiBib29sZWFuKSA9PiBhbGVydER0by5ldmVudFN0YXRlID09PSBldmVudFN0YXRlO1xuICBwcml2YXRlIGFsZXJ0UEsgPSAoYWxlcnREdG86IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgYCR7Z3VpZH1fJHthbGVydER0by5wYXJrSWR9XyR7YWxlcnREdG8ucmVhZGVySUR9XyR7YWxlcnREdG8uZGV2aWNlSUR9XyR7YWxlcnREdG8uZXZlbnREZXNjcmlwdGlvbn1gO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBsZXQga2V5OiBzdHJpbmcgPSAnJztcbiAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvbkR0by50eXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvblR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGNvbnN0IHsgaWQsIHpvbmUgfSA9IG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgICAga2V5ID0gem9uZSA/IGAke2d1aWR9XyR7aWR9XyR7em9uZS5pZH1gIDogYCR7Z3VpZH1fJHtpZH1gO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bnN1cHBvcnRlZCBub3RpZmljYXRpb24gdHlwZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4pOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IGN0eC5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGFsZXJ0cyA9IHN0YXRlLmFsZXJ0cztcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucztcblxuICAgIGNvbnN0IGJhZGdlVmFsdWUgPSBhbGVydHMubGVuZ3RoICsgbm90aWZpY2F0aW9ucy5sZW5ndGg7XG4gICAgY29uc3QgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5ID0gdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5nZXRBZ2dyZWdhdGVkTm90aWZpY2F0aW9uVHlwZShhbGVydHMsIG5vdGlmaWNhdGlvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYmFkZ2VWYWx1ZSxcbiAgICAgIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eSxcbiAgICAgIGRpc3BsYXlCYWRnZTogYmFkZ2VWYWx1ZSA+IDBcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0aGF0IHByb2Nlc3NlcyBhbmQgZGlzcGxheXMgdGhlIGFsZXJ0IGJhc2VkIG9uIGNvbmRpdGlvbnNcbiAgcHJpdmF0ZSBwcm9jZXNzQW5kRGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG5cbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlKSB7XG4gICAgICBzd2l0Y2ggKGFsZXJ0LmV2ZW50RGVzY3JpcHRpb24pIHtcbiAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTE9TVF9USUNLRVQ6XG4gICAgICAgIGNhc2UgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLkxSUF9OT1RfTUFUQ0g6XG4gICAgICAgICAgdGhpcy5vcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5kaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWV0aG9kIHRoYXQgcHJvY2Vzc2VzIGFuZCBkaXNwbGF5cyB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGNvbmRpdGlvbnNcbiAgcHJpdmF0ZSBwcm9jZXNzQW5kRGlzcGxheU5vdGlmaWNhdGlvbihub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nLCBjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+KTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb25cbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bbm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnBhcmtpbmdMb3RJZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgIGNvbnN0IGhhc1Blcm1pc3Npb24gPSBmZWF0dXJlUGVybWlzc2lvbnM/LmluY2x1ZGVzKFBlcm1pc3Npb25UeXBlLlNldEFjdGl2ZVJhdGUpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGFwcCBpcyBpbiBtb2JpbGUgbW9kZSBvciBpZiBpdCdzIGluIHRoZSBjb3JyZWN0IG1vZHVsZVxuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBjb25zdCBpc0NjTW9kdWxlID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUuYXBwTW9kdWxlKSA9PT0gQXBwTW9kdWxlLkNjO1xuXG4gICAgLy8gUHJvY2VlZCBpZiB0aGUgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAgaWYgKCFpc01vYmlsZUFwcE1vZGUgJiYgaXNDY01vZHVsZSAmJiBoYXNQZXJtaXNzaW9uKSB7XG4gICAgICB0aGlzLm9wZW5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbk5vdGlmaWNhdGlvbkRpYWxvZyhub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuXG4gICAgICAvLyBQdXNoIHRoZSBuZXcgbm90aWZpY2F0aW9uIHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XG4gICAgICBub3RpZmljYXRpb25zLnVuc2hpZnQobm90aWZpY2F0aW9uRHRvKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBSZWNhbGN1bGF0ZSBiYWRnZSBhbmQgc2V2ZXJpdHlcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIYW5kbGVkVXNlckZvckR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uKFxuICAgIGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sXG4gICAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW10sXG4gICAgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sXG4gICAgbm90aWZpY2F0aW9uUEs6IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBpZiAobm90aWZpY2F0aW9ucykge1xuICAgICAgY29uc3QgZXhpc3ROb3RpZmljYXRpb25JbmRleCA9IG5vdGlmaWNhdGlvbnMuZmluZEluZGV4KG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG5cbiAgICAgIGlmIChleGlzdE5vdGlmaWNhdGlvbkluZGV4ICE9PSAtMSAmJiBub3RpZmljYXRpb25zW2V4aXN0Tm90aWZpY2F0aW9uSW5kZXhdLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uKSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNbZXhpc3ROb3RpZmljYXRpb25JbmRleF0uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaGFuZGxpbmdCeVVzZXIgPVxuICAgICAgICAgIG5vdGlmaWNhdGlvbkR0bz8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24/LmhhbmRsaW5nQnlVc2VyO1xuXG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHsgbm90aWZpY2F0aW9ucyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTm90aWZpY2F0aW9uRW5hYmxlZEZvclVzZXIobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8sIGZhY2lsaXR5SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGxldCBpc05vdGlmaWNhdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHVzZXJTZXR0aW5ncyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLm1hcHBlZFVzZXJTZXR0aW5ncyk7XG4gICAgY29uc3QgdXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzOiBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1NldHRpbmdzRHRvID0gdXNlclNldHRpbmdzLmdldChTZXR0aW5nc0NhdGVnb3J5Lk5vdGlmaWNhdGlvblByZWZlcmVuY2VzKTtcblxuICAgIGlmICh1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXM/LmlzRW5hYmxlZCkge1xuICAgICAgLy8gR2V0cyB0aGUgZ3JvdXAgZmFjaWxpdHkgSWQgb2YgdGhlIHRlbmFudCAtIEluIGNhc2UgdGhlIHVzZXIgc2VsZWN0ZWQgXCJBbGwgVGVuYW50IFBhcmtpbmcgTG90c1wiXG4gICAgICBjb25zdCB0ZW5hbnRGYWNpbGl0eUlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk/LnRyZWVJZDtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcy5wcmVmZXJlbmNlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXcgdXNlcnM6IGVtcHR5IHByZWZlcmVuY2VzIG1lYW5zIGRlZmF1bHQgYWNjZXNzIHRvIGFsbCBub3RpZmljYXRpb25zXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIG5ldyB1c2VycyB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgdW50aWwgdGhleSBleHBsaWNpdGx5IGNvbmZpZ3VyZSB0aGVpciBwcmVmZXJlbmNlc1xuICAgICAgICBpc05vdGlmaWNhdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHVzZXJzIHdpdGggY29uZmlndXJlZCBwcmVmZXJlbmNlcywgY2hlY2sgaWYgdGhlIHNwZWNpZmljIGZhY2lsaXR5IGFuZCBub3RpZmljYXRpb24gdHlwZSBhcmUgZW5hYmxlZFxuICAgICAgICAvLyBVc2UgdGVuYW50IGZhY2lsaXR5IHByZWZlcmVuY2VzIGZpcnN0LCBmYWxsYmFjayB0byBzcGVjaWZpYyBmYWNpbGl0eSBwcmVmZXJlbmNlc1xuICAgICAgICBjb25zdCBmYWNpbGl0eVByZWZlcmVuY2VzID0gdXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzW3RlbmFudEZhY2lsaXR5SWRdID8/XG4gICAgICAgICAgdXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzW2ZhY2lsaXR5SWRdO1xuXG4gICAgICAgIGlmIChmYWNpbGl0eVByZWZlcmVuY2VzPy5bbm90aWZpY2F0aW9uLnR5cGVdKSB7XG4gICAgICAgICAgaXNOb3RpZmljYXRpb25FbmFibGVkID0gZmFjaWxpdHlQcmVmZXJlbmNlc1tub3RpZmljYXRpb24udHlwZV0uZW5hYmxlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzTm90aWZpY2F0aW9uRW5hYmxlZDtcbiAgfVxufVxuIl19
672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBRW5ILE9BQU8sRUFBRSw4QkFBOEIsRUFBNkIsdUJBQXVCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUNwTCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUVqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN0SSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JB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WUFDbkIsZ0JBQWdCLEVBQUUsRUFBRTtTQUNyQjtLQUNGLENBQUM7R0FFVywyQkFBMkIsQ0Ftc0J2QztTQW5zQlksMkJBQTJCOzRGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVU7K2dCQTZDVCxtQ0FBbUMsTUFVbkMsMENBQTBDLE1BVTFDLGtDQUFrQyxNQWVsQywrQkFBK0IsTUFjL0IsbUNBQW1DLE1BWW5DLDJDQUEyQyxNQWEzQyxvQkFBb0IsTUFpQ3BCLDBCQUEwQixNQWUxQiwyQkFBMkIsTUEwQjNCLDBCQUEwQixNQXFCMUIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jbG91ZC1jb25maXJtLWRpYWxvZy9jbG91ZC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnROb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ub3RpZmljYXRpb24vYWxlcnQtbm90aWZpY2F0aW9uL2FsZXJ0LW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcywgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tYW5kTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uL2NvbW1hbmQtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uQ2xhc3MsIE5vdGlmaWNhdGlvbkhQb3NpdGlvbnMsIE5vdGlmaWNhdGlvblZQb3NpdGlvbnMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tY29uZmlnJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgVkVSU0lPTl85XzJfMCwgVkVSU0lPTl9WMSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy92ZXJzaW9uLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEZXZpY2VUeXBlc0FsZXJ0c01hcHBpbmcgfSBmcm9tICcuLi8uLi9lbnVtcy9hbGVydHMtZGV2aWNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBDbG91ZENvbmZpcm1EaWFsb2dEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jbG91ZC1jb25maXJtLWRpYWxvZy1kYXRhLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydER0bywgQWxlcnRQcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvLCBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LCBBbGVydHNEZXZpY2VUeXBlLCBBcHBNb2R1bGUsIERldmljZVR5cGUsIER5bmFtaWNQcmljaW5nVHJpZ2dlckFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsIEhhbmRsaW5nQWxlcnREdG8sIEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE1vYmlsZVNlcnZpY2VQcm94eSwgTm90aWZpY2F0aW9uRHRvLCBOb3RpZmljYXRpb25QcmVmZXJlbmNlc1NldHRpbmdzRHRvLCBOb3RpZmljYXRpb25TZXZlcml0eSwgTm90aWZpY2F0aW9uVHlwZSwgUGVyaXBoZXJhbEVxdWlwbWVudEVycm9yLCBQZXJtaXNzaW9uVHlwZSwgU2V0dGluZ3NDYXRlZ29yeSwgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEZhY2lsaXR5U2VydmljZVByb3h5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBCYXNlRmFjaWxpdHlDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVtYmVyTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbGFuZy51dGlsJztcbmltcG9ydCB7IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdGUgfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uc3RhdGUnO1xuaW1wb3J0IHsgRmFjaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZmFjaWxpdHknO1xuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4uL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFBhcmtNYW5hZ2VyU3RhdGUgfSBmcm9tICcuLi9wYXJrLW1hbmFnZXIvcGFyay1tYW5hZ2VyLnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24gfSBmcm9tICcuLi91c2VyLXNldHRpbmdzL3VzZXItc2V0dGluZ3MuYWN0aW9ucyc7XG5pbXBvcnQge1xuICBBbGVydENoYW5nZWRBY3Rpb24sXG4gIENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sXG4gIExvYWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uLFxuICBMb2FkTW9iaWxlTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbixcbiAgUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24sIFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbixcbiAgVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvblxufSBmcm9tICcuL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IEFsZXJ0c1ByZWZlcmVuY2VzTWFwLCBBbGVydFR5cGVQcmVmZXJlbmNlc01hcCwgRmFjaWxpdHlQcmVmZXJlbmNlc01hcCB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCB7XG4gIGFsZXJ0czogQWxlcnREdG9bXTtcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uRHRvW107XG4gIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eTogTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIGJhZGdlVmFsdWU6IG51bWJlcixcbiAgZGlzcGxheUJhZGdlOiBib29sZWFuLFxuICBub3RpZmljYXRpb25zTWFwOiBOdW1iZXJNYXA8bnVtYmVyPjtcbn1cblxuQFN0YXRlPEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4oe1xuICBuYW1lOiAnYWxlcnRzQW5kTm90aWZpY2F0aW9ucycsXG4gIGRlZmF1bHRzOiB7XG4gICAgYWxlcnRzOiBbXSxcbiAgICBub3RpZmljYXRpb25zOiBbXSxcbiAgICBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk6IE5vdGlmaWNhdGlvblNldmVyaXR5LkxvdyxcbiAgICBiYWRnZVZhbHVlOiAwLFxuICAgIGRpc3BsYXlCYWRnZTogZmFsc2UsXG4gICAgbm90aWZpY2F0aW9uc01hcDoge30sXG4gIH0sXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTdGF0ZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5OiBBbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlOiBBbGVydE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tYW5kTm90aWZpY2F0aW9uU2VydmljZTogQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eUNvbW1hbmRzU2VydmljZTogQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlOiBGYWNpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eVNlcnZpY2VQcm94eTogRmFjaWxpdHlTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5OiBNb2JpbGVTZXJ2aWNlUHJveHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBhbGVydHMoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IEFsZXJ0RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5hbGVydHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgbm90aWZpY2F0aW9ucyhzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ub3RpZmljYXRpb25zO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGFnZ3JlZ2F0ZWROb3RpZmljYXRpb25TZXZlcml0eShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogTm90aWZpY2F0aW9uU2V2ZXJpdHkge1xuICAgIHJldHVybiBzdGF0ZS5hZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgYmFkZ2VWYWx1ZShzdGF0ZTogQWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuYmFkZ2VWYWx1ZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBkaXNwbGF5QmFkZ2Uoc3RhdGU6IEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5QmFkZ2U7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVVzZXJBbGVydHNQcmVmZXJlbmNlc0FjdGlvbilcbiAgb25VcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWN0aW9uOiBVcGRhdGVVc2VyQWxlcnRzUHJlZmVyZW5jZXNBY3Rpb24pIHtcbiAgICBjb25zdCBzZXR0aW5nOiBTcGFya1NldHRpbmdzRHRvID0gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xuICAgICAgY2F0ZWdvcnk6IFNldHRpbmdzQ2F0ZWdvcnkuQWxlcnRzUHJlZmVyZW5jZXMsXG4gICAgICBzZXR0aW5nc0pzb246IEpTT04uc3RyaW5naWZ5KGFjdGlvbi51c2VyTm90aWZpY2F0aW9uc1ByZWZlcmVuY2VzKSxcbiAgICB9KTtcblxuICAgIGN0eC5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclNldHRpbmdzQWN0aW9uKHNldHRpbmcpKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbilcbiAgb25VcGRhdGVVc2VyTm90aWZpY2FpdG9uc1ByZWZlcmVuY2VzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogVXBkYXRlVXNlck5vdGlmaWNhaXRvbnNQcmVmZXJlbmNlc0FjdGlvbikge1xuICAgIGNvbnN0IHNldHRpbmc6IFNwYXJrU2V0dGluZ3NEdG8gPSBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XG4gICAgICBjYXRlZ29yeTogU2V0dGluZ3NDYXRlZ29yeS5Ob3RpZmljYXRpb25QcmVmZXJlbmNlcyxcbiAgICAgIHNldHRpbmdzSnNvbjogSlNPTi5zdHJpbmdpZnkoYWN0aW9uLnVzZXJOb3RpZmljYXRpb25zUHJlZmVyZW5jZXMpLFxuICAgIH0pO1xuXG4gICAgY3R4LmRpc3BhdGNoKG5ldyBVcGRhdGVVc2VyU2V0dGluZ3NBY3Rpb24oc2V0dGluZykpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25Mb2FkQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG1pbnV0ZXNBZ28gfTogTG9hZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBhbGVydHNBbmROb3RpZmljYXRpb25zJCA9IHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2VQcm94eS5nZXRBbGVydHNBbmROb3RpZmljYXRpb25zKG1pbnV0ZXNBZ28pO1xuXG4gICAgcmV0dXJuIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMkLnBpcGUodGFwKGFzeW5jIGFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMgPT4ge1xuICAgICAgY29uc3QgcG9wdWxhdGVOb3RpZmljYXRpb25zOiBBbGVydHNBbmROb3RpZmljYXRpb25zRHRvID0gYXdhaXQgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5wb3B1bGF0ZUFsZXJ0c0FuZE5vdGlmaWNhdGlvbnMoYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgYWxlcnRzOiBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMuYWxlcnRzID8/IFtdLFxuICAgICAgICBub3RpZmljYXRpb25zOiBwb3B1bGF0ZU5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9ucyA/PyBbXSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24pXG4gIG9uTG9hZE1vYmlsZU5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBtaW51dGVzQWdvIH06IExvYWRNb2JpbGVOb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY29uc3QgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQgPSB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eS5nZXRNb2JpbGVBbGVydHNBbmROb3RpZmljYXRpb24obWludXRlc0FnbywgVkVSU0lPTl9WMSk7XG5cbiAgICByZXR1cm4gYWxlcnRzQW5kTm90aWZpY2F0aW9ucyQucGlwZSh0YXAoYXN5bmMgYWxlcnRzQW5kTm90aWZpY2F0aW9ucyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGFsZXJ0czogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLmFsZXJ0cyA/PyBbXSxcbiAgICAgICAgbm90aWZpY2F0aW9uczogYWxlcnRzQW5kTm90aWZpY2F0aW9ucy5kYXRhLm5vdGlmaWNhdGlvbnMgPz8gW10sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyQWxlcnRzQW5kTm90aWZpY2F0aW9uc0FjdGlvbilcbiAgb25DbGVhckFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgXzogQ2xlYXJBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYWxlcnRzOiBbXSxcbiAgICAgIG5vdGlmaWNhdGlvbnM6IFtdLFxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Mb3csXG4gICAgICBiYWRnZVZhbHVlOiAwLFxuICAgICAgZGlzcGxheUJhZGdlOiBmYWxzZSxcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXA6IHt9XG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKVxuICBvblJlbW92ZUV4cGlyZWRBbGVydHNBbmROb3RpZmljYXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFjdGlvbjogUmVtb3ZlRXhwaXJlZEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNBY3Rpb24pIHtcbiAgICBjb25zdCBub3dVdGMgPSBtb21lbnQudXRjKCk7IC8vIEN1cnJlbnQgVVRDIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCBtaW51dGVzQWdvID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYWN0aXZlTm90aWZpY2F0aW9ucy5taW51dGVzQWdvO1xuICAgIGNvbnN0IGFsZXJ0cyA9IGN0eC5nZXRTdGF0ZSgpLmFsZXJ0cy5maWx0ZXIoYWxlcnQgPT4gbW9tZW50LnV0YyhhbGVydC5jbG91ZEV2ZW50RGF0ZVRpbWUpLmFkZChtaW51dGVzQWdvLCAnbWludXRlcycpLmlzQWZ0ZXIobm93VXRjKSk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBhbGVydHNcbiAgICB9KTtcblxuICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gIH1cblxuICBAQWN0aW9uKEFsZXJ0Q2hhbmdlZEFjdGlvbilcbiAgb25BbGVydENoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBhbGVydCwgZ3VpZCB9OiBBbGVydENoYW5nZWRBY3Rpb24pIHtcbiAgICBpZiAoYWxlcnQgJiYgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS5pc0FsZXJ0VHlwZURlZmluZWQoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikpIHtcbiAgICAgIHRoaXMuaGFuZGxlQWxlcnRGb3JDbG9zaW5nKGN0eCwgYWxlcnQsIGd1aWQpO1xuXG4gICAgICBpZiAoYWxlcnQuZXZlbnRTdGF0ZSAmJiB0aGlzLmlzQWxlcnRFbmFibGVkRm9yVXNlcihhbGVydCwgZ3VpZCkpIHtcblxuICAgICAgICBpZiAoIWFsZXJ0LmRldmljZU5hbWUpIHtcbiAgICAgICAgICBjb25zdCBwYXJrRGV2aWNlcyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoUGFya01hbmFnZXJTdGF0ZS5kZXZpY2VzKTtcbiAgICAgICAgICBhbGVydC5kZXZpY2VOYW1lID0gcGFya0RldmljZXM/LmZpbmQoZCA9PiBkLmlkID09PSBhbGVydC5kZXZpY2VJRCk/Lm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFsZXJ0LnBhcmtOYW1lKSB7XG4gICAgICAgICAgY29uc3QgbG90c01hcCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpW2d1aWRdO1xuICAgICAgICAgIGlmIChsb3RzTWFwKSB7XG4gICAgICAgICAgICBhbGVydC5wYXJrTmFtZSA9IGxvdHNNYXBbYWxlcnQucGFya0lkXT8ubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NBbmREaXNwbGF5QWxlcnQoY3R4LCBhbGVydCwgZ3VpZCk7XG5cbiAgICAgICAgLy8gUHVzaCB0aGUgbmV3IGFsZXJ0IHRvIHRoZSBhcnJheSBhbmQgc2F2ZSBpbiBzdGF0ZVxuICAgICAgICBjb25zdCBhbGVydHMgPSBjdHguZ2V0U3RhdGUoKS5hbGVydHM7XG4gICAgICAgIGFsZXJ0cy51bnNoaWZ0KGFsZXJ0KTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGFsZXJ0c1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbilcbiAgb25Ob3RpZmljYXRpb25DaGFuZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb24sIGd1aWQgfTogTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbikge1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25FbmFibGVkRm9yVXNlcihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5jbG91ZFBhcmtJZCkpIHtcbiAgICAgICAgICB0aGlzLm9uRHluYW1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4LCBub3RpZmljYXRpb24sIGd1aWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24pXG4gIG9uSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxBbGVydHNBbmROb3RpZmljYXRpb25zTW9kZWw+LCB7IG5vdGlmaWNhdGlvbkR0bywgZ3VpZCB9OiBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uc01hcCA9IHsgLi4uY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9uc01hcCB9O1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuXG4gICAgLy8gV2hldGhlciB3ZSB3YW50IHRvIGNsb3NlIG9yIGhhdmUgYSBkdXBsaWNhdGUgYWxlcnRcbiAgICBjb25zdCBub3RpZmljYXRpb25FeGlzdHMgPSBub3RpZmljYXRpb25zLmZpbmQobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcbiAgICBpZiAobm90aWZpY2F0aW9uRXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbilcbiAgb25IYW5kbGVOb3RpZmljYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfTogSGFuZGxlTm90aWZpY2F0aW9uQWN0aW9uKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IGN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnM7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBoYW5kbGUgdXNlciAtIGFuZCBzYXZlIGluIHN0YXRlXG4gICAgc3dpdGNoIChub3RpZmljYXRpb25EdG8udHlwZSkge1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uOlxuICAgICAgICB0aGlzLnVwZGF0ZUhhbmRsZWRVc2VyRm9yRHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb24oY3R4LCBub3RpZmljYXRpb25zLCBub3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLKTtcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5zdXBwb3J0ZWQgbm90aWZpY2F0aW9uIHR5cGVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGNyaXRpY2FsIGFsZXJ0IG1vZGFsXG4gICAgdGhpcy5jbG9zZURpYWxvZ0J5SWQoYG5vdGlmaWNhdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvblBLfWApO1xuICB9XG5cbiAgQEFjdGlvbihIYW5kbGVBbGVydHNBY3Rpb24pXG4gIG9uSGFuZGxlQWxlcnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIHsgYWxlcnREdG8sIGd1aWQgfTogSGFuZGxlQWxlcnRzQWN0aW9uKSB7XG4gICAgY29uc3QgYWxlcnRQSyA9IHRoaXMuYWxlcnRQSyhhbGVydER0bywgZ3VpZCk7XG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xuICAgIGNvbnN0IGV4aXN0QWxlcnRJbmRleCA9IGFsZXJ0cy5maW5kSW5kZXgoYWxlcnQgPT4gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSA9PT0gYWxlcnRQSyAmJlxuICAgICAgdGhpcy5zdGF0ZU1hdGNoZXMoYWxlcnQsIGFsZXJ0RHRvLmV2ZW50U3RhdGUpKTtcblxuICAgIGlmIChleGlzdEFsZXJ0SW5kZXggIT09IC0xKSB7XG4gICAgICBhbGVydHNbZXhpc3RBbGVydEluZGV4XS5oYW5kbGluZ0J5VXNlciA9IGFsZXJ0RHRvLmhhbmRsaW5nQnlVc2VyO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBhbGVydHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ3JpdGljYWxBbGVydERpYWxvZyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFsZXJ0VHlwZU5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3JbYWxlcnQuZXZlbnREZXNjcmlwdGlvbl0pO1xuICAgIGNvbnN0IGNsb3VkQ29uZmlybURpYWxvZ0RhdGE6IENsb3VkQ29uZmlybURpYWxvZ0RhdGEgPSB7XG4gICAgICBjb25maXJtTWVzc2FnZXM6IFt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY3JpdGljYWxfYWxlcnRfbWVzc2FnZSwge1xuICAgICAgICBhbGVydFR5cGVOYW1lXG4gICAgICB9KV0sXG4gICAgICBjb25maXJtVGl0bGU6IGFsZXJ0VHlwZU5hbWUsXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgICBkZXZpY2U6IHtcbiAgICAgICAgY29tbUlkOiBhbGVydC5yZWFkZXJJRC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBhbGVydC5kZXZpY2VOYW1lXG4gICAgICB9LFxuICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxuICAgICAgem9uZU5hbWU6IGFsZXJ0LnBhcmtab25lTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5OiBOb3RpZmljYXRpb25TZXZlcml0eS5Dcml0aWNhbCxcbiAgICAgIG5vdGlmaWNhdGlvblNldmVyaXR5SW52ZXJ0OiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246IGFsZXJ0LmRlc2NyaXB0aW9uLFxuICAgICAgY2FyUGxhdGU6IGFsZXJ0LmNhclBsYXRlLFxuICAgIH07XG5cbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuPGJvb2xlYW4+KENsb3VkQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgcGFuZWxDbGFzczogYHRiLWNyaXRpY2FsLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgZW5hYmxlZE1pbmltaXplZDogdHJ1ZSxcbiAgICB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFsZXJ0OiBIYW5kbGluZ0FsZXJ0RHRvID0gbmV3IEhhbmRsaW5nQWxlcnREdG8oe1xuICAgICAgICAgIGd1aWQ6IGd1aWQsXG4gICAgICAgICAgcGFya0lkOiBhbGVydC5wYXJrSWQsXG4gICAgICAgICAgcGFya05hbWU6IGFsZXJ0LnBhcmtOYW1lLFxuICAgICAgICAgIGRldmljZUlkOiBhbGVydC5kZXZpY2VJRCxcbiAgICAgICAgICBldmVudERlc2NyaXB0aW9uOiBhbGVydC5ldmVudERlc2NyaXB0aW9uLFxuICAgICAgICAgIHVzZXJGdWxsTmFtZTogdXNlckluZm8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgaWQ6IGFsZXJ0LmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LmhhbmRsZUFsZXJ0Tm90aWZpY2F0aW9uKGhhbmRsZUFsZXJ0KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLnRyaWdnZXJBbGVydFRvYXN0RXZlbnQocmVzLmRhdGEgfHwgYWxlcnQsIGd1aWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbG91ZENvbmZpcm1EaWFsb2dEYXRhOiBDbG91ZENvbmZpcm1EaWFsb2dEYXRhID0ge1xuICAgICAgY29uZmlybU1lc3NhZ2VzOiBbdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmR5bmFtaWNfcHJpY2luZ19hbGVydF9tZXNzYWdlKV0sXG4gICAgICBjb25maXJtVGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfYWxlcnRfdGl0bGUpLFxuICAgICAgY29uZmlybVN1YlRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZHluYW1pY19wcmljaW5nX2FsZXJ0X3N1Yl90aXRsZSwgeyBjb25kaXRpb25OYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY29uZGl0aW9uTmFtZSB9KSxcbiAgICAgIHBhcmtOYW1lOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdE5hbWUsXG4gICAgICB6b25lTmFtZTogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLnpvbmU/Lm5hbWUsXG4gICAgICBva1RleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi55ZXMpLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhbmNlbCksXG4gICAgfTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBLID0gdGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIGd1aWQpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW48Ym9vbGVhbj4oQ2xvdWRDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBwYW5lbENsYXNzOiBgdGItZHluYW1pYy1wcmljaW5nLWNvbmRpdGlvbi1tb2RhbC0ke25vdGlmaWNhdGlvbi5pZH1gLFxuICAgICAgZGF0YTogY2xvdWRDb25maXJtRGlhbG9nRGF0YSxcbiAgICAgIGlkOiBgbm90aWZpY2F0aW9uLW1vZGFsLSR7bm90aWZpY2F0aW9uUEt9YCxcbiAgICAgIGVuYWJsZWRNaW5pbWl6ZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgICAgICBjb25zdCBoYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvOiBIYW5kbGluZ0R5bmFtaWNQcmljaW5nQ29uZGl0aW9uRHRvID0gbmV3IEhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8oe1xuICAgICAgICAgIGNsb3VkUGFya0lkOiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uY2xvdWRQYXJrSWQsXG4gICAgICAgICAgdXNlckZ1bGxOYW1lOiB1c2VySW5mby5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBpZDogbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZVByb3h5LmhhbmRsZUR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGhhbmRsaW5nRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8pLnN1YnNjcmliZShhc3luYyByZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGRwYyA9IHJlcy5kYXRhIHx8IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICAgICAgICBjb25zdCByYXRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRCYXNlUmF0ZUJ5SWQoZHBjLnBhcmtpbmdMb3RJZCwgZHBjLnJhdGVJZCwgZHBjLmd1aWQpKTtcbiAgICAgICAgICBkcGMucmF0ZU5hbWUgPSByYXRlPy5kYXRhPy5uYW1lO1xuICAgICAgICAgIHRoaXMuYWxlcnRzQW5kTm90aWZpY2F0aW9uc1NlcnZpY2UudHJpZ2dlckR5bmFtaWNQcmljaW5nVG9hc3RFdmVudChkcGMpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGxheUFsZXJ0KGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0OiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5hbGVydE5vdGlmaWNhdGlvblNlcnZpY2UuZGlzcGxheUFsZXJ0KGFsZXJ0LCBndWlkKTtcbiAgICBpZiAobm90aWZpY2F0aW9uKSB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKTtcbiAgICAgIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS10gPSBub3RpZmljYXRpb24udG9hc3RJZDtcblxuICAgICAgbm90aWZpY2F0aW9uLm9uVGFwLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydHNBbmROb3RpZmljYXRpb25zU2VydmljZS50cmlnZ2VyQWxlcnRUb2FzdEV2ZW50KGFsZXJ0LCBndWlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG5vdGlmaWNhdGlvbnNNYXAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRGlhbG9ncyhkaWFsb2dJZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZ2V0T3BlbkRpYWxvZ3MoKT8uZm9yRWFjaChkaWFsb2cgPT4ge1xuICAgICAgaWYgKGRpYWxvZ0lkcy5oYXMoZGlhbG9nLmlkKSkge1xuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dCeUlkKGRpYWxvZ0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVuRGlhbG9ncyA9IHRoaXMubW9kYWxTZXJ2aWNlLmdldE9wZW5EaWFsb2dzKCk7XG4gICAgY29uc3QgZGlhbG9nID0gb3BlbkRpYWxvZ3MuZmluZChkaWFsb2cgPT4gZGlhbG9nLmlkID09PSBkaWFsb2dJZCk7XG5cbiAgICBpZiAoZGlhbG9nKSB7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEs6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICBgbm90aWZpY2F0aW9uLW1vZGFsLSR7YWxlcnRQS31gLFxuICAgICAgYGxwci1taXNtYXRjaC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICAgIGBsb3N0LXRpY2tldC1tb2RhbC0ke2FsZXJ0UEt9YCxcbiAgICBdKTtcblxuICAgIHRoaXMuY2xvc2VEaWFsb2dzKG1vZGFsS2V5cyk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTm90aWZpY2F0aW9uRGlhbG9ncyhub3RpZmljYXRpb25QSzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbW9kYWxLZXlzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICAgIGBub3RpZmljYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgICAgYGR5bmFtaWMtcHJpY2luZy1jb25maXJtYXRpb24tbW9kYWwtJHtub3RpZmljYXRpb25QS31gLFxuICAgIF0pO1xuXG4gICAgdGhpcy5jbG9zZURpYWxvZ3MobW9kYWxLZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWxlcnRGb3JDbG9zaW5nKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxlcnRzID0gY3R4LmdldFN0YXRlKCkuYWxlcnRzO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBhbGVydFBLID0gdGhpcy5hbGVydFBLKGFsZXJ0RHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3QgYWxlcnRFeGlzdHMgPSBhbGVydHMuZmluZChhbGVydCA9PlxuICAgICAgdGhpcy5hbGVydFBLKGFsZXJ0LCBndWlkKSA9PT0gYWxlcnRQSyAmJiB0aGlzLnN0YXRlTWF0Y2hlcyhhbGVydCwgYWxlcnREdG8uZXZlbnRTdGF0ZSlcbiAgICApO1xuXG4gICAgaWYgKCFhbGVydER0by5ldmVudFN0YXRlIHx8IGFsZXJ0RXhpc3RzKSB7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFthbGVydFBLXTtcbiAgICAgIHRoaXMuYWxlcnROb3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyVG9hc3RzKHRvYXN0SWQpO1xuICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbYWxlcnRQS107XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkQWxlcnRzID0gYWxlcnRzLmZpbHRlcihhbGVydCA9PiB0aGlzLmFsZXJ0UEsoYWxlcnQsIGd1aWQpICE9PSBhbGVydFBLKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgYWxlcnRzOiBmaWx0ZXJlZEFsZXJ0c1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVjYWxjdWxhdGVCYWRnZUFuZFNldmVyaXR5KGN0eCk7XG4gICAgICB0aGlzLmNsb3NlQWxlcnREaWFsb2dzKGFsZXJ0UEspO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25Ob3RpZmljYXRpb24oY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBjdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNNYXAgPSB7IC4uLmN0eC5nZXRTdGF0ZSgpLm5vdGlmaWNhdGlvbnNNYXAgfTtcbiAgICBjb25zdCBub3RpZmljYXRpb25QSyA9IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIC8vIFdoZXRoZXIgd2Ugd2FudCB0byBjbG9zZSBvciBoYXZlIGEgZHVwbGljYXRlIGFsZXJ0XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maW5kKG5vdGlmaWNhdGlvbiA9PiB0aGlzLnBrTWF0Y2hlcyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvblBLKSk7XG4gICAgaWYgKG5vdGlmaWNhdGlvbkV4aXN0cykge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKG5vdGlmaWNhdGlvbkV4aXN0cywgZ3VpZCk7XG4gICAgICBjb25zdCB0b2FzdElkID0gbm90aWZpY2F0aW9uc01hcFtub3RpZmljYXRpb25QS107XG4gICAgICB0aGlzLmFsZXJ0Tm90aWZpY2F0aW9uU2VydmljZS5jbGVhclRvYXN0cyh0b2FzdElkKTtcbiAgICAgIGRlbGV0ZSBub3RpZmljYXRpb25zTWFwW25vdGlmaWNhdGlvblBLXTtcblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+XG4gICAgICAgICEodGhpcy5ub3RpZmljYXRpb25QSyhub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5ndWlkKSA9PT0gbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zTWFwLFxuICAgICAgICBub3RpZmljYXRpb25zOiBmaWx0ZXJlZE5vdGlmaWNhdGlvbnMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlVHJpZ2dlcmVkRHluYW1pY1ByaWNpbmdDb25kaXRpb25zKGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4sIG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICBjb25zdCBub3RpZmljYXRpb25zTWFwID0geyAuLi5jdHguZ2V0U3RhdGUoKS5ub3RpZmljYXRpb25zTWFwIH07XG4gICAgY29uc3QgcGFya0lkID0gbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8ucGFya0lkO1xuXG4gICAgLy8gZmluZCBhbGwgdGhlIGR5bmFtaWMgcHJpY2luZyB0cmlnZ2VyZWQgY29uZGl0aW9ucyBvZiBzYW1lIGd1aWQgYW5kIHBhcmtJZCB0byBiZSBjbG9zZVxuICAgIGNvbnN0IGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICEhbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uICYmXG4gICAgICBub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpO1xuXG4gICAgaWYgKGR5bmFtaWNQcmljaW5nTm90aWZpY2F0aW9uRXhpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZHAgb2YgZHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb25FeGlzdHMpIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uUEsgPSB0aGlzLm5vdGlmaWNhdGlvblBLKGRwLCBndWlkKTtcbiAgICAgICAgZGVsZXRlIG5vdGlmaWNhdGlvbnNNYXBbbm90aWZpY2F0aW9uUEtdO1xuXG4gICAgICAgIHRoaXMuY2xvc2VOb3RpZmljYXRpb25EaWFsb2dzKG5vdGlmaWNhdGlvblBLKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWROb3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucy5maWx0ZXIobm90aWZpY2F0aW9uID0+ICFub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24gfHwgIShub3RpZmljYXRpb24uZ3VpZCA9PT0gZ3VpZCAmJiBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya0lkID09PSBwYXJrSWQpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uc01hcCxcbiAgICAgICAgbm90aWZpY2F0aW9uczogZmlsdGVyZWROb3RpZmljYXRpb25zLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlQmFkZ2VBbmRTZXZlcml0eShjdHgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVBdXRvbWF0aWNTd2l0Y2hUb2FzdE1lc3NhZ2Uobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb25EdG8pIHtcbiAgICBjb25zdCBkcGMgPSBub3RpZmljYXRpb24uZHluYW1pY1ByaWNpbmdDb25kaXRpb247XG4gICAgY29uc3QgcmF0ZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmFjaWxpdHlTZXJ2aWNlUHJveHkuZ2V0QmFzZVJhdGVCeUlkKGRwYy5wYXJraW5nTG90SWQsIGRwYy5yYXRlSWQsIGRwYy5ndWlkKSk7XG4gICAgZHBjLnJhdGVOYW1lID0gcmF0ZT8uZGF0YT8ubmFtZTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZmFjaWxpdHlDb21tYW5kc1NlcnZpY2UuZ2V0Q29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZ01lc3NhZ2VzKEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsIG51bGwsIGRwYyk7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXMsXG4gICAgICBjb21tYW5kOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZmFjaWxpdHlfcmVtb3RlX2NvbW1hbmRfc2V0X2FjdGl2ZV9yYXRlKSxcbiAgICAgIGhQb3NpdGlvbjogTm90aWZpY2F0aW9uSFBvc2l0aW9ucy5SaWdodCxcbiAgICAgIHZQb3NpdGlvbjogTm90aWZpY2F0aW9uVlBvc2l0aW9ucy5Cb3R0b20sXG4gICAgICBkdXJhdGlvbjogNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgY2xhc3M6IENvbW1hbmROb3RpZmljYXRpb25Cb3JkZXJDbGFzcy5TdWNjZXNzLFxuICAgICAgdHlwZTogQ29tbWFuZE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgIH07XG5cbiAgICB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLnNob3coY29uZmlnLCBDb21tYW5kTm90aWZpY2F0aW9uQ29tcG9uZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bykge1xuICAgIGNvbnN0IGRwYyA9IG5vdGlmaWNhdGlvbi5keW5hbWljUHJpY2luZ0NvbmRpdGlvbjtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5keW5hbWljX3ByaWNpbmdfcmV2ZXJ0ZWRfdG9fZGVmYXVsdF9yYXRlKTtcbiAgICBjb25zdCBzdWJUaXRsZSA9IGAke2RwYy5wYXJraW5nTG90TmFtZX0ke2RwYy56b25lPy5uYW1lID8gJyB8ICcgKyBkcGMuem9uZT8ubmFtZSA6ICcnfWA7XG4gICAgY29uc3QgY29uZmlnOiBDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnID0ge1xuICAgICAgbWVzc2FnZXM6IFt7XG4gICAgICAgIHZhbHVlOiB0aXRsZSxcbiAgICAgICAgY2xhc3M6IE5vdGlmaWNhdGlvbkNsYXNzLnRpdGxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHN1YlRpdGxlLFxuICAgICAgICBjbGFzczogTm90aWZpY2F0aW9uQ2xhc3Muc3ViVGl0bGUsXG4gICAgICB9XSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5mYWNpbGl0eV9yZW1vdGVfY29tbWFuZF9zZXRfYWN0aXZlX3JhdGUpLFxuICAgICAgaFBvc2l0aW9uOiBOb3RpZmljYXRpb25IUG9zaXRpb25zLlJpZ2h0LFxuICAgICAgdlBvc2l0aW9uOiBOb3RpZmljYXRpb25WUG9zaXRpb25zLkJvdHRvbSxcbiAgICAgIGR1cmF0aW9uOiA3ICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMsXG4gICAgICBjbGFzczogQ29tbWFuZE5vdGlmaWNhdGlvbkJvcmRlckNsYXNzLlN1Y2Nlc3MsXG4gICAgICB0eXBlOiBDb21tYW5kTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfTtcblxuICAgIHRoaXMuY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvdyhjb25maWcsIENvbW1hbmROb3RpZmljYXRpb25Db21wb25lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FsZXJ0RW5hYmxlZEZvclVzZXIoYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBbGVydEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyQWxlcnRzUHJlZmVyZW5jZXM6IEFsZXJ0UHJlZmVyZW5jZXNTZXR0aW5nc0R0byA9IHVzZXJTZXR0aW5ncy5nZXQoU2V0dGluZ3NDYXRlZ29yeS5BbGVydHNQcmVmZXJlbmNlcyk7XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyB1c2VyQWxlcnRzUHJlZmVyZW5jZXMgd2UgZG9uJ3QgZmlsdGVyIGF0IGFsbFxuICAgIGlmICghIXVzZXJBbGVydHNQcmVmZXJlbmNlcykge1xuICAgICAgLy8gSWYgdGhlIHVzZXIgZW5hYmxlZCB0aGUgbm90aWZpY2F0aW9uc1xuICAgICAgLy8gRWxzZSB0aGUgdXNlciBkaXNhYmxlZCBhbGwgdGhlIG5vdGlmaWNhdGlvbnNcbiAgICAgIGlmICh1c2VyQWxlcnRzUHJlZmVyZW5jZXMuaXNFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgICAgICBjb25zdCBpc0FsZXJ0RmlsdGVyVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBWRVJTSU9OXzlfMl8wKTtcblxuICAgICAgICAvLyBJZiB0aGUgdmVyc2lvbiBpcyA5LjEuMCBvciBiZWxvdywgYWxsIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWRcbiAgICAgICAgLy8gSWYgdGhlIHZlcnNpb24gaXMgOS4yLjAgYW5kIGFib3ZlLCB3ZSBmaWx0ZXIgYnkgdGhlIHByZWZlcmVuY2VzXG4gICAgICAgIGlzQWxlcnRFbmFibGVkID0gIWlzQWxlcnRGaWx0ZXJWZXJzaW9uU3VwcG9ydGVkIHx8IHRoaXMuaXNBbGVydEVuYWJsZWRJblByZWZlcmVuY2VzKGFsZXJ0LCBndWlkLCB1c2VyQWxlcnRzUHJlZmVyZW5jZXMucHJlZmVyZW5jZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNBbGVydEVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzQWxlcnRFbmFibGVkSW5QcmVmZXJlbmNlcyhhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZywgdXNlckFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwOiBBbGVydHNQcmVmZXJlbmNlc01hcCkge1xuICAgIGxldCBpc0FsZXJ0RW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGFueSBmYWNpbGl0eSBzZWxlY3RlZCwgd2UgY29udGludWUgdG8gY2hlY2tcbiAgICAvLyBFbHNlIHdlIGFsbG93IGFsbCB0byBwYXNzIGFzIHRoZSB1c2VyIGRpZG4ndCBzZXQgcHJlZmVyZW5jZXMgeWV0XG4gICAgaWYgKE9iamVjdC5rZXlzKHVzZXJBbGVydFR5cGVQcmVmZXJlbmNlc01hcCkubGVuZ3RoKSB7XG4gICAgICBpc0FsZXJ0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlSWQgb2YgdGhlIHRlbmFudCAtIEluIGNhc2UgdGhlIHVzZXIgc2VsZWN0ZWQgXCJBbGwgVGVuYW50IFBhcmtpbmcgTG90c1wiXG4gICAgICBjb25zdCB0ZW5hbnRUcmVlSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICAvLyBHZXRzIHRoZSB0cmVlIHBhcmsgSWQgb2YgdGhlIGFsZXJ0XG4gICAgICBjb25zdCBhbGVydFRyZWVQYXJrSWQgPSB0aGlzLmdldENsb3VkUGFya0lkKGFsZXJ0LCBndWlkKTtcblxuICAgICAgLy8gV2UgR2V0IHRoZSBzZXR0aW5nIG9mIHRoZSBQYXJrLCBQYXJlbnRQYXJrIG9yIFBhcmtzVHJlZVJvb3RcbiAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXNNYXA6IEZhY2lsaXR5UHJlZmVyZW5jZXNNYXAgPSB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbYWxlcnRUcmVlUGFya0lkXSB8fCB1c2VyQWxlcnRUeXBlUHJlZmVyZW5jZXNNYXBbdGVuYW50VHJlZUlkXTtcblxuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGZhY2lsaXR5IHdhcyBzZWxlY3RlZFxuICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXNNYXApIHtcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlUHJlZmVyZW5jZXNNYXA6IEFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwID0gZmFjaWxpdHlQcmVmZXJlbmNlc01hcFthbGVydC5ldmVudERlc2NyaXB0aW9uXTtcblxuICAgICAgICAvLyBXZSBjaGVjayBpZiB0aGUgYWxlcnQgdHlwZSB3YXMgc2VsZWN0ZWRcbiAgICAgICAgaWYgKGFsZXJ0VHlwZVByZWZlcmVuY2VzTWFwKSB7XG4gICAgICAgICAgY29uc3QgYWxlcnREZXZpY2VUeXBlOiBBbGVydHNEZXZpY2VUeXBlID0gdGhpcy5nZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0KTtcblxuICAgICAgICAgIC8vIFdlIGNoZWNrIHRoZSBpZiB0aGUgZGV2aWNlIHR5cGUgd2FzIHNlbGVjdGVkXG4gICAgICAgICAgaXNBbGVydEVuYWJsZWQgPSBhbGVydFR5cGVQcmVmZXJlbmNlc01hcFthbGVydERldmljZVR5cGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzQWxlcnRFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGVydHNEZXZpY2VUeXBlKGFsZXJ0OiBBbGVydER0byk6IEFsZXJ0c0RldmljZVR5cGUge1xuICAgIGxldCBhbGVydERldmljZVR5cGU6IEFsZXJ0c0RldmljZVR5cGU7XG4gICAgY29uc3QgYWxlcnRzRGV2aWNlVHlwZTogQWxlcnRzRGV2aWNlVHlwZVtdID0gRGV2aWNlVHlwZXNBbGVydHNNYXBwaW5nLmdldChhbGVydC5kZXZpY2VUeXBlKTtcblxuICAgIHN3aXRjaCAoYWxlcnQuZGV2aWNlVHlwZSkge1xuICAgICAgY2FzZSBEZXZpY2VUeXBlLkNhc2g6XG4gICAgICAgIGFsZXJ0RGV2aWNlVHlwZSA9IGFsZXJ0LnJlYWRlcklEID09PSAwID8gQWxlcnRzRGV2aWNlVHlwZS5NYXN0ZXIgOiBBbGVydHNEZXZpY2VUeXBlLkNhc2hSZWdpc3RlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGVydERldmljZVR5cGUgPSBhbGVydHNEZXZpY2VUeXBlPy5bMF07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBhbGVydERldmljZVR5cGU7XG4gIH1cblxuICBwcml2YXRlIG9uRHluYW1pY1ByaWNpbmdDb25kaXRpb25DaGFuZ2UoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgbm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIHRoaXMub25IYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKGN0eCwgeyBub3RpZmljYXRpb25EdG8sIGd1aWQgfSk7XG5cbiAgICB0aGlzLmhhbmRsZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uKGN0eCwgbm90aWZpY2F0aW9uRHRvLCBndWlkKTtcblxuICAgIGlmIChub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24uaXNUcmlnZ2VyZWQpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0FuZERpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uRHRvLCBndWlkLCBjdHgpO1xuICAgIH0gZWxzZSBpZiAobm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uLmlzQWN0aXZhdGVkKSB7XG4gICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uIGluZGljYXRpbmcgdGhlIHJhdGUgaGFzIGZhbGxlbiBiYWNrIHRvIHRoZSBkZWZhdWx0IHJhdGVcbiAgICAgIHRoaXMuc2hvd1JhdGVGYWxsZW5CYWNrVG9EZWZhdWx0UmF0ZVRvYXN0TWVzc2FnZShub3RpZmljYXRpb25EdG8pLnRoZW4oKTtcbiAgICB9IGVsc2UgaWYgKG5vdGlmaWNhdGlvbkR0by5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi50cmlnZ2VyQWN0aW9uID09PSBEeW5hbWljUHJpY2luZ1RyaWdnZXJBY3Rpb24uQXV0b21hdGljU3dpdGNoUmF0ZSkge1xuICAgICAgLy8gaGFuZGxlIG5vdGlmaWNhdGlvbiBpbmRpY2F0aW5nIHRoZSByYXRlIGhhcyBhdXRvbWF0aWMgc3dpdGNoXG4gICAgICB0aGlzLnNob3dSYXRlQXV0b21hdGljU3dpdGNoVG9hc3RNZXNzYWdlKG5vdGlmaWNhdGlvbkR0bykudGhlbigpO1xuICAgICAgdGhpcy5jbG9zZVRyaWdnZXJlZER5bmFtaWNQcmljaW5nQ29uZGl0aW9ucyhjdHgsIG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZFBhcmtJZChhbGVydDogQWxlcnREdG8sIGd1aWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgYWxlcnRQYXJrSWQgPSBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA+IDAgPyBhbGVydC5tdWx0aVBhcmtQYXJlbnRJZCA6IGFsZXJ0LnBhcmtJZDtcbiAgICBjb25zdCBsb3RzTWFwID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSlbZ3VpZF07XG4gICAgcmV0dXJuIGxvdHNNYXBbYWxlcnRQYXJrSWRdPy5jbG91ZElkO1xuICB9XG5cbiAgcHJpdmF0ZSBwa01hdGNoZXMgPSAobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIG5vdGlmaWNhdGlvblBLOiBzdHJpbmcpID0+IHRoaXMubm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvLCBub3RpZmljYXRpb25EdG8uZ3VpZCkgPT09IG5vdGlmaWNhdGlvblBLO1xuICBwcml2YXRlIHN0YXRlTWF0Y2hlcyA9IChhbGVydER0bzogQWxlcnREdG8sIGV2ZW50U3RhdGU6IGJvb2xlYW4pID0+IGFsZXJ0RHRvLmV2ZW50U3RhdGUgPT09IGV2ZW50U3RhdGU7XG4gIHByaXZhdGUgYWxlcnRQSyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBgJHtndWlkfV8ke2FsZXJ0RHRvLnBhcmtJZH1fJHthbGVydER0by5yZWFkZXJJRH1fJHthbGVydER0by5kZXZpY2VJRH1fJHthbGVydER0by5ldmVudERlc2NyaXB0aW9ufWA7XG4gIHByaXZhdGUgbm90aWZpY2F0aW9uUEsobm90aWZpY2F0aW9uRHRvOiBOb3RpZmljYXRpb25EdG8sIGd1aWQ6IHN0cmluZykge1xuICAgIGxldCBrZXk6IHN0cmluZyA9ICcnO1xuICAgIHN3aXRjaCAobm90aWZpY2F0aW9uRHRvLnR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uVHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgY29uc3QgeyBpZCwgem9uZSB9ID0gbm90aWZpY2F0aW9uRHRvLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgICBrZXkgPSB6b25lID8gYCR7Z3VpZH1fJHtpZH1fJHt6b25lLmlkfWAgOiBgJHtndWlkfV8ke2lkfWA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmxvZyhcInVuc3VwcG9ydGVkIG5vdGlmaWNhdGlvbiB0eXBlXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPik6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gY3R4LmdldFN0YXRlKCk7XG4gICAgY29uc3QgYWxlcnRzID0gc3RhdGUuYWxlcnRzO1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zO1xuXG4gICAgY29uc3QgYmFkZ2VWYWx1ZSA9IGFsZXJ0cy5sZW5ndGggKyBub3RpZmljYXRpb25zLmxlbmd0aDtcbiAgICBjb25zdCBhZ2dyZWdhdGVkTm90aWZpY2F0aW9uU2V2ZXJpdHkgPSB0aGlzLmFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZWROb3RpZmljYXRpb25UeXBlKGFsZXJ0cywgbm90aWZpY2F0aW9ucyk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBiYWRnZVZhbHVlLFxuICAgICAgYWdncmVnYXRlZE5vdGlmaWNhdGlvblNldmVyaXR5LFxuICAgICAgZGlzcGxheUJhZGdlOiBiYWRnZVZhbHVlID4gMFxuICAgIH0pO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRoYXQgcHJvY2Vzc2VzIGFuZCBkaXNwbGF5cyB0aGUgYWxlcnQgYmFzZWQgb24gY29uZGl0aW9uc1xuICBwcml2YXRlIHByb2Nlc3NBbmREaXNwbGF5QWxlcnQoY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPiwgYWxlcnQ6IEFsZXJ0RHRvLCBndWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgaXNDY01vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSkgPT09IEFwcE1vZHVsZS5DYztcblxuICAgIGlmICghaXNNb2JpbGVBcHBNb2RlICYmIGlzQ2NNb2R1bGUpIHtcbiAgICAgIHN3aXRjaCAoYWxlcnQuZXZlbnREZXNjcmlwdGlvbikge1xuICAgICAgICBjYXNlIFBlcmlwaGVyYWxFcXVpcG1lbnRFcnJvci5MT1NUX1RJQ0tFVDpcbiAgICAgICAgY2FzZSBQZXJpcGhlcmFsRXF1aXBtZW50RXJyb3IuTFJQX05PVF9NQVRDSDpcbiAgICAgICAgICB0aGlzLm9wZW5Dcml0aWNhbEFsZXJ0RGlhbG9nKGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLmRpc3BsYXlBbGVydChjdHgsIGFsZXJ0LCBndWlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNZXRob2QgdGhhdCBwcm9jZXNzZXMgYW5kIGRpc3BsYXlzIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gY29uZGl0aW9uc1xuICBwcml2YXRlIHByb2Nlc3NBbmREaXNwbGF5Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcsIGN0eDogU3RhdGVDb250ZXh0PEFsZXJ0c0FuZE5vdGlmaWNhdGlvbnNNb2RlbD4pOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBoYXMgcGVybWlzc2lvblxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtub3RpZmljYXRpb25EdG8uZHluYW1pY1ByaWNpbmdDb25kaXRpb24ucGFya2luZ0xvdElkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMoUGVybWlzc2lvblR5cGUuU2V0QWN0aXZlUmF0ZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgYXBwIGlzIGluIG1vYmlsZSBtb2RlIG9yIGlmIGl0J3MgaW4gdGhlIGNvcnJlY3QgbW9kdWxlXG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IGlzQ2NNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2M7XG5cbiAgICAvLyBQcm9jZWVkIGlmIHRoZSBjb25kaXRpb25zIGFyZSBtZXRcbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSAmJiBpc0NjTW9kdWxlICYmIGhhc1Blcm1pc3Npb24pIHtcbiAgICAgIHRoaXMub3BlbkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uTm90aWZpY2F0aW9uRGlhbG9nKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG5cbiAgICAgIC8vIFB1c2ggdGhlIG5ldyBub3RpZmljYXRpb24gdG8gdGhlIGFycmF5IGFuZCBzYXZlIGluIHN0YXRlXG4gICAgICBjb25zdCBub3RpZmljYXRpb25zID0gY3R4LmdldFN0YXRlKCkubm90aWZpY2F0aW9ucztcbiAgICAgIG5vdGlmaWNhdGlvbnMudW5zaGlmdChub3RpZmljYXRpb25EdG8pO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlY2FsY3VsYXRlIGJhZGdlIGFuZCBzZXZlcml0eVxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZUJhZGdlQW5kU2V2ZXJpdHkoY3R4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhhbmRsZWRVc2VyRm9yRHluYW1pY1ByaWNpbmdOb3RpZmljYXRpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8QWxlcnRzQW5kTm90aWZpY2F0aW9uc01vZGVsPixcbiAgICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25EdG9bXSxcbiAgICBub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0byxcbiAgICBub3RpZmljYXRpb25QSzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICBjb25zdCBleGlzdE5vdGlmaWNhdGlvbkluZGV4ID0gbm90aWZpY2F0aW9ucy5maW5kSW5kZXgobm90aWZpY2F0aW9uID0+IHRoaXMucGtNYXRjaGVzKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uUEspKTtcblxuICAgICAgaWYgKGV4aXN0Tm90aWZpY2F0aW9uSW5kZXggIT09IC0xICYmIG5vdGlmaWNhdGlvbnNbZXhpc3ROb3RpZmljYXRpb25JbmRleF0uZHluYW1pY1ByaWNpbmdDb25kaXRpb24pIHtcbiAgICAgICAgbm90aWZpY2F0aW9uc1tleGlzdE5vdGlmaWNhdGlvbkluZGV4XS5keW5hbWljUHJpY2luZ0NvbmRpdGlvbi5oYW5kbGluZ0J5VXNlciA9XG4gICAgICAgICAgbm90aWZpY2F0aW9uRHRvPy5keW5hbWljUHJpY2luZ0NvbmRpdGlvbj8uaGFuZGxpbmdCeVVzZXI7XG5cbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoeyBub3RpZmljYXRpb25zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNOb3RpZmljYXRpb25FbmFibGVkRm9yVXNlcihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbkR0bywgZmFjaWxpdHlJZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzTm90aWZpY2F0aW9uRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3QgdXNlclNldHRpbmdzID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUubWFwcGVkVXNlclNldHRpbmdzKTtcbiAgICBjb25zdCB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXM6IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzU2V0dGluZ3NEdG8gPSB1c2VyU2V0dGluZ3MuZ2V0KFNldHRpbmdzQ2F0ZWdvcnkuTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMpO1xuXG4gICAgaWYgKHVzZXJOb3RpZmljYXRpb25QcmVmZXJlbmNlcz8uaXNFbmFibGVkKSB7XG4gICAgICAvLyBHZXRzIHRoZSBncm91cCBmYWNpbGl0eSBJZCBvZiB0aGUgdGVuYW50IC0gSW4gY2FzZSB0aGUgdXNlciBzZWxlY3RlZCBcIkFsbCBUZW5hbnQgUGFya2luZyBMb3RzXCJcbiAgICAgIGNvbnN0IHRlbmFudEZhY2lsaXR5SWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKT8udHJlZUlkO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXModXNlck5vdGlmaWNhdGlvblByZWZlcmVuY2VzLnByZWZlcmVuY2VzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gSGFuZGxlIG5ldyB1c2VyczogZW1wdHkgcHJlZmVyZW5jZXMgbWVhbnMgZGVmYXVsdCBhY2Nlc3MgdG8gYWxsIG5vdGlmaWNhdGlvbnNcbiAgICAgICAgLy8gVGhpcyBhbGxvd3MgbmV3IHVzZXJzIHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyB1bnRpbCB0aGV5IGV4cGxpY2l0bHkgY29uZmlndXJlIHRoZWlyIHByZWZlcmVuY2VzXG4gICAgICAgIGlzTm90aWZpY2F0aW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdXNlcnMgd2l0aCBjb25maWd1cmVkIHByZWZlcmVuY2VzLCBjaGVjayBpZiB0aGUgc3BlY2lmaWMgZmFjaWxpdHkgYW5kIG5vdGlmaWNhdGlvbiB0eXBlIGFyZSBlbmFibGVkXG4gICAgICAgIC8vIFVzZSB0ZW5hbnQgZmFjaWxpdHkgcHJlZmVyZW5jZXMgZmlyc3QsIGZhbGxiYWNrIHRvIHNwZWNpZmljIGZhY2lsaXR5IHByZWZlcmVuY2VzXG4gICAgICAgIGNvbnN0IGZhY2lsaXR5UHJlZmVyZW5jZXMgPSB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXNbdGVuYW50RmFjaWxpdHlJZF0gPz9cbiAgICAgICAgICB1c2VyTm90aWZpY2F0aW9uUHJlZmVyZW5jZXMucHJlZmVyZW5jZXNbZmFjaWxpdHlJZF07XG5cbiAgICAgICAgaWYgKGZhY2lsaXR5UHJlZmVyZW5jZXM/Lltub3RpZmljYXRpb24udHlwZV0pIHtcbiAgICAgICAgICBpc05vdGlmaWNhdGlvbkVuYWJsZWQgPSBmYWNpbGl0eVByZWZlcmVuY2VzW25vdGlmaWNhdGlvbi50eXBlXS5lbmFibGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNOb3RpZmljYXRpb25FbmFibGVkO1xuICB9XG59XG4iXX0=
@@ -10,12 +10,14 @@ import * as i1 from "@angular/router";
10
10
  import * as i2 from "@ngxs/store";
11
11
  import * as i3 from "../../services/app-config.service";
12
12
  import * as i4 from "@angular/common";
13
+ import * as i5 from "../../services";
13
14
  export class AuthRouteGuard {
14
- constructor(router, store, appConfig, location) {
15
+ constructor(router, store, appConfig, location, sessionStorageService) {
15
16
  this.router = router;
16
17
  this.store = store;
17
18
  this.appConfig = appConfig;
18
19
  this.location = location;
20
+ this.sessionStorageService = sessionStorageService;
19
21
  }
20
22
  canActivate(route, state) {
21
23
  const tenant = route.params.tenant;
@@ -36,6 +38,7 @@ export class AuthRouteGuard {
36
38
  this.router.navigate([url]);
37
39
  return false;
38
40
  }
41
+ this.sessionStorageService.updateLoggedTenant();
39
42
  const modules = user.permissionInfo.modules?.map(m => m.module);
40
43
  if (modules && modules.length > 0) {
41
44
  const appRootRoute = tenant ? `/${tenant}` : '/';
@@ -64,10 +67,10 @@ export class AuthRouteGuard {
64
67
  canActivateChild(route, state) {
65
68
  return this.canActivate(route, state);
66
69
  }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard, deps: [{ token: i1.Router }, { token: i2.Store }, { token: i3.AppConfigService }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard, deps: [{ token: i1.Router }, { token: i2.Store }, { token: i3.AppConfigService }, { token: i4.Location }, { token: i5.SessionStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
68
71
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard }); }
69
72
  }
70
73
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthRouteGuard, decorators: [{
71
74
  type: Injectable
72
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Store }, { type: i3.AppConfigService }, { type: i4.Location }]; } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yb3V0ZS1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL2F1dGgtcm91dGUtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFdEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFHL0MsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFDVSxNQUFjLEVBQ2QsS0FBWSxFQUNaLFNBQTJCLEVBQzNCLFFBQWtCO1FBSGxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUU1QixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQTZCLEVBQUUsS0FBMEI7UUFDbkUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN6RSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFD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QzNELE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDN0osT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTZCLEVBQUUsS0FBMEI7UUFDeEUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOytHQTlEVSxjQUFjO21IQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBSRURJUkVDVF9VUkwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwU2VjdGlvblJvdXRlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXNlY3Rpb24uZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IG5hdmlnYXRlVG9Gb3JiaWRkZW5BY2Nlc3NQYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcm91dGUudXRpbCc7XG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi9tb2RlbC90ZW5hbnQtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuL21vZGVsL3VzZXItaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi9zZXNzaW9uLnN0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhSb3V0ZUd1YXJkIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICApIHtcbiAgfVxuXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRlbmFudCA9IHJvdXRlLnBhcmFtcy50ZW5hbnQ7XG4gICAgY29uc3QgaXNDbG91ZE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkO1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGlmICgoaXNDbG91ZE1vZGUgfHwgaXNNb2JpbGVBcHBNb2RlKSAmJiAhdGVuYW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyOiBVc2VySW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnVzZXJJbmZvKTtcblxuICAgIGlmICghdXNlciB8fCAhdXNlci51c2VySWQgfHwgKHVzZXIgJiYgdXNlci5lbmFibGVkMkZBICYmICF1c2VyLmF1dGhlbnRpY2F0ZWQyRkEpKSB7XG4gICAgICAvLyB1c2VyIGlzIG5vdCBsb2dnZWQgaW4gcm91dGUgdG8gbG9naW5cbiAgICAgIGNvbnN0IGxvZ2luUm91dGUgPSAnL2FjY291bnQvbG9naW4nO1xuICAgICAgY29uc3QgdXJsID0gaXNNb2JpbGVBcHBNb2RlID8gJycgOiAodGVuYW50ID8gYCR7dGVuYW50fSR7bG9naW5Sb3V0ZX1gIDogbG9naW5Sb3V0ZSk7XG4gICAgICBjb25zdCByZWRpcmVjdEtleSA9ICh0ZW5hbnQgPyB0ZW5hbnQudG9Mb3dlckNhc2UoKSA6ICdkZWZhdWx0JykgKyBSRURJUkVDVF9VUkw7XG4gICAgICBpZiAoc3RhdGUudXJsICE9PSB1cmwpIHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShyZWRpcmVjdEtleSwgc3RhdGUudXJsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVzID0gdXNlci5wZXJtaXNzaW9uSW5mby5tb2R1bGVzPy5tYXAobSA9PiBtLm1vZHVsZSk7XG5cbiAgICBpZiAobW9kdWxlcyAmJiBtb2R1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGFwcFJvb3RSb3V0ZSA9IHRlbmFudCA/IGAvJHt0ZW5hbnR9YCA6ICcvJztcbiAgICAgIGlmIChzdGF0ZS51cmwgPT09IGFwcFJvb3RSb3V0ZSkge1xuICAgICAgICAvLyAgdXNlciBoYXMgbW9kdWxlcyBhbmQgdXNlciB3YXMgcm91dGVkIHRvIHRoZSBhcHAgcm9vdCAoJy8nKVxuICAgICAgICAvLyBSb3V0ZSB1c2VyIHRvIGRlZmF1bHQgbW9kdWxlXG4gICAgICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVSZXJvdXRlID0gdGhpcy5nZXREZWZhdWx0TW9kdWxlUm91dGUodXNlciwgYXBwUm9vdFJvdXRlKTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoZGVmYXVsdE1vZHVsZVJlcm91dGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNCYWNrb2ZmaWNlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuQmFja29mZmljZTtcbiAgICAgIGNvbnN0IHRlbmFudEluZm86IFRlbmFudEluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKTtcbiAgICAgIG5hdmlnYXRlVG9Gb3JiaWRkZW5BY2Nlc3NQYWdlKHRoaXMucm91dGVyLCB0aGlzLmxvY2F0aW9uLCBzdGF0ZSwgaXNCYWNrb2ZmaWNlQXBwTW9kZSA/IG51bGwgOiB0ZW5hbnRJbmZvKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdE1vZHVsZVJvdXRlKHVzZXI6IFVzZXJJbmZvLCBhcHBSb290Um91dGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZhdWx0QXBwTW9kdWxlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5FZGdlID9cbiAgICAgIEFwcE1vZHVsZS5NYW5hZ2VtZW50IDogdXNlci5wZXJtaXNzaW9uSW5mby5kZWZhdWx0TW9kdWxlO1xuICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVSZXJvdXRlID0gYXBwUm9vdFJvdXRlID09PSAnLycgPyBgLyR7QXBwU2VjdGlvblJvdXRlLmdldChkZWZhdWx0QXBwTW9kdWxlKX1gIDogYCR7YXBwUm9vdFJvdXRlfS8ke0FwcFNlY3Rpb25Sb3V0ZS5nZXQoZGVmYXVsdEFwcE1vZHVsZSl9YDtcbiAgICByZXR1cm4gZGVmYXVsdE1vZHVsZVJlcm91dGUuc3BsaXQoJy8nKTtcbiAgfVxuXG4gIGNhbkFjdGl2YXRlQ2hpbGQocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuQWN0aXZhdGUocm91dGUsIHN0YXRlKTtcbiAgfVxufVxuIl19
75
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Store }, { type: i3.AppConfigService }, { type: i4.Location }, { type: i5.SessionStorageService }]; } });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1yb3V0ZS1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL2F1dGgtcm91dGUtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHdEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBRy9DLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLE1BQWMsRUFDeEIsS0FBWSxFQUNaLFNBQTJCLEVBQzNCLFFBQWtCLEVBQ2xCLHFCQUE0QztRQUpsQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7SUFDdEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ25FLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDekUs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LE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUMzRCxNQUFNLG9CQUFvQixHQUFHLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQzdKLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUE2QixFQUFFLEtBQTBCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0FoRVUsY0FBYzttSEFBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgUkVESVJFQ1RfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFNlY3Rpb25Sb3V0ZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC1zZWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBuYXZpZ2F0ZVRvRm9yYmlkZGVuQWNjZXNzUGFnZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JvdXRlLnV0aWwnO1xuaW1wb3J0IHsgVGVuYW50SW5mbyB9IGZyb20gJy4vbW9kZWwvdGVuYW50LWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi9tb2RlbC91c2VyLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZSB9IGZyb20gJy4vc2Vzc2lvbi5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoUm91dGVHdWFyZCB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7XG4gIH1cblxuICBjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZW5hbnQgPSByb3V0ZS5wYXJhbXMudGVuYW50O1xuICAgIGNvbnN0IGlzQ2xvdWRNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZDtcbiAgICBjb25zdCBpc01vYmlsZUFwcE1vZGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZTtcbiAgICBpZiAoKGlzQ2xvdWRNb2RlIHx8IGlzTW9iaWxlQXBwTW9kZSkgJiYgIXRlbmFudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcjogVXNlckluZm8gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS51c2VySW5mbyk7XG5cbiAgICBpZiAoIXVzZXIgfHwgIXVzZXIudXNlcklkIHx8ICh1c2VyICYmIHVzZXIuZW5hYmxlZDJGQSAmJiAhdXNlci5hdXRoZW50aWNhdGVkMkZBKSkge1xuICAgICAgLy8gdXNlciBpcyBub3QgbG9nZ2VkIGluIHJvdXRlIHRvIGxvZ2luXG4gICAgICBjb25zdCBsb2dpblJvdXRlID0gJy9hY2NvdW50L2xvZ2luJztcbiAgICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZSA/ICcnIDogKHRlbmFudCA/IGAke3RlbmFudH0ke2xvZ2luUm91dGV9YCA6IGxvZ2luUm91dGUpO1xuICAgICAgY29uc3QgcmVkaXJlY3RLZXkgPSAodGVuYW50ID8gdGVuYW50LnRvTG93ZXJDYXNlKCkgOiAnZGVmYXVsdCcpICsgUkVESVJFQ1RfVVJMO1xuICAgICAgaWYgKHN0YXRlLnVybCAhPT0gdXJsKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0ocmVkaXJlY3RLZXksIHN0YXRlLnVybCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcblxuICAgIGNvbnN0IG1vZHVsZXMgPSB1c2VyLnBlcm1pc3Npb25JbmZvLm1vZHVsZXM/Lm1hcChtID0+IG0ubW9kdWxlKTtcblxuICAgIGlmIChtb2R1bGVzICYmIG1vZHVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYXBwUm9vdFJvdXRlID0gdGVuYW50ID8gYC8ke3RlbmFudH1gIDogJy8nO1xuICAgICAgaWYgKHN0YXRlLnVybCA9PT0gYXBwUm9vdFJvdXRlKSB7XG4gICAgICAgIC8vICB1c2VyIGhhcyBtb2R1bGVzIGFuZCB1c2VyIHdhcyByb3V0ZWQgdG8gdGhlIGFwcCByb290ICgnLycpXG4gICAgICAgIC8vIFJvdXRlIHVzZXIgdG8gZGVmYXVsdCBtb2R1bGVcbiAgICAgICAgY29uc3QgZGVmYXVsdE1vZHVsZVJlcm91dGUgPSB0aGlzLmdldERlZmF1bHRNb2R1bGVSb3V0ZSh1c2VyLCBhcHBSb290Um91dGUpO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShkZWZhdWx0TW9kdWxlUmVyb3V0ZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc0JhY2tvZmZpY2VBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5CYWNrb2ZmaWNlO1xuICAgICAgY29uc3QgdGVuYW50SW5mbzogVGVuYW50SW5mbyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8pO1xuICAgICAgbmF2aWdhdGVUb0ZvcmJpZGRlbkFjY2Vzc1BhZ2UodGhpcy5yb3V0ZXIsIHRoaXMubG9jYXRpb24sIHN0YXRlLCBpc0JhY2tvZmZpY2VBcHBNb2RlID8gbnVsbCA6IHRlbmFudEluZm8pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0TW9kdWxlUm91dGUodXNlcjogVXNlckluZm8sIGFwcFJvb3RSb3V0ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRlZmF1bHRBcHBNb2R1bGUgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkVkZ2UgP1xuICAgICAgQXBwTW9kdWxlLk1hbmFnZW1lbnQgOiB1c2VyLnBlcm1pc3Npb25JbmZvLmRlZmF1bHRNb2R1bGU7XG4gICAgY29uc3QgZGVmYXVsdE1vZHVsZVJlcm91dGUgPSBhcHBSb290Um91dGUgPT09ICcvJyA/IGAvJHtBcHBTZWN0aW9uUm91dGUuZ2V0KGRlZmF1bHRBcHBNb2R1bGUpfWAgOiBgJHthcHBSb290Um91dGV9LyR7QXBwU2VjdGlvblJvdXRlLmdldChkZWZhdWx0QXBwTW9kdWxlKX1gO1xuICAgIHJldHVybiBkZWZhdWx0TW9kdWxlUmVyb3V0ZS5zcGxpdCgnLycpO1xuICB9XG5cbiAgY2FuQWN0aXZhdGVDaGlsZChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShyb3V0ZSwgc3RhdGUpO1xuICB9XG59XG4iXX0=
@@ -32,7 +32,8 @@ export * from './password.util';
32
32
  export * from './permission-type-mapper.util';
33
33
  export * from './route.util';
34
34
  export * from './search-params.util';
35
+ export * from './sort.util';
35
36
  export * from './support-version.util';
36
37
  export * from './text.util';
37
38
  export * from './tooltip.util';
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU87QUFDUCxjQUFjLFFBQVEsQ0FBQztBQUV2QixRQUFRO0FBQ1IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkdYU1xuZXhwb3J0ICogZnJvbSAnLi9uZ3hzJztcblxuLy8gVXRpbHNcbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3QtY29udHJvbC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZlLWRldmljZS1zdGF0dXMudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Flcy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWhlbHBlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYXJyYXkudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Jvb2xlYW4udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2N1cnJlbmN5LWhlbHBlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY3VzdG9tLXZhbGlkYXRvci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGV2aWNlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGVtZW50LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXlib2FyZC1ldmVudC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2UudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtbWlncmF0b3IudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xvd2VyLWNhc2UtdXJsLXNlcmlhbGl6ZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2UtYmFyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRhZGF0YS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3Bhcmtlci10YWctaGVscGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJrZXItdHlwZXMtdGV4dC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vcGFzc3dvcmQudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb24tdHlwZS1tYXBwZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtcGFyYW1zLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3RleHQudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3Rvb2x0aXAudXRpbCc7XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU87QUFDUCxjQUFjLFFBQVEsQ0FBQztBQUV2QixRQUFRO0FBQ1IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTkdYU1xuZXhwb3J0ICogZnJvbSAnLi9uZ3hzJztcblxuLy8gVXRpbHNcbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3QtY29udHJvbC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aXZlLWRldmljZS1zdGF0dXMudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Flcy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWhlbHBlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vYXJyYXkudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2Jvb2xlYW4udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2N1cnJlbmN5LWhlbHBlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY3VzdG9tLXZhbGlkYXRvci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGV2aWNlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGVtZW50LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9qc29uLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXlib2FyZC1ldmVudC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGFuZ3VhZ2UudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtbWlncmF0b3IudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xvd2VyLWNhc2UtdXJsLXNlcmlhbGl6ZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2UtYmFyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRhZGF0YS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kdWxlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3Bhcmtlci10YWctaGVscGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJrZXItdHlwZXMtdGV4dC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vcGFzc3dvcmQudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb24tdHlwZS1tYXBwZXIudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gtcGFyYW1zLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3J0LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdXBwb3J0LXZlcnNpb24udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3RleHQudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3Rvb2x0aXAudXRpbCc7XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { ENGLISH_LANGUAGE } from '../constants/global-constants';
2
+ export function compareValues(valueA, valueB, isAsc) {
3
+ // Convert display nulls to actual nulls
4
+ valueA = valueA === '-' ? null : valueA;
5
+ valueB = valueB === '-' ? null : valueB;
6
+ // Handle null/undefined values first
7
+ if (valueA == null && valueB == null)
8
+ return 0;
9
+ if (valueA == null)
10
+ return isAsc ? 1 : -1; // null values go to end
11
+ if (valueB == null)
12
+ return isAsc ? -1 : 1;
13
+ const keyType = typeof valueA;
14
+ const multiplier = isAsc ? 1 : -1;
15
+ switch (keyType) {
16
+ case 'string':
17
+ return valueA.localeCompare(valueB, ENGLISH_LANGUAGE, { numeric: true }) * multiplier;
18
+ case 'number':
19
+ default:
20
+ return (valueA - valueB) * multiplier;
21
+ }
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9zb3J0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFXLEVBQUUsTUFBVyxFQUFFLEtBQWM7SUFDcEUsd0NBQXdDO0lBQ3hDLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxNQUFNLEdBQUcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFeEMscUNBQXFDO0lBQ3JDLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSTtRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksTUFBTSxJQUFJLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLHdCQUF3QjtJQUNwRSxJQUFJLE1BQU0sSUFBSSxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFMUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxNQUFNLENBQUM7SUFDOUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWxDLFFBQVEsT0FBTyxFQUFFO1FBQ2YsS0FBSyxRQUFRO1lBQ1gsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN4RixLQUFLLFFBQVEsQ0FBQztRQUNkO1lBQ0UsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUM7S0FDekM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU5HTElTSF9MQU5HVUFHRSB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVWYWx1ZXModmFsdWVBOiBhbnksIHZhbHVlQjogYW55LCBpc0FzYzogYm9vbGVhbik6IG51bWJlciB7XG4gIC8vIENvbnZlcnQgZGlzcGxheSBudWxscyB0byBhY3R1YWwgbnVsbHNcbiAgdmFsdWVBID0gdmFsdWVBID09PSAnLScgPyBudWxsIDogdmFsdWVBO1xuICB2YWx1ZUIgPSB2YWx1ZUIgPT09ICctJyA/IG51bGwgOiB2YWx1ZUI7XG5cbiAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkIHZhbHVlcyBmaXJzdFxuICBpZiAodmFsdWVBID09IG51bGwgJiYgdmFsdWVCID09IG51bGwpIHJldHVybiAwO1xuICBpZiAodmFsdWVBID09IG51bGwpIHJldHVybiBpc0FzYyA/IDEgOiAtMTsgIC8vIG51bGwgdmFsdWVzIGdvIHRvIGVuZFxuICBpZiAodmFsdWVCID09IG51bGwpIHJldHVybiBpc0FzYyA/IC0xIDogMTtcblxuICBjb25zdCBrZXlUeXBlID0gdHlwZW9mIHZhbHVlQTtcbiAgY29uc3QgbXVsdGlwbGllciA9IGlzQXNjID8gMSA6IC0xO1xuXG4gIHN3aXRjaCAoa2V5VHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdmFsdWVBLmxvY2FsZUNvbXBhcmUodmFsdWVCLCBFTkdMSVNIX0xBTkdVQUdFLCB7IG51bWVyaWM6IHRydWUgfSkgKiBtdWx0aXBsaWVyO1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAodmFsdWVBIC0gdmFsdWVCKSAqIG11bHRpcGxpZXI7XG4gIH1cbn1cbiJdfQ==