parse-server 8.6.83 → 8.6.85

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.
@@ -48,15 +48,21 @@ const IntrospectionControlPlugin = publicIntrospection => ({
48
48
  })
49
49
  });
50
50
 
51
- // graphql-js validation rules (FieldsOnCorrectTypeRule, KnownArgumentNamesRule,
52
- // KnownTypeNamesRule, ...) embed "Did you mean ...?" hints sourced from the live
53
- // schema in their error messages. Those messages are returned to the caller
54
- // before didResolveOperation runs, so they sidestep IntrospectionControlPlugin
55
- // and disclose schema identifiers the introspection guard is meant to hide.
56
- // Strip the hint suffix for callers that are not allowed to introspect.
51
+ // graphql-js embeds "Did you mean ...?" hints sourced from the live schema in
52
+ // its error messages. They are produced in two distinct phases:
53
+ // - validation rules (FieldsOnCorrectTypeRule, KnownArgumentNamesRule,
54
+ // KnownTypeNamesRule, ...), and
55
+ // - variable coercion (unknown enum values, unknown input-object fields),
56
+ // which runs during execution, after validation.
57
+ // All of these are returned to the caller and disclose schema identifiers (Cloud
58
+ // Code function names, class and field names) that the introspection guard is
59
+ // meant to hide. Strip the hint suffix from every returned error — including the
60
+ // copy graphql-js duplicates into extensions.stacktrace in non-production — for
61
+ // callers that are not allowed to introspect.
62
+ const stripSchemaSuggestion = message => typeof message === 'string' ? message.replace(/ ?Did you mean(.+?)\?$/, '') : message;
57
63
  const SchemaSuggestionsControlPlugin = publicIntrospection => ({
58
64
  requestDidStart: async requestContext => ({
59
- validationDidStart: async () => {
65
+ willSendResponse: async () => {
60
66
  if (publicIntrospection) {
61
67
  return;
62
68
  }
@@ -64,11 +70,14 @@ const SchemaSuggestionsControlPlugin = publicIntrospection => ({
64
70
  if (isMasterOrMaintenance) {
65
71
  return;
66
72
  }
67
- return async validationErrors => {
68
- validationErrors?.forEach(error => {
69
- error.message = error.message.replace(/ ?Did you mean(.+?)\?$/, '');
70
- });
71
- };
73
+ const body = requestContext.response?.body;
74
+ const errors = body?.kind === 'single' ? body.singleResult.errors : body?.kind === 'incremental' ? body.initialResult.errors : undefined;
75
+ errors?.forEach(error => {
76
+ error.message = stripSchemaSuggestion(error.message);
77
+ if (Array.isArray(error.extensions?.stacktrace)) {
78
+ error.extensions.stacktrace = error.extensions.stacktrace.map(stripSchemaSuggestion);
79
+ }
80
+ });
72
81
  }
73
82
  })
74
83
  });
@@ -223,4 +232,4 @@ class ParseGraphQLServer {
223
232
  }
224
233
  }
225
234
  exports.ParseGraphQLServer = ParseGraphQLServer;
226
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZXJ2ZXIiLCJfZXhwcmVzcyIsIl9kaXNhYmxlZCIsIl9leHByZXNzMiIsIl9ncmFwaHFsIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX3F1ZXJ5Q29tcGxleGl0eSIsIl9sb2dnZXIiLCJfUGFyc2VHcmFwaFFMU2NoZW1hIiwiX1BhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luIiwicHVibGljSW50cm9zcGVjdGlvbiIsInJlcXVlc3REaWRTdGFydCIsInJlcXVlc3RDb250ZXh0IiwiZGlkUmVzb2x2ZU9wZXJhdGlvbiIsImlzTWFzdGVyT3JNYWludGVuYW5jZSIsImNvbnRleHRWYWx1ZSIsImF1dGgiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJpc0ludHJvc3BlY3Rpb25RdWVyeSIsInJlcXVlc3QiLCJxdWVyeSIsImluY2x1ZGVzIiwiR3JhcGhRTEVycm9yIiwiZXh0ZW5zaW9ucyIsImh0dHAiLCJzdGF0dXMiLCJTY2hlbWFTdWdnZXN0aW9uc0NvbnRyb2xQbHVnaW4iLCJ2YWxpZGF0aW9uRGlkU3RhcnQiLCJ2YWxpZGF0aW9uRXJyb3JzIiwiZm9yRWFjaCIsImVycm9yIiwibWVzc2FnZSIsInJlcGxhY2UiLCJQYXJzZUdyYXBoUUxTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlU2VydmVyIiwiY29uZmlnIiwicmVxdWlyZWRQYXJhbWV0ZXIiLCJncmFwaFFMUGF0aCIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJsb2ciLCJsb2dnZXJDb250cm9sbGVyIiwiZGVmYXVsdExvZ2dlciIsInBhcnNlR3JhcGhRTFNjaGVtYSIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImRhdGFiYXNlQ29udHJvbGxlciIsImdyYXBoUUxDdXN0b21UeXBlRGVmcyIsImFwcElkIiwiX2dldEdyYXBoUUxPcHRpb25zIiwic2NoZW1hIiwibG9hZCIsImNvbnRleHQiLCJyZXEiLCJpbmZvIiwic3RhY2siLCJ0b1N0cmluZyIsIl9nZXRTZXJ2ZXIiLCJzY2hlbWFSZWYiLCJncmFwaFFMU2NoZW1hIiwibmV3U2NoZW1hUmVmIiwiX3NjaGVtYVJlZk11dGV4IiwiY3JlYXRlU2VydmVyIiwiYXBvbGxvIiwiQXBvbGxvU2VydmVyIiwiY3NyZlByZXZlbnRpb24iLCJyZXF1ZXN0SGVhZGVycyIsImludHJvc3BlY3Rpb24iLCJncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbiIsInBsdWdpbnMiLCJBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCIsImNyZWF0ZUNvbXBsZXhpdHlWYWxpZGF0aW9uUGx1Z2luIiwicmVxdWVzdENvbXBsZXhpdHkiLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwib3B0aW9ucyIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsIkVycm9yIiwidXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwiYWxsb3dDcm9zc0RvbWFpbiIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJtYXhGaWxlU2l6ZSIsImV4cHJlc3MiLCJqc29uIiwicmVzIiwibmV4dCIsInNlcnZlciIsImFwcGx5UGxheWdyb3VuZCIsInBsYXlncm91bmRQYXRoIiwiX3JlcSIsInNldEhlYWRlciIsIndyaXRlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hc3RlcktleSIsImVuZCIsInNldEdyYXBoUUxDb25maWciLCJncmFwaFFMQ29uZmlnIiwidXBkYXRlR3JhcGhRTENvbmZpZyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvR3JhcGhRTC9QYXJzZUdyYXBoUUxTZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdyYXBocWxVcGxvYWRFeHByZXNzIGZyb20gJ2dyYXBocWwtdXBsb2FkL2dyYXBocWxVcGxvYWRFeHByZXNzLmpzJztcbmltcG9ydCB7IEFwb2xsb1NlcnZlciB9IGZyb20gJ0BhcG9sbG8vc2VydmVyJztcbmltcG9ydCB7IGV4cHJlc3NNaWRkbGV3YXJlIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvZXhwcmVzczQnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9wbHVnaW4vZGlzYWJsZWQnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBHcmFwaFFMRXJyb3IgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IGFsbG93Q3Jvc3NEb21haW4sIGhhbmRsZVBhcnNlRXJyb3JzLCBoYW5kbGVQYXJzZUhlYWRlcnMsIGhhbmRsZVBhcnNlU2Vzc2lvbiB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgeyBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiB9IGZyb20gJy4vaGVscGVycy9xdWVyeUNvbXBsZXhpdHknO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5cbmNvbnN0IEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG5cblxuICByZXF1ZXN0RGlkU3RhcnQ6IChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcblxuICAgIGRpZFJlc29sdmVPcGVyYXRpb246IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIElmIHB1YmxpYyBpbnRyb3NwZWN0aW9uIGlzIGVuYWJsZWQsIHdlIGFsbG93IGFsbCBpbnRyb3NwZWN0aW9uIHF1ZXJpZXNcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNNYXN0ZXJPck1haW50ZW5hbmNlID0gcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFzdGVyIHx8IHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01haW50ZW5hbmNlXG4gICAgICBpZiAoaXNNYXN0ZXJPck1haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm93IHdlIGNoZWNrIGlmIHRoZSBxdWVyeSBpcyBhbiBpbnRyb3NwZWN0aW9uIHF1ZXJ5XG4gICAgICAvLyB0aGlzIGNoZWNrIHN0cmF0ZWd5IHNob3VsZCB3b3JrIGluIDk5Ljk5JSBjYXNlc1xuICAgICAgLy8gd2UgY2FuIGhhdmUgYW4gaXNzdWUgaWYgYSB1c2VyIG5hbWUgYSBmaWVsZCBvciBjbGFzcyBfX3NjaGVtYVNvbWV0aGluZ1xuICAgICAgLy8gd2Ugd2FudCB0byBhdm9pZCBhIGZ1bGwgQVNUIGNoZWNrXG4gICAgICBjb25zdCBpc0ludHJvc3BlY3Rpb25RdWVyeSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk/LmluY2x1ZGVzKCdfX3NjaGVtYScpXG5cbiAgICAgIGlmIChpc0ludHJvc3BlY3Rpb25RdWVyeSkge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhRTEVycm9yKCdJbnRyb3NwZWN0aW9uIGlzIG5vdCBhbGxvd2VkJywge1xuICAgICAgICAgIGV4dGVuc2lvbnM6IHtcbiAgICAgICAgICAgIGh0dHA6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiA0MDMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICB9KVxuXG59KTtcblxuLy8gZ3JhcGhxbC1qcyB2YWxpZGF0aW9uIHJ1bGVzIChGaWVsZHNPbkNvcnJlY3RUeXBlUnVsZSwgS25vd25Bcmd1bWVudE5hbWVzUnVsZSxcbi8vIEtub3duVHlwZU5hbWVzUnVsZSwgLi4uKSBlbWJlZCBcIkRpZCB5b3UgbWVhbiAuLi4/XCIgaGludHMgc291cmNlZCBmcm9tIHRoZSBsaXZlXG4vLyBzY2hlbWEgaW4gdGhlaXIgZXJyb3IgbWVzc2FnZXMuIFRob3NlIG1lc3NhZ2VzIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyXG4vLyBiZWZvcmUgZGlkUmVzb2x2ZU9wZXJhdGlvbiBydW5zLCBzbyB0aGV5IHNpZGVzdGVwIEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luXG4vLyBhbmQgZGlzY2xvc2Ugc2NoZW1hIGlkZW50aWZpZXJzIHRoZSBpbnRyb3NwZWN0aW9uIGd1YXJkIGlzIG1lYW50IHRvIGhpZGUuXG4vLyBTdHJpcCB0aGUgaGludCBzdWZmaXggZm9yIGNhbGxlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gaW50cm9zcGVjdC5cbmNvbnN0IFNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbiA9IChwdWJsaWNJbnRyb3NwZWN0aW9uKSA9PiAoe1xuICByZXF1ZXN0RGlkU3RhcnQ6IGFzeW5jIChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcbiAgICB2YWxpZGF0aW9uRGlkU3RhcnQ6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTWFzdGVyT3JNYWludGVuYW5jZSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01hc3RlciB8fFxuICAgICAgICByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYWludGVuYW5jZTtcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzeW5jICh2YWxpZGF0aW9uRXJyb3JzKSA9PiB7XG4gICAgICAgIHZhbGlkYXRpb25FcnJvcnM/LmZvckVhY2goZXJyb3IgPT4ge1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlLnJlcGxhY2UoLyA/RGlkIHlvdSBtZWFuKC4rPylcXD8kLywgJycpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSxcbiAgfSksXG59KTtcblxuY2xhc3MgUGFyc2VHcmFwaFFMU2VydmVyIHtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcblxuICBjb25zdHJ1Y3RvcihwYXJzZVNlcnZlciwgY29uZmlnKSB7XG4gICAgdGhpcy5wYXJzZVNlcnZlciA9IHBhcnNlU2VydmVyIHx8IHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgcGFyc2VTZXJ2ZXIgaW5zdGFuY2UhJyk7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5ncmFwaFFMUGF0aCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuZ3JhcGhRTFBhdGghJyk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLnBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG4gICAgdGhpcy5sb2cgPVxuICAgICAgKHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnICYmIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEgPSBuZXcgUGFyc2VHcmFwaFFMU2NoZW1hKHtcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlcixcbiAgICAgIGRhdGFiYXNlQ29udHJvbGxlcjogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuZGF0YWJhc2VDb250cm9sbGVyLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGdyYXBoUUxDdXN0b21UeXBlRGVmczogdGhpcy5jb25maWcuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLFxuICAgICAgYXBwSWQ6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX2dldEdyYXBoUUxPcHRpb25zKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWE6IGF3YWl0IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmxvYWQoKSxcbiAgICAgICAgY29udGV4dDogYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgICBhdXRoOiByZXEuYXV0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihlLnN0YWNrIHx8ICh0eXBlb2YgZS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiBlLnRvU3RyaW5nKCkpIHx8IGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZ2V0U2VydmVyKCkge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmdyYXBoUUxTY2hlbWE7XG4gICAgY29uc3QgbmV3U2NoZW1hUmVmID0gYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpO1xuICAgIGlmIChzY2hlbWFSZWYgPT09IG5ld1NjaGVtYVJlZiAmJiB0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIC8vIEl0IG1lYW5zIGEgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiAgICBpZiAodGhpcy5fc2NoZW1hUmVmTXV0ZXggPT09IG5ld1NjaGVtYVJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHRoZSBzY2hlbWEgcmVmIG11dGV4IHRvIGF2b2lkIHBhcmFsbGVsIF9nZXRTZXJ2ZXIgY2FsbHNcbiAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG5ld1NjaGVtYVJlZjtcbiAgICBjb25zdCBjcmVhdGVTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgY29udGV4dCB9ID0gYXdhaXQgdGhpcy5fZ2V0R3JhcGhRTE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYXBvbGxvID0gbmV3IEFwb2xsb1NlcnZlcih7XG4gICAgICAgICAgY3NyZlByZXZlbnRpb246IHtcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3JvdXRlci9jb25maWd1cmF0aW9uL2NzcmYvXG4gICAgICAgICAgICAvLyBuZWVkZWQgc2luY2Ugd2UgdXNlIGdyYXBocWwgdXBsb2FkXG4gICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogWydYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbixcbiAgICAgICAgICBwbHVnaW5zOiBbQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQoKSwgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4odGhpcy5jb25maWcuZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24pLCBTY2hlbWFTdWdnZXN0aW9uc0NvbnRyb2xQbHVnaW4odGhpcy5jb25maWcuZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24pLCBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbigoKSA9PiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eSldLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGFwb2xsby5zdGFydCgpO1xuICAgICAgICByZXR1cm4gZXhwcmVzc01pZGRsZXdhcmUoYXBvbGxvLCB7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFJlc2V0IGFsbCBtdXRleGVzIGFuZCBmb3J3YXJkIHRoZSBlcnJvclxuICAgICAgICB0aGlzLl9zZXJ2ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERvIG5vdCBhd2FpdCBzbyBwYXJhbGxlbCByZXF1ZXN0IHdpbGwgd2FpdCB0aGUgc2FtZSBwcm9taXNlIHJlZlxuICAgIHRoaXMuX3NlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEFsbG93IGRldmVsb3BlcnMgdG8gY3VzdG9taXplIGVhY2ggcmVxdWVzdCB3aXRoIGludmVyc2lvbiBvZiBjb250cm9sL2RlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqL1xuICBhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcGksIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgICBhcGkudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlHcmFwaFFMKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAudXNlKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgYWxsb3dDcm9zc0RvbWFpbih0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCkpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlSGVhZGVycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VTZXNzaW9uKTtcbiAgICB0aGlzLmFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKGFwcCwgdGhpcy5wYXJzZVNlcnZlci5jb25maWcpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlRXJyb3JzKTtcbiAgICBhcHAudXNlKFxuICAgICAgdGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsXG4gICAgICBncmFwaHFsVXBsb2FkRXhwcmVzcyh7XG4gICAgICAgIG1heEZpbGVTaXplOiB0aGlzLl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyhcbiAgICAgICAgICB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXhVcGxvYWRTaXplIHx8ICcyMG1iJ1xuICAgICAgICApLFxuICAgICAgfSlcbiAgICApO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGV4cHJlc3MuanNvbigpLCBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHRoaXMuX2dldFNlcnZlcigpO1xuICAgICAgcmV0dXJuIHNlcnZlcihyZXEsIHJlcywgbmV4dCk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBseVBsYXlncm91bmQoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC5nZXQpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cblxuICAgIGFwcC5nZXQoXG4gICAgICB0aGlzLmNvbmZpZy5wbGF5Z3JvdW5kUGF0aCB8fFxuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcucGxheWdyb3VuZFBhdGggdG8gYXBwbHlQbGF5Z3JvdW5kIScpLFxuICAgICAgKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgIHJlcy53cml0ZShcbiAgICAgICAgICBgPGRpdiBpZD1cInNhbmRib3hcIiBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowXCI+PC9kaXY+XG4gICAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL2VtYmVkZGFibGUtc2FuZGJveC5jZG4uYXBvbGxvZ3JhcGhxbC5jb20vX2xhdGVzdC9lbWJlZGRhYmxlLXNhbmRib3gudW1kLnByb2R1Y3Rpb24ubWluLmpzXCI+PC9zY3JpcHQ+XG4gICAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAgbmV3IHdpbmRvdy5FbWJlZGRlZFNhbmRib3goe1xuICAgICAgICAgICAgIHRhcmdldDogXCIjc2FuZGJveFwiLFxuICAgICAgICAgICAgIGVuZHBvaW50SXNFZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgaW5pdGlhbEVuZHBvaW50OiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoKX0sXG4gICAgICAgICAgICAgaGFuZGxlUmVxdWVzdDogKGVuZHBvaW50VXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBmZXRjaChlbmRwb2ludFVybCwge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCl9LFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1NYXN0ZXItS2V5JzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXN0ZXJLZXkpfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgfSk7XG4gICAgICAgICAgIC8vIGFkdmFuY2VkIG9wdGlvbnM6IGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3Mvc3R1ZGlvL2V4cGxvcmVyL3NhbmRib3gjZW1iZWRkaW5nLXNhbmRib3hcbiAgICAgICAgICA8L3NjcmlwdD5gXG4gICAgICAgICk7XG4gICAgICAgIHJlcy5lbmQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLHFCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFB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
235
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZXJ2ZXIiLCJfZXhwcmVzcyIsIl9kaXNhYmxlZCIsIl9leHByZXNzMiIsIl9ncmFwaHFsIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX3F1ZXJ5Q29tcGxleGl0eSIsIl9sb2dnZXIiLCJfUGFyc2VHcmFwaFFMU2NoZW1hIiwiX1BhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luIiwicHVibGljSW50cm9zcGVjdGlvbiIsInJlcXVlc3REaWRTdGFydCIsInJlcXVlc3RDb250ZXh0IiwiZGlkUmVzb2x2ZU9wZXJhdGlvbiIsImlzTWFzdGVyT3JNYWludGVuYW5jZSIsImNvbnRleHRWYWx1ZSIsImF1dGgiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJpc0ludHJvc3BlY3Rpb25RdWVyeSIsInJlcXVlc3QiLCJxdWVyeSIsImluY2x1ZGVzIiwiR3JhcGhRTEVycm9yIiwiZXh0ZW5zaW9ucyIsImh0dHAiLCJzdGF0dXMiLCJzdHJpcFNjaGVtYVN1Z2dlc3Rpb24iLCJtZXNzYWdlIiwicmVwbGFjZSIsIlNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbiIsIndpbGxTZW5kUmVzcG9uc2UiLCJib2R5IiwicmVzcG9uc2UiLCJlcnJvcnMiLCJraW5kIiwic2luZ2xlUmVzdWx0IiwiaW5pdGlhbFJlc3VsdCIsInVuZGVmaW5lZCIsImZvckVhY2giLCJlcnJvciIsIkFycmF5IiwiaXNBcnJheSIsInN0YWNrdHJhY2UiLCJtYXAiLCJQYXJzZUdyYXBoUUxTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlU2VydmVyIiwiY29uZmlnIiwicmVxdWlyZWRQYXJhbWV0ZXIiLCJncmFwaFFMUGF0aCIsInBhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJsb2ciLCJsb2dnZXJDb250cm9sbGVyIiwiZGVmYXVsdExvZ2dlciIsInBhcnNlR3JhcGhRTFNjaGVtYSIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImRhdGFiYXNlQ29udHJvbGxlciIsImdyYXBoUUxDdXN0b21UeXBlRGVmcyIsImFwcElkIiwiX2dldEdyYXBoUUxPcHRpb25zIiwic2NoZW1hIiwibG9hZCIsImNvbnRleHQiLCJyZXEiLCJpbmZvIiwic3RhY2siLCJ0b1N0cmluZyIsIl9nZXRTZXJ2ZXIiLCJzY2hlbWFSZWYiLCJncmFwaFFMU2NoZW1hIiwibmV3U2NoZW1hUmVmIiwiX3NjaGVtYVJlZk11dGV4IiwiY3JlYXRlU2VydmVyIiwiYXBvbGxvIiwiQXBvbGxvU2VydmVyIiwiY3NyZlByZXZlbnRpb24iLCJyZXF1ZXN0SGVhZGVycyIsImludHJvc3BlY3Rpb24iLCJncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbiIsInBsdWdpbnMiLCJBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCIsImNyZWF0ZUNvbXBsZXhpdHlWYWxpZGF0aW9uUGx1Z2luIiwicmVxdWVzdENvbXBsZXhpdHkiLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwib3B0aW9ucyIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsIkVycm9yIiwidXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwiYWxsb3dDcm9zc0RvbWFpbiIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJtYXhGaWxlU2l6ZSIsImV4cHJlc3MiLCJqc29uIiwicmVzIiwibmV4dCIsInNlcnZlciIsImFwcGx5UGxheWdyb3VuZCIsInBsYXlncm91bmRQYXRoIiwiX3JlcSIsInNldEhlYWRlciIsIndyaXRlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hc3RlcktleSIsImVuZCIsInNldEdyYXBoUUxDb25maWciLCJncmFwaFFMQ29uZmlnIiwidXBkYXRlR3JhcGhRTENvbmZpZyIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvR3JhcGhRTC9QYXJzZUdyYXBoUUxTZXJ2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdyYXBocWxVcGxvYWRFeHByZXNzIGZyb20gJ2dyYXBocWwtdXBsb2FkL2dyYXBocWxVcGxvYWRFeHByZXNzLmpzJztcbmltcG9ydCB7IEFwb2xsb1NlcnZlciB9IGZyb20gJ0BhcG9sbG8vc2VydmVyJztcbmltcG9ydCB7IGV4cHJlc3NNaWRkbGV3YXJlIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvZXhwcmVzczQnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9wbHVnaW4vZGlzYWJsZWQnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBHcmFwaFFMRXJyb3IgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IGFsbG93Q3Jvc3NEb21haW4sIGhhbmRsZVBhcnNlRXJyb3JzLCBoYW5kbGVQYXJzZUhlYWRlcnMsIGhhbmRsZVBhcnNlU2Vzc2lvbiB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgeyBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiB9IGZyb20gJy4vaGVscGVycy9xdWVyeUNvbXBsZXhpdHknO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5cbmNvbnN0IEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG5cblxuICByZXF1ZXN0RGlkU3RhcnQ6IChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcblxuICAgIGRpZFJlc29sdmVPcGVyYXRpb246IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIElmIHB1YmxpYyBpbnRyb3NwZWN0aW9uIGlzIGVuYWJsZWQsIHdlIGFsbG93IGFsbCBpbnRyb3NwZWN0aW9uIHF1ZXJpZXNcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNNYXN0ZXJPck1haW50ZW5hbmNlID0gcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFzdGVyIHx8IHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01haW50ZW5hbmNlXG4gICAgICBpZiAoaXNNYXN0ZXJPck1haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTm93IHdlIGNoZWNrIGlmIHRoZSBxdWVyeSBpcyBhbiBpbnRyb3NwZWN0aW9uIHF1ZXJ5XG4gICAgICAvLyB0aGlzIGNoZWNrIHN0cmF0ZWd5IHNob3VsZCB3b3JrIGluIDk5Ljk5JSBjYXNlc1xuICAgICAgLy8gd2UgY2FuIGhhdmUgYW4gaXNzdWUgaWYgYSB1c2VyIG5hbWUgYSBmaWVsZCBvciBjbGFzcyBfX3NjaGVtYVNvbWV0aGluZ1xuICAgICAgLy8gd2Ugd2FudCB0byBhdm9pZCBhIGZ1bGwgQVNUIGNoZWNrXG4gICAgICBjb25zdCBpc0ludHJvc3BlY3Rpb25RdWVyeSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk/LmluY2x1ZGVzKCdfX3NjaGVtYScpXG5cbiAgICAgIGlmIChpc0ludHJvc3BlY3Rpb25RdWVyeSkge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhRTEVycm9yKCdJbnRyb3NwZWN0aW9uIGlzIG5vdCBhbGxvd2VkJywge1xuICAgICAgICAgIGV4dGVuc2lvbnM6IHtcbiAgICAgICAgICAgIGh0dHA6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiA0MDMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICB9KVxuXG59KTtcblxuLy8gZ3JhcGhxbC1qcyBlbWJlZHMgXCJEaWQgeW91IG1lYW4gLi4uP1wiIGhpbnRzIHNvdXJjZWQgZnJvbSB0aGUgbGl2ZSBzY2hlbWEgaW5cbi8vIGl0cyBlcnJvciBtZXNzYWdlcy4gVGhleSBhcmUgcHJvZHVjZWQgaW4gdHdvIGRpc3RpbmN0IHBoYXNlczpcbi8vICAgLSB2YWxpZGF0aW9uIHJ1bGVzIChGaWVsZHNPbkNvcnJlY3RUeXBlUnVsZSwgS25vd25Bcmd1bWVudE5hbWVzUnVsZSxcbi8vICAgICBLbm93blR5cGVOYW1lc1J1bGUsIC4uLiksIGFuZFxuLy8gICAtIHZhcmlhYmxlIGNvZXJjaW9uICh1bmtub3duIGVudW0gdmFsdWVzLCB1bmtub3duIGlucHV0LW9iamVjdCBmaWVsZHMpLFxuLy8gICAgIHdoaWNoIHJ1bnMgZHVyaW5nIGV4ZWN1dGlvbiwgYWZ0ZXIgdmFsaWRhdGlvbi5cbi8vIEFsbCBvZiB0aGVzZSBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBhbmQgZGlzY2xvc2Ugc2NoZW1hIGlkZW50aWZpZXJzIChDbG91ZFxuLy8gQ29kZSBmdW5jdGlvbiBuYW1lcywgY2xhc3MgYW5kIGZpZWxkIG5hbWVzKSB0aGF0IHRoZSBpbnRyb3NwZWN0aW9uIGd1YXJkIGlzXG4vLyBtZWFudCB0byBoaWRlLiBTdHJpcCB0aGUgaGludCBzdWZmaXggZnJvbSBldmVyeSByZXR1cm5lZCBlcnJvciDigJQgaW5jbHVkaW5nIHRoZVxuLy8gY29weSBncmFwaHFsLWpzIGR1cGxpY2F0ZXMgaW50byBleHRlbnNpb25zLnN0YWNrdHJhY2UgaW4gbm9uLXByb2R1Y3Rpb24g4oCUIGZvclxuLy8gY2FsbGVycyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBpbnRyb3NwZWN0LlxuY29uc3Qgc3RyaXBTY2hlbWFTdWdnZXN0aW9uID0gbWVzc2FnZSA9PlxuICB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgPyBtZXNzYWdlLnJlcGxhY2UoLyA/RGlkIHlvdSBtZWFuKC4rPylcXD8kLywgJycpIDogbWVzc2FnZTtcblxuY29uc3QgU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG4gIHJlcXVlc3REaWRTdGFydDogYXN5bmMgKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuICAgIHdpbGxTZW5kUmVzcG9uc2U6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTWFzdGVyT3JNYWludGVuYW5jZSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01hc3RlciB8fFxuICAgICAgICByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYWludGVuYW5jZTtcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keSA9IHJlcXVlc3RDb250ZXh0LnJlc3BvbnNlPy5ib2R5O1xuICAgICAgY29uc3QgZXJyb3JzID1cbiAgICAgICAgYm9keT8ua2luZCA9PT0gJ3NpbmdsZSdcbiAgICAgICAgICA/IGJvZHkuc2luZ2xlUmVzdWx0LmVycm9yc1xuICAgICAgICAgIDogYm9keT8ua2luZCA9PT0gJ2luY3JlbWVudGFsJ1xuICAgICAgICAgICAgPyBib2R5LmluaXRpYWxSZXN1bHQuZXJyb3JzXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGVycm9ycz8uZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBzdHJpcFNjaGVtYVN1Z2dlc3Rpb24oZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yLmV4dGVuc2lvbnM/LnN0YWNrdHJhY2UpKSB7XG4gICAgICAgICAgZXJyb3IuZXh0ZW5zaW9ucy5zdGFja3RyYWNlID0gZXJyb3IuZXh0ZW5zaW9ucy5zdGFja3RyYWNlLm1hcChzdHJpcFNjaGVtYVN1Z2dlc3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9KSxcbn0pO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTZXJ2ZXIge1xuICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiBQYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnNlU2VydmVyLCBjb25maWcpIHtcbiAgICB0aGlzLnBhcnNlU2VydmVyID0gcGFyc2VTZXJ2ZXIgfHwgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZVNlcnZlciBpbnN0YW5jZSEnKTtcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLmdyYXBoUUxQYXRoKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5ncmFwaFFMUGF0aCEnKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyID0gdGhpcy5wYXJzZVNlcnZlci5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgICB0aGlzLmxvZyA9XG4gICAgICAodGhpcy5wYXJzZVNlcnZlci5jb25maWcgJiYgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubG9nZ2VyQ29udHJvbGxlcikgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYSA9IG5ldyBQYXJzZUdyYXBoUUxTY2hlbWEoe1xuICAgICAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgICAgZGF0YWJhc2VDb250cm9sbGVyOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5kYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzOiB0aGlzLmNvbmZpZy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMsXG4gICAgICBhcHBJZDogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBfZ2V0R3JhcGhRTE9wdGlvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYTogYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpLFxuICAgICAgICBjb250ZXh0OiBhc3luYyAoeyByZXEgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmZvOiByZXEuaW5mbyxcbiAgICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gSXQgbWVhbnMgYSBwYXJhbGxlbCBfZ2V0U2VydmVyIGNhbGwgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLl9zY2hlbWFSZWZNdXRleCA9PT0gbmV3U2NoZW1hUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICAgIH1cbiAgICAvLyBVcGRhdGUgdGhlIHNjaGVtYSByZWYgbXV0ZXggdG8gYXZvaWQgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsc1xuICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbmV3U2NoZW1hUmVmO1xuICAgIGNvbnN0IGNyZWF0ZVNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBjb250ZXh0IH0gPSBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhcG9sbG8gPSBuZXcgQXBvbGxvU2VydmVyKHtcbiAgICAgICAgICBjc3JmUHJldmVudGlvbjoge1xuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3Mvcm91dGVyL2NvbmZpZ3VyYXRpb24vY3NyZi9cbiAgICAgICAgICAgIC8vIG5lZWRlZCBzaW5jZSB3ZSB1c2UgZ3JhcGhxbCB1cGxvYWRcbiAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiBbJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGludHJvc3BlY3Rpb246IHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgIHBsdWdpbnM6IFtBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCgpLCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbih0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbiksIFNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbih0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbiksIGNyZWF0ZUNvbXBsZXhpdHlWYWxpZGF0aW9uUGx1Z2luKCgpID0+IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLnJlcXVlc3RDb21wbGV4aXR5KV0sXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgYXBvbGxvLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiBleHByZXNzTWlkZGxld2FyZShhcG9sbG8sIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmVzZXQgYWxsIG11dGV4ZXMgYW5kIGZvcndhcmQgdGhlIGVycm9yXG4gICAgICAgIHRoaXMuX3NlcnZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRG8gbm90IGF3YWl0IHNvIHBhcmFsbGVsIHJlcXVlc3Qgd2lsbCB3YWl0IHRoZSBzYW1lIHByb21pc2UgcmVmXG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIF90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgdW5pdE1hcCA9IHtcbiAgICAgIGtiOiAxLFxuICAgICAgbWI6IDIsXG4gICAgICBnYjogMyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlcihtYXhVcGxvYWRTaXplLnNsaWNlKDAsIC0yKSkgKlxuICAgICAgTWF0aC5wb3coMTAyNCwgdW5pdE1hcFttYXhVcGxvYWRTaXplLnNsaWNlKC0yKS50b0xvd2VyQ2FzZSgpXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQWxsb3cgZGV2ZWxvcGVycyB0byBjdXN0b21pemUgZWFjaCByZXF1ZXN0IHdpdGggaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICovXG4gIGFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKGFwaSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RDb250ZXh0TWlkZGxld2FyZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGFwaS51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBhbGxvd0Nyb3NzRG9tYWluKHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIHRoaXMuYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBwLCB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VFcnJvcnMpO1xuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxVcGxvYWRFeHByZXNzKHtcbiAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1heFVwbG9hZFNpemUgfHwgJzIwbWInXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgdGhpcy5fZ2V0U2VydmVyKCk7XG4gICAgICByZXR1cm4gc2VydmVyKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UGxheWdyb3VuZChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLmdldCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5wbGF5Z3JvdW5kUGF0aCB0byBhcHBseVBsYXlncm91bmQhJyksXG4gICAgICAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgIGA8ZGl2IGlkPVwic2FuZGJveFwiIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjBcIj48L2Rpdj5cbiAgICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vZW1iZWRkYWJsZS1zYW5kYm94LmNkbi5hcG9sbG9ncmFwaHFsLmNvbS9fbGF0ZXN0L2VtYmVkZGFibGUtc2FuZGJveC51bWQucHJvZHVjdGlvbi5taW4uanNcIj48L3NjcmlwdD5cbiAgICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICBuZXcgd2luZG93LkVtYmVkZGVkU2FuZGJveCh7XG4gICAgICAgICAgICAgdGFyZ2V0OiBcIiNzYW5kYm94XCIsXG4gICAgICAgICAgICAgZW5kcG9pbnRJc0VkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICBpbml0aWFsRW5kcG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgpfSxcbiAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0OiAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkKX0sXG4gICAgICAgICAgICAgICAgICAgICdYLVBhcnNlLU1hc3Rlci1LZXknOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1hc3RlcktleSl9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICB9KTtcbiAgICAgICAgICAgLy8gYWR2YW5jZWQgb3B0aW9uczogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9zdHVkaW8vZXhwbG9yZXIvc2FuZGJveCNlbWJlZGRpbmctc2FuZGJveFxuICAgICAgICAgIDwvc2NyaXB0PmBcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZyk6IFByb21pc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEscUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxnQkFBQSxH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
@@ -188,33 +188,53 @@ class FilesRouter {
188
188
  // Parse the filename extension token, stripping MIME parameters and whitespace.
189
189
  let extension = Utils.getFileExtension(filename);
190
190
  extension = extension?.split(';')[0]?.replace(/\s+/g, '');
191
-
192
- // Derive the Content-Type subtype as a fallback identifier, e.g.
193
- // "image/svg+xml" -> "svg+xml", "image/svg+xml;charset=utf-8" -> "svg+xml".
194
- let contentTypeExtension;
195
- if (contentType && contentType.includes('/')) {
196
- contentTypeExtension = contentType.split('/')[1]?.split(';')[0]?.replace(/\s+/g, '');
197
- } else if (contentType) {
198
- // Malformed Content-Type without a slash: use the raw value so the
199
- // existing rejection path still fires.
200
- contentTypeExtension = contentType.split(';')[0]?.replace(/\s+/g, '');
201
- }
202
-
203
- // The blocklist must be evaluated against the type the file is actually
204
- // served as. `FilesController.createFile` derives the stored Content-Type
205
- // from the filename extension only when `mime` recognizes it; otherwise it
206
- // preserves the client-supplied Content-Type. So the Content-Type subtype
207
- // must also be validated whenever the filename has no usable extension OR
208
- // an extension that `mime` does not recognize (e.g. "file.svg~"), which
209
- // would otherwise slip past the exact-match blocklist.
210
191
  const isExtensionRecognized = extension && mime.getType(filename);
211
192
  if (extension && !isValidExtension(extension)) {
212
193
  rejectExtension(extension);
213
194
  return;
214
195
  }
215
- if (!isExtensionRecognized && contentTypeExtension && !isValidExtension(contentTypeExtension)) {
216
- rejectExtension(contentTypeExtension);
217
- return;
196
+
197
+ // When the filename extension is not recognized by `mime`,
198
+ // `FilesController.createFile` cannot derive a Content-Type from the
199
+ // filename and preserves the client-supplied Content-Type verbatim, so the
200
+ // type the file is actually served as must be validated. Skip this when
201
+ // extension filtering is disabled (`*`).
202
+ const allowsAllExtensions = fileExtensions.includes('*');
203
+ if (!isExtensionRecognized && contentType && !allowsAllExtensions) {
204
+ const slashIndex = contentType.indexOf('/');
205
+ const type = slashIndex > 0 ? contentType.slice(0, slashIndex).trim() : '';
206
+ const subtype = slashIndex > 0 ? contentType.slice(slashIndex + 1).split(';')[0].trim() : '';
207
+ // A valid media type is `type/subtype` where both are non-empty `token`s
208
+ // (RFC 9110 §5.6.2). Reject anything else.
209
+ const token = /^[!#$%&'*+\-.^_`|~A-Za-z0-9]+$/;
210
+ if (!token.test(type) || !token.test(subtype)) {
211
+ // A Content-Type that does not parse as `type/subtype` with valid,
212
+ // non-empty type AND subtype tokens is malformed: there is no valid MIME
213
+ // type without a subtype (RFC 9110 §8.3.1), and malformed tokens such as
214
+ // `image//svg+xml` or `text/plain,text/html` are equally unparseable.
215
+ // Browsers cannot parse such values and fall back to MIME-sniffing the
216
+ // file body, which can render HTML/script markers as active content on
217
+ // storage adapters that serve the stored Content-Type (e.g. `image`,
218
+ // `image/`). Surface the precise blocklist message when the bare token
219
+ // names a blocked extension (e.g. a no-slash `svg`), otherwise reject the
220
+ // unparseable Content-Type.
221
+ const bareToken = (slashIndex < 0 ? contentType.split(';')[0] : type).replace(/\s+/g, '');
222
+ if (bareToken && !isValidExtension(bareToken)) {
223
+ rejectExtension(bareToken);
224
+ return;
225
+ }
226
+ next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, 'Invalid Content-Type.'));
227
+ return;
228
+ }
229
+ // Validate the well-formed Content-Type subtype against the blocklist, e.g.
230
+ // "image/svg+xml" -> "svg+xml", "image/svg+xml;charset=utf-8" -> "svg+xml".
231
+ // Valid custom/vendor types (e.g. "application/vnd.api+json") parse and are
232
+ // allowed; only blocked subtypes are rejected.
233
+ const contentTypeExtension = subtype.replace(/\s+/g, '');
234
+ if (!isValidExtension(contentTypeExtension)) {
235
+ rejectExtension(contentTypeExtension);
236
+ return;
237
+ }
218
238
  }
219
239
  }
220
240
  const base64 = req.body.toString('base64');
@@ -391,4 +411,4 @@ function isFileStreamable(req, filesController) {
391
411
  const end = Number(range[1]);
392
412
  return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
393
413
  }
394
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ0cmlnZ2VycyIsIlV0aWxzIiwiYXV0aCIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJyZXMiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwicmF3IiwidHlwZSIsImxpbWl0IiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX3Jlc29sdmVBdXRoIiwiY29uZmlnIiwic2Vzc2lvblRva2VuIiwiZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiIsImluc3RhbGxhdGlvbklkIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlcnJvciIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiaXNGaWxlU3RyZWFtYWJsZSIsImFmdGVyRmluZCIsImZvcmNlRG93bmxvYWQiLCJoYW5kbGVGaWxlU3RyZWFtIiwiY2F0Y2giLCJlbmQiLCJkYXRhIiwiZ2V0RmlsZURhdGEiLCJ0b1N0cmluZyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsImxlbmd0aCIsImVyciIsInJlc29sdmVFcnJvciIsIlNDUklQVF9GQUlMRUQiLCJtZXNzYWdlIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsInVzZXIiLCJpc01hc3RlciIsImlzTGlua2VkIiwiQW5vbnltb3VzVXRpbHMiLCJmaWxlVXBsb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIkZJTEVfU0FWRV9FUlJPUiIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZW5hYmxlRm9yUHVibGljIiwiYm9keSIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJ0ZXN0IiwicmVqZWN0RXh0ZW5zaW9uIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInNwbGl0IiwicmVwbGFjZSIsImNvbnRlbnRUeXBlRXh0ZW5zaW9uIiwiaW5jbHVkZXMiLCJpc0V4dGVuc2lvblJlY29nbml6ZWQiLCJtZXRhZGF0YSIsInRhZ3MiLCJmaWxlRGF0YSIsImNoZWNrUHJvaGliaXRlZEtleXdvcmRzIiwiSU5WQUxJRF9LRVlfTkFNRSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJiZWZvcmVTYXZlIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJidWZmZXJEYXRhIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3NvdXJjZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsImV4cG9ydHMiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmNvbnN0IGF1dGggPSByZXF1aXJlKCcuLi9BdXRoJyk7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvOmZpbGVuYW1lJywgdGhpcy5nZXRIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLzpmaWxlbmFtZScsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgZXhwcmVzcy5yYXcoe1xuICAgICAgICB0eXBlOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0OiBtYXhVcGxvYWRTaXplLFxuICAgICAgfSksIC8vIEFsbG93IHVwbG9hZHMgd2l0aG91dCBDb250ZW50LVR5cGUsIG9yIHdpdGggYW55IENvbnRlbnQtVHlwZS5cbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlclxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBfcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpIHtcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKTtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBzZXNzaW9uVG9rZW4sXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcjogJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmlsZW5hbWUgPSByZXEucGFyYW1zLmZpbGVuYW1lO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSBhd2FpdCBGaWxlc1JvdXRlci5fcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UgfSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZUF1dGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFmdGVyRmluZD8uZm9yY2VEb3dubG9hZCkge1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlPy5fbmFtZSB8fCBmaWxlbmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogZGF0YS50b1N0cmluZygnYmFzZTY0JykgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG5cbiAgICAgIGlmIChhZnRlckZpbmQ/LmZpbGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoYWZ0ZXJGaW5kLmZpbGUuX25hbWUpO1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oYWZ0ZXJGaW5kLmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICBpZiAoYWZ0ZXJGaW5kLmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGUuX25hbWV9YCk7XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGNyZWF0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCB1c2VyID0gcmVxLmF1dGgudXNlcjtcbiAgICBjb25zdCBpc01hc3RlciA9IHJlcS5hdXRoLmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTGlua2VkID0gdXNlciAmJiBQYXJzZS5Bbm9ueW1vdXNVdGlscy5pc0xpbmtlZCh1c2VyKTtcbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICBuZXh0KFxuICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJylcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICBuZXh0KFxuICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICdGaWxlIHVwbG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtdHlwZScpO1xuXG4gICAgaWYgKCFyZXEuYm9keSB8fCAhcmVxLmJvZHkubGVuZ3RoKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBjb25zdCBpc1ZhbGlkRXh0ZW5zaW9uID0gZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLnNvbWUoZXh0ID0+IHtcbiAgICAgICAgICBpZiAoZXh0ID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZXh0KTtcbiAgICAgICAgICBpZiAocmVnZXgudGVzdChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdEV4dGVuc2lvbiA9IGV4dCA9PiB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dH0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdG9rZW4sIHN0cmlwcGluZyBNSU1FIHBhcmFtZXRlcnMgYW5kIHdoaXRlc3BhY2UuXG4gICAgICBsZXQgZXh0ZW5zaW9uID0gVXRpbHMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlbmFtZSk7XG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuXG4gICAgICAvLyBEZXJpdmUgdGhlIENvbnRlbnQtVHlwZSBzdWJ0eXBlIGFzIGEgZmFsbGJhY2sgaWRlbnRpZmllciwgZS5nLlxuICAgICAgLy8gXCJpbWFnZS9zdmcreG1sXCIgLT4gXCJzdmcreG1sXCIsIFwiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04XCIgLT4gXCJzdmcreG1sXCIuXG4gICAgICBsZXQgY29udGVudFR5cGVFeHRlbnNpb247XG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBjb250ZW50VHlwZUV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV0/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBNYWxmb3JtZWQgQ29udGVudC1UeXBlIHdpdGhvdXQgYSBzbGFzaDogdXNlIHRoZSByYXcgdmFsdWUgc28gdGhlXG4gICAgICAgIC8vIGV4aXN0aW5nIHJlamVjdGlvbiBwYXRoIHN0aWxsIGZpcmVzLlxuICAgICAgICBjb250ZW50VHlwZUV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgYmxvY2tsaXN0IG11c3QgYmUgZXZhbHVhdGVkIGFnYWluc3QgdGhlIHR5cGUgdGhlIGZpbGUgaXMgYWN0dWFsbHlcbiAgICAgIC8vIHNlcnZlZCBhcy4gYEZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlYCBkZXJpdmVzIHRoZSBzdG9yZWQgQ29udGVudC1UeXBlXG4gICAgICAvLyBmcm9tIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gb25seSB3aGVuIGBtaW1lYCByZWNvZ25pemVzIGl0OyBvdGhlcndpc2UgaXRcbiAgICAgIC8vIHByZXNlcnZlcyB0aGUgY2xpZW50LXN1cHBsaWVkIENvbnRlbnQtVHlwZS4gU28gdGhlIENvbnRlbnQtVHlwZSBzdWJ0eXBlXG4gICAgICAvLyBtdXN0IGFsc28gYmUgdmFsaWRhdGVkIHdoZW5ldmVyIHRoZSBmaWxlbmFtZSBoYXMgbm8gdXNhYmxlIGV4dGVuc2lvbiBPUlxuICAgICAgLy8gYW4gZXh0ZW5zaW9uIHRoYXQgYG1pbWVgIGRvZXMgbm90IHJlY29nbml6ZSAoZS5nLiBcImZpbGUuc3ZnflwiKSwgd2hpY2hcbiAgICAgIC8vIHdvdWxkIG90aGVyd2lzZSBzbGlwIHBhc3QgdGhlIGV4YWN0LW1hdGNoIGJsb2NrbGlzdC5cbiAgICAgIGNvbnN0IGlzRXh0ZW5zaW9uUmVjb2duaXplZCA9IGV4dGVuc2lvbiAmJiBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIHJlamVjdEV4dGVuc2lvbihleHRlbnNpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWlzRXh0ZW5zaW9uUmVjb2duaXplZCAmJiBjb250ZW50VHlwZUV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihjb250ZW50VHlwZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmVqZWN0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlRXh0ZW5zaW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSB9ID0gcmVxLmZpbGVEYXRhIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBTY2FuIHJlcXVlc3QgZGF0YSBmb3IgZGVuaWVkIGtleXdvcmRzXG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgdGFncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBjb25zdCBmaWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcS5ib2R5KTtcbiAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSB9O1xuICAgIHRyeSB7XG4gICAgICAvLyBydW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlU2l6ZVxuICAgICAgICBjb25zdCBidWZmZXJEYXRhID0gQnVmZmVyLmZyb20oZmlsZU9iamVjdC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAgZmlsZU9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gcnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSByZXEuY29uZmlnO1xuICAgICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICAgIC8vIHJ1biBiZWZvcmVEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSk7XG4gICAgICBmaWxlLl91cmwgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24ocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemU6IG51bGwgfTtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSBjb25maWc7XG4gICAgICBsZXQgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSBhd2FpdCBGaWxlc1JvdXRlci5fcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUlBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUFvRCxTQUFBRSx3QkFBQUssQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxP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
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfRXJyb3IiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ0cmlnZ2VycyIsIlV0aWxzIiwiYXV0aCIsIkZpbGVzUm91dGVyIiwiZXhwcmVzc1JvdXRlciIsIm1heFVwbG9hZFNpemUiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwiZ2V0SGFuZGxlciIsIm1ldGFkYXRhSGFuZGxlciIsInBvc3QiLCJyZXEiLCJyZXMiLCJuZXh0IiwiUGFyc2UiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwicmF3IiwidHlwZSIsImxpbWl0IiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX3Jlc29sdmVBdXRoIiwiY29uZmlnIiwic2Vzc2lvblRva2VuIiwiZ2V0QXV0aEZvclNlc3Npb25Ub2tlbiIsImluc3RhbGxhdGlvbklkIiwiQ29uZmlnIiwicGFyYW1zIiwiYXBwSWQiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlcnJvciIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiaXNGaWxlU3RyZWFtYWJsZSIsImFmdGVyRmluZCIsImZvcmNlRG93bmxvYWQiLCJoYW5kbGVGaWxlU3RyZWFtIiwiY2F0Y2giLCJlbmQiLCJkYXRhIiwiZ2V0RmlsZURhdGEiLCJ0b1N0cmluZyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsImxlbmd0aCIsImVyciIsInJlc29sdmVFcnJvciIsIlNDUklQVF9GQUlMRUQiLCJtZXNzYWdlIiwiaXNSZWFkT25seSIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsInVzZXIiLCJpc01hc3RlciIsImlzTGlua2VkIiwiQW5vbnltb3VzVXRpbHMiLCJmaWxlVXBsb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIkZJTEVfU0FWRV9FUlJPUiIsImVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyIiwiZW5hYmxlRm9yUHVibGljIiwiYm9keSIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJ0ZXN0IiwicmVqZWN0RXh0ZW5zaW9uIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInNwbGl0IiwicmVwbGFjZSIsImlzRXh0ZW5zaW9uUmVjb2duaXplZCIsImFsbG93c0FsbEV4dGVuc2lvbnMiLCJpbmNsdWRlcyIsInNsYXNoSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJ0cmltIiwic3VidHlwZSIsInRva2VuIiwiYmFyZVRva2VuIiwiY29udGVudFR5cGVFeHRlbnNpb24iLCJtZXRhZGF0YSIsInRhZ3MiLCJmaWxlRGF0YSIsImNoZWNrUHJvaGliaXRlZEtleXdvcmRzIiwiSU5WQUxJRF9LRVlfTkFNRSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJiZWZvcmVTYXZlIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJidWZmZXJEYXRhIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3NvdXJjZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsImV4cG9ydHMiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmNvbnN0IGF1dGggPSByZXF1aXJlKCcuLi9BdXRoJyk7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvOmZpbGVuYW1lJywgdGhpcy5nZXRIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLzpmaWxlbmFtZScsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgZXhwcmVzcy5yYXcoe1xuICAgICAgICB0eXBlOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGxpbWl0OiBtYXhVcGxvYWRTaXplLFxuICAgICAgfSksIC8vIEFsbG93IHVwbG9hZHMgd2l0aG91dCBDb250ZW50LVR5cGUsIG9yIHdpdGggYW55IENvbnRlbnQtVHlwZS5cbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlclxuICAgICk7XG5cbiAgICByb3V0ZXIuZGVsZXRlKFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgTWlkZGxld2FyZXMuZW5mb3JjZU1hc3RlcktleUFjY2VzcyxcbiAgICAgIHRoaXMuZGVsZXRlSGFuZGxlclxuICAgICk7XG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBfcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpIHtcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKTtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBzZXNzaW9uVG9rZW4sXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLCBlcnJvcjogJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmlsZW5hbWUgPSByZXEucGFyYW1zLmZpbGVuYW1lO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSBhd2FpdCBGaWxlc1JvdXRlci5fcmVzb2x2ZUF1dGgocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWU7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UgfSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZUF1dGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFmdGVyRmluZD8uZm9yY2VEb3dubG9hZCkge1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlPy5fbmFtZSB8fCBmaWxlbmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogZGF0YS50b1N0cmluZygnYmFzZTY0JykgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG5cbiAgICAgIGlmIChhZnRlckZpbmQ/LmZpbGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoYWZ0ZXJGaW5kLmZpbGUuX25hbWUpO1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oYWZ0ZXJGaW5kLmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICBpZiAoYWZ0ZXJGaW5kLmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGUuX25hbWV9YCk7XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGNyZWF0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCB1c2VyID0gcmVxLmF1dGgudXNlcjtcbiAgICBjb25zdCBpc01hc3RlciA9IHJlcS5hdXRoLmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTGlua2VkID0gdXNlciAmJiBQYXJzZS5Bbm9ueW1vdXNVdGlscy5pc0xpbmtlZCh1c2VyKTtcbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICBuZXh0KFxuICAgICAgICBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgYW5vbnltb3VzIHVzZXIgaXMgZGlzYWJsZWQuJylcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICBuZXh0KFxuICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICdGaWxlIHVwbG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtdHlwZScpO1xuXG4gICAgaWYgKCFyZXEuYm9keSB8fCAhcmVxLmJvZHkubGVuZ3RoKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBjb25zdCBpc1ZhbGlkRXh0ZW5zaW9uID0gZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLnNvbWUoZXh0ID0+IHtcbiAgICAgICAgICBpZiAoZXh0ID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZXh0KTtcbiAgICAgICAgICBpZiAocmVnZXgudGVzdChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlamVjdEV4dGVuc2lvbiA9IGV4dCA9PiB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dH0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdG9rZW4sIHN0cmlwcGluZyBNSU1FIHBhcmFtZXRlcnMgYW5kIHdoaXRlc3BhY2UuXG4gICAgICBsZXQgZXh0ZW5zaW9uID0gVXRpbHMuZ2V0RmlsZUV4dGVuc2lvbihmaWxlbmFtZSk7XG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuXG4gICAgICBjb25zdCBpc0V4dGVuc2lvblJlY29nbml6ZWQgPSBleHRlbnNpb24gJiYgbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIGlmIChleHRlbnNpb24gJiYgIWlzVmFsaWRFeHRlbnNpb24oZXh0ZW5zaW9uKSkge1xuICAgICAgICByZWplY3RFeHRlbnNpb24oZXh0ZW5zaW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBXaGVuIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gaXMgbm90IHJlY29nbml6ZWQgYnkgYG1pbWVgLFxuICAgICAgLy8gYEZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlYCBjYW5ub3QgZGVyaXZlIGEgQ29udGVudC1UeXBlIGZyb20gdGhlXG4gICAgICAvLyBmaWxlbmFtZSBhbmQgcHJlc2VydmVzIHRoZSBjbGllbnQtc3VwcGxpZWQgQ29udGVudC1UeXBlIHZlcmJhdGltLCBzbyB0aGVcbiAgICAgIC8vIHR5cGUgdGhlIGZpbGUgaXMgYWN0dWFsbHkgc2VydmVkIGFzIG11c3QgYmUgdmFsaWRhdGVkLiBTa2lwIHRoaXMgd2hlblxuICAgICAgLy8gZXh0ZW5zaW9uIGZpbHRlcmluZyBpcyBkaXNhYmxlZCAoYCpgKS5cbiAgICAgIGNvbnN0IGFsbG93c0FsbEV4dGVuc2lvbnMgPSBmaWxlRXh0ZW5zaW9ucy5pbmNsdWRlcygnKicpO1xuICAgICAgaWYgKCFpc0V4dGVuc2lvblJlY29nbml6ZWQgJiYgY29udGVudFR5cGUgJiYgIWFsbG93c0FsbEV4dGVuc2lvbnMpIHtcbiAgICAgICAgY29uc3Qgc2xhc2hJbmRleCA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJy8nKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHNsYXNoSW5kZXggPiAwID8gY29udGVudFR5cGUuc2xpY2UoMCwgc2xhc2hJbmRleCkudHJpbSgpIDogJyc7XG4gICAgICAgIGNvbnN0IHN1YnR5cGUgPVxuICAgICAgICAgIHNsYXNoSW5kZXggPiAwID8gY29udGVudFR5cGUuc2xpY2Uoc2xhc2hJbmRleCArIDEpLnNwbGl0KCc7JylbMF0udHJpbSgpIDogJyc7XG4gICAgICAgIC8vIEEgdmFsaWQgbWVkaWEgdHlwZSBpcyBgdHlwZS9zdWJ0eXBlYCB3aGVyZSBib3RoIGFyZSBub24tZW1wdHkgYHRva2VuYHNcbiAgICAgICAgLy8gKFJGQyA5MTEwIMKnNS42LjIpLiBSZWplY3QgYW55dGhpbmcgZWxzZS5cbiAgICAgICAgY29uc3QgdG9rZW4gPSAvXlshIyQlJicqK1xcLS5eX2B8fkEtWmEtejAtOV0rJC87XG4gICAgICAgIGlmICghdG9rZW4udGVzdCh0eXBlKSB8fCAhdG9rZW4udGVzdChzdWJ0eXBlKSkge1xuICAgICAgICAgIC8vIEEgQ29udGVudC1UeXBlIHRoYXQgZG9lcyBub3QgcGFyc2UgYXMgYHR5cGUvc3VidHlwZWAgd2l0aCB2YWxpZCxcbiAgICAgICAgICAvLyBub24tZW1wdHkgdHlwZSBBTkQgc3VidHlwZSB0b2tlbnMgaXMgbWFsZm9ybWVkOiB0aGVyZSBpcyBubyB2YWxpZCBNSU1FXG4gICAgICAgICAgLy8gdHlwZSB3aXRob3V0IGEgc3VidHlwZSAoUkZDIDkxMTAgwqc4LjMuMSksIGFuZCBtYWxmb3JtZWQgdG9rZW5zIHN1Y2ggYXNcbiAgICAgICAgICAvLyBgaW1hZ2UvL3N2Zyt4bWxgIG9yIGB0ZXh0L3BsYWluLHRleHQvaHRtbGAgYXJlIGVxdWFsbHkgdW5wYXJzZWFibGUuXG4gICAgICAgICAgLy8gQnJvd3NlcnMgY2Fubm90IHBhcnNlIHN1Y2ggdmFsdWVzIGFuZCBmYWxsIGJhY2sgdG8gTUlNRS1zbmlmZmluZyB0aGVcbiAgICAgICAgICAvLyBmaWxlIGJvZHksIHdoaWNoIGNhbiByZW5kZXIgSFRNTC9zY3JpcHQgbWFya2VycyBhcyBhY3RpdmUgY29udGVudCBvblxuICAgICAgICAgIC8vIHN0b3JhZ2UgYWRhcHRlcnMgdGhhdCBzZXJ2ZSB0aGUgc3RvcmVkIENvbnRlbnQtVHlwZSAoZS5nLiBgaW1hZ2VgLFxuICAgICAgICAgIC8vIGBpbWFnZS9gKS4gU3VyZmFjZSB0aGUgcHJlY2lzZSBibG9ja2xpc3QgbWVzc2FnZSB3aGVuIHRoZSBiYXJlIHRva2VuXG4gICAgICAgICAgLy8gbmFtZXMgYSBibG9ja2VkIGV4dGVuc2lvbiAoZS5nLiBhIG5vLXNsYXNoIGBzdmdgKSwgb3RoZXJ3aXNlIHJlamVjdCB0aGVcbiAgICAgICAgICAvLyB1bnBhcnNlYWJsZSBDb250ZW50LVR5cGUuXG4gICAgICAgICAgY29uc3QgYmFyZVRva2VuID0gKHNsYXNoSW5kZXggPCAwID8gY29udGVudFR5cGUuc3BsaXQoJzsnKVswXSA6IHR5cGUpLnJlcGxhY2UoXG4gICAgICAgICAgICAvXFxzKy9nLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChiYXJlVG9rZW4gJiYgIWlzVmFsaWRFeHRlbnNpb24oYmFyZVRva2VuKSkge1xuICAgICAgICAgICAgcmVqZWN0RXh0ZW5zaW9uKGJhcmVUb2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgQ29udGVudC1UeXBlLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIHdlbGwtZm9ybWVkIENvbnRlbnQtVHlwZSBzdWJ0eXBlIGFnYWluc3QgdGhlIGJsb2NrbGlzdCwgZS5nLlxuICAgICAgICAvLyBcImltYWdlL3N2Zyt4bWxcIiAtPiBcInN2Zyt4bWxcIiwgXCJpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLThcIiAtPiBcInN2Zyt4bWxcIi5cbiAgICAgICAgLy8gVmFsaWQgY3VzdG9tL3ZlbmRvciB0eXBlcyAoZS5nLiBcImFwcGxpY2F0aW9uL3ZuZC5hcGkranNvblwiKSBwYXJzZSBhbmQgYXJlXG4gICAgICAgIC8vIGFsbG93ZWQ7IG9ubHkgYmxvY2tlZCBzdWJ0eXBlcyBhcmUgcmVqZWN0ZWQuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlRXh0ZW5zaW9uID0gc3VidHlwZS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRXh0ZW5zaW9uKGNvbnRlbnRUeXBlRXh0ZW5zaW9uKSkge1xuICAgICAgICAgIHJlamVjdEV4dGVuc2lvbihjb250ZW50VHlwZUV4dGVuc2lvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGNvbnN0IGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJ1ZmZlckRhdGEpO1xuICAgICAgICAvLyBwcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gc29tZSBzMy1jb21wYXRpYmxlIHByb3ZpZGVycyAoRGlnaXRhbE9jZWFuLCBMaW5vZGUpIGRvIG5vdCBhY2NlcHQgdGFnc1xuICAgICAgICAvLyBzbyB3ZSBkbyBub3QgaW5jbHVkZSB0aGUgdGFncyBvcHRpb24gaWYgaXQgaXMgZW1wdHkuXG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gZGVsZXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IHJlcS5jb25maWc7XG4gICAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGxldCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IGF3YWl0IEZpbGVzUm91dGVyLl9yZXNvbHZlQXV0aChyZXEsIGNvbmZpZyk7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0LmZpbGUuX25hbWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZ2V0IGZpbGUgbWV0YWRhdGEuJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSB7XG4gIGNvbnN0IHJhbmdlID0gKHJlcS5nZXQoJ1JhbmdlJykgfHwgJy8tLycpLnNwbGl0KCctJyk7XG4gIGNvbnN0IHN0YXJ0ID0gTnVtYmVyKHJhbmdlWzBdKTtcbiAgY29uc3QgZW5kID0gTnVtYmVyKHJhbmdlWzFdKTtcbiAgcmV0dXJuIChcbiAgICAoIWlzTmFOKHN0YXJ0KSB8fCAhaXNOYU4oZW5kKSkgJiYgdHlwZW9mIGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0gPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBSUEsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQW9ELFNBQUFFLHdCQUFBSyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUCx1QkFBQSxZQUFBQSxDQUFBSyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFL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LEtBQUssQ0FBQyxNQUFNO1FBQ25FN0MsR0FBRyxDQUFDc0IsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNmdEIsR0FBRyxDQUFDdUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2QsQ0FBQyxDQUFDO01BQ0YsSUFBSSxDQUFDd0IsSUFBSSxFQUFFO1FBQ1Q7TUFDRjtNQUNBLE1BQU01RCxRQUFRLENBQUNrRCxtQkFBbUIsQ0FDaENsRCxRQUFRLENBQUNtRCxLQUFLLENBQUNJLFNBQVMsRUFDeEI7UUFBRVY7TUFBSyxDQUFDLEVBQ1JqQixNQUFNLEVBQ05vQixRQUNGLENBQUM7TUFDRG5DLEdBQUcsQ0FBQ3NCLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZnRCLEdBQUcsQ0FBQ3VCLElBQUksQ0FBQ3dCLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUMsT0FBTy9FLENBQUMsRUFBRTtNQUNWLE1BQU1zRixHQUFHLEdBQUduRSxRQUFRLENBQUNvRSxZQUFZLENBQUN2RixDQUFDLEVBQUU7UUFDbkN3RCxJQUFJLEVBQUV0QixhQUFLLENBQUNDLEtBQUssQ0FBQ3FELGFBQWE7UUFDL0JDLE9BQU8sRUFBRTtNQUNYLENBQUMsQ0FBQztNQUNGekQsR0FBRyxDQUFDc0IsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNmdEIsR0FBRyxDQUFDdUIsSUFBSSxDQUFDO1FBQUVDLElBQUksRUFBRThCLEdBQUcsQ0FBQzlCLElBQUk7UUFBRUUsS0FBSyxFQUFFNEIsR0FBRyxDQUFDRztNQUFRLENBQUMsQ0FBQztJQUNsRDtFQUNGO0FBQ0Y7QUFBQzJFLE9BQUEsQ0FBQTlJLFdBQUEsR0FBQUEsV0FBQTtBQUVELFNBQVNtRCxnQkFBZ0JBLENBQUMxQyxHQUFHLEVBQUU2QixlQUFlLEVBQUU7RUFDOUMsTUFBTXlHLEtBQUssR0FBRyxDQUFDdEksR0FBRyxDQUFDbkIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRXFHLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDcEQsTUFBTXFELEtBQUssR0FBR0MsTUFBTSxDQUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsTUFBTXZGLEdBQUcsR0FBR3lGLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCLE9BQ0UsQ0FBQyxDQUFDRyxLQUFLLENBQUNGLEtBQUssQ0FBQyxJQUFJLENBQUNFLEtBQUssQ0FBQzFGLEdBQUcsQ0FBQyxLQUFLLE9BQU9sQixlQUFlLENBQUNpRyxPQUFPLENBQUNqRixnQkFBZ0IsS0FBSyxVQUFVO0FBRXBHIiwiaWdub3JlTGlzdCI6W119
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "parse-server",
3
- "version": "8.6.83",
3
+ "version": "8.6.85",
4
4
  "description": "An express module providing a Parse-compatible API server",
5
5
  "main": "lib/index.js",
6
6
  "repository": {