parse-server 9.5.0-alpha.9 → 9.5.0

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.
@@ -22,25 +22,30 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
22
22
  const hasTypeIntrospection = query => {
23
23
  try {
24
24
  const ast = (0, _graphql.parse)(query);
25
- // Check only root-level fields in the query
26
- // Note: selection.name.value is the actual field name, so this correctly handles
27
- // aliases like "myAlias: __type(...)" where name.value === "__type"
28
- for (const definition of ast.definitions) {
29
- if ((definition.kind === 'OperationDefinition' || definition.kind === 'FragmentDefinition') && definition.selectionSet) {
30
- for (const selection of definition.selectionSet.selections) {
31
- if (selection.kind === 'Field' && selection.name.value === '__type') {
32
- // GraphQL's introspection __type field requires a 'name' argument
33
- // This distinguishes it from potential user-defined __type fields
34
- if (selection.arguments && selection.arguments.length > 0) {
35
- return true;
36
- }
25
+ const checkSelections = selections => {
26
+ for (const selection of selections) {
27
+ if (selection.kind === 'Field' && selection.name.value === '__type') {
28
+ if (selection.arguments && selection.arguments.length > 0) {
29
+ return true;
30
+ }
31
+ }
32
+ if (selection.selectionSet) {
33
+ if (checkSelections(selection.selectionSet.selections)) {
34
+ return true;
37
35
  }
38
36
  }
39
37
  }
38
+ return false;
39
+ };
40
+ for (const definition of ast.definitions) {
41
+ if (definition.selectionSet) {
42
+ if (checkSelections(definition.selectionSet.selections)) {
43
+ return true;
44
+ }
45
+ }
40
46
  }
41
47
  return false;
42
48
  } catch {
43
- // If parsing fails, we assume it's not a valid query and let Apollo handle it
44
49
  return false;
45
50
  }
46
51
  };
@@ -246,4 +251,4 @@ class ParseGraphQLServer {
246
251
  }
247
252
  }
248
253
  exports.ParseGraphQLServer = ParseGraphQLServer;
249
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29ycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxVcGxvYWRFeHByZXNzIiwiX3NlcnZlciIsIl9leHByZXNzIiwiX2Rpc2FibGVkIiwiX2V4cHJlc3MyIiwiX2dyYXBocWwiLCJfc3Vic2NyaXB0aW9uc1RyYW5zcG9ydFdzIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfUGFyc2VHcmFwaFFMQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiZGVmaW5pdGlvbiIsImRlZmluaXRpb25zIiwia2luZCIsInNlbGVjdGlvblNldCIsInNlbGVjdGlvbiIsInNlbGVjdGlvbnMiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsIlBhcnNlR3JhcGhRTFNlcnZlciIsImNvbnN0cnVjdG9yIiwicGFyc2VTZXJ2ZXIiLCJjb25maWciLCJyZXF1aXJlZFBhcmFtZXRlciIsImdyYXBoUUxQYXRoIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJkZWZhdWx0TG9nZ2VyIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiUGFyc2VHcmFwaFFMU2NoZW1hIiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJfZ2V0R3JhcGhRTE9wdGlvbnMiLCJzY2hlbWEiLCJsb2FkIiwiY29udGV4dCIsInJlcSIsInJlcyIsImluZm8iLCJlcnJvciIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImFwb2xsbyIsIkFwb2xsb1NlcnZlciIsImNzcmZQcmV2ZW50aW9uIiwicmVxdWVzdEhlYWRlcnMiLCJpbnRyb3NwZWN0aW9uIiwicGx1Z2lucyIsIkFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwib3B0aW9ucyIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsIkVycm9yIiwidXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwiY29yc01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJjcmVhdGVTdWJzY3JpcHRpb25zIiwiU3Vic2NyaXB0aW9uU2VydmVyIiwiY3JlYXRlIiwiZXhlY3V0ZSIsInN1YnNjcmliZSIsIm9uT3BlcmF0aW9uIiwiX21lc3NhZ2UiLCJwYXJhbXMiLCJ3ZWJTb2NrZXQiLCJhc3NpZ24iLCJ1cGdyYWRlUmVxIiwicGF0aCIsInN1YnNjcmlwdGlvbnNQYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgZ3JhcGhxbFVwbG9hZEV4cHJlc3MgZnJvbSAnZ3JhcGhxbC11cGxvYWQvZ3JhcGhxbFVwbG9hZEV4cHJlc3MuanMnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXInO1xuaW1wb3J0IHsgZXhwcmVzc01pZGRsZXdhcmUgfSBmcm9tICdAYXMtaW50ZWdyYXRpb25zL2V4cHJlc3M1JztcbmltcG9ydCB7IEFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvcGx1Z2luL2Rpc2FibGVkJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgZXhlY3V0ZSwgc3Vic2NyaWJlLCBHcmFwaFFMRXJyb3IsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TZXJ2ZXIgfSBmcm9tICdzdWJzY3JpcHRpb25zLXRyYW5zcG9ydC13cyc7XG5pbXBvcnQgeyBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5cbmNvbnN0IGhhc1R5cGVJbnRyb3NwZWN0aW9uID0gKHF1ZXJ5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UocXVlcnkpO1xuICAgIC8vIENoZWNrIG9ubHkgcm9vdC1sZXZlbCBmaWVsZHMgaW4gdGhlIHF1ZXJ5XG4gICAgLy8gTm90ZTogc2VsZWN0aW9uLm5hbWUudmFsdWUgaXMgdGhlIGFjdHVhbCBmaWVsZCBuYW1lLCBzbyB0aGlzIGNvcnJlY3RseSBoYW5kbGVzXG4gICAgLy8gYWxpYXNlcyBsaWtlIFwibXlBbGlhczogX190eXBlKC4uLilcIiB3aGVyZSBuYW1lLnZhbHVlID09PSBcIl9fdHlwZVwiXG4gICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIGFzdC5kZWZpbml0aW9ucykge1xuICAgICAgaWYgKChkZWZpbml0aW9uLmtpbmQgPT09ICdPcGVyYXRpb25EZWZpbml0aW9uJyB8fCBkZWZpbml0aW9uLmtpbmQgPT09ICdGcmFnbWVudERlZmluaXRpb24nKSAmJiBkZWZpbml0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBkZWZpbml0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRmllbGQnICYmIHNlbGVjdGlvbi5uYW1lLnZhbHVlID09PSAnX190eXBlJykge1xuICAgICAgICAgICAgLy8gR3JhcGhRTCdzIGludHJvc3BlY3Rpb24gX190eXBlIGZpZWxkIHJlcXVpcmVzIGEgJ25hbWUnIGFyZ3VtZW50XG4gICAgICAgICAgICAvLyBUaGlzIGRpc3Rpbmd1aXNoZXMgaXQgZnJvbSBwb3RlbnRpYWwgdXNlci1kZWZpbmVkIF9fdHlwZSBmaWVsZHNcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uYXJndW1lbnRzICYmIHNlbGVjdGlvbi5hcmd1bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBwYXJzaW5nIGZhaWxzLCB3ZSBhc3N1bWUgaXQncyBub3QgYSB2YWxpZCBxdWVyeSBhbmQgbGV0IEFwb2xsbyBoYW5kbGUgaXRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IHRocm93SW50cm9zcGVjdGlvbkVycm9yID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgR3JhcGhRTEVycm9yKCdJbnRyb3NwZWN0aW9uIGlzIG5vdCBhbGxvd2VkJywge1xuICAgIGV4dGVuc2lvbnM6IHtcbiAgICAgIGh0dHA6IHtcbiAgICAgICAgc3RhdHVzOiA0MDMsXG4gICAgICB9LFxuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbiA9IChwdWJsaWNJbnRyb3NwZWN0aW9uKSA9PiAoe1xuXG5cbiAgcmVxdWVzdERpZFN0YXJ0OiAocmVxdWVzdENvbnRleHQpID0+ICh7XG5cbiAgICBkaWRSZXNvbHZlT3BlcmF0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBJZiBwdWJsaWMgaW50cm9zcGVjdGlvbiBpcyBlbmFibGVkLCB3ZSBhbGxvdyBhbGwgaW50cm9zcGVjdGlvbiBxdWVyaWVzXG4gICAgICBpZiAocHVibGljSW50cm9zcGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzTWFzdGVyT3JNYWludGVuYW5jZSA9IHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01hc3RlciB8fCByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYWludGVuYW5jZVxuICAgICAgaWYgKGlzTWFzdGVyT3JNYWludGVuYW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcmVxdWVzdENvbnRleHQucmVxdWVzdC5xdWVyeTtcblxuXG4gICAgICAvLyBGYXN0IHBhdGg6IHNpbXBsZSBzdHJpbmcgY2hlY2sgZm9yIF9fc2NoZW1hXG4gICAgICAvLyBUaGlzIGF2b2lkcyBwYXJzaW5nIHRoZSBxdWVyeSBpbiBtb3N0IGNhc2VzXG4gICAgICBpZiAocXVlcnk/LmluY2x1ZGVzKCdfX3NjaGVtYScpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0ludHJvc3BlY3Rpb25FcnJvcigpO1xuICAgICAgfVxuXG4gICAgICAvLyBTbWFydCBjaGVjayBmb3IgX190eXBlOiBvbmx5IHBhcnNlIGlmIHRoZSBzdHJpbmcgaXMgcHJlc2VudFxuICAgICAgLy8gVGhpcyBhdm9pZHMgZmFsc2UgcG9zaXRpdmVzIChlLmcuLCBcIl9fdHlwZVwiIGluIHN0cmluZ3Mgb3IgY29tbWVudHMpXG4gICAgICAvLyB3aGlsZSBzdGlsbCBiZWluZyBlZmZpY2llbnQgZm9yIHRoZSBjb21tb24gY2FzZVxuICAgICAgaWYgKHF1ZXJ5Py5pbmNsdWRlcygnX190eXBlJykgJiYgaGFzVHlwZUludHJvc3BlY3Rpb24ocXVlcnkpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0ludHJvc3BlY3Rpb25FcnJvcigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgfSlcblxufSk7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6IGFzeW5jICh7IHJlcSwgcmVzIH0pID0+IHtcbiAgICAgICAgICByZXMuc2V0KCdhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4nLCByZXEuZ2V0KCdvcmlnaW4nKSB8fCAnKicpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmZvOiByZXEuaW5mbyxcbiAgICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gSXQgbWVhbnMgYSBwYXJhbGxlbCBfZ2V0U2VydmVyIGNhbGwgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLl9zY2hlbWFSZWZNdXRleCA9PT0gbmV3U2NoZW1hUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICAgIH1cbiAgICAvLyBVcGRhdGUgdGhlIHNjaGVtYSByZWYgbXV0ZXggdG8gYXZvaWQgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsc1xuICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbmV3U2NoZW1hUmVmO1xuICAgIGNvbnN0IGNyZWF0ZVNlcnZlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hLCBjb250ZXh0IH0gPSBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhcG9sbG8gPSBuZXcgQXBvbGxvU2VydmVyKHtcbiAgICAgICAgICBjc3JmUHJldmVudGlvbjoge1xuICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3Mvcm91dGVyL2NvbmZpZ3VyYXRpb24vY3NyZi9cbiAgICAgICAgICAgIC8vIG5lZWRlZCBzaW5jZSB3ZSB1c2UgZ3JhcGhxbCB1cGxvYWRcbiAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzOiBbJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIFdlIG5lZWQgYWx3YXlzIHRydWUgaW50cm9zcGVjdGlvbiBiZWNhdXNlIGFwb2xsbyBzZXJ2ZXIgaGF2ZSBjaGFuZ2luZyBiZWhhdmlvciBiYXNlZCBvbiB0aGUgTk9ERV9FTlYgdmFyaWFibGVcbiAgICAgICAgICAvLyB3ZSBkZWxlZ2F0ZSB0aGUgaW50cm9zcGVjdGlvbiBjb250cm9sIHRvIHRoZSBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpblxuICAgICAgICAgIGludHJvc3BlY3Rpb246IHRydWUsXG4gICAgICAgICAgcGx1Z2luczogW0Fwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkKCksIEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luKHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uKV0sXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgYXBvbGxvLnN0YXJ0KCk7XG4gICAgICAgIHJldHVybiBleHByZXNzTWlkZGxld2FyZShhcG9sbG8sIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmVzZXQgYWxsIG11dGV4ZXMgYW5kIGZvcndhcmQgdGhlIGVycm9yXG4gICAgICAgIHRoaXMuX3NlcnZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NjaGVtYVJlZk11dGV4ID0gbnVsbDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRG8gbm90IGF3YWl0IHNvIHBhcmFsbGVsIHJlcXVlc3Qgd2lsbCB3YWl0IHRoZSBzYW1lIHByb21pc2UgcmVmXG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIF90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgdW5pdE1hcCA9IHtcbiAgICAgIGtiOiAxLFxuICAgICAgbWI6IDIsXG4gICAgICBnYjogMyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE51bWJlcihtYXhVcGxvYWRTaXplLnNsaWNlKDAsIC0yKSkgKlxuICAgICAgTWF0aC5wb3coMTAyNCwgdW5pdE1hcFttYXhVcGxvYWRTaXplLnNsaWNlKC0yKS50b0xvd2VyQ2FzZSgpXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQWxsb3cgZGV2ZWxvcGVycyB0byBjdXN0b21pemUgZWFjaCByZXF1ZXN0IHdpdGggaW52ZXJzaW9uIG9mIGNvbnRyb2wvZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICovXG4gIGFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKGFwaSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVlc3RDb250ZXh0TWlkZGxld2FyZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIGFwaS51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBjb3JzTWlkZGxld2FyZSgpKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUhlYWRlcnMpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlU2Vzc2lvbik7XG4gICAgdGhpcy5hcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcHAsIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZShcbiAgICAgIHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgZ3JhcGhxbFVwbG9hZEV4cHJlc3Moe1xuICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWF4VXBsb2FkU2l6ZSB8fCAnMjBtYidcbiAgICAgICAgKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMsIG5leHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG5cbiAgICBhcHAuZ2V0KFxuICAgICAgdGhpcy5jb25maWcucGxheWdyb3VuZFBhdGggfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgYDxkaXYgaWQ9XCJzYW5kYm94XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPjwvZGl2PlxuICAgICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9lbWJlZGRhYmxlLXNhbmRib3guY2RuLmFwb2xsb2dyYXBocWwuY29tL19sYXRlc3QvZW1iZWRkYWJsZS1zYW5kYm94LnVtZC5wcm9kdWN0aW9uLm1pbi5qc1wiPjwvc2NyaXB0PlxuICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIG5ldyB3aW5kb3cuRW1iZWRkZWRTYW5kYm94KHtcbiAgICAgICAgICAgICB0YXJnZXQ6IFwiI3NhbmRib3hcIixcbiAgICAgICAgICAgICBlbmRwb2ludElzRWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgIGluaXRpYWxFbmRwb2ludDogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCl9LFxuICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3Q6IChlbmRwb2ludFVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmV0Y2goZW5kcG9pbnRVcmwsIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpfSxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtTWFzdGVyLUtleSc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5KX0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb25zOiBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3N0dWRpby9leHBsb3Jlci9zYW5kYm94I2VtYmVkZGluZy1zYW5kYm94XG4gICAgICAgICAgPC9zY3JpcHQ+YFxuICAgICAgICApO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbnMoc2VydmVyKSB7XG4gICAgU3Vic2NyaXB0aW9uU2VydmVyLmNyZWF0ZShcbiAgICAgIHtcbiAgICAgICAgZXhlY3V0ZSxcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBvbk9wZXJhdGlvbjogYXN5bmMgKF9tZXNzYWdlLCBwYXJhbXMsIHdlYlNvY2tldCkgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMsIGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKHdlYlNvY2tldC51cGdyYWRlUmVxKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIHBhdGg6XG4gICAgICAgICAgdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uc1BhdGggfHxcbiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5zdWJzY3JpcHRpb25zUGF0aCB0byBjcmVhdGVTdWJzY3JpcHRpb25zIScpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWc6IFBhcnNlR3JhcGhRTENvbmZpZyk6IFByb21pc2Uge1xuICAgIHJldHVybiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIudXBkYXRlR3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnKTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTZXJ2ZXIgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMscUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFN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
254
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29ycyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dyYXBocWxVcGxvYWRFeHByZXNzIiwiX3NlcnZlciIsIl9leHByZXNzIiwiX2Rpc2FibGVkIiwiX2V4cHJlc3MyIiwiX2dyYXBocWwiLCJfc3Vic2NyaXB0aW9uc1RyYW5zcG9ydFdzIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfUGFyc2VHcmFwaFFMQ29udHJvbGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiY2hlY2tTZWxlY3Rpb25zIiwic2VsZWN0aW9ucyIsInNlbGVjdGlvbiIsImtpbmQiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWxlY3Rpb25TZXQiLCJkZWZpbml0aW9uIiwiZGVmaW5pdGlvbnMiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsIlBhcnNlR3JhcGhRTFNlcnZlciIsImNvbnN0cnVjdG9yIiwicGFyc2VTZXJ2ZXIiLCJjb25maWciLCJyZXF1aXJlZFBhcmFtZXRlciIsImdyYXBoUUxQYXRoIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJkZWZhdWx0TG9nZ2VyIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiUGFyc2VHcmFwaFFMU2NoZW1hIiwiZGF0YWJhc2VDb250cm9sbGVyIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWZzIiwiYXBwSWQiLCJfZ2V0R3JhcGhRTE9wdGlvbnMiLCJzY2hlbWEiLCJsb2FkIiwiY29udGV4dCIsInJlcSIsInJlcyIsImluZm8iLCJlcnJvciIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImFwb2xsbyIsIkFwb2xsb1NlcnZlciIsImNzcmZQcmV2ZW50aW9uIiwicmVxdWVzdEhlYWRlcnMiLCJpbnRyb3NwZWN0aW9uIiwicGx1Z2lucyIsIkFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIiwiZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24iLCJzdGFydCIsImV4cHJlc3NNaWRkbGV3YXJlIiwiX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzIiwibWF4VXBsb2FkU2l6ZSIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIiwiYXBpIiwib3B0aW9ucyIsInJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsIkVycm9yIiwidXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwiY29yc01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJjcmVhdGVTdWJzY3JpcHRpb25zIiwiU3Vic2NyaXB0aW9uU2VydmVyIiwiY3JlYXRlIiwiZXhlY3V0ZSIsInN1YnNjcmliZSIsIm9uT3BlcmF0aW9uIiwiX21lc3NhZ2UiLCJwYXJhbXMiLCJ3ZWJTb2NrZXQiLCJhc3NpZ24iLCJ1cGdyYWRlUmVxIiwicGF0aCIsInN1YnNjcmlwdGlvbnNQYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgZ3JhcGhxbFVwbG9hZEV4cHJlc3MgZnJvbSAnZ3JhcGhxbC11cGxvYWQvZ3JhcGhxbFVwbG9hZEV4cHJlc3MuanMnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXInO1xuaW1wb3J0IHsgZXhwcmVzc01pZGRsZXdhcmUgfSBmcm9tICdAYXMtaW50ZWdyYXRpb25zL2V4cHJlc3M1JztcbmltcG9ydCB7IEFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvcGx1Z2luL2Rpc2FibGVkJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgZXhlY3V0ZSwgc3Vic2NyaWJlLCBHcmFwaFFMRXJyb3IsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TZXJ2ZXIgfSBmcm9tICdzdWJzY3JpcHRpb25zLXRyYW5zcG9ydC13cyc7XG5pbXBvcnQgeyBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuXG5cbmNvbnN0IGhhc1R5cGVJbnRyb3NwZWN0aW9uID0gKHF1ZXJ5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UocXVlcnkpO1xuICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9ucyA9IChzZWxlY3Rpb25zKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25zKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZpZWxkJyAmJiBzZWxlY3Rpb24ubmFtZS52YWx1ZSA9PT0gJ19fdHlwZScpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLmFyZ3VtZW50cyAmJiBzZWxlY3Rpb24uYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICAgIGlmIChjaGVja1NlbGVjdGlvbnMoc2VsZWN0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgYXN0LmRlZmluaXRpb25zKSB7XG4gICAgICBpZiAoZGVmaW5pdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgaWYgKGNoZWNrU2VsZWN0aW9ucyhkZWZpbml0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCB0aHJvd0ludHJvc3BlY3Rpb25FcnJvciA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcignSW50cm9zcGVjdGlvbiBpcyBub3QgYWxsb3dlZCcsIHtcbiAgICBleHRlbnNpb25zOiB7XG4gICAgICBodHRwOiB7XG4gICAgICAgIHN0YXR1czogNDAzLFxuICAgICAgfSxcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4gPSAocHVibGljSW50cm9zcGVjdGlvbikgPT4gKHtcblxuXG4gIHJlcXVlc3REaWRTdGFydDogKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuXG4gICAgZGlkUmVzb2x2ZU9wZXJhdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSWYgcHVibGljIGludHJvc3BlY3Rpb24gaXMgZW5hYmxlZCwgd2UgYWxsb3cgYWxsIGludHJvc3BlY3Rpb24gcXVlcmllc1xuICAgICAgaWYgKHB1YmxpY0ludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01hc3Rlck9yTWFpbnRlbmFuY2UgPSByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYXN0ZXIgfHwgcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFpbnRlbmFuY2VcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeSA9IHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk7XG5cblxuICAgICAgLy8gRmFzdCBwYXRoOiBzaW1wbGUgc3RyaW5nIGNoZWNrIGZvciBfX3NjaGVtYVxuICAgICAgLy8gVGhpcyBhdm9pZHMgcGFyc2luZyB0aGUgcXVlcnkgaW4gbW9zdCBjYXNlc1xuICAgICAgaWYgKHF1ZXJ5Py5pbmNsdWRlcygnX19zY2hlbWEnKSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU21hcnQgY2hlY2sgZm9yIF9fdHlwZTogb25seSBwYXJzZSBpZiB0aGUgc3RyaW5nIGlzIHByZXNlbnRcbiAgICAgIC8vIFRoaXMgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyAoZS5nLiwgXCJfX3R5cGVcIiBpbiBzdHJpbmdzIG9yIGNvbW1lbnRzKVxuICAgICAgLy8gd2hpbGUgc3RpbGwgYmVpbmcgZWZmaWNpZW50IGZvciB0aGUgY29tbW9uIGNhc2VcbiAgICAgIGlmIChxdWVyeT8uaW5jbHVkZXMoJ19fdHlwZScpICYmIGhhc1R5cGVJbnRyb3NwZWN0aW9uKHF1ZXJ5KSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIH0pXG5cbn0pO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTZXJ2ZXIge1xuICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiBQYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnNlU2VydmVyLCBjb25maWcpIHtcbiAgICB0aGlzLnBhcnNlU2VydmVyID0gcGFyc2VTZXJ2ZXIgfHwgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZVNlcnZlciBpbnN0YW5jZSEnKTtcbiAgICBpZiAoIWNvbmZpZyB8fCAhY29uZmlnLmdyYXBoUUxQYXRoKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5ncmFwaFFMUGF0aCEnKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyID0gdGhpcy5wYXJzZVNlcnZlci5jb25maWcucGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgICB0aGlzLmxvZyA9XG4gICAgICAodGhpcy5wYXJzZVNlcnZlci5jb25maWcgJiYgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubG9nZ2VyQ29udHJvbGxlcikgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYSA9IG5ldyBQYXJzZUdyYXBoUUxTY2hlbWEoe1xuICAgICAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLFxuICAgICAgZGF0YWJhc2VDb250cm9sbGVyOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5kYXRhYmFzZUNvbnRyb2xsZXIsXG4gICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgZ3JhcGhRTEN1c3RvbVR5cGVEZWZzOiB0aGlzLmNvbmZpZy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMsXG4gICAgICBhcHBJZDogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBfZ2V0R3JhcGhRTE9wdGlvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVtYTogYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpLFxuICAgICAgICBjb250ZXh0OiBhc3luYyAoeyByZXEsIHJlcyB9KSA9PiB7XG4gICAgICAgICAgcmVzLnNldCgnYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luJywgcmVxLmdldCgnb3JpZ2luJykgfHwgJyonKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgICBhdXRoOiByZXEuYXV0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihlLnN0YWNrIHx8ICh0eXBlb2YgZS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiBlLnRvU3RyaW5nKCkpIHx8IGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZ2V0U2VydmVyKCkge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmdyYXBoUUxTY2hlbWE7XG4gICAgY29uc3QgbmV3U2NoZW1hUmVmID0gYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpO1xuICAgIGlmIChzY2hlbWFSZWYgPT09IG5ld1NjaGVtYVJlZiAmJiB0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIC8vIEl0IG1lYW5zIGEgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiAgICBpZiAodGhpcy5fc2NoZW1hUmVmTXV0ZXggPT09IG5ld1NjaGVtYVJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHRoZSBzY2hlbWEgcmVmIG11dGV4IHRvIGF2b2lkIHBhcmFsbGVsIF9nZXRTZXJ2ZXIgY2FsbHNcbiAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG5ld1NjaGVtYVJlZjtcbiAgICBjb25zdCBjcmVhdGVTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgY29udGV4dCB9ID0gYXdhaXQgdGhpcy5fZ2V0R3JhcGhRTE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYXBvbGxvID0gbmV3IEFwb2xsb1NlcnZlcih7XG4gICAgICAgICAgY3NyZlByZXZlbnRpb246IHtcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3JvdXRlci9jb25maWd1cmF0aW9uL2NzcmYvXG4gICAgICAgICAgICAvLyBuZWVkZWQgc2luY2Ugd2UgdXNlIGdyYXBocWwgdXBsb2FkXG4gICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogWydYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBXZSBuZWVkIGFsd2F5cyB0cnVlIGludHJvc3BlY3Rpb24gYmVjYXVzZSBhcG9sbG8gc2VydmVyIGhhdmUgY2hhbmdpbmcgYmVoYXZpb3IgYmFzZWQgb24gdGhlIE5PREVfRU5WIHZhcmlhYmxlXG4gICAgICAgICAgLy8gd2UgZGVsZWdhdGUgdGhlIGludHJvc3BlY3Rpb24gY29udHJvbCB0byB0aGUgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW5cbiAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIHBsdWdpbnM6IFtBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCgpLCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbih0aGlzLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbildLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGFwb2xsby5zdGFydCgpO1xuICAgICAgICByZXR1cm4gZXhwcmVzc01pZGRsZXdhcmUoYXBvbGxvLCB7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFJlc2V0IGFsbCBtdXRleGVzIGFuZCBmb3J3YXJkIHRoZSBlcnJvclxuICAgICAgICB0aGlzLl9zZXJ2ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERvIG5vdCBhd2FpdCBzbyBwYXJhbGxlbCByZXF1ZXN0IHdpbGwgd2FpdCB0aGUgc2FtZSBwcm9taXNlIHJlZlxuICAgIHRoaXMuX3NlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEFsbG93IGRldmVsb3BlcnMgdG8gY3VzdG9taXplIGVhY2ggcmVxdWVzdCB3aXRoIGludmVyc2lvbiBvZiBjb250cm9sL2RlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqL1xuICBhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcGksIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgICBhcGkudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlHcmFwaFFMKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAudXNlKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgY29yc01pZGRsZXdhcmUoKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZVNlc3Npb24pO1xuICAgIHRoaXMuYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBwLCB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VFcnJvcnMpO1xuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxVcGxvYWRFeHByZXNzKHtcbiAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1heFVwbG9hZFNpemUgfHwgJzIwbWInXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgZXhwcmVzcy5qc29uKCksIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgdGhpcy5fZ2V0U2VydmVyKCk7XG4gICAgICByZXR1cm4gc2VydmVyKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5UGxheWdyb3VuZChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLmdldCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGNvbmZpZy5wbGF5Z3JvdW5kUGF0aCB0byBhcHBseVBsYXlncm91bmQhJyksXG4gICAgICAoX3JlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgcmVzLndyaXRlKFxuICAgICAgICAgIGA8ZGl2IGlkPVwic2FuZGJveFwiIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjBcIj48L2Rpdj5cbiAgICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vZW1iZWRkYWJsZS1zYW5kYm94LmNkbi5hcG9sbG9ncmFwaHFsLmNvbS9fbGF0ZXN0L2VtYmVkZGFibGUtc2FuZGJveC51bWQucHJvZHVjdGlvbi5taW4uanNcIj48L3NjcmlwdD5cbiAgICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICBuZXcgd2luZG93LkVtYmVkZGVkU2FuZGJveCh7XG4gICAgICAgICAgICAgdGFyZ2V0OiBcIiNzYW5kYm94XCIsXG4gICAgICAgICAgICAgZW5kcG9pbnRJc0VkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICBpbml0aWFsRW5kcG9pbnQ6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgpfSxcbiAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0OiAoZW5kcG9pbnRVcmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKGVuZHBvaW50VXJsLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkKX0sXG4gICAgICAgICAgICAgICAgICAgICdYLVBhcnNlLU1hc3Rlci1LZXknOiAke0pTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1hc3RlcktleSl9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICB9KTtcbiAgICAgICAgICAgLy8gYWR2YW5jZWQgb3B0aW9uczogaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9zdHVkaW8vZXhwbG9yZXIvc2FuZGJveCNlbWJlZGRpbmctc2FuZGJveFxuICAgICAgICAgIDwvc2NyaXB0PmBcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTdWJzY3JpcHRpb25zKHNlcnZlcikge1xuICAgIFN1YnNjcmlwdGlvblNlcnZlci5jcmVhdGUoXG4gICAgICB7XG4gICAgICAgIGV4ZWN1dGUsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgb25PcGVyYXRpb246IGFzeW5jIChfbWVzc2FnZSwgcGFyYW1zLCB3ZWJTb2NrZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyh3ZWJTb2NrZXQudXBncmFkZVJlcSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwYXRoOlxuICAgICAgICAgIHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoIHx8XG4gICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuc3Vic2NyaXB0aW9uc1BhdGggdG8gY3JlYXRlU3Vic2NyaXB0aW9ucyEnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLHFCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyx5QkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsa0JBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLG1CQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSx1QkFBQSxHQUFBQyx1QkFBQSxDQUFBYixPQUFBO0FBQW1HLFNBQUFhLHdC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
@@ -3,6 +3,44 @@
3
3
  var equalObjects = require('./equalObjects');
4
4
  var Id = require('./Id');
5
5
  var Parse = require('parse/node');
6
+ var vm = require('vm');
7
+ var logger = require('../logger').default;
8
+ var regexTimeout = 0;
9
+ var vmContext = vm.createContext(Object.create(null));
10
+ var scriptCache = new Map();
11
+ var SCRIPT_CACHE_MAX = 1000;
12
+ function setRegexTimeout(ms) {
13
+ regexTimeout = ms;
14
+ }
15
+ function safeRegexTest(pattern, flags, input) {
16
+ if (!regexTimeout) {
17
+ var re = new RegExp(pattern, flags);
18
+ return re.test(input);
19
+ }
20
+ var cacheKey = flags + ':' + pattern;
21
+ var script = scriptCache.get(cacheKey);
22
+ if (!script) {
23
+ if (scriptCache.size >= SCRIPT_CACHE_MAX) {
24
+ scriptCache.clear();
25
+ }
26
+ script = new vm.Script('new RegExp(pattern, flags).test(input)');
27
+ scriptCache.set(cacheKey, script);
28
+ }
29
+ vmContext.pattern = pattern;
30
+ vmContext.flags = flags;
31
+ vmContext.input = input;
32
+ try {
33
+ return script.runInContext(vmContext, {
34
+ timeout: regexTimeout
35
+ });
36
+ } catch (e) {
37
+ if (e.code === 'ERR_SCRIPT_EXECUTION_TIMEOUT') {
38
+ logger.warn(`Regex timeout: pattern "${pattern}" with flags "${flags}" exceeded ${regexTimeout}ms limit`);
39
+ return false;
40
+ }
41
+ throw e;
42
+ }
43
+ }
6
44
 
7
45
  /**
8
46
  * Query Hashes are deterministic hashes for Parse Queries.
@@ -282,28 +320,32 @@ function matchesKeyConstraints(object, key, constraints) {
282
320
  break;
283
321
  }
284
322
  case '$regex':
285
- if (typeof compareTo === 'object') {
286
- return compareTo.test(object[key]);
287
- }
288
- // JS doesn't support perl-style escaping
289
- var expString = '';
290
- var escapeEnd = -2;
291
- var escapeStart = compareTo.indexOf('\\Q');
292
- while (escapeStart > -1) {
293
- // Add the unescaped portion
294
- expString += compareTo.substring(escapeEnd + 2, escapeStart);
295
- escapeEnd = compareTo.indexOf('\\E', escapeStart);
296
- if (escapeEnd > -1) {
297
- expString += compareTo.substring(escapeStart + 2, escapeEnd).replace(/\\\\\\\\E/g, '\\E').replace(/\W/g, '\\$&');
323
+ {
324
+ if (typeof compareTo === 'object') {
325
+ if (!safeRegexTest(compareTo.source, compareTo.flags, object[key])) {
326
+ return false;
327
+ }
328
+ break;
298
329
  }
299
- escapeStart = compareTo.indexOf('\\Q', escapeEnd);
300
- }
301
- expString += compareTo.substring(Math.max(escapeStart, escapeEnd + 2));
302
- var exp = new RegExp(expString, constraints.$options || '');
303
- if (!exp.test(object[key])) {
304
- return false;
330
+ // JS doesn't support perl-style escaping
331
+ var expString = '';
332
+ var escapeEnd = -2;
333
+ var escapeStart = compareTo.indexOf('\\Q');
334
+ while (escapeStart > -1) {
335
+ // Add the unescaped portion
336
+ expString += compareTo.substring(escapeEnd + 2, escapeStart);
337
+ escapeEnd = compareTo.indexOf('\\E', escapeStart);
338
+ if (escapeEnd > -1) {
339
+ expString += compareTo.substring(escapeStart + 2, escapeEnd).replace(/\\\\\\\\E/g, '\\E').replace(/\W/g, '\\$&');
340
+ }
341
+ escapeStart = compareTo.indexOf('\\Q', escapeEnd);
342
+ }
343
+ expString += compareTo.substring(Math.max(escapeStart, escapeEnd + 2));
344
+ if (!safeRegexTest(expString, constraints.$options || '', object[key])) {
345
+ return false;
346
+ }
347
+ break;
305
348
  }
306
- break;
307
349
  case '$nearSphere':
308
350
  if (!compareTo || !object[key]) {
309
351
  return false;
@@ -376,7 +418,8 @@ function matchesKeyConstraints(object, key, constraints) {
376
418
  }
377
419
  var QueryTools = {
378
420
  queryHash: queryHash,
379
- matchesQuery: matchesQuery
421
+ matchesQuery: matchesQuery,
422
+ setRegexTimeout: setRegexTimeout
380
423
  };
381
424
  module.exports = QueryTools;
382
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlcXVhbE9iamVjdHMiLCJyZXF1aXJlIiwiSWQiLCJQYXJzZSIsImZsYXR0ZW5PclF1ZXJpZXMiLCJ3aGVyZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFjY3VtIiwiaSIsIiRvciIsImxlbmd0aCIsImNvbmNhdCIsInN0cmluZ2lmeSIsIm9iamVjdCIsInJlcGxhY2UiLCJBcnJheSIsImlzQXJyYXkiLCJjb3B5IiwibWFwIiwic29ydCIsImpvaW4iLCJzZWN0aW9ucyIsImtleXMiLCJrIiwicHVzaCIsInF1ZXJ5SGFzaCIsInF1ZXJ5IiwiUXVlcnkiLCJjbGFzc05hbWUiLCJfd2hlcmUiLCJjb2x1bW5zIiwidmFsdWVzIiwidW5pcXVlQ29sdW1ucyIsInN1YlZhbHVlcyIsImoiLCJjb250YWlucyIsImhheXN0YWNrIiwibmVlZGxlIiwiX190eXBlIiwicHRyIiwib2JqZWN0SWQiLCJuZWVkIiwiaW5kZXhPZiIsIm1hdGNoZXNRdWVyeSIsImlkIiwiZmllbGQiLCJtYXRjaGVzS2V5Q29uc3RyYWludHMiLCJlcXVhbE9iamVjdHNHZW5lcmljIiwib2JqIiwiY29tcGFyZVRvIiwiZXFsRm4iLCJrZXkiLCJjb25zdHJhaW50cyIsImtleUNvbXBvbmVudHMiLCJzcGxpdCIsInN1Yk9iamVjdEtleSIsImtleVJlbWFpbmRlciIsInNsaWNlIiwiRGF0ZSIsImlzbyIsIl9kZWNvZGUiLCJjb25kaXRpb24iLCJwcm9wZXJ0eUV4aXN0cyIsImV4aXN0ZW5jZUlzUmVxdWlyZWQiLCJ0ZXN0IiwiZXhwU3RyaW5nIiwiZXNjYXBlRW5kIiwiZXNjYXBlU3RhcnQiLCJzdWJzdHJpbmciLCJNYXRoIiwibWF4IiwiZXhwIiwiUmVnRXhwIiwiJG9wdGlvbnMiLCJkaXN0YW5jZSIsInJhZGlhbnNUbyIsIiRtYXhEaXN0YW5jZSIsIkluZmluaXR5Iiwic291dGhXZXN0IiwiJGJveCIsIm5vcnRoRWFzdCIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwidmFsdWUiLCIkcG9seWdvbiIsInBvaW50cyIsImdlb1BvaW50IiwicG9seWdvbiIsIlBvbHlnb24iLCJjb250YWluc1BvaW50IiwiJGNlbnRlclNwaGVyZSIsIldHUzg0UG9pbnQiLCJtYXhEaXN0YW5jZSIsImNlbnRlclBvaW50IiwiR2VvUG9pbnQiLCJwb2ludCIsImNvb3JkaW5hdGVzIiwiJHBvaW50IiwiUXVlcnlUb29scyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvTGl2ZVF1ZXJ5L1F1ZXJ5VG9vbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vZXF1YWxPYmplY3RzJyk7XG52YXIgSWQgPSByZXF1aXJlKCcuL0lkJyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJyk7XG5cbi8qKlxuICogUXVlcnkgSGFzaGVzIGFyZSBkZXRlcm1pbmlzdGljIGhhc2hlcyBmb3IgUGFyc2UgUXVlcmllcy5cbiAqIEFueSB0d28gcXVlcmllcyB0aGF0IGhhdmUgdGhlIHNhbWUgc2V0IG9mIGNvbnN0cmFpbnRzIHdpbGwgcHJvZHVjZSB0aGUgc2FtZVxuICogaGFzaC4gVGhpcyBsZXRzIHVzIHJlbGlhYmx5IGdyb3VwIGNvbXBvbmVudHMgYnkgdGhlIHF1ZXJpZXMgdGhleSBkZXBlbmQgdXBvbixcbiAqIGFuZCBxdWlja2x5IGRldGVybWluZSBpZiBhIHF1ZXJ5IGhhcyBjaGFuZ2VkLlxuICovXG5cbi8qKlxuICogQ29udmVydCAkb3IgcXVlcmllcyBpbnRvIGFuIGFycmF5IG9mIHdoZXJlIGNvbmRpdGlvbnNcbiAqL1xuZnVuY3Rpb24gZmxhdHRlbk9yUXVlcmllcyh3aGVyZSkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aGVyZSwgJyRvcicpKSB7XG4gICAgcmV0dXJuIHdoZXJlO1xuICB9XG4gIHZhciBhY2N1bSA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdoZXJlLiRvci5sZW5ndGg7IGkrKykge1xuICAgIGFjY3VtID0gYWNjdW0uY29uY2F0KHdoZXJlLiRvcltpXSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtO1xufVxuXG4vKipcbiAqIERldGVybWluaXN0aWNhbGx5IHR1cm5zIGFuIG9iamVjdCBpbnRvIGEgc3RyaW5nLiBEaXNyZWdhcmRzIG9yZGVyaW5nXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmplY3QpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgb2JqZWN0ID09PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gJ1wiJyArIG9iamVjdC5yZXBsYWNlKC9cXHwvZywgJyV8JykgKyAnXCInO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0ICsgJyc7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIHZhciBjb3B5ID0gb2JqZWN0Lm1hcChzdHJpbmdpZnkpO1xuICAgIGNvcHkuc29ydCgpO1xuICAgIHJldHVybiAnWycgKyBjb3B5LmpvaW4oJywnKSArICddJztcbiAgfVxuICB2YXIgc2VjdGlvbnMgPSBbXTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICBrZXlzLnNvcnQoKTtcbiAgZm9yICh2YXIgayA9IDA7IGsgPCBrZXlzLmxlbmd0aDsgaysrKSB7XG4gICAgc2VjdGlvbnMucHVzaChzdHJpbmdpZnkoa2V5c1trXSkgKyAnOicgKyBzdHJpbmdpZnkob2JqZWN0W2tleXNba11dKSk7XG4gIH1cbiAgcmV0dXJuICd7JyArIHNlY3Rpb25zLmpvaW4oJywnKSArICd9Jztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGhhc2ggZnJvbSBhIHF1ZXJ5LCB3aXRoIHVuaXF1ZSBmaWVsZHMgZm9yIGNvbHVtbnMsIHZhbHVlcywgb3JkZXIsXG4gKiBza2lwLCBhbmQgbGltaXQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5SGFzaChxdWVyeSkge1xuICBpZiAocXVlcnkgaW5zdGFuY2VvZiBQYXJzZS5RdWVyeSkge1xuICAgIHF1ZXJ5ID0ge1xuICAgICAgY2xhc3NOYW1lOiBxdWVyeS5jbGFzc05hbWUsXG4gICAgICB3aGVyZTogcXVlcnkuX3doZXJlLFxuICAgIH07XG4gIH1cbiAgdmFyIHdoZXJlID0gZmxhdHRlbk9yUXVlcmllcyhxdWVyeS53aGVyZSB8fCB7fSk7XG4gIHZhciBjb2x1bW5zID0gW107XG4gIHZhciB2YWx1ZXMgPSBbXTtcbiAgdmFyIGk7XG4gIGlmIChBcnJheS5pc0FycmF5KHdoZXJlKSkge1xuICAgIHZhciB1bmlxdWVDb2x1bW5zID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IHdoZXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3ViVmFsdWVzID0ge307XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHdoZXJlW2ldKTtcbiAgICAgIGtleXMuc29ydCgpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHN1YlZhbHVlc1trZXlzW2pdXSA9IHdoZXJlW2ldW2tleXNbal1dO1xuICAgICAgICB1bmlxdWVDb2x1bW5zW2tleXNbal1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhbHVlcy5wdXNoKHN1YlZhbHVlcyk7XG4gICAgfVxuICAgIGNvbHVtbnMgPSBPYmplY3Qua2V5cyh1bmlxdWVDb2x1bW5zKTtcbiAgICBjb2x1bW5zLnNvcnQoKTtcbiAgfSBlbHNlIHtcbiAgICBjb2x1bW5zID0gT2JqZWN0LmtleXMod2hlcmUpO1xuICAgIGNvbHVtbnMuc29ydCgpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh3aGVyZVtjb2x1bW5zW2ldXSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNlY3Rpb25zID0gW2NvbHVtbnMuam9pbignLCcpLCBzdHJpbmdpZnkodmFsdWVzKV07XG5cbiAgcmV0dXJuIHF1ZXJ5LmNsYXNzTmFtZSArICc6JyArIHNlY3Rpb25zLmpvaW4oJ3wnKTtcbn1cblxuLyoqXG4gKiBjb250YWlucyAtLSBEZXRlcm1pbmVzIGlmIGFuIG9iamVjdCBpcyBjb250YWluZWQgaW4gYSBsaXN0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgUGFyc2UgcG9pbnRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zKGhheXN0YWNrOiBBcnJheSwgbmVlZGxlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKG5lZWRsZSAmJiBuZWVkbGUuX190eXBlICYmIG5lZWRsZS5fX3R5cGUgPT09ICdQb2ludGVyJykge1xuICAgIGZvciAoY29uc3QgaSBpbiBoYXlzdGFjaykge1xuICAgICAgY29uc3QgcHRyID0gaGF5c3RhY2tbaV07XG4gICAgICBpZiAodHlwZW9mIHB0ciA9PT0gJ3N0cmluZycgJiYgcHRyID09PSBuZWVkbGUub2JqZWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHRyLmNsYXNzTmFtZSA9PT0gbmVlZGxlLmNsYXNzTmFtZSAmJiBwdHIub2JqZWN0SWQgPT09IG5lZWRsZS5vYmplY3RJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuZWVkbGUpKSB7XG4gICAgZm9yIChjb25zdCBuZWVkIG9mIG5lZWRsZSkge1xuICAgICAgaWYgKGNvbnRhaW5zKGhheXN0YWNrLCBuZWVkKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpID4gLTE7XG59XG4vKipcbiAqIG1hdGNoZXNRdWVyeSAtLSBEZXRlcm1pbmVzIGlmIGFuIG9iamVjdCB3b3VsZCBiZSByZXR1cm5lZCBieSBhIFBhcnNlIFF1ZXJ5XG4gKiBJdCdzIGEgbGlnaHR3ZWlnaHQsIHdoZXJlLWNsYXVzZSBvbmx5IGltcGxlbWVudGF0aW9uIG9mIGEgZnVsbCBxdWVyeSBlbmdpbmUuXG4gKiBTaW5jZSB3ZSBmaW5kIHF1ZXJpZXMgdGhhdCBtYXRjaCBvYmplY3RzLCByYXRoZXIgdGhhbiBvYmplY3RzIHRoYXQgbWF0Y2hcbiAqIHF1ZXJpZXMsIHdlIGNhbiBhdm9pZCBidWlsZGluZyBhIGZ1bGwtYmxvd24gcXVlcnkgdG9vbC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1F1ZXJ5KG9iamVjdDogYW55LCBxdWVyeTogYW55KTogYm9vbGVhbiB7XG4gIGlmIChxdWVyeSBpbnN0YW5jZW9mIFBhcnNlLlF1ZXJ5KSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IG9iamVjdC5pZCBpbnN0YW5jZW9mIElkID8gb2JqZWN0LmlkLmNsYXNzTmFtZSA6IG9iamVjdC5jbGFzc05hbWU7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gcXVlcnkuY2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaGVzUXVlcnkob2JqZWN0LCBxdWVyeS5fd2hlcmUpO1xuICB9XG4gIGZvciAodmFyIGZpZWxkIGluIHF1ZXJ5KSB7XG4gICAgaWYgKCFtYXRjaGVzS2V5Q29uc3RyYWludHMob2JqZWN0LCBmaWVsZCwgcXVlcnlbZmllbGRdKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXF1YWxPYmplY3RzR2VuZXJpYyhvYmosIGNvbXBhcmVUbywgZXFsRm4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXFsRm4ob2JqW2ldLCBjb21wYXJlVG8pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZXFsRm4ob2JqLCBjb21wYXJlVG8pO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgbWF0Y2hlcyBhIHNpbmdsZSBrZXkncyBjb25zdHJhaW50c1xuICovXG5mdW5jdGlvbiBtYXRjaGVzS2V5Q29uc3RyYWludHMob2JqZWN0LCBrZXksIGNvbnN0cmFpbnRzKSB7XG4gIGlmIChjb25zdHJhaW50cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoa2V5LmluZGV4T2YoJy4nKSA+PSAwKSB7XG4gICAgLy8gS2V5IHJlZmVyZW5jZXMgYSBzdWJvYmplY3RcbiAgICB2YXIga2V5Q29tcG9uZW50cyA9IGtleS5zcGxpdCgnLicpO1xuICAgIHZhciBzdWJPYmplY3RLZXkgPSBrZXlDb21wb25lbnRzWzBdO1xuICAgIHZhciBrZXlSZW1haW5kZXIgPSBrZXlDb21wb25lbnRzLnNsaWNlKDEpLmpvaW4oJy4nKTtcbiAgICByZXR1cm4gbWF0Y2hlc0tleUNvbnN0cmFpbnRzKG9iamVjdFtzdWJPYmplY3RLZXldIHx8IHt9LCBrZXlSZW1haW5kZXIsIGNvbnN0cmFpbnRzKTtcbiAgfVxuICB2YXIgaTtcbiAgaWYgKGtleSA9PT0gJyRvcicpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChtYXRjaGVzUXVlcnkob2JqZWN0LCBjb25zdHJhaW50c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoa2V5ID09PSAnJGFuZCcpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghbWF0Y2hlc1F1ZXJ5KG9iamVjdCwgY29uc3RyYWludHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGtleSA9PT0gJyRub3InKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobWF0Y2hlc1F1ZXJ5KG9iamVjdCwgY29uc3RyYWludHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGtleSA9PT0gJyRyZWxhdGVkVG8nKSB7XG4gICAgLy8gQmFpbCEgV2UgY2FuJ3QgaGFuZGxlIHJlbGF0aW9uYWwgcXVlcmllcyBsb2NhbGx5XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIERlY29kZSBEYXRlIEpTT04gdmFsdWVcbiAgaWYgKG9iamVjdFtrZXldICYmIG9iamVjdFtrZXldLl9fdHlwZSA9PSAnRGF0ZScpIHtcbiAgICBvYmplY3Rba2V5XSA9IG5ldyBEYXRlKG9iamVjdFtrZXldLmlzbyk7XG4gIH1cbiAgLy8gRXF1YWxpdHkgKG9yIEFycmF5IGNvbnRhaW5zKSBjYXNlc1xuICBpZiAodHlwZW9mIGNvbnN0cmFpbnRzICE9PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFtrZXldKSkge1xuICAgICAgcmV0dXJuIG9iamVjdFtrZXldLmluZGV4T2YoY29uc3RyYWludHMpID4gLTE7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gY29uc3RyYWludHM7XG4gIH1cbiAgdmFyIGNvbXBhcmVUbztcbiAgaWYgKGNvbnN0cmFpbnRzLl9fdHlwZSkge1xuICAgIGlmIChjb25zdHJhaW50cy5fX3R5cGUgPT09ICdQb2ludGVyJykge1xuICAgICAgcmV0dXJuIGVxdWFsT2JqZWN0c0dlbmVyaWMob2JqZWN0W2tleV0sIGNvbnN0cmFpbnRzLCBmdW5jdGlvbiAob2JqLCBwdHIpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0eXBlb2Ygb2JqICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHB0ci5jbGFzc05hbWUgPT09IG9iai5jbGFzc05hbWUgJiZcbiAgICAgICAgICBwdHIub2JqZWN0SWQgPT09IG9iai5vYmplY3RJZFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsT2JqZWN0c0dlbmVyaWMob2JqZWN0W2tleV0sIFBhcnNlLl9kZWNvZGUoa2V5LCBjb25zdHJhaW50cyksIGVxdWFsT2JqZWN0cyk7XG4gIH1cbiAgLy8gTW9yZSBjb21wbGV4IGNhc2VzXG4gIGZvciAodmFyIGNvbmRpdGlvbiBpbiBjb25zdHJhaW50cykge1xuICAgIGNvbXBhcmVUbyA9IGNvbnN0cmFpbnRzW2NvbmRpdGlvbl07XG4gICAgaWYgKGNvbXBhcmVUbz8uX190eXBlKSB7XG4gICAgICBjb21wYXJlVG8gPSBQYXJzZS5fZGVjb2RlKGtleSwgY29tcGFyZVRvKTtcbiAgICB9XG4gICAgc3dpdGNoIChjb25kaXRpb24pIHtcbiAgICAgIGNhc2UgJyRsdCc6XG4gICAgICAgIGlmIChvYmplY3Rba2V5XSA+PSBjb21wYXJlVG8pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICckbHRlJzpcbiAgICAgICAgaWYgKG9iamVjdFtrZXldID4gY29tcGFyZVRvKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJGd0JzpcbiAgICAgICAgaWYgKG9iamVjdFtrZXldIDw9IGNvbXBhcmVUbykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRndGUnOlxuICAgICAgICBpZiAob2JqZWN0W2tleV0gPCBjb21wYXJlVG8pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICckZXEnOlxuICAgICAgICBpZiAoIWVxdWFsT2JqZWN0cyhvYmplY3Rba2V5XSwgY29tcGFyZVRvKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRuZSc6XG4gICAgICAgIGlmIChlcXVhbE9iamVjdHMob2JqZWN0W2tleV0sIGNvbXBhcmVUbykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICckaW4nOlxuICAgICAgICBpZiAoIWNvbnRhaW5zKGNvbXBhcmVUbywgb2JqZWN0W2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJG5pbic6XG4gICAgICAgIGlmIChjb250YWlucyhjb21wYXJlVG8sIG9iamVjdFtrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRhbGwnOlxuICAgICAgICBpZiAoIW9iamVjdFtrZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlVG8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAob2JqZWN0W2tleV0uaW5kZXhPZihjb21wYXJlVG9baV0pIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRleGlzdHMnOiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5RXhpc3RzID0gdHlwZW9mIG9iamVjdFtrZXldICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgY29uc3QgZXhpc3RlbmNlSXNSZXF1aXJlZCA9IGNvbnN0cmFpbnRzWyckZXhpc3RzJ107XG4gICAgICAgIGlmICh0eXBlb2YgY29uc3RyYWludHNbJyRleGlzdHMnXSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgLy8gVGhlIFNESyB3aWxsIG5ldmVyIHN1Ym1pdCBhIG5vbi1ib29sZWFuIGZvciAkZXhpc3RzLCBidXQgaWYgc29tZW9uZVxuICAgICAgICAgIC8vIHRyaWVzIHRvIHN1Ym1pdCBhIG5vbi1ib29sZWFuIGZvciAkZXhpdHMgb3V0c2lkZSB0aGUgU0RLcywganVzdCBpZ25vcmUgaXQuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghcHJvcGVydHlFeGlzdHMgJiYgZXhpc3RlbmNlSXNSZXF1aXJlZCkgfHwgKHByb3BlcnR5RXhpc3RzICYmICFleGlzdGVuY2VJc1JlcXVpcmVkKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJyRyZWdleCc6XG4gICAgICAgIGlmICh0eXBlb2YgY29tcGFyZVRvID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiBjb21wYXJlVG8udGVzdChvYmplY3Rba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgZG9lc24ndCBzdXBwb3J0IHBlcmwtc3R5bGUgZXNjYXBpbmdcbiAgICAgICAgdmFyIGV4cFN0cmluZyA9ICcnO1xuICAgICAgICB2YXIgZXNjYXBlRW5kID0gLTI7XG4gICAgICAgIHZhciBlc2NhcGVTdGFydCA9IGNvbXBhcmVUby5pbmRleE9mKCdcXFxcUScpO1xuICAgICAgICB3aGlsZSAoZXNjYXBlU3RhcnQgPiAtMSkge1xuICAgICAgICAgIC8vIEFkZCB0aGUgdW5lc2NhcGVkIHBvcnRpb25cbiAgICAgICAgICBleHBTdHJpbmcgKz0gY29tcGFyZVRvLnN1YnN0cmluZyhlc2NhcGVFbmQgKyAyLCBlc2NhcGVTdGFydCk7XG4gICAgICAgICAgZXNjYXBlRW5kID0gY29tcGFyZVRvLmluZGV4T2YoJ1xcXFxFJywgZXNjYXBlU3RhcnQpO1xuICAgICAgICAgIGlmIChlc2NhcGVFbmQgPiAtMSkge1xuICAgICAgICAgICAgZXhwU3RyaW5nICs9IGNvbXBhcmVUb1xuICAgICAgICAgICAgICAuc3Vic3RyaW5nKGVzY2FwZVN0YXJ0ICsgMiwgZXNjYXBlRW5kKVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXEUvZywgJ1xcXFxFJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcVy9nLCAnXFxcXCQmJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXNjYXBlU3RhcnQgPSBjb21wYXJlVG8uaW5kZXhPZignXFxcXFEnLCBlc2NhcGVFbmQpO1xuICAgICAgICB9XG4gICAgICAgIGV4cFN0cmluZyArPSBjb21wYXJlVG8uc3Vic3RyaW5nKE1hdGgubWF4KGVzY2FwZVN0YXJ0LCBlc2NhcGVFbmQgKyAyKSk7XG4gICAgICAgIHZhciBleHAgPSBuZXcgUmVnRXhwKGV4cFN0cmluZywgY29uc3RyYWludHMuJG9wdGlvbnMgfHwgJycpO1xuICAgICAgICBpZiAoIWV4cC50ZXN0KG9iamVjdFtrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRuZWFyU3BoZXJlJzpcbiAgICAgICAgaWYgKCFjb21wYXJlVG8gfHwgIW9iamVjdFtrZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbXBhcmVUby5yYWRpYW5zVG8ob2JqZWN0W2tleV0pO1xuICAgICAgICB2YXIgbWF4ID0gY29uc3RyYWludHMuJG1heERpc3RhbmNlIHx8IEluZmluaXR5O1xuICAgICAgICByZXR1cm4gZGlzdGFuY2UgPD0gbWF4O1xuICAgICAgY2FzZSAnJHdpdGhpbic6XG4gICAgICAgIGlmICghY29tcGFyZVRvIHx8ICFvYmplY3Rba2V5XSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc291dGhXZXN0ID0gY29tcGFyZVRvLiRib3hbMF07XG4gICAgICAgIHZhciBub3J0aEVhc3QgPSBjb21wYXJlVG8uJGJveFsxXTtcbiAgICAgICAgaWYgKHNvdXRoV2VzdC5sYXRpdHVkZSA+IG5vcnRoRWFzdC5sYXRpdHVkZSB8fCBzb3V0aFdlc3QubG9uZ2l0dWRlID4gbm9ydGhFYXN0LmxvbmdpdHVkZSkge1xuICAgICAgICAgIC8vIEludmFsaWQgYm94LCBjcm9zc2VzIHRoZSBkYXRlIGxpbmVcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBvYmplY3Rba2V5XS5sYXRpdHVkZSA+IHNvdXRoV2VzdC5sYXRpdHVkZSAmJlxuICAgICAgICAgIG9iamVjdFtrZXldLmxhdGl0dWRlIDwgbm9ydGhFYXN0LmxhdGl0dWRlICYmXG4gICAgICAgICAgb2JqZWN0W2tleV0ubG9uZ2l0dWRlID4gc291dGhXZXN0LmxvbmdpdHVkZSAmJlxuICAgICAgICAgIG9iamVjdFtrZXldLmxvbmdpdHVkZSA8IG5vcnRoRWFzdC5sb25naXR1ZGVcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJyRjb250YWluZWRCeSc6IHtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3Rba2V5XSkge1xuICAgICAgICAgIGlmICghY29udGFpbnMoY29tcGFyZVRvLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjYXNlICckZ2VvV2l0aGluJzoge1xuICAgICAgICBpZiAoY29tcGFyZVRvLiRwb2x5Z29uKSB7XG4gICAgICAgICAgY29uc3QgcG9pbnRzID0gY29tcGFyZVRvLiRwb2x5Z29uLm1hcChnZW9Qb2ludCA9PiBbXG4gICAgICAgICAgICBnZW9Qb2ludC5sYXRpdHVkZSxcbiAgICAgICAgICAgIGdlb1BvaW50LmxvbmdpdHVkZSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICBjb25zdCBwb2x5Z29uID0gbmV3IFBhcnNlLlBvbHlnb24ocG9pbnRzKTtcbiAgICAgICAgICByZXR1cm4gcG9seWdvbi5jb250YWluc1BvaW50KG9iamVjdFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZVRvLiRjZW50ZXJTcGhlcmUpIHtcbiAgICAgICAgICBjb25zdCBbV0dTODRQb2ludCwgbWF4RGlzdGFuY2VdID0gY29tcGFyZVRvLiRjZW50ZXJTcGhlcmU7XG4gICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBuZXcgUGFyc2UuR2VvUG9pbnQoe1xuICAgICAgICAgICAgbGF0aXR1ZGU6IFdHUzg0UG9pbnRbMV0sXG4gICAgICAgICAgICBsb25naXR1ZGU6IFdHUzg0UG9pbnRbMF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUGFyc2UuR2VvUG9pbnQob2JqZWN0W2tleV0pO1xuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gcG9pbnQucmFkaWFuc1RvKGNlbnRlclBvaW50KTtcbiAgICAgICAgICByZXR1cm4gZGlzdGFuY2UgPD0gbWF4RGlzdGFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICckZ2VvSW50ZXJzZWN0cyc6IHtcbiAgICAgICAgY29uc3QgcG9seWdvbiA9IG5ldyBQYXJzZS5Qb2x5Z29uKG9iamVjdFtrZXldLmNvb3JkaW5hdGVzKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUGFyc2UuR2VvUG9pbnQoY29tcGFyZVRvLiRwb2ludCk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uLmNvbnRhaW5zUG9pbnQocG9pbnQpO1xuICAgICAgfVxuICAgICAgY2FzZSAnJG9wdGlvbnMnOlxuICAgICAgICAvLyBOb3QgYSBxdWVyeSB0eXBlLCBidXQgYSB3YXkgdG8gYWRkIG9wdGlvbnMgdG8gJHJlZ2V4LiBJZ25vcmUgYW5kXG4gICAgICAgIC8vIGF2b2lkIHRoZSBkZWZhdWx0XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJG1heERpc3RhbmNlJzpcbiAgICAgICAgLy8gTm90IGEgcXVlcnkgdHlwZSwgYnV0IGEgd2F5IHRvIGFkZCBhIGNhcCB0byAkbmVhclNwaGVyZS4gSWdub3JlIGFuZFxuICAgICAgICAvLyBhdm9pZCB0aGUgZGVmYXVsdFxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRzZWxlY3QnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICckZG9udFNlbGVjdCc6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbnZhciBRdWVyeVRvb2xzID0ge1xuICBxdWVyeUhhc2g6IHF1ZXJ5SGFzaCxcbiAgbWF0Y2hlc1F1ZXJ5OiBtYXRjaGVzUXVlcnksXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXJ5VG9vbHM7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBSUEsWUFBWSxHQUFHQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7QUFDNUMsSUFBSUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hCLElBQUlFLEtBQUssR0FBR0YsT0FBTyxDQUFDLFlBQVksQ0FBQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNHLGdCQUFnQkEsQ0FBQ0MsS0FBSyxFQUFFO0VBQy9CLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7SUFDdkQsT0FBT0EsS0FBSztFQUNkO0VBQ0EsSUFB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
425
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlcXVhbE9iamVjdHMiLCJyZXF1aXJlIiwiSWQiLCJQYXJzZSIsInZtIiwibG9nZ2VyIiwiZGVmYXVsdCIsInJlZ2V4VGltZW91dCIsInZtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJPYmplY3QiLCJjcmVhdGUiLCJzY3JpcHRDYWNoZSIsIk1hcCIsIlNDUklQVF9DQUNIRV9NQVgiLCJzZXRSZWdleFRpbWVvdXQiLCJtcyIsInNhZmVSZWdleFRlc3QiLCJwYXR0ZXJuIiwiZmxhZ3MiLCJpbnB1dCIsInJlIiwiUmVnRXhwIiwidGVzdCIsImNhY2hlS2V5Iiwic2NyaXB0IiwiZ2V0Iiwic2l6ZSIsImNsZWFyIiwiU2NyaXB0Iiwic2V0IiwicnVuSW5Db250ZXh0IiwidGltZW91dCIsImUiLCJjb2RlIiwid2FybiIsImZsYXR0ZW5PclF1ZXJpZXMiLCJ3aGVyZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFjY3VtIiwiaSIsIiRvciIsImxlbmd0aCIsImNvbmNhdCIsInN0cmluZ2lmeSIsIm9iamVjdCIsInJlcGxhY2UiLCJBcnJheSIsImlzQXJyYXkiLCJjb3B5IiwibWFwIiwic29ydCIsImpvaW4iLCJzZWN0aW9ucyIsImtleXMiLCJrIiwicHVzaCIsInF1ZXJ5SGFzaCIsInF1ZXJ5IiwiUXVlcnkiLCJjbGFzc05hbWUiLCJfd2hlcmUiLCJjb2x1bW5zIiwidmFsdWVzIiwidW5pcXVlQ29sdW1ucyIsInN1YlZhbHVlcyIsImoiLCJjb250YWlucyIsImhheXN0YWNrIiwibmVlZGxlIiwiX190eXBlIiwicHRyIiwib2JqZWN0SWQiLCJuZWVkIiwiaW5kZXhPZiIsIm1hdGNoZXNRdWVyeSIsImlkIiwiZmllbGQiLCJtYXRjaGVzS2V5Q29uc3RyYWludHMiLCJlcXVhbE9iamVjdHNHZW5lcmljIiwib2JqIiwiY29tcGFyZVRvIiwiZXFsRm4iLCJrZXkiLCJjb25zdHJhaW50cyIsImtleUNvbXBvbmVudHMiLCJzcGxpdCIsInN1Yk9iamVjdEtleSIsImtleVJlbWFpbmRlciIsInNsaWNlIiwiRGF0ZSIsImlzbyIsIl9kZWNvZGUiLCJjb25kaXRpb24iLCJwcm9wZXJ0eUV4aXN0cyIsImV4aXN0ZW5jZUlzUmVxdWlyZWQiLCJzb3VyY2UiLCJleHBTdHJpbmciLCJlc2NhcGVFbmQiLCJlc2NhcGVTdGFydCIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCIkb3B0aW9ucyIsImRpc3RhbmNlIiwicmFkaWFuc1RvIiwiJG1heERpc3RhbmNlIiwiSW5maW5pdHkiLCJzb3V0aFdlc3QiLCIkYm94Iiwibm9ydGhFYXN0IiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJ2YWx1ZSIsIiRwb2x5Z29uIiwicG9pbnRzIiwiZ2VvUG9pbnQiLCJwb2x5Z29uIiwiUG9seWdvbiIsImNvbnRhaW5zUG9pbnQiLCIkY2VudGVyU3BoZXJlIiwiV0dTODRQb2ludCIsIm1heERpc3RhbmNlIiwiY2VudGVyUG9pbnQiLCJHZW9Qb2ludCIsInBvaW50IiwiY29vcmRpbmF0ZXMiLCIkcG9pbnQiLCJRdWVyeVRvb2xzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvUXVlcnlUb29scy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9lcXVhbE9iamVjdHMnKTtcbnZhciBJZCA9IHJlcXVpcmUoJy4vSWQnKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKTtcbnZhciB2bSA9IHJlcXVpcmUoJ3ZtJyk7XG52YXIgbG9nZ2VyID0gcmVxdWlyZSgnLi4vbG9nZ2VyJykuZGVmYXVsdDtcblxudmFyIHJlZ2V4VGltZW91dCA9IDA7XG52YXIgdm1Db250ZXh0ID0gdm0uY3JlYXRlQ29udGV4dChPYmplY3QuY3JlYXRlKG51bGwpKTtcbnZhciBzY3JpcHRDYWNoZSA9IG5ldyBNYXAoKTtcbnZhciBTQ1JJUFRfQ0FDSEVfTUFYID0gMTAwMDtcblxuZnVuY3Rpb24gc2V0UmVnZXhUaW1lb3V0KG1zKSB7XG4gIHJlZ2V4VGltZW91dCA9IG1zO1xufVxuXG5mdW5jdGlvbiBzYWZlUmVnZXhUZXN0KHBhdHRlcm4sIGZsYWdzLCBpbnB1dCkge1xuICBpZiAoIXJlZ2V4VGltZW91dCkge1xuICAgIHZhciByZSA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICAgIHJldHVybiByZS50ZXN0KGlucHV0KTtcbiAgfVxuICB2YXIgY2FjaGVLZXkgPSBmbGFncyArICc6JyArIHBhdHRlcm47XG4gIHZhciBzY3JpcHQgPSBzY3JpcHRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICBpZiAoIXNjcmlwdCkge1xuICAgIGlmIChzY3JpcHRDYWNoZS5zaXplID49IFNDUklQVF9DQUNIRV9NQVgpIHsgc2NyaXB0Q2FjaGUuY2xlYXIoKTsgfVxuICAgIHNjcmlwdCA9IG5ldyB2bS5TY3JpcHQoJ25ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpLnRlc3QoaW5wdXQpJyk7XG4gICAgc2NyaXB0Q2FjaGUuc2V0KGNhY2hlS2V5LCBzY3JpcHQpO1xuICB9XG4gIHZtQ29udGV4dC5wYXR0ZXJuID0gcGF0dGVybjtcbiAgdm1Db250ZXh0LmZsYWdzID0gZmxhZ3M7XG4gIHZtQ29udGV4dC5pbnB1dCA9IGlucHV0O1xuICB0cnkge1xuICAgIHJldHVybiBzY3JpcHQucnVuSW5Db250ZXh0KHZtQ29udGV4dCwgeyB0aW1lb3V0OiByZWdleFRpbWVvdXQgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZS5jb2RlID09PSAnRVJSX1NDUklQVF9FWEVDVVRJT05fVElNRU9VVCcpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBSZWdleCB0aW1lb3V0OiBwYXR0ZXJuIFwiJHtwYXR0ZXJufVwiIHdpdGggZmxhZ3MgXCIke2ZsYWdzfVwiIGV4Y2VlZGVkICR7cmVnZXhUaW1lb3V0fW1zIGxpbWl0YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqXG4gKiBRdWVyeSBIYXNoZXMgYXJlIGRldGVybWluaXN0aWMgaGFzaGVzIGZvciBQYXJzZSBRdWVyaWVzLlxuICogQW55IHR3byBxdWVyaWVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBzZXQgb2YgY29uc3RyYWludHMgd2lsbCBwcm9kdWNlIHRoZSBzYW1lXG4gKiBoYXNoLiBUaGlzIGxldHMgdXMgcmVsaWFibHkgZ3JvdXAgY29tcG9uZW50cyBieSB0aGUgcXVlcmllcyB0aGV5IGRlcGVuZCB1cG9uLFxuICogYW5kIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGEgcXVlcnkgaGFzIGNoYW5nZWQuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0ICRvciBxdWVyaWVzIGludG8gYW4gYXJyYXkgb2Ygd2hlcmUgY29uZGl0aW9uc1xuICovXG5mdW5jdGlvbiBmbGF0dGVuT3JRdWVyaWVzKHdoZXJlKSB7XG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdoZXJlLCAnJG9yJykpIHtcbiAgICByZXR1cm4gd2hlcmU7XG4gIH1cbiAgdmFyIGFjY3VtID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgd2hlcmUuJG9yLmxlbmd0aDsgaSsrKSB7XG4gICAgYWNjdW0gPSBhY2N1bS5jb25jYXQod2hlcmUuJG9yW2ldKTtcbiAgfVxuICByZXR1cm4gYWNjdW07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpY2FsbHkgdHVybnMgYW4gb2JqZWN0IGludG8gYSBzdHJpbmcuIERpc3JlZ2FyZHMgb3JkZXJpbmdcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KG9iamVjdCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBvYmplY3QgPT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnXCInICsgb2JqZWN0LnJlcGxhY2UoL1xcfC9nLCAnJXwnKSArICdcIic7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3QgKyAnJztcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGNvcHkgPSBvYmplY3QubWFwKHN0cmluZ2lmeSk7XG4gICAgY29weS5zb3J0KCk7XG4gICAgcmV0dXJuICdbJyArIGNvcHkuam9pbignLCcpICsgJ10nO1xuICB9XG4gIHZhciBzZWN0aW9ucyA9IFtdO1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gIGtleXMuc29ydCgpO1xuICBmb3IgKHZhciBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICBzZWN0aW9ucy5wdXNoKHN0cmluZ2lmeShrZXlzW2tdKSArICc6JyArIHN0cmluZ2lmeShvYmplY3Rba2V5c1trXV0pKTtcbiAgfVxuICByZXR1cm4gJ3snICsgc2VjdGlvbnMuam9pbignLCcpICsgJ30nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgaGFzaCBmcm9tIGEgcXVlcnksIHdpdGggdW5pcXVlIGZpZWxkcyBmb3IgY29sdW1ucywgdmFsdWVzLCBvcmRlcixcbiAqIHNraXAsIGFuZCBsaW1pdC5cbiAqL1xuZnVuY3Rpb24gcXVlcnlIYXNoKHF1ZXJ5KSB7XG4gIGlmIChxdWVyeSBpbnN0YW5jZW9mIFBhcnNlLlF1ZXJ5KSB7XG4gICAgcXVlcnkgPSB7XG4gICAgICBjbGFzc05hbWU6IHF1ZXJ5LmNsYXNzTmFtZSxcbiAgICAgIHdoZXJlOiBxdWVyeS5fd2hlcmUsXG4gICAgfTtcbiAgfVxuICB2YXIgd2hlcmUgPSBmbGF0dGVuT3JRdWVyaWVzKHF1ZXJ5LndoZXJlIHx8IHt9KTtcbiAgdmFyIGNvbHVtbnMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaTtcbiAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmUpKSB7XG4gICAgdmFyIHVuaXF1ZUNvbHVtbnMgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2hlcmUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdWJWYWx1ZXMgPSB7fTtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMod2hlcmVbaV0pO1xuICAgICAga2V5cy5zb3J0KCk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc3ViVmFsdWVzW2tleXNbal1dID0gd2hlcmVbaV1ba2V5c1tqXV07XG4gICAgICAgIHVuaXF1ZUNvbHVtbnNba2V5c1tqXV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFsdWVzLnB1c2goc3ViVmFsdWVzKTtcbiAgICB9XG4gICAgY29sdW1ucyA9IE9iamVjdC5rZXlzKHVuaXF1ZUNvbHVtbnMpO1xuICAgIGNvbHVtbnMuc29ydCgpO1xuICB9IGVsc2Uge1xuICAgIGNvbHVtbnMgPSBPYmplY3Qua2V5cyh3aGVyZSk7XG4gICAgY29sdW1ucy5zb3J0KCk7XG4gICAgZm9yIChpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHdoZXJlW2NvbHVtbnNbaV1dKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc2VjdGlvbnMgPSBbY29sdW1ucy5qb2luKCcsJyksIHN0cmluZ2lmeSh2YWx1ZXMpXTtcblxuICByZXR1cm4gcXVlcnkuY2xhc3NOYW1lICsgJzonICsgc2VjdGlvbnMuam9pbignfCcpO1xufVxuXG4vKipcbiAqIGNvbnRhaW5zIC0tIERldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGNvbnRhaW5lZCBpbiBhIGxpc3Qgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBQYXJzZSBwb2ludGVycy5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnMoaGF5c3RhY2s6IEFycmF5LCBuZWVkbGU6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAobmVlZGxlICYmIG5lZWRsZS5fX3R5cGUgJiYgbmVlZGxlLl9fdHlwZSA9PT0gJ1BvaW50ZXInKSB7XG4gICAgZm9yIChjb25zdCBpIGluIGhheXN0YWNrKSB7XG4gICAgICBjb25zdCBwdHIgPSBoYXlzdGFja1tpXTtcbiAgICAgIGlmICh0eXBlb2YgcHRyID09PSAnc3RyaW5nJyAmJiBwdHIgPT09IG5lZWRsZS5vYmplY3RJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwdHIuY2xhc3NOYW1lID09PSBuZWVkbGUuY2xhc3NOYW1lICYmIHB0ci5vYmplY3RJZCA9PT0gbmVlZGxlLm9iamVjdElkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5lZWRsZSkpIHtcbiAgICBmb3IgKGNvbnN0IG5lZWQgb2YgbmVlZGxlKSB7XG4gICAgICBpZiAoY29udGFpbnMoaGF5c3RhY2ssIG5lZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPiAtMTtcbn1cbi8qKlxuICogbWF0Y2hlc1F1ZXJ5IC0tIERldGVybWluZXMgaWYgYW4gb2JqZWN0IHdvdWxkIGJlIHJldHVybmVkIGJ5IGEgUGFyc2UgUXVlcnlcbiAqIEl0J3MgYSBsaWdodHdlaWdodCwgd2hlcmUtY2xhdXNlIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgYSBmdWxsIHF1ZXJ5IGVuZ2luZS5cbiAqIFNpbmNlIHdlIGZpbmQgcXVlcmllcyB0aGF0IG1hdGNoIG9iamVjdHMsIHJhdGhlciB0aGFuIG9iamVjdHMgdGhhdCBtYXRjaFxuICogcXVlcmllcywgd2UgY2FuIGF2b2lkIGJ1aWxkaW5nIGEgZnVsbC1ibG93biBxdWVyeSB0b29sLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzUXVlcnkob2JqZWN0OiBhbnksIHF1ZXJ5OiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgUGFyc2UuUXVlcnkpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gb2JqZWN0LmlkIGluc3RhbmNlb2YgSWQgPyBvYmplY3QuaWQuY2xhc3NOYW1lIDogb2JqZWN0LmNsYXNzTmFtZTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSBxdWVyeS5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXNRdWVyeShvYmplY3QsIHF1ZXJ5Ll93aGVyZSk7XG4gIH1cbiAgZm9yICh2YXIgZmllbGQgaW4gcXVlcnkpIHtcbiAgICBpZiAoIW1hdGNoZXNLZXlDb25zdHJhaW50cyhvYmplY3QsIGZpZWxkLCBxdWVyeVtmaWVsZF0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBlcXVhbE9iamVjdHNHZW5lcmljKG9iaiwgY29tcGFyZVRvLCBlcWxGbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlcWxGbihvYmpbaV0sIGNvbXBhcmVUbykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBlcWxGbihvYmosIGNvbXBhcmVUbyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9iamVjdCBtYXRjaGVzIGEgc2luZ2xlIGtleSdzIGNvbnN0cmFpbnRzXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNLZXlDb25zdHJhaW50cyhvYmplY3QsIGtleSwgY29uc3RyYWludHMpIHtcbiAgaWYgKGNvbnN0cmFpbnRzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChrZXkuaW5kZXhPZignLicpID49IDApIHtcbiAgICAvLyBLZXkgcmVmZXJlbmNlcyBhIHN1Ym9iamVjdFxuICAgIHZhciBrZXlDb21wb25lbnRzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgdmFyIHN1Yk9iamVjdEtleSA9IGtleUNvbXBvbmVudHNbMF07XG4gICAgdmFyIGtleVJlbWFpbmRlciA9IGtleUNvbXBvbmVudHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgIHJldHVybiBtYXRjaGVzS2V5Q29uc3RyYWludHMob2JqZWN0W3N1Yk9iamVjdEtleV0gfHwge30sIGtleVJlbWFpbmRlciwgY29uc3RyYWludHMpO1xuICB9XG4gIHZhciBpO1xuICBpZiAoa2V5ID09PSAnJG9yJykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBjb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG1hdGNoZXNRdWVyeShvYmplY3QsIGNvbnN0cmFpbnRzW2ldKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChrZXkgPT09ICckYW5kJykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBjb25zdHJhaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFtYXRjaGVzUXVlcnkob2JqZWN0LCBjb25zdHJhaW50c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoa2V5ID09PSAnJG5vcicpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgY29uc3RyYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChtYXRjaGVzUXVlcnkob2JqZWN0LCBjb25zdHJhaW50c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoa2V5ID09PSAnJHJlbGF0ZWRUbycpIHtcbiAgICAvLyBCYWlsISBXZSBjYW4ndCBoYW5kbGUgcmVsYXRpb25hbCBxdWVyaWVzIGxvY2FsbHlcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gRGVjb2RlIERhdGUgSlNPTiB2YWx1ZVxuICBpZiAob2JqZWN0W2tleV0gJiYgb2JqZWN0W2tleV0uX190eXBlID09ICdEYXRlJykge1xuICAgIG9iamVjdFtrZXldID0gbmV3IERhdGUob2JqZWN0W2tleV0uaXNvKTtcbiAgfVxuICAvLyBFcXVhbGl0eSAob3IgQXJyYXkgY29udGFpbnMpIGNhc2VzXG4gIGlmICh0eXBlb2YgY29uc3RyYWludHMgIT09ICdvYmplY3QnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0W2tleV0pKSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV0uaW5kZXhPZihjb25zdHJhaW50cykgPiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBjb25zdHJhaW50cztcbiAgfVxuICB2YXIgY29tcGFyZVRvO1xuICBpZiAoY29uc3RyYWludHMuX190eXBlKSB7XG4gICAgaWYgKGNvbnN0cmFpbnRzLl9fdHlwZSA9PT0gJ1BvaW50ZXInKSB7XG4gICAgICByZXR1cm4gZXF1YWxPYmplY3RzR2VuZXJpYyhvYmplY3Rba2V5XSwgY29uc3RyYWludHMsIGZ1bmN0aW9uIChvYmosIHB0cikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBvYmogIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHRyLmNsYXNzTmFtZSA9PT0gb2JqLmNsYXNzTmFtZSAmJlxuICAgICAgICAgIHB0ci5vYmplY3RJZCA9PT0gb2JqLm9iamVjdElkXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXF1YWxPYmplY3RzR2VuZXJpYyhvYmplY3Rba2V5XSwgUGFyc2UuX2RlY29kZShrZXksIGNvbnN0cmFpbnRzKSwgZXF1YWxPYmplY3RzKTtcbiAgfVxuICAvLyBNb3JlIGNvbXBsZXggY2FzZXNcbiAgZm9yICh2YXIgY29uZGl0aW9uIGluIGNvbnN0cmFpbnRzKSB7XG4gICAgY29tcGFyZVRvID0gY29uc3RyYWludHNbY29uZGl0aW9uXTtcbiAgICBpZiAoY29tcGFyZVRvPy5fX3R5cGUpIHtcbiAgICAgIGNvbXBhcmVUbyA9IFBhcnNlLl9kZWNvZGUoa2V5LCBjb21wYXJlVG8pO1xuICAgIH1cbiAgICBzd2l0Y2ggKGNvbmRpdGlvbikge1xuICAgICAgY2FzZSAnJGx0JzpcbiAgICAgICAgaWYgKG9iamVjdFtrZXldID49IGNvbXBhcmVUbykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRsdGUnOlxuICAgICAgICBpZiAob2JqZWN0W2tleV0gPiBjb21wYXJlVG8pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICckZ3QnOlxuICAgICAgICBpZiAob2JqZWN0W2tleV0gPD0gY29tcGFyZVRvKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJGd0ZSc6XG4gICAgICAgIGlmIChvYmplY3Rba2V5XSA8IGNvbXBhcmVUbykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRlcSc6XG4gICAgICAgIGlmICghZXF1YWxPYmplY3RzKG9iamVjdFtrZXldLCBjb21wYXJlVG8pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJG5lJzpcbiAgICAgICAgaWYgKGVxdWFsT2JqZWN0cyhvYmplY3Rba2V5XSwgY29tcGFyZVRvKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRpbic6XG4gICAgICAgIGlmICghY29udGFpbnMoY29tcGFyZVRvLCBvYmplY3Rba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICckbmluJzpcbiAgICAgICAgaWYgKGNvbnRhaW5zKGNvbXBhcmVUbywgb2JqZWN0W2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJGFsbCc6XG4gICAgICAgIGlmICghb2JqZWN0W2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBhcmVUby5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChvYmplY3Rba2V5XS5pbmRleE9mKGNvbXBhcmVUb1tpXSkgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJGV4aXN0cyc6IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlFeGlzdHMgPSB0eXBlb2Ygb2JqZWN0W2tleV0gIT09ICd1bmRlZmluZWQnO1xuICAgICAgICBjb25zdCBleGlzdGVuY2VJc1JlcXVpcmVkID0gY29uc3RyYWludHNbJyRleGlzdHMnXTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zdHJhaW50c1snJGV4aXN0cyddICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAvLyBUaGUgU0RLIHdpbGwgbmV2ZXIgc3VibWl0IGEgbm9uLWJvb2xlYW4gZm9yICRleGlzdHMsIGJ1dCBpZiBzb21lb25lXG4gICAgICAgICAgLy8gdHJpZXMgdG8gc3VibWl0IGEgbm9uLWJvb2xlYW4gZm9yICRleGl0cyBvdXRzaWRlIHRoZSBTREtzLCBqdXN0IGlnbm9yZSBpdC5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKCFwcm9wZXJ0eUV4aXN0cyAmJiBleGlzdGVuY2VJc1JlcXVpcmVkKSB8fCAocHJvcGVydHlFeGlzdHMgJiYgIWV4aXN0ZW5jZUlzUmVxdWlyZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnJHJlZ2V4Jzoge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBhcmVUbyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoIXNhZmVSZWdleFRlc3QoY29tcGFyZVRvLnNvdXJjZSwgY29tcGFyZVRvLmZsYWdzLCBvYmplY3Rba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSlMgZG9lc24ndCBzdXBwb3J0IHBlcmwtc3R5bGUgZXNjYXBpbmdcbiAgICAgICAgdmFyIGV4cFN0cmluZyA9ICcnO1xuICAgICAgICB2YXIgZXNjYXBlRW5kID0gLTI7XG4gICAgICAgIHZhciBlc2NhcGVTdGFydCA9IGNvbXBhcmVUby5pbmRleE9mKCdcXFxcUScpO1xuICAgICAgICB3aGlsZSAoZXNjYXBlU3RhcnQgPiAtMSkge1xuICAgICAgICAgIC8vIEFkZCB0aGUgdW5lc2NhcGVkIHBvcnRpb25cbiAgICAgICAgICBleHBTdHJpbmcgKz0gY29tcGFyZVRvLnN1YnN0cmluZyhlc2NhcGVFbmQgKyAyLCBlc2NhcGVTdGFydCk7XG4gICAgICAgICAgZXNjYXBlRW5kID0gY29tcGFyZVRvLmluZGV4T2YoJ1xcXFxFJywgZXNjYXBlU3RhcnQpO1xuICAgICAgICAgIGlmIChlc2NhcGVFbmQgPiAtMSkge1xuICAgICAgICAgICAgZXhwU3RyaW5nICs9IGNvbXBhcmVUb1xuICAgICAgICAgICAgICAuc3Vic3RyaW5nKGVzY2FwZVN0YXJ0ICsgMiwgZXNjYXBlRW5kKVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXEUvZywgJ1xcXFxFJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcVy9nLCAnXFxcXCQmJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXNjYXBlU3RhcnQgPSBjb21wYXJlVG8uaW5kZXhPZignXFxcXFEnLCBlc2NhcGVFbmQpO1xuICAgICAgICB9XG4gICAgICAgIGV4cFN0cmluZyArPSBjb21wYXJlVG8uc3Vic3RyaW5nKE1hdGgubWF4KGVzY2FwZVN0YXJ0LCBlc2NhcGVFbmQgKyAyKSk7XG4gICAgICAgIGlmICghc2FmZVJlZ2V4VGVzdChleHBTdHJpbmcsIGNvbnN0cmFpbnRzLiRvcHRpb25zIHx8ICcnLCBvYmplY3Rba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICckbmVhclNwaGVyZSc6XG4gICAgICAgIGlmICghY29tcGFyZVRvIHx8ICFvYmplY3Rba2V5XSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlzdGFuY2UgPSBjb21wYXJlVG8ucmFkaWFuc1RvKG9iamVjdFtrZXldKTtcbiAgICAgICAgdmFyIG1heCA9IGNvbnN0cmFpbnRzLiRtYXhEaXN0YW5jZSB8fCBJbmZpbml0eTtcbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlIDw9IG1heDtcbiAgICAgIGNhc2UgJyR3aXRoaW4nOlxuICAgICAgICBpZiAoIWNvbXBhcmVUbyB8fCAhb2JqZWN0W2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNvdXRoV2VzdCA9IGNvbXBhcmVUby4kYm94WzBdO1xuICAgICAgICB2YXIgbm9ydGhFYXN0ID0gY29tcGFyZVRvLiRib3hbMV07XG4gICAgICAgIGlmIChzb3V0aFdlc3QubGF0aXR1ZGUgPiBub3J0aEVhc3QubGF0aXR1ZGUgfHwgc291dGhXZXN0LmxvbmdpdHVkZSA+IG5vcnRoRWFzdC5sb25naXR1ZGUpIHtcbiAgICAgICAgICAvLyBJbnZhbGlkIGJveCwgY3Jvc3NlcyB0aGUgZGF0ZSBsaW5lXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgb2JqZWN0W2tleV0ubGF0aXR1ZGUgPiBzb3V0aFdlc3QubGF0aXR1ZGUgJiZcbiAgICAgICAgICBvYmplY3Rba2V5XS5sYXRpdHVkZSA8IG5vcnRoRWFzdC5sYXRpdHVkZSAmJlxuICAgICAgICAgIG9iamVjdFtrZXldLmxvbmdpdHVkZSA+IHNvdXRoV2VzdC5sb25naXR1ZGUgJiZcbiAgICAgICAgICBvYmplY3Rba2V5XS5sb25naXR1ZGUgPCBub3J0aEVhc3QubG9uZ2l0dWRlXG4gICAgICAgICk7XG4gICAgICBjYXNlICckY29udGFpbmVkQnknOiB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0W2tleV0pIHtcbiAgICAgICAgICBpZiAoIWNvbnRhaW5zKGNvbXBhcmVUbywgdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY2FzZSAnJGdlb1dpdGhpbic6IHtcbiAgICAgICAgaWYgKGNvbXBhcmVUby4kcG9seWdvbikge1xuICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGNvbXBhcmVUby4kcG9seWdvbi5tYXAoZ2VvUG9pbnQgPT4gW1xuICAgICAgICAgICAgZ2VvUG9pbnQubGF0aXR1ZGUsXG4gICAgICAgICAgICBnZW9Qb2ludC5sb25naXR1ZGUsXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgY29uc3QgcG9seWdvbiA9IG5ldyBQYXJzZS5Qb2x5Z29uKHBvaW50cyk7XG4gICAgICAgICAgcmV0dXJuIHBvbHlnb24uY29udGFpbnNQb2ludChvYmplY3Rba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVUby4kY2VudGVyU3BoZXJlKSB7XG4gICAgICAgICAgY29uc3QgW1dHUzg0UG9pbnQsIG1heERpc3RhbmNlXSA9IGNvbXBhcmVUby4kY2VudGVyU3BoZXJlO1xuICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gbmV3IFBhcnNlLkdlb1BvaW50KHtcbiAgICAgICAgICAgIGxhdGl0dWRlOiBXR1M4NFBvaW50WzFdLFxuICAgICAgICAgICAgbG9uZ2l0dWRlOiBXR1M4NFBvaW50WzBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBhcnNlLkdlb1BvaW50KG9iamVjdFtrZXldKTtcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHBvaW50LnJhZGlhbnNUbyhjZW50ZXJQb2ludCk7XG4gICAgICAgICAgcmV0dXJuIGRpc3RhbmNlIDw9IG1heERpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnJGdlb0ludGVyc2VjdHMnOiB7XG4gICAgICAgIGNvbnN0IHBvbHlnb24gPSBuZXcgUGFyc2UuUG9seWdvbihvYmplY3Rba2V5XS5jb29yZGluYXRlcyk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBhcnNlLkdlb1BvaW50KGNvbXBhcmVUby4kcG9pbnQpO1xuICAgICAgICByZXR1cm4gcG9seWdvbi5jb250YWluc1BvaW50KHBvaW50KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJyRvcHRpb25zJzpcbiAgICAgICAgLy8gTm90IGEgcXVlcnkgdHlwZSwgYnV0IGEgd2F5IHRvIGFkZCBvcHRpb25zIHRvICRyZWdleC4gSWdub3JlIGFuZFxuICAgICAgICAvLyBhdm9pZCB0aGUgZGVmYXVsdFxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJyRtYXhEaXN0YW5jZSc6XG4gICAgICAgIC8vIE5vdCBhIHF1ZXJ5IHR5cGUsIGJ1dCBhIHdheSB0byBhZGQgYSBjYXAgdG8gJG5lYXJTcGhlcmUuIElnbm9yZSBhbmRcbiAgICAgICAgLy8gYXZvaWQgdGhlIGRlZmF1bHRcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICckc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnJGRvbnRTZWxlY3QnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG52YXIgUXVlcnlUb29scyA9IHtcbiAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gIG1hdGNoZXNRdWVyeTogbWF0Y2hlc1F1ZXJ5LFxuICBzZXRSZWdleFRpbWVvdXQ6IHNldFJlZ2V4VGltZW91dCxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVlcnlUb29scztcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJQSxZQUFZLEdBQUdDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1QyxJQUFJQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEIsSUFBSUUsS0FBSyxHQUFHRixPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ2pDLElBQUlHLEVBQUUsR0FBR0gsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN0QixJQUFJSSxNQUFNLEdBQUdKLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQ0ssT0FBTztBQUV6QyxJQUFJQyxZQUFZLEdBQUcsQ0FBQztBQUNwQixJQUFJQyxTQUFTLEdBQUdKLEVBQUUsQ0FBQ0ssYUFBYSxDQUFDQyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxJQUFJQyxXQUFXLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsSUFBSUMsZ0JBQWdCLEdBQUcsSUFBSTtBQUUzQixTQUFTQyxlQUFlQSxDQUFDQyxFQUFFLEVBQUU7RUFDM0JULFlBQVksR0FBR1MsRUFBRTtBQUNuQjtBQUVBLFNBQVNDLGFBQWFBLENBQUNDLE9BQU8sRUFBRUMsS0FBSyxFQUFFQyxLQUFLLEVBQUU7RUFDNUMsSUFBSSxDQUFDYixZQUFZLEVBQUU7SUFDakIsSUFBSWMsRUFBRSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0osT0FBTyxFQUFFQyxLQUFLLENBQUM7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