parse-server 8.0.0-alpha.8 → 8.0.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.
Files changed (70) hide show
  1. package/README.md +1 -3
  2. package/lib/Adapters/AdapterLoader.js +2 -3
  3. package/lib/Adapters/Auth/index.js +2 -2
  4. package/lib/Adapters/Auth/mfa.js +4 -6
  5. package/lib/Adapters/Cache/RedisCacheAdapter.js +2 -2
  6. package/lib/Adapters/PubSub/RedisPubSub.js +28 -12
  7. package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +15 -18
  8. package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +19 -21
  9. package/lib/Adapters/Storage/Mongo/MongoTransform.js +8 -8
  10. package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +23 -18
  11. package/lib/Auth.js +8 -12
  12. package/lib/Config.js +20 -3
  13. package/lib/Controllers/AnalyticsController.js +3 -3
  14. package/lib/Controllers/DatabaseController.js +35 -31
  15. package/lib/Controllers/ParseGraphQLController.js +44 -57
  16. package/lib/Controllers/SchemaController.js +12 -12
  17. package/lib/Controllers/UserController.js +49 -60
  18. package/lib/Controllers/index.js +8 -9
  19. package/lib/GraphQL/helpers/objectsQueries.js +2 -1
  20. package/lib/GraphQL/loaders/defaultGraphQLTypes.js +8 -9
  21. package/lib/GraphQL/loaders/defaultRelaySchema.js +5 -9
  22. package/lib/GraphQL/loaders/filesMutations.js +4 -7
  23. package/lib/GraphQL/loaders/functionsMutations.js +3 -7
  24. package/lib/GraphQL/loaders/parseClassMutations.js +18 -17
  25. package/lib/GraphQL/loaders/parseClassTypes.js +62 -52
  26. package/lib/GraphQL/loaders/schemaDirectives.js +3 -5
  27. package/lib/GraphQL/loaders/usersMutations.js +5 -13
  28. package/lib/GraphQL/transformers/mutation.js +6 -9
  29. package/lib/GraphQL/transformers/query.js +18 -18
  30. package/lib/GraphQL/transformers/schemaFields.js +10 -12
  31. package/lib/LiveQuery/ParseLiveQueryServer.js +7 -9
  32. package/lib/LiveQuery/QueryTools.js +2 -3
  33. package/lib/Options/Definitions.js +6 -1
  34. package/lib/Options/docs.js +3 -2
  35. package/lib/Options/index.js +1 -1
  36. package/lib/ParseServer.js +23 -21
  37. package/lib/ParseServerRESTController.js +4 -8
  38. package/lib/PromiseRouter.js +2 -2
  39. package/lib/RestWrite.js +5 -9
  40. package/lib/Routers/AggregateRouter.js +2 -2
  41. package/lib/Routers/AudiencesRouter.js +2 -2
  42. package/lib/Routers/ClassesRouter.js +6 -7
  43. package/lib/Routers/CloudCodeRouter.js +3 -3
  44. package/lib/Routers/FeaturesRouter.js +2 -3
  45. package/lib/Routers/FilesRouter.js +4 -7
  46. package/lib/Routers/FunctionsRouter.js +2 -2
  47. package/lib/Routers/GlobalConfigRouter.js +3 -3
  48. package/lib/Routers/GraphQLRouter.js +2 -2
  49. package/lib/Routers/HooksRouter.js +5 -5
  50. package/lib/Routers/IAPValidationRouter.js +4 -4
  51. package/lib/Routers/InstallationsRouter.js +2 -2
  52. package/lib/Routers/PagesRouter.js +22 -36
  53. package/lib/Routers/PublicAPIRouter.js +26 -32
  54. package/lib/Routers/PushRouter.js +2 -2
  55. package/lib/Routers/SchemasRouter.js +7 -8
  56. package/lib/Routers/UsersRouter.js +34 -25
  57. package/lib/SchemaMigrations/DefinedSchemas.js +4 -7
  58. package/lib/StatusHandler.js +10 -9
  59. package/lib/Utils.js +5 -8
  60. package/lib/batch.js +5 -5
  61. package/lib/cloud-code/Parse.Cloud.js +22 -22
  62. package/lib/logger.js +1 -1
  63. package/lib/middlewares.js +34 -16
  64. package/lib/triggers.js +12 -12
  65. package/lib/vendor/mongodbUrl.js +2 -2
  66. package/package.json +22 -17
  67. package/public_html/invalid_verification_link.html +3 -3
  68. package/types/index.d.ts +0 -0
  69. package/types/logger.d.ts +2 -0
  70. package/types/tsconfig.json +18 -0
@@ -24,11 +24,8 @@ var _parseGraphQLUtils = require("../parseGraphQLUtils");
24
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
25
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
28
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
29
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
30
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
31
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable indent */
27
+ /* eslint-disable indent */
28
+
32
29
  const getParseClassTypeConfig = function (parseClassConfig) {
33
30
  return parseClassConfig && parseClassConfig.type || {};
34
31
  };
@@ -131,12 +128,13 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
131
128
  fields: () => classCreateFields.reduce((fields, field) => {
132
129
  const type = (0, _inputType.transformInputTypeToGraphQL)(parseClass.fields[field].type, parseClass.fields[field].targetClass, parseGraphQLSchema.parseClassTypes);
133
130
  if (type) {
134
- return _objectSpread(_objectSpread({}, fields), {}, {
131
+ return {
132
+ ...fields,
135
133
  [field]: {
136
134
  description: `This is the object ${field}.`,
137
135
  type: parseClass.fields[field].required ? new _graphql.GraphQLNonNull(type) : type
138
136
  }
139
- });
137
+ };
140
138
  } else {
141
139
  return fields;
142
140
  }
@@ -154,12 +152,13 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
154
152
  fields: () => classUpdateFields.reduce((fields, field) => {
155
153
  const type = (0, _inputType.transformInputTypeToGraphQL)(parseClass.fields[field].type, parseClass.fields[field].targetClass, parseGraphQLSchema.parseClassTypes);
156
154
  if (type) {
157
- return _objectSpread(_objectSpread({}, fields), {}, {
155
+ return {
156
+ ...fields,
158
157
  [field]: {
159
158
  description: `This is the object ${field}.`,
160
159
  type
161
160
  }
162
- });
161
+ };
163
162
  } else {
164
163
  return fields;
165
164
  }
@@ -220,24 +219,26 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
220
219
  let classGraphQLConstraintsType = new _graphql.GraphQLInputObjectType({
221
220
  name: classGraphQLConstraintsTypeName,
222
221
  description: `The ${classGraphQLConstraintsTypeName} input type is used in operations that involve filtering objects of ${graphQLClassName} class.`,
223
- fields: () => _objectSpread(_objectSpread({}, classConstraintFields.reduce((fields, field) => {
224
- if (['OR', 'AND', 'NOR'].includes(field)) {
225
- parseGraphQLSchema.log.warn(`Field ${field} could not be added to the auto schema ${classGraphQLConstraintsTypeName} because it collided with an existing one.`);
226
- return fields;
227
- }
228
- const parseField = field === 'id' ? 'objectId' : field;
229
- const type = (0, _constraintType.transformConstraintTypeToGraphQL)(parseClass.fields[parseField].type, parseClass.fields[parseField].targetClass, parseGraphQLSchema.parseClassTypes, field);
230
- if (type) {
231
- return _objectSpread(_objectSpread({}, fields), {}, {
232
- [field]: {
233
- description: `This is the object ${field}.`,
234
- type
235
- }
236
- });
237
- } else {
238
- return fields;
239
- }
240
- }, {})), {}, {
222
+ fields: () => ({
223
+ ...classConstraintFields.reduce((fields, field) => {
224
+ if (['OR', 'AND', 'NOR'].includes(field)) {
225
+ parseGraphQLSchema.log.warn(`Field ${field} could not be added to the auto schema ${classGraphQLConstraintsTypeName} because it collided with an existing one.`);
226
+ return fields;
227
+ }
228
+ const parseField = field === 'id' ? 'objectId' : field;
229
+ const type = (0, _constraintType.transformConstraintTypeToGraphQL)(parseClass.fields[parseField].type, parseClass.fields[parseField].targetClass, parseGraphQLSchema.parseClassTypes, field);
230
+ if (type) {
231
+ return {
232
+ ...fields,
233
+ [field]: {
234
+ description: `This is the object ${field}.`,
235
+ type
236
+ }
237
+ };
238
+ } else {
239
+ return fields;
240
+ }
241
+ }, {}),
241
242
  OR: {
242
243
  description: 'This is the OR operator to compound constraints.',
243
244
  type: new _graphql.GraphQLList(new _graphql.GraphQLNonNull(classGraphQLConstraintsType))
@@ -283,7 +284,9 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
283
284
  asc,
284
285
  desc
285
286
  } = fieldConfig;
286
- const updatedSortFields = _objectSpread({}, sortFields);
287
+ const updatedSortFields = {
288
+ ...sortFields
289
+ };
287
290
  const value = field === 'id' ? 'objectId' : field;
288
291
  if (asc) {
289
292
  updatedSortFields[`${field}_ASC`] = {
@@ -299,7 +302,7 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
299
302
  }, {})
300
303
  });
301
304
  classGraphQLOrderType = parseGraphQLSchema.addGraphQLType(classGraphQLOrderType);
302
- const classGraphQLFindArgs = _objectSpread(_objectSpread({
305
+ const classGraphQLFindArgs = {
303
306
  where: {
304
307
  description: 'These are the conditions that the objects need to match in order to be found.',
305
308
  type: classGraphQLConstraintsType
@@ -308,27 +311,30 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
308
311
  description: 'The fields to be used when sorting the data fetched.',
309
312
  type: classGraphQLOrderType ? new _graphql.GraphQLList(new _graphql.GraphQLNonNull(classGraphQLOrderType)) : _graphql.GraphQLString
310
313
  },
311
- skip: defaultGraphQLTypes.SKIP_ATT
312
- }, _graphqlRelay.connectionArgs), {}, {
314
+ skip: defaultGraphQLTypes.SKIP_ATT,
315
+ ..._graphqlRelay.connectionArgs,
313
316
  options: defaultGraphQLTypes.READ_OPTIONS_ATT
314
- });
317
+ };
315
318
  const classGraphQLOutputTypeName = `${graphQLClassName}`;
316
319
  const interfaces = [defaultGraphQLTypes.PARSE_OBJECT, parseGraphQLSchema.relayNodeInterface];
317
- const parseObjectFields = _objectSpread(_objectSpread({
318
- id: (0, _graphqlRelay.globalIdField)(className, obj => obj.objectId)
319
- }, defaultGraphQLTypes.PARSE_OBJECT_FIELDS), className === '_User' ? {
320
- authDataResponse: {
321
- description: `auth provider response when triggered on signUp/logIn.`,
322
- type: defaultGraphQLTypes.OBJECT
323
- }
324
- } : {});
320
+ const parseObjectFields = {
321
+ id: (0, _graphqlRelay.globalIdField)(className, obj => obj.objectId),
322
+ ...defaultGraphQLTypes.PARSE_OBJECT_FIELDS,
323
+ ...(className === '_User' ? {
324
+ authDataResponse: {
325
+ description: `auth provider response when triggered on signUp/logIn.`,
326
+ type: defaultGraphQLTypes.OBJECT
327
+ }
328
+ } : {})
329
+ };
325
330
  const outputFields = () => {
326
331
  return classOutputFields.reduce((fields, field) => {
327
332
  const type = (0, _outputType.transformOutputTypeToGraphQL)(parseClass.fields[field].type, parseClass.fields[field].targetClass, parseGraphQLSchema.parseClassTypes);
328
333
  if (parseClass.fields[field].type === 'Relation') {
329
334
  const targetParseClassTypes = parseGraphQLSchema.parseClassTypes[parseClass.fields[field].targetClass];
330
335
  const args = targetParseClassTypes ? targetParseClassTypes.classGraphQLFindArgs : undefined;
331
- return _objectSpread(_objectSpread({}, fields), {}, {
336
+ return {
337
+ ...fields,
332
338
  [field]: {
333
339
  description: `This is the object ${field}.`,
334
340
  args,
@@ -361,7 +367,7 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
361
367
  include
362
368
  } = (0, _parseGraphQLUtils.extractKeysAndInclude)(selectedFields.filter(field => field.startsWith('edges.node.')).map(field => field.replace('edges.node.', '')).filter(field => field.indexOf('edges.node') < 0));
363
369
  const parseOrder = order && order.join(',');
364
- return objectsQueries.findObjects(source[field].className, _objectSpread({
370
+ return objectsQueries.findObjects(source[field].className, {
365
371
  $relatedTo: {
366
372
  object: {
367
373
  __type: 'Pointer',
@@ -369,16 +375,18 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
369
375
  objectId: source.objectId
370
376
  },
371
377
  key: field
372
- }
373
- }, where || {}), parseOrder, skip, first, after, last, before, keys, include, false, readPreference, includeReadPreference, subqueryReadPreference, config, auth, info, selectedFields, parseGraphQLSchema.parseClasses);
378
+ },
379
+ ...(where || {})
380
+ }, parseOrder, skip, first, after, last, before, keys, include, false, readPreference, includeReadPreference, subqueryReadPreference, config, auth, info, selectedFields, parseGraphQLSchema.parseClasses);
374
381
  } catch (e) {
375
382
  parseGraphQLSchema.handleError(e);
376
383
  }
377
384
  }
378
385
  }
379
- });
386
+ };
380
387
  } else if (parseClass.fields[field].type === 'Polygon') {
381
- return _objectSpread(_objectSpread({}, fields), {}, {
388
+ return {
389
+ ...fields,
382
390
  [field]: {
383
391
  description: `This is the object ${field}.`,
384
392
  type: parseClass.fields[field].required ? new _graphql.GraphQLNonNull(type) : type,
@@ -393,9 +401,10 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
393
401
  }
394
402
  }
395
403
  }
396
- });
404
+ };
397
405
  } else if (parseClass.fields[field].type === 'Array') {
398
- return _objectSpread(_objectSpread({}, fields), {}, {
406
+ return {
407
+ ...fields,
399
408
  [field]: {
400
409
  description: `Use Inline Fragment on Array to get results: https://graphql.org/learn/queries/#inline-fragments`,
401
410
  type: parseClass.fields[field].required ? new _graphql.GraphQLNonNull(type) : type,
@@ -414,14 +423,15 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
414
423
  });
415
424
  }
416
425
  }
417
- });
426
+ };
418
427
  } else if (type) {
419
- return _objectSpread(_objectSpread({}, fields), {}, {
428
+ return {
429
+ ...fields,
420
430
  [field]: {
421
431
  description: `This is the object ${field}.`,
422
432
  type: parseClass.fields[field].required ? new _graphql.GraphQLNonNull(type) : type
423
433
  }
424
- });
434
+ };
425
435
  } else {
426
436
  return fields;
427
437
  }
@@ -481,4 +491,4 @@ const load = (parseGraphQLSchema, parseClass, parseClassConfig) => {
481
491
  }
482
492
  };
483
493
  exports.load = load;
484
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfZ3JhcGhxbFJlbGF5IiwiX2dyYXBocWxMaXN0RmllbGRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImRlZmF1bHRHcmFwaFFMVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIm9iamVjdHNRdWVyaWVzIiwiX1BhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJfY2xhc3NOYW1lIiwiX2lucHV0VHlwZSIsIl9vdXRwdXRUeXBlIiwiX2NvbnN0cmFpbnRUeXBlIiwiX3BhcnNlR3JhcGhRTFV0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImdldFBhcnNlQ2xhc3NUeXBlQ29uZmlnIiwicGFyc2VDbGFzc0NvbmZpZyIsInR5cGUiLCJnZXRJbnB1dEZpZWxkc0FuZENvbnN0cmFpbnRzIiwicGFyc2VDbGFzcyIsImNsYXNzRmllbGRzIiwiZmllbGRzIiwiY29uY2F0IiwiaW5wdXRGaWVsZHMiLCJhbGxvd2VkSW5wdXRGaWVsZHMiLCJvdXRwdXRGaWVsZHMiLCJhbGxvd2VkT3V0cHV0RmllbGRzIiwiY29uc3RyYWludEZpZWxkcyIsImFsbG93ZWRDb25zdHJhaW50RmllbGRzIiwic29ydEZpZWxkcyIsImFsbG93ZWRTb3J0RmllbGRzIiwiY2xhc3NPdXRwdXRGaWVsZHMiLCJjbGFzc0NyZWF0ZUZpZWxkcyIsImNsYXNzVXBkYXRlRmllbGRzIiwiY2xhc3NDb25zdHJhaW50RmllbGRzIiwiY2xhc3NTb3J0RmllbGRzIiwiY2xhc3NDdXN0b21GaWVsZHMiLCJmaWVsZCIsIlBBUlNFX09CSkVDVF9GSUVMRFMiLCJpbmNsdWRlcyIsImNyZWF0ZSIsInVwZGF0ZSIsImNsYXNzTmFtZSIsIm91dHB1dEZpZWxkIiwiYXNjIiwiZGVzYyIsIm1hcCIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJncmFwaFFMQ2xhc3NOYW1lIiwidHJhbnNmb3JtQ2xhc3NOYW1lVG9HcmFwaFFMIiwiaXNDcmVhdGVFbmFibGVkIiwiaXNVcGRhdGVFbmFibGVkIiwiZ2V0UGFyc2VDbGFzc011dGF0aW9uQ29uZmlnIiwiY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZU5hbWUiLCJjbGFzc0dyYXBoUUxDcmVhdGVUeXBlIiwiR3JhcGhRTElucHV0T2JqZWN0VHlwZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInJlZHVjZSIsInRyYW5zZm9ybUlucHV0VHlwZVRvR3JhcGhRTCIsInRhcmdldENsYXNzIiwicGFyc2VDbGFzc1R5cGVzIiwicmVxdWlyZWQiLCJHcmFwaFFMTm9uTnVsbCIsIkFDTCIsIkFDTF9JTlBVVCIsImFkZEdyYXBoUUxUeXBlIiwiY2xhc3NHcmFwaFFMVXBkYXRlVHlwZU5hbWUiLCJjbGFzc0dyYXBoUUxVcGRhdGVUeXBlIiwiY2xhc3NHcmFwaFFMUG9pbnRlclR5cGVOYW1lIiwiY2xhc3NHcmFwaFFMUG9pbnRlclR5cGUiLCJsaW5rIiwiR3JhcGhRTElEIiwiT0JKRUNUIiwiY2xhc3NHcmFwaFFMUmVsYXRpb25UeXBlTmFtZSIsImNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSIsImFkZCIsIkdyYXBoUUxMaXN0IiwiT0JKRUNUX0lEIiwicmVtb3ZlIiwiY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlTmFtZSIsImNsYXNzR3JhcGhRTENvbnN0cmFpbnRzVHlwZSIsImxvZyIsIndhcm4iLCJwYXJzZUZpZWxkIiwidHJhbnNmb3JtQ29uc3RyYWludFR5cGVUb0dyYXBoUUwiLCJPUiIsIkFORCIsIk5PUiIsImNsYXNzR3JhcGhRTFJlbGF0aW9uQ29uc3RyYWludHNUeXBlTmFtZSIsImNsYXNzR3JhcGhRTFJlbGF0aW9uQ29uc3RyYWludHNUeXBlIiwiaGF2ZSIsImhhdmVOb3QiLCJleGlzdHMiLCJHcmFwaFFMQm9vbGVhbiIsImNsYXNzR3JhcGhRTE9yZGVyVHlwZU5hbWUiLCJjbGFzc0dyYXBoUUxPcmRlclR5cGUiLCJHcmFwaFFMRW51bVR5cGUiLCJ2YWx1ZXMiLCJmaWVsZENvbmZpZyIsInVwZGF0ZWRTb3J0RmllbGRzIiwiY2xhc3NHcmFwaFFMRmluZEFyZ3MiLCJ3aGVyZSIsIm9yZGVyIiwiR3JhcGhRTFN0cmluZyIsInNraXAiLCJTS0lQX0FUVCIsImNvbm5lY3Rpb25BcmdzIiwib3B0aW9ucyIsIlJFQURfT1BUSU9OU19BVFQiLCJjbGFzc0dyYXBoUUxPdXRwdXRUeXBlTmFtZSIsImludGVyZmFjZXMiLCJQQVJTRV9PQkpFQ1QiLCJyZWxheU5vZGVJbnRlcmZhY2UiLCJwYXJzZU9iamVjdEZpZWxkcyIsImlkIiwiZ2xvYmFsSWRGaWVsZCIsIm9iaiIsIm9iamVjdElkIiwiYXV0aERhdGFSZXNwb25zZSIsInRyYW5zZm9ybU91dHB1dFR5cGVUb0dyYXBoUUwiLCJ0YXJnZXRQYXJzZUNsYXNzVHlwZXMiLCJhcmdzIiwidW5kZWZpbmVkIiwicmVzb2x2ZSIsInNvdXJjZSIsImNvbnRleHQiLCJxdWVyeUluZm8iLCJmaXJzdCIsImFmdGVyIiwibGFzdCIsImJlZm9yZSIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwic2VsZWN0ZWRGaWVsZHMiLCJnZXRGaWVsZE5hbWVzIiwiaW5jbHVkZSIsImV4dHJhY3RLZXlzQW5kSW5jbHVkZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiaW5kZXhPZiIsInBhcnNlT3JkZXIiLCJqb2luIiwiZmluZE9iamVjdHMiLCIkcmVsYXRlZFRvIiwib2JqZWN0IiwiX190eXBlIiwia2V5IiwicGFyc2VDbGFzc2VzIiwiaGFuZGxlRXJyb3IiLCJjb29yZGluYXRlcyIsImNvb3JkaW5hdGUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImVsZW0iLCJjbGFzc0dyYXBoUUxPdXRwdXRUeXBlIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJjb25uZWN0aW9uVHlwZSIsImVkZ2VUeXBlIiwiY29ubmVjdGlvbkRlZmluaXRpb25zIiwiY29ubmVjdGlvbkZpZWxkcyIsImNvdW50IiwiQ09VTlRfQVRUIiwibm9kZVR5cGUiLCJjbGFzc0dyYXBoUUxGaW5kUmVzdWx0VHlwZSIsInZpZXdlclR5cGUiLCJzZXNzaW9uVG9rZW4iLCJTRVNTSU9OX1RPS0VOX0FUVCIsInVzZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9wYXJzZUNsYXNzVHlwZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW5kZW50ICovXG5pbXBvcnQge1xuICBHcmFwaFFMSUQsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxuICBHcmFwaFFMTGlzdCxcbiAgR3JhcGhRTElucHV0T2JqZWN0VHlwZSxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxCb29sZWFuLFxuICBHcmFwaFFMRW51bVR5cGUsXG59IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgZ2xvYmFsSWRGaWVsZCwgY29ubmVjdGlvbkFyZ3MsIGNvbm5lY3Rpb25EZWZpbml0aW9ucyB9IGZyb20gJ2dyYXBocWwtcmVsYXknO1xuaW1wb3J0IGdldEZpZWxkTmFtZXMgZnJvbSAnZ3JhcGhxbC1saXN0LWZpZWxkcyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTFR5cGVzIGZyb20gJy4vZGVmYXVsdEdyYXBoUUxUeXBlcyc7XG5pbXBvcnQgKiBhcyBvYmplY3RzUXVlcmllcyBmcm9tICcuLi9oZWxwZXJzL29iamVjdHNRdWVyaWVzJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTENsYXNzQ29uZmlnIH0gZnJvbSAnLi4vLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1DbGFzc05hbWVUb0dyYXBoUUwgfSBmcm9tICcuLi90cmFuc2Zvcm1lcnMvY2xhc3NOYW1lJztcbmltcG9ydCB7IHRyYW5zZm9ybUlucHV0VHlwZVRvR3JhcGhRTCB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9pbnB1dFR5cGUnO1xuaW1wb3J0IHsgdHJhbnNmb3JtT3V0cHV0VHlwZVRvR3JhcGhRTCB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9vdXRwdXRUeXBlJztcbmltcG9ydCB7IHRyYW5zZm9ybUNvbnN0cmFpbnRUeXBlVG9HcmFwaFFMIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2NvbnN0cmFpbnRUeXBlJztcbmltcG9ydCB7IGV4dHJhY3RLZXlzQW5kSW5jbHVkZSwgZ2V0UGFyc2VDbGFzc011dGF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vcGFyc2VHcmFwaFFMVXRpbHMnO1xuXG5jb25zdCBnZXRQYXJzZUNsYXNzVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwYXJzZUNsYXNzQ29uZmlnOiA/UGFyc2VHcmFwaFFMQ2xhc3NDb25maWcpIHtcbiAgcmV0dXJuIChwYXJzZUNsYXNzQ29uZmlnICYmIHBhcnNlQ2xhc3NDb25maWcudHlwZSkgfHwge307XG59O1xuXG5jb25zdCBnZXRJbnB1dEZpZWxkc0FuZENvbnN0cmFpbnRzID0gZnVuY3Rpb24gKFxuICBwYXJzZUNsYXNzLFxuICBwYXJzZUNsYXNzQ29uZmlnOiA/UGFyc2VHcmFwaFFMQ2xhc3NDb25maWdcbikge1xuICBjb25zdCBjbGFzc0ZpZWxkcyA9IE9iamVjdC5rZXlzKHBhcnNlQ2xhc3MuZmllbGRzKS5jb25jYXQoJ2lkJyk7XG4gIGNvbnN0IHtcbiAgICBpbnB1dEZpZWxkczogYWxsb3dlZElucHV0RmllbGRzLFxuICAgIG91dHB1dEZpZWxkczogYWxsb3dlZE91dHB1dEZpZWxkcyxcbiAgICBjb25zdHJhaW50RmllbGRzOiBhbGxvd2VkQ29uc3RyYWludEZpZWxkcyxcbiAgICBzb3J0RmllbGRzOiBhbGxvd2VkU29ydEZpZWxkcyxcbiAgfSA9IGdldFBhcnNlQ2xhc3NUeXBlQ29uZmlnKHBhcnNlQ2xhc3NDb25maWcpO1xuXG4gIGxldCBjbGFzc091dHB1dEZpZWxkcztcbiAgbGV0IGNsYXNzQ3JlYXRlRmllbGRzO1xuICBsZXQgY2xhc3NVcGRhdGVGaWVsZHM7XG4gIGxldCBjbGFzc0NvbnN0cmFpbnRGaWVsZHM7XG4gIGxldCBjbGFzc1NvcnRGaWVsZHM7XG5cbiAgLy8gQWxsIGFsbG93ZWQgY3VzdG9tcyBmaWVsZHNcbiAgY29uc3QgY2xhc3NDdXN0b21GaWVsZHMgPSBjbGFzc0ZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgIHJldHVybiAhT2JqZWN0LmtleXMoZGVmYXVsdEdyYXBoUUxUeXBlcy5QQVJTRV9PQkpFQ1RfRklFTERTKS5pbmNsdWRlcyhmaWVsZCkgJiYgZmllbGQgIT09ICdpZCc7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkSW5wdXRGaWVsZHMgJiYgYWxsb3dlZElucHV0RmllbGRzLmNyZWF0ZSkge1xuICAgIGNsYXNzQ3JlYXRlRmllbGRzID0gY2xhc3NDdXN0b21GaWVsZHMuZmlsdGVyKGZpZWxkID0+IHtcbiAgICAgIHJldHVybiBhbGxvd2VkSW5wdXRGaWVsZHMuY3JlYXRlLmluY2x1ZGVzKGZpZWxkKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc0NyZWF0ZUZpZWxkcyA9IGNsYXNzQ3VzdG9tRmllbGRzO1xuICB9XG4gIGlmIChhbGxvd2VkSW5wdXRGaWVsZHMgJiYgYWxsb3dlZElucHV0RmllbGRzLnVwZGF0ZSkge1xuICAgIGNsYXNzVXBkYXRlRmllbGRzID0gY2xhc3NDdXN0b21GaWVsZHMuZmlsdGVyKGZpZWxkID0+IHtcbiAgICAgIHJldHVybiBhbGxvd2VkSW5wdXRGaWVsZHMudXBkYXRlLmluY2x1ZGVzKGZpZWxkKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc1VwZGF0ZUZpZWxkcyA9IGNsYXNzQ3VzdG9tRmllbGRzO1xuICB9XG5cbiAgaWYgKGFsbG93ZWRPdXRwdXRGaWVsZHMpIHtcbiAgICBjbGFzc091dHB1dEZpZWxkcyA9IGNsYXNzQ3VzdG9tRmllbGRzLmZpbHRlcihmaWVsZCA9PiB7XG4gICAgICByZXR1cm4gYWxsb3dlZE91dHB1dEZpZWxkcy5pbmNsdWRlcyhmaWVsZCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NPdXRwdXRGaWVsZHMgPSBjbGFzc0N1c3RvbUZpZWxkcztcbiAgfVxuICAvLyBGaWx0ZXJzIHRoZSBcInBhc3N3b3JkXCIgZmllbGQgZnJvbSBjbGFzcyBfVXNlclxuICBpZiAocGFyc2VDbGFzcy5jbGFzc05hbWUgPT09ICdfVXNlcicpIHtcbiAgICBjbGFzc091dHB1dEZpZWxkcyA9IGNsYXNzT3V0cHV0RmllbGRzLmZpbHRlcihvdXRwdXRGaWVsZCA9PiBvdXRwdXRGaWVsZCAhPT0gJ3Bhc3N3b3JkJyk7XG4gIH1cblxuICBpZiAoYWxsb3dlZENvbnN0cmFpbnRGaWVsZHMpIHtcbiAgICBjbGFzc0NvbnN0cmFpbnRGaWVsZHMgPSBjbGFzc0N1c3RvbUZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgICAgcmV0dXJuIGFsbG93ZWRDb25zdHJhaW50RmllbGRzLmluY2x1ZGVzKGZpZWxkKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc0NvbnN0cmFpbnRGaWVsZHMgPSBjbGFzc0ZpZWxkcztcbiAgfVxuXG4gIGlmIChhbGxvd2VkU29ydEZpZWxkcykge1xuICAgIGNsYXNzU29ydEZpZWxkcyA9IGFsbG93ZWRTb3J0RmllbGRzO1xuICAgIGlmICghY2xhc3NTb3J0RmllbGRzLmxlbmd0aCkge1xuICAgICAgLy8gbXVzdCBoYXZlIGF0IGxlYXN0IDEgb3JkZXIgZmllbGRcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgRmluZEFyZ3MgSW5wdXQgVHlwZSB3aWxsIHRocm93LlxuICAgICAgY2xhc3NTb3J0RmllbGRzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgYXNjOiB0cnVlLFxuICAgICAgICBkZXNjOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNsYXNzU29ydEZpZWxkcyA9IGNsYXNzRmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgICByZXR1cm4geyBmaWVsZCwgYXNjOiB0cnVlLCBkZXNjOiB0cnVlIH07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNsYXNzQ3JlYXRlRmllbGRzLFxuICAgIGNsYXNzVXBkYXRlRmllbGRzLFxuICAgIGNsYXNzQ29uc3RyYWludEZpZWxkcyxcbiAgICBjbGFzc091dHB1dEZpZWxkcyxcbiAgICBjbGFzc1NvcnRGaWVsZHMsXG4gIH07XG59O1xuXG5jb25zdCBsb2FkID0gKHBhcnNlR3JhcGhRTFNjaGVtYSwgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZzogP1BhcnNlR3JhcGhRTENsYXNzQ29uZmlnKSA9PiB7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnNlQ2xhc3MuY2xhc3NOYW1lO1xuICBjb25zdCBncmFwaFFMQ2xhc3NOYW1lID0gdHJhbnNmb3JtQ2xhc3NOYW1lVG9HcmFwaFFMKGNsYXNzTmFtZSk7XG4gIGNvbnN0IHtcbiAgICBjbGFzc0NyZWF0ZUZpZWxkcyxcbiAgICBjbGFzc1VwZGF0ZUZpZWxkcyxcbiAgICBjbGFzc091dHB1dEZpZWxkcyxcbiAgICBjbGFzc0NvbnN0cmFpbnRGaWVsZHMsXG4gICAgY2xhc3NTb3J0RmllbGRzLFxuICB9ID0gZ2V0SW5wdXRGaWVsZHNBbmRDb25zdHJhaW50cyhwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnKTtcblxuICBjb25zdCB7XG4gICAgY3JlYXRlOiBpc0NyZWF0ZUVuYWJsZWQgPSB0cnVlLFxuICAgIHVwZGF0ZTogaXNVcGRhdGVFbmFibGVkID0gdHJ1ZSxcbiAgfSA9IGdldFBhcnNlQ2xhc3NNdXRhdGlvbkNvbmZpZyhwYXJzZUNsYXNzQ29uZmlnKTtcblxuICBjb25zdCBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlTmFtZSA9IGBDcmVhdGUke2dyYXBoUUxDbGFzc05hbWV9RmllbGRzSW5wdXRgO1xuICBsZXQgY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgICBuYW1lOiBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYFRoZSAke2NsYXNzR3JhcGhRTENyZWF0ZVR5cGVOYW1lfSBpbnB1dCB0eXBlIGlzIHVzZWQgaW4gb3BlcmF0aW9ucyB0aGF0IGludm9sdmUgY3JlYXRpb24gb2Ygb2JqZWN0cyBpbiB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcy5gLFxuICAgIGZpZWxkczogKCkgPT5cbiAgICAgIGNsYXNzQ3JlYXRlRmllbGRzLnJlZHVjZShcbiAgICAgICAgKGZpZWxkcywgZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHJhbnNmb3JtSW5wdXRUeXBlVG9HcmFwaFFMKFxuICAgICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnR5cGUsXG4gICAgICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgICAgICBbZmllbGRdOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGlzIGlzIHRoZSBvYmplY3QgJHtmaWVsZH0uYCxcbiAgICAgICAgICAgICAgICB0eXBlOiBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0ucmVxdWlyZWQgPyBuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBQ0w6IHsgdHlwZTogZGVmYXVsdEdyYXBoUUxUeXBlcy5BQ0xfSU5QVVQgfSxcbiAgICAgICAgfVxuICAgICAgKSxcbiAgfSk7XG4gIGNsYXNzR3JhcGhRTENyZWF0ZVR5cGUgPSBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSk7XG5cbiAgY29uc3QgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZU5hbWUgPSBgVXBkYXRlJHtncmFwaFFMQ2xhc3NOYW1lfUZpZWxkc0lucHV0YDtcbiAgbGV0IGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gICAgbmFtZTogY2xhc3NHcmFwaFFMVXBkYXRlVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBUaGUgJHtjbGFzc0dyYXBoUUxVcGRhdGVUeXBlTmFtZX0gaW5wdXQgdHlwZSBpcyB1c2VkIGluIG9wZXJhdGlvbnMgdGhhdCBpbnZvbHZlIGNyZWF0aW9uIG9mIG9iamVjdHMgaW4gdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuYCxcbiAgICBmaWVsZHM6ICgpID0+XG4gICAgICBjbGFzc1VwZGF0ZUZpZWxkcy5yZWR1Y2UoXG4gICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHRyYW5zZm9ybUlucHV0VHlwZVRvR3JhcGhRTChcbiAgICAgICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50eXBlLFxuICAgICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnRhcmdldENsYXNzLFxuICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3NUeXBlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQUNMOiB7IHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuQUNMX0lOUFVUIH0sXG4gICAgICAgIH1cbiAgICAgICksXG4gIH0pO1xuICBjbGFzc0dyYXBoUUxVcGRhdGVUeXBlID0gcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUpO1xuXG4gIGNvbnN0IGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlTmFtZSA9IGAke2dyYXBoUUxDbGFzc05hbWV9UG9pbnRlcklucHV0YDtcbiAgbGV0IGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYEFsbG93IHRvIGxpbmsgT1IgYWRkIGFuZCBsaW5rIGFuIG9iamVjdCBvZiB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcy5gLFxuICAgIGZpZWxkczogKCkgPT4ge1xuICAgICAgY29uc3QgZmllbGRzID0ge1xuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGBMaW5rIGFuIGV4aXN0aW5nIG9iamVjdCBmcm9tICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuIFlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZ2xvYmFsIG9yIHRoZSBvYmplY3QgaWQuYCxcbiAgICAgICAgICB0eXBlOiBHcmFwaFFMSUQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgaWYgKGlzQ3JlYXRlRW5hYmxlZCkge1xuICAgICAgICBmaWVsZHNbJ2NyZWF0ZUFuZExpbmsnXSA9IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhbmQgbGluayBhbiBvYmplY3QgZnJvbSAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgICAgICAgdHlwZTogY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfSxcbiAgfSk7XG4gIGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlID1cbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY2xhc3NHcmFwaFFMUG9pbnRlclR5cGUpIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNUO1xuXG4gIGNvbnN0IGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZU5hbWUgPSBgJHtncmFwaFFMQ2xhc3NOYW1lfVJlbGF0aW9uSW5wdXRgO1xuICBsZXQgY2xhc3NHcmFwaFFMUmVsYXRpb25UeXBlID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBBbGxvdyB0byBhZGQsIHJlbW92ZSwgY3JlYXRlQW5kQWRkIG9iamVjdHMgb2YgdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MgaW50byBhIHJlbGF0aW9uIGZpZWxkLmAsXG4gICAgZmllbGRzOiAoKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZHMgPSB7XG4gICAgICAgIGFkZDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQWRkIGV4aXN0aW5nIG9iamVjdHMgZnJvbSB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcyBpbnRvIHRoZSByZWxhdGlvbi4gWW91IGNhbiB1c2UgZWl0aGVyIHRoZSBnbG9iYWwgb3IgdGhlIG9iamVjdCBpZHMuYCxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QoZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1RfSUQpLFxuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYFJlbW92ZSBleGlzdGluZyBvYmplY3RzIGZyb20gdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3Mgb3V0IG9mIHRoZSByZWxhdGlvbi4gWW91IGNhbiB1c2UgZWl0aGVyIHRoZSBnbG9iYWwgb3IgdGhlIG9iamVjdCBpZHMuYCxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QoZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1RfSUQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGlmIChpc0NyZWF0ZUVuYWJsZWQpIHtcbiAgICAgICAgZmllbGRzWydjcmVhdGVBbmRBZGQnXSA9IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhbmQgYWRkIG9iamVjdHMgb2YgdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MgaW50byB0aGUgcmVsYXRpb24uYCxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKGNsYXNzR3JhcGhRTENyZWF0ZVR5cGUpKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfSxcbiAgfSk7XG4gIGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSA9XG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSkgfHwgZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1Q7XG5cbiAgY29uc3QgY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlTmFtZSA9IGAke2dyYXBoUUxDbGFzc05hbWV9V2hlcmVJbnB1dGA7XG4gIGxldCBjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gICAgbmFtZTogY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYFRoZSAke2NsYXNzR3JhcGhRTENvbnN0cmFpbnRzVHlwZU5hbWV9IGlucHV0IHR5cGUgaXMgdXNlZCBpbiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBmaWx0ZXJpbmcgb2JqZWN0cyBvZiAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgZmllbGRzOiAoKSA9PiAoe1xuICAgICAgLi4uY2xhc3NDb25zdHJhaW50RmllbGRzLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoWydPUicsICdBTkQnLCAnTk9SJ10uaW5jbHVkZXMoZmllbGQpKSB7XG4gICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmxvZy53YXJuKFxuICAgICAgICAgICAgYEZpZWxkICR7ZmllbGR9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0byBzY2hlbWEgJHtjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGVOYW1lfSBiZWNhdXNlIGl0IGNvbGxpZGVkIHdpdGggYW4gZXhpc3Rpbmcgb25lLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VGaWVsZCA9IGZpZWxkID09PSAnaWQnID8gJ29iamVjdElkJyA6IGZpZWxkO1xuICAgICAgICBjb25zdCB0eXBlID0gdHJhbnNmb3JtQ29uc3RyYWludFR5cGVUb0dyYXBoUUwoXG4gICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbcGFyc2VGaWVsZF0udHlwZSxcbiAgICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1twYXJzZUZpZWxkXS50YXJnZXRDbGFzcyxcbiAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGlzIGlzIHRoZSBvYmplY3QgJHtmaWVsZH0uYCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG4gICAgICB9LCB7fSksXG4gICAgICBPUjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIE9SIG9wZXJhdG9yIHRvIGNvbXBvdW5kIGNvbnN0cmFpbnRzLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSksXG4gICAgICB9LFxuICAgICAgQU5EOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgQU5EIG9wZXJhdG9yIHRvIGNvbXBvdW5kIGNvbnN0cmFpbnRzLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSksXG4gICAgICB9LFxuICAgICAgTk9SOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgTk9SIG9wZXJhdG9yIHRvIGNvbXBvdW5kIGNvbnN0cmFpbnRzLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSksXG4gICAgICB9LFxuICAgIH0pLFxuICB9KTtcbiAgY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlID1cbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSB8fCBkZWZhdWx0R3JhcGhRTFR5cGVzLk9CSkVDVDtcblxuICBjb25zdCBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWUgPSBgJHtncmFwaFFMQ2xhc3NOYW1lfVJlbGF0aW9uV2hlcmVJbnB1dGA7XG4gIGxldCBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZSA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgICBuYW1lOiBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBUaGUgJHtjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWV9IGlucHV0IHR5cGUgaXMgdXNlZCBpbiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBmaWx0ZXJpbmcgb2JqZWN0cyBvZiAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgZmllbGRzOiAoKSA9PiAoe1xuICAgICAgaGF2ZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1J1biBhIHJlbGF0aW9uYWwvcG9pbnRlciBxdWVyeSB3aGVyZSBhdCBsZWFzdCBvbmUgY2hpbGQgb2JqZWN0IGNhbiBtYXRjaC4nLFxuICAgICAgICB0eXBlOiBjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUsXG4gICAgICB9LFxuICAgICAgaGF2ZU5vdDoge1xuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnUnVuIGFuIGludmVydGVkIHJlbGF0aW9uYWwvcG9pbnRlciBxdWVyeSB3aGVyZSBhdCBsZWFzdCBvbmUgY2hpbGQgb2JqZWN0IGNhbiBtYXRjaC4nLFxuICAgICAgICB0eXBlOiBjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUsXG4gICAgICB9LFxuICAgICAgZXhpc3RzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgdGhlIHJlbGF0aW9uL3BvaW50ZXIgY29udGFpbnMgb2JqZWN0cy4nLFxuICAgICAgICB0eXBlOiBHcmFwaFFMQm9vbGVhbixcbiAgICAgIH0sXG4gICAgfSksXG4gIH0pO1xuICBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZSA9XG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTFJlbGF0aW9uQ29uc3RyYWludHNUeXBlKSB8fFxuICAgIGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNUO1xuXG4gIGNvbnN0IGNsYXNzR3JhcGhRTE9yZGVyVHlwZU5hbWUgPSBgJHtncmFwaFFMQ2xhc3NOYW1lfU9yZGVyYDtcbiAgbGV0IGNsYXNzR3JhcGhRTE9yZGVyVHlwZSA9IG5ldyBHcmFwaFFMRW51bVR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTE9yZGVyVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBUaGUgJHtjbGFzc0dyYXBoUUxPcmRlclR5cGVOYW1lfSBpbnB1dCB0eXBlIGlzIHVzZWQgd2hlbiBzb3J0aW5nIG9iamVjdHMgb2YgdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuYCxcbiAgICB2YWx1ZXM6IGNsYXNzU29ydEZpZWxkcy5yZWR1Y2UoKHNvcnRGaWVsZHMsIGZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICBjb25zdCB7IGZpZWxkLCBhc2MsIGRlc2MgfSA9IGZpZWxkQ29uZmlnO1xuICAgICAgY29uc3QgdXBkYXRlZFNvcnRGaWVsZHMgPSB7XG4gICAgICAgIC4uLnNvcnRGaWVsZHMsXG4gICAgICB9O1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZCA9PT0gJ2lkJyA/ICdvYmplY3RJZCcgOiBmaWVsZDtcbiAgICAgIGlmIChhc2MpIHtcbiAgICAgICAgdXBkYXRlZFNvcnRGaWVsZHNbYCR7ZmllbGR9X0FTQ2BdID0geyB2YWx1ZSB9O1xuICAgICAgfVxuICAgICAgaWYgKGRlc2MpIHtcbiAgICAgICAgdXBkYXRlZFNvcnRGaWVsZHNbYCR7ZmllbGR9X0RFU0NgXSA9IHsgdmFsdWU6IGAtJHt2YWx1ZX1gIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZFNvcnRGaWVsZHM7XG4gICAgfSwge30pLFxuICB9KTtcbiAgY2xhc3NHcmFwaFFMT3JkZXJUeXBlID0gcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTE9yZGVyVHlwZSk7XG5cbiAgY29uc3QgY2xhc3NHcmFwaFFMRmluZEFyZ3MgPSB7XG4gICAgd2hlcmU6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdGhlIG9iamVjdHMgbmVlZCB0byBtYXRjaCBpbiBvcmRlciB0byBiZSBmb3VuZC4nLFxuICAgICAgdHlwZTogY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlLFxuICAgIH0sXG4gICAgb3JkZXI6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGZpZWxkcyB0byBiZSB1c2VkIHdoZW4gc29ydGluZyB0aGUgZGF0YSBmZXRjaGVkLicsXG4gICAgICB0eXBlOiBjbGFzc0dyYXBoUUxPcmRlclR5cGVcbiAgICAgICAgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKGNsYXNzR3JhcGhRTE9yZGVyVHlwZSkpXG4gICAgICAgIDogR3JhcGhRTFN0cmluZyxcbiAgICB9LFxuICAgIHNraXA6IGRlZmF1bHRHcmFwaFFMVHlwZXMuU0tJUF9BVFQsXG4gICAgLi4uY29ubmVjdGlvbkFyZ3MsXG4gICAgb3B0aW9uczogZGVmYXVsdEdyYXBoUUxUeXBlcy5SRUFEX09QVElPTlNfQVRULFxuICB9O1xuICBjb25zdCBjbGFzc0dyYXBoUUxPdXRwdXRUeXBlTmFtZSA9IGAke2dyYXBoUUxDbGFzc05hbWV9YDtcbiAgY29uc3QgaW50ZXJmYWNlcyA9IFtkZWZhdWx0R3JhcGhRTFR5cGVzLlBBUlNFX09CSkVDVCwgcGFyc2VHcmFwaFFMU2NoZW1hLnJlbGF5Tm9kZUludGVyZmFjZV07XG4gIGNvbnN0IHBhcnNlT2JqZWN0RmllbGRzID0ge1xuICAgIGlkOiBnbG9iYWxJZEZpZWxkKGNsYXNzTmFtZSwgb2JqID0+IG9iai5vYmplY3RJZCksXG4gICAgLi4uZGVmYXVsdEdyYXBoUUxUeXBlcy5QQVJTRV9PQkpFQ1RfRklFTERTLFxuICAgIC4uLihjbGFzc05hbWUgPT09ICdfVXNlcidcbiAgICAgID8ge1xuICAgICAgICAgIGF1dGhEYXRhUmVzcG9uc2U6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgYXV0aCBwcm92aWRlciByZXNwb25zZSB3aGVuIHRyaWdnZXJlZCBvbiBzaWduVXAvbG9nSW4uYCxcbiAgICAgICAgICAgIHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNULFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9O1xuICBjb25zdCBvdXRwdXRGaWVsZHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGNsYXNzT3V0cHV0RmllbGRzLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHRyYW5zZm9ybU91dHB1dFR5cGVUb0dyYXBoUUwoXG4gICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50eXBlLFxuICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udGFyZ2V0Q2xhc3MsXG4gICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzVHlwZXNcbiAgICAgICk7XG4gICAgICBpZiAocGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnR5cGUgPT09ICdSZWxhdGlvbicpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UGFyc2VDbGFzc1R5cGVzID1cbiAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzW3BhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50YXJnZXRDbGFzc107XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0YXJnZXRQYXJzZUNsYXNzVHlwZXMgPyB0YXJnZXRQYXJzZUNsYXNzVHlwZXMuY2xhc3NHcmFwaFFMRmluZEFyZ3MgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgdHlwZTogcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnJlcXVpcmVkID8gbmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpIDogdHlwZSxcbiAgICAgICAgICAgIGFzeW5jIHJlc29sdmUoc291cmNlLCBhcmdzLCBjb250ZXh0LCBxdWVyeUluZm8pIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdoZXJlLCBvcmRlciwgc2tpcCwgZmlyc3QsIGFmdGVyLCBsYXN0LCBiZWZvcmUsIG9wdGlvbnMgfSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByZWFkUHJlZmVyZW5jZSwgaW5jbHVkZVJlYWRQcmVmZXJlbmNlLCBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlIH0gPVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvbmZpZywgYXV0aCwgaW5mbyB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IGdldEZpZWxkTmFtZXMocXVlcnlJbmZvKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHsga2V5cywgaW5jbHVkZSB9ID0gZXh0cmFjdEtleXNBbmRJbmNsdWRlKFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKCdlZGdlcy5ub2RlLicpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IGZpZWxkLnJlcGxhY2UoJ2VkZ2VzLm5vZGUuJywgJycpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmluZGV4T2YoJ2VkZ2VzLm5vZGUnKSA8IDApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZU9yZGVyID0gb3JkZXIgJiYgb3JkZXIuam9pbignLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdHNRdWVyaWVzLmZpbmRPYmplY3RzKFxuICAgICAgICAgICAgICAgICAgc291cmNlW2ZpZWxkXS5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICRyZWxhdGVkVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogc291cmNlLm9iamVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHdoZXJlIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwYXJzZU9yZGVyLFxuICAgICAgICAgICAgICAgICAgc2tpcCxcbiAgICAgICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICAgICAgYWZ0ZXIsXG4gICAgICAgICAgICAgICAgICBsYXN0LFxuICAgICAgICAgICAgICAgICAgYmVmb3JlLFxuICAgICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgaW5jbHVkZVJlYWRQcmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgICAgICBpbmZvLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHMsXG4gICAgICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc2VzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICB0eXBlOiBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0ucmVxdWlyZWQgPyBuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgYXN5bmMgcmVzb2x2ZShzb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHNvdXJjZVtmaWVsZF0gJiYgc291cmNlW2ZpZWxkXS5jb29yZGluYXRlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VbZmllbGRdLmNvb3JkaW5hdGVzLm1hcChjb29yZGluYXRlID0+ICh7XG4gICAgICAgICAgICAgICAgICBsYXRpdHVkZTogY29vcmRpbmF0ZVswXSxcbiAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogY29vcmRpbmF0ZVsxXSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnR5cGUgPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBVc2UgSW5saW5lIEZyYWdtZW50IG9uIEFycmF5IHRvIGdldCByZXN1bHRzOiBodHRwczovL2dyYXBocWwub3JnL2xlYXJuL3F1ZXJpZXMvI2lubGluZS1mcmFnbWVudHNgLFxuICAgICAgICAgICAgdHlwZTogcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnJlcXVpcmVkID8gbmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpIDogdHlwZSxcbiAgICAgICAgICAgIGFzeW5jIHJlc29sdmUoc291cmNlKSB7XG4gICAgICAgICAgICAgIGlmICghc291cmNlW2ZpZWxkXSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICAgICAgICByZXR1cm4gc291cmNlW2ZpZWxkXS5tYXAoYXN5bmMgZWxlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW0uY2xhc3NOYW1lICYmIGVsZW0ub2JqZWN0SWQgJiYgZWxlbS5fX3R5cGUgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGVsZW0gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICB0eXBlOiBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0ucmVxdWlyZWQgPyBuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkgOiB0eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgIH0sIHBhcnNlT2JqZWN0RmllbGRzKTtcbiAgfTtcbiAgbGV0IGNsYXNzR3JhcGhRTE91dHB1dFR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTE91dHB1dFR5cGVOYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBgVGhlICR7Y2xhc3NHcmFwaFFMT3V0cHV0VHlwZU5hbWV9IG9iamVjdCB0eXBlIGlzIHVzZWQgaW4gb3BlcmF0aW9ucyB0aGF0IGludm9sdmUgb3V0cHV0dGluZyBvYmplY3RzIG9mICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuYCxcbiAgICBpbnRlcmZhY2VzLFxuICAgIGZpZWxkczogb3V0cHV0RmllbGRzLFxuICB9KTtcbiAgY2xhc3NHcmFwaFFMT3V0cHV0VHlwZSA9IHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjbGFzc0dyYXBoUUxPdXRwdXRUeXBlKTtcblxuICBjb25zdCB7IGNvbm5lY3Rpb25UeXBlLCBlZGdlVHlwZSB9ID0gY29ubmVjdGlvbkRlZmluaXRpb25zKHtcbiAgICBuYW1lOiBncmFwaFFMQ2xhc3NOYW1lLFxuICAgIGNvbm5lY3Rpb25GaWVsZHM6IHtcbiAgICAgIGNvdW50OiBkZWZhdWx0R3JhcGhRTFR5cGVzLkNPVU5UX0FUVCxcbiAgICB9LFxuICAgIG5vZGVUeXBlOiBjbGFzc0dyYXBoUUxPdXRwdXRUeXBlIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNULFxuICB9KTtcbiAgbGV0IGNsYXNzR3JhcGhRTEZpbmRSZXN1bHRUeXBlID0gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGVkZ2VUeXBlKSAmJlxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjb25uZWN0aW9uVHlwZSwgZmFsc2UsIGZhbHNlLCB0cnVlKVxuICApIHtcbiAgICBjbGFzc0dyYXBoUUxGaW5kUmVzdWx0VHlwZSA9IGNvbm5lY3Rpb25UeXBlO1xuICB9XG5cbiAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3NUeXBlc1tjbGFzc05hbWVdID0ge1xuICAgIGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSxcbiAgICBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUsXG4gICAgY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFJlbGF0aW9uQ29uc3RyYWludHNUeXBlLFxuICAgIGNsYXNzR3JhcGhRTEZpbmRBcmdzLFxuICAgIGNsYXNzR3JhcGhRTE91dHB1dFR5cGUsXG4gICAgY2xhc3NHcmFwaFFMRmluZFJlc3VsdFR5cGUsXG4gICAgY29uZmlnOiB7XG4gICAgICBwYXJzZUNsYXNzQ29uZmlnLFxuICAgICAgaXNDcmVhdGVFbmFibGVkLFxuICAgICAgaXNVcGRhdGVFbmFibGVkLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19Vc2VyJykge1xuICAgIGNvbnN0IHZpZXdlclR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgbmFtZTogJ1ZpZXdlcicsXG4gICAgICBkZXNjcmlwdGlvbjogYFRoZSBWaWV3ZXIgb2JqZWN0IHR5cGUgaXMgdXNlZCBpbiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBvdXRwdXR0aW5nIHRoZSBjdXJyZW50IHVzZXIgZGF0YS5gLFxuICAgICAgZmllbGRzOiAoKSA9PiAoe1xuICAgICAgICBzZXNzaW9uVG9rZW46IGRlZmF1bHRHcmFwaFFMVHlwZXMuU0VTU0lPTl9UT0tFTl9BVFQsXG4gICAgICAgIHVzZXI6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIGN1cnJlbnQgdXNlci4nLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChjbGFzc0dyYXBoUUxPdXRwdXRUeXBlKSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZSh2aWV3ZXJUeXBlLCB0cnVlLCB0cnVlKTtcbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEudmlld2VyVHlwZSA9IHZpZXdlclR5cGU7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGV4dHJhY3RLZXlzQW5kSW5jbHVkZSwgbG9hZCB9O1xuIl0sIm1h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
494
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfZ3JhcGhxbFJlbGF5IiwiX2dyYXBocWxMaXN0RmllbGRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImRlZmF1bHRHcmFwaFFMVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIm9iamVjdHNRdWVyaWVzIiwiX1BhcnNlR3JhcGhRTENvbnRyb2xsZXIiLCJfY2xhc3NOYW1lIiwiX2lucHV0VHlwZSIsIl9vdXRwdXRUeXBlIiwiX2NvbnN0cmFpbnRUeXBlIiwiX3BhcnNlR3JhcGhRTFV0aWxzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiZ2V0UGFyc2VDbGFzc1R5cGVDb25maWciLCJwYXJzZUNsYXNzQ29uZmlnIiwidHlwZSIsImdldElucHV0RmllbGRzQW5kQ29uc3RyYWludHMiLCJwYXJzZUNsYXNzIiwiY2xhc3NGaWVsZHMiLCJrZXlzIiwiZmllbGRzIiwiY29uY2F0IiwiaW5wdXRGaWVsZHMiLCJhbGxvd2VkSW5wdXRGaWVsZHMiLCJvdXRwdXRGaWVsZHMiLCJhbGxvd2VkT3V0cHV0RmllbGRzIiwiY29uc3RyYWludEZpZWxkcyIsImFsbG93ZWRDb25zdHJhaW50RmllbGRzIiwic29ydEZpZWxkcyIsImFsbG93ZWRTb3J0RmllbGRzIiwiY2xhc3NPdXRwdXRGaWVsZHMiLCJjbGFzc0NyZWF0ZUZpZWxkcyIsImNsYXNzVXBkYXRlRmllbGRzIiwiY2xhc3NDb25zdHJhaW50RmllbGRzIiwiY2xhc3NTb3J0RmllbGRzIiwiY2xhc3NDdXN0b21GaWVsZHMiLCJmaWx0ZXIiLCJmaWVsZCIsIlBBUlNFX09CSkVDVF9GSUVMRFMiLCJpbmNsdWRlcyIsImNyZWF0ZSIsInVwZGF0ZSIsImNsYXNzTmFtZSIsIm91dHB1dEZpZWxkIiwibGVuZ3RoIiwicHVzaCIsImFzYyIsImRlc2MiLCJtYXAiLCJsb2FkIiwicGFyc2VHcmFwaFFMU2NoZW1hIiwiZ3JhcGhRTENsYXNzTmFtZSIsInRyYW5zZm9ybUNsYXNzTmFtZVRvR3JhcGhRTCIsImlzQ3JlYXRlRW5hYmxlZCIsImlzVXBkYXRlRW5hYmxlZCIsImdldFBhcnNlQ2xhc3NNdXRhdGlvbkNvbmZpZyIsImNsYXNzR3JhcGhRTENyZWF0ZVR5cGVOYW1lIiwiY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSIsIkdyYXBoUUxJbnB1dE9iamVjdFR5cGUiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJyZWR1Y2UiLCJ0cmFuc2Zvcm1JbnB1dFR5cGVUb0dyYXBoUUwiLCJ0YXJnZXRDbGFzcyIsInBhcnNlQ2xhc3NUeXBlcyIsInJlcXVpcmVkIiwiR3JhcGhRTE5vbk51bGwiLCJBQ0wiLCJBQ0xfSU5QVVQiLCJhZGRHcmFwaFFMVHlwZSIsImNsYXNzR3JhcGhRTFVwZGF0ZVR5cGVOYW1lIiwiY2xhc3NHcmFwaFFMVXBkYXRlVHlwZSIsImNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlTmFtZSIsImNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlIiwibGluayIsIkdyYXBoUUxJRCIsIk9CSkVDVCIsImNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZU5hbWUiLCJjbGFzc0dyYXBoUUxSZWxhdGlvblR5cGUiLCJhZGQiLCJHcmFwaFFMTGlzdCIsIk9CSkVDVF9JRCIsInJlbW92ZSIsImNsYXNzR3JhcGhRTENvbnN0cmFpbnRzVHlwZU5hbWUiLCJjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUiLCJsb2ciLCJ3YXJuIiwicGFyc2VGaWVsZCIsInRyYW5zZm9ybUNvbnN0cmFpbnRUeXBlVG9HcmFwaFFMIiwiT1IiLCJBTkQiLCJOT1IiLCJjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWUiLCJjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZSIsImhhdmUiLCJoYXZlTm90IiwiZXhpc3RzIiwiR3JhcGhRTEJvb2xlYW4iLCJjbGFzc0dyYXBoUUxPcmRlclR5cGVOYW1lIiwiY2xhc3NHcmFwaFFMT3JkZXJUeXBlIiwiR3JhcGhRTEVudW1UeXBlIiwidmFsdWVzIiwiZmllbGRDb25maWciLCJ1cGRhdGVkU29ydEZpZWxkcyIsInZhbHVlIiwiY2xhc3NHcmFwaFFMRmluZEFyZ3MiLCJ3aGVyZSIsIm9yZGVyIiwiR3JhcGhRTFN0cmluZyIsInNraXAiLCJTS0lQX0FUVCIsImNvbm5lY3Rpb25BcmdzIiwib3B0aW9ucyIsIlJFQURfT1BUSU9OU19BVFQiLCJjbGFzc0dyYXBoUUxPdXRwdXRUeXBlTmFtZSIsImludGVyZmFjZXMiLCJQQVJTRV9PQkpFQ1QiLCJyZWxheU5vZGVJbnRlcmZhY2UiLCJwYXJzZU9iamVjdEZpZWxkcyIsImlkIiwiZ2xvYmFsSWRGaWVsZCIsIm9iaiIsIm9iamVjdElkIiwiYXV0aERhdGFSZXNwb25zZSIsInRyYW5zZm9ybU91dHB1dFR5cGVUb0dyYXBoUUwiLCJ0YXJnZXRQYXJzZUNsYXNzVHlwZXMiLCJhcmdzIiwidW5kZWZpbmVkIiwicmVzb2x2ZSIsInNvdXJjZSIsImNvbnRleHQiLCJxdWVyeUluZm8iLCJmaXJzdCIsImFmdGVyIiwibGFzdCIsImJlZm9yZSIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwic2VsZWN0ZWRGaWVsZHMiLCJnZXRGaWVsZE5hbWVzIiwiaW5jbHVkZSIsImV4dHJhY3RLZXlzQW5kSW5jbHVkZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiaW5kZXhPZiIsInBhcnNlT3JkZXIiLCJqb2luIiwiZmluZE9iamVjdHMiLCIkcmVsYXRlZFRvIiwib2JqZWN0IiwiX190eXBlIiwia2V5IiwicGFyc2VDbGFzc2VzIiwiaGFuZGxlRXJyb3IiLCJjb29yZGluYXRlcyIsImNvb3JkaW5hdGUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImVsZW0iLCJjbGFzc0dyYXBoUUxPdXRwdXRUeXBlIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJjb25uZWN0aW9uVHlwZSIsImVkZ2VUeXBlIiwiY29ubmVjdGlvbkRlZmluaXRpb25zIiwiY29ubmVjdGlvbkZpZWxkcyIsImNvdW50IiwiQ09VTlRfQVRUIiwibm9kZVR5cGUiLCJjbGFzc0dyYXBoUUxGaW5kUmVzdWx0VHlwZSIsInZpZXdlclR5cGUiLCJzZXNzaW9uVG9rZW4iLCJTRVNTSU9OX1RPS0VOX0FUVCIsInVzZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvbG9hZGVycy9wYXJzZUNsYXNzVHlwZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW5kZW50ICovXG5pbXBvcnQge1xuICBHcmFwaFFMSUQsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxuICBHcmFwaFFMTGlzdCxcbiAgR3JhcGhRTElucHV0T2JqZWN0VHlwZSxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxCb29sZWFuLFxuICBHcmFwaFFMRW51bVR5cGUsXG59IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgZ2xvYmFsSWRGaWVsZCwgY29ubmVjdGlvbkFyZ3MsIGNvbm5lY3Rpb25EZWZpbml0aW9ucyB9IGZyb20gJ2dyYXBocWwtcmVsYXknO1xuaW1wb3J0IGdldEZpZWxkTmFtZXMgZnJvbSAnZ3JhcGhxbC1saXN0LWZpZWxkcyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTFR5cGVzIGZyb20gJy4vZGVmYXVsdEdyYXBoUUxUeXBlcyc7XG5pbXBvcnQgKiBhcyBvYmplY3RzUXVlcmllcyBmcm9tICcuLi9oZWxwZXJzL29iamVjdHNRdWVyaWVzJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTENsYXNzQ29uZmlnIH0gZnJvbSAnLi4vLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1DbGFzc05hbWVUb0dyYXBoUUwgfSBmcm9tICcuLi90cmFuc2Zvcm1lcnMvY2xhc3NOYW1lJztcbmltcG9ydCB7IHRyYW5zZm9ybUlucHV0VHlwZVRvR3JhcGhRTCB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9pbnB1dFR5cGUnO1xuaW1wb3J0IHsgdHJhbnNmb3JtT3V0cHV0VHlwZVRvR3JhcGhRTCB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9vdXRwdXRUeXBlJztcbmltcG9ydCB7IHRyYW5zZm9ybUNvbnN0cmFpbnRUeXBlVG9HcmFwaFFMIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL2NvbnN0cmFpbnRUeXBlJztcbmltcG9ydCB7IGV4dHJhY3RLZXlzQW5kSW5jbHVkZSwgZ2V0UGFyc2VDbGFzc011dGF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vcGFyc2VHcmFwaFFMVXRpbHMnO1xuXG5jb25zdCBnZXRQYXJzZUNsYXNzVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwYXJzZUNsYXNzQ29uZmlnOiA/UGFyc2VHcmFwaFFMQ2xhc3NDb25maWcpIHtcbiAgcmV0dXJuIChwYXJzZUNsYXNzQ29uZmlnICYmIHBhcnNlQ2xhc3NDb25maWcudHlwZSkgfHwge307XG59O1xuXG5jb25zdCBnZXRJbnB1dEZpZWxkc0FuZENvbnN0cmFpbnRzID0gZnVuY3Rpb24gKFxuICBwYXJzZUNsYXNzLFxuICBwYXJzZUNsYXNzQ29uZmlnOiA/UGFyc2VHcmFwaFFMQ2xhc3NDb25maWdcbikge1xuICBjb25zdCBjbGFzc0ZpZWxkcyA9IE9iamVjdC5rZXlzKHBhcnNlQ2xhc3MuZmllbGRzKS5jb25jYXQoJ2lkJyk7XG4gIGNvbnN0IHtcbiAgICBpbnB1dEZpZWxkczogYWxsb3dlZElucHV0RmllbGRzLFxuICAgIG91dHB1dEZpZWxkczogYWxsb3dlZE91dHB1dEZpZWxkcyxcbiAgICBjb25zdHJhaW50RmllbGRzOiBhbGxvd2VkQ29uc3RyYWludEZpZWxkcyxcbiAgICBzb3J0RmllbGRzOiBhbGxvd2VkU29ydEZpZWxkcyxcbiAgfSA9IGdldFBhcnNlQ2xhc3NUeXBlQ29uZmlnKHBhcnNlQ2xhc3NDb25maWcpO1xuXG4gIGxldCBjbGFzc091dHB1dEZpZWxkcztcbiAgbGV0IGNsYXNzQ3JlYXRlRmllbGRzO1xuICBsZXQgY2xhc3NVcGRhdGVGaWVsZHM7XG4gIGxldCBjbGFzc0NvbnN0cmFpbnRGaWVsZHM7XG4gIGxldCBjbGFzc1NvcnRGaWVsZHM7XG5cbiAgLy8gQWxsIGFsbG93ZWQgY3VzdG9tcyBmaWVsZHNcbiAgY29uc3QgY2xhc3NDdXN0b21GaWVsZHMgPSBjbGFzc0ZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgIHJldHVybiAhT2JqZWN0LmtleXMoZGVmYXVsdEdyYXBoUUxUeXBlcy5QQVJTRV9PQkpFQ1RfRklFTERTKS5pbmNsdWRlcyhmaWVsZCkgJiYgZmllbGQgIT09ICdpZCc7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkSW5wdXRGaWVsZHMgJiYgYWxsb3dlZElucHV0RmllbGRzLmNyZWF0ZSkge1xuICAgIGNsYXNzQ3JlYXRlRmllbGRzID0gY2xhc3NDdXN0b21GaWVsZHMuZmlsdGVyKGZpZWxkID0+IHtcbiAgICAgIHJldHVybiBhbGxvd2VkSW5wdXRGaWVsZHMuY3JlYXRlLmluY2x1ZGVzKGZpZWxkKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc0NyZWF0ZUZpZWxkcyA9IGNsYXNzQ3VzdG9tRmllbGRzO1xuICB9XG4gIGlmIChhbGxvd2VkSW5wdXRGaWVsZHMgJiYgYWxsb3dlZElucHV0RmllbGRzLnVwZGF0ZSkge1xuICAgIGNsYXNzVXBkYXRlRmllbGRzID0gY2xhc3NDdXN0b21GaWVsZHMuZmlsdGVyKGZpZWxkID0+IHtcbiAgICAgIHJldHVybiBhbGxvd2VkSW5wdXRGaWVsZHMudXBkYXRlLmluY2x1ZGVzKGZpZWxkKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc1VwZGF0ZUZpZWxkcyA9IGNsYXNzQ3VzdG9tRmllbGRzO1xuICB9XG5cbiAgaWYgKGFsbG93ZWRPdXRwdXRGaWVsZHMpIHtcbiAgICBjbGFzc091dHB1dEZpZWxkcyA9IGNsYXNzQ3VzdG9tRmllbGRzLmZpbHRlcihmaWVsZCA9PiB7XG4gICAgICByZXR1cm4gYWxsb3dlZE91dHB1dEZpZWxkcy5pbmNsdWRlcyhmaWVsZCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NPdXRwdXRGaWVsZHMgPSBjbGFzc0N1c3RvbUZpZWxkcztcbiAgfVxuICAvLyBGaWx0ZXJzIHRoZSBcInBhc3N3b3JkXCIgZmllbGQgZnJvbSBjbGFzcyBfVXNlclxuICBpZiAocGFyc2VDbGFzcy5jbGFzc05hbWUgPT09ICdfVXNlcicpIHtcbiAgICBjbGFzc091dHB1dEZpZWxkcyA9IGNsYXNzT3V0cHV0RmllbGRzLmZpbHRlcihvdXRwdXRGaWVsZCA9PiBvdXRwdXRGaWVsZCAhPT0gJ3Bhc3N3b3JkJyk7XG4gIH1cblxuICBpZiAoYWxsb3dlZENvbnN0cmFpbnRGaWVsZHMpIHtcbiAgICBjbGFzc0NvbnN0cmFpbnRGaWVsZHMgPSBjbGFzc0N1c3RvbUZpZWxkcy5maWx0ZXIoZmllbGQgPT4ge1xuICAgICAgcmV0dXJuIGFsbG93ZWRDb25zdHJhaW50RmllbGRzLmluY2x1ZGVzKGZpZWxkKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbGFzc0NvbnN0cmFpbnRGaWVsZHMgPSBjbGFzc0ZpZWxkcztcbiAgfVxuXG4gIGlmIChhbGxvd2VkU29ydEZpZWxkcykge1xuICAgIGNsYXNzU29ydEZpZWxkcyA9IGFsbG93ZWRTb3J0RmllbGRzO1xuICAgIGlmICghY2xhc3NTb3J0RmllbGRzLmxlbmd0aCkge1xuICAgICAgLy8gbXVzdCBoYXZlIGF0IGxlYXN0IDEgb3JkZXIgZmllbGRcbiAgICAgIC8vIG90aGVyd2lzZSB0aGUgRmluZEFyZ3MgSW5wdXQgVHlwZSB3aWxsIHRocm93LlxuICAgICAgY2xhc3NTb3J0RmllbGRzLnB1c2goe1xuICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgYXNjOiB0cnVlLFxuICAgICAgICBkZXNjOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNsYXNzU29ydEZpZWxkcyA9IGNsYXNzRmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgICByZXR1cm4geyBmaWVsZCwgYXNjOiB0cnVlLCBkZXNjOiB0cnVlIH07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNsYXNzQ3JlYXRlRmllbGRzLFxuICAgIGNsYXNzVXBkYXRlRmllbGRzLFxuICAgIGNsYXNzQ29uc3RyYWludEZpZWxkcyxcbiAgICBjbGFzc091dHB1dEZpZWxkcyxcbiAgICBjbGFzc1NvcnRGaWVsZHMsXG4gIH07XG59O1xuXG5jb25zdCBsb2FkID0gKHBhcnNlR3JhcGhRTFNjaGVtYSwgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZzogP1BhcnNlR3JhcGhRTENsYXNzQ29uZmlnKSA9PiB7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnNlQ2xhc3MuY2xhc3NOYW1lO1xuICBjb25zdCBncmFwaFFMQ2xhc3NOYW1lID0gdHJhbnNmb3JtQ2xhc3NOYW1lVG9HcmFwaFFMKGNsYXNzTmFtZSk7XG4gIGNvbnN0IHtcbiAgICBjbGFzc0NyZWF0ZUZpZWxkcyxcbiAgICBjbGFzc1VwZGF0ZUZpZWxkcyxcbiAgICBjbGFzc091dHB1dEZpZWxkcyxcbiAgICBjbGFzc0NvbnN0cmFpbnRGaWVsZHMsXG4gICAgY2xhc3NTb3J0RmllbGRzLFxuICB9ID0gZ2V0SW5wdXRGaWVsZHNBbmRDb25zdHJhaW50cyhwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnKTtcblxuICBjb25zdCB7XG4gICAgY3JlYXRlOiBpc0NyZWF0ZUVuYWJsZWQgPSB0cnVlLFxuICAgIHVwZGF0ZTogaXNVcGRhdGVFbmFibGVkID0gdHJ1ZSxcbiAgfSA9IGdldFBhcnNlQ2xhc3NNdXRhdGlvbkNvbmZpZyhwYXJzZUNsYXNzQ29uZmlnKTtcblxuICBjb25zdCBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlTmFtZSA9IGBDcmVhdGUke2dyYXBoUUxDbGFzc05hbWV9RmllbGRzSW5wdXRgO1xuICBsZXQgY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgICBuYW1lOiBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYFRoZSAke2NsYXNzR3JhcGhRTENyZWF0ZVR5cGVOYW1lfSBpbnB1dCB0eXBlIGlzIHVzZWQgaW4gb3BlcmF0aW9ucyB0aGF0IGludm9sdmUgY3JlYXRpb24gb2Ygb2JqZWN0cyBpbiB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcy5gLFxuICAgIGZpZWxkczogKCkgPT5cbiAgICAgIGNsYXNzQ3JlYXRlRmllbGRzLnJlZHVjZShcbiAgICAgICAgKGZpZWxkcywgZmllbGQpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gdHJhbnNmb3JtSW5wdXRUeXBlVG9HcmFwaFFMKFxuICAgICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnR5cGUsXG4gICAgICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udGFyZ2V0Q2xhc3MsXG4gICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgICAgICBbZmllbGRdOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGlzIGlzIHRoZSBvYmplY3QgJHtmaWVsZH0uYCxcbiAgICAgICAgICAgICAgICB0eXBlOiBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0ucmVxdWlyZWQgPyBuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBQ0w6IHsgdHlwZTogZGVmYXVsdEdyYXBoUUxUeXBlcy5BQ0xfSU5QVVQgfSxcbiAgICAgICAgfVxuICAgICAgKSxcbiAgfSk7XG4gIGNsYXNzR3JhcGhRTENyZWF0ZVR5cGUgPSBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSk7XG5cbiAgY29uc3QgY2xhc3NHcmFwaFFMVXBkYXRlVHlwZU5hbWUgPSBgVXBkYXRlJHtncmFwaFFMQ2xhc3NOYW1lfUZpZWxkc0lucHV0YDtcbiAgbGV0IGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gICAgbmFtZTogY2xhc3NHcmFwaFFMVXBkYXRlVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBUaGUgJHtjbGFzc0dyYXBoUUxVcGRhdGVUeXBlTmFtZX0gaW5wdXQgdHlwZSBpcyB1c2VkIGluIG9wZXJhdGlvbnMgdGhhdCBpbnZvbHZlIGNyZWF0aW9uIG9mIG9iamVjdHMgaW4gdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuYCxcbiAgICBmaWVsZHM6ICgpID0+XG4gICAgICBjbGFzc1VwZGF0ZUZpZWxkcy5yZWR1Y2UoXG4gICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IHRyYW5zZm9ybUlucHV0VHlwZVRvR3JhcGhRTChcbiAgICAgICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50eXBlLFxuICAgICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnRhcmdldENsYXNzLFxuICAgICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3NUeXBlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQUNMOiB7IHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuQUNMX0lOUFVUIH0sXG4gICAgICAgIH1cbiAgICAgICksXG4gIH0pO1xuICBjbGFzc0dyYXBoUUxVcGRhdGVUeXBlID0gcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUpO1xuXG4gIGNvbnN0IGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlTmFtZSA9IGAke2dyYXBoUUxDbGFzc05hbWV9UG9pbnRlcklucHV0YDtcbiAgbGV0IGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYEFsbG93IHRvIGxpbmsgT1IgYWRkIGFuZCBsaW5rIGFuIG9iamVjdCBvZiB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcy5gLFxuICAgIGZpZWxkczogKCkgPT4ge1xuICAgICAgY29uc3QgZmllbGRzID0ge1xuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGBMaW5rIGFuIGV4aXN0aW5nIG9iamVjdCBmcm9tICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuIFlvdSBjYW4gdXNlIGVpdGhlciB0aGUgZ2xvYmFsIG9yIHRoZSBvYmplY3QgaWQuYCxcbiAgICAgICAgICB0eXBlOiBHcmFwaFFMSUQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgaWYgKGlzQ3JlYXRlRW5hYmxlZCkge1xuICAgICAgICBmaWVsZHNbJ2NyZWF0ZUFuZExpbmsnXSA9IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhbmQgbGluayBhbiBvYmplY3QgZnJvbSAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgICAgICAgdHlwZTogY2xhc3NHcmFwaFFMQ3JlYXRlVHlwZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfSxcbiAgfSk7XG4gIGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlID1cbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY2xhc3NHcmFwaFFMUG9pbnRlclR5cGUpIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNUO1xuXG4gIGNvbnN0IGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZU5hbWUgPSBgJHtncmFwaFFMQ2xhc3NOYW1lfVJlbGF0aW9uSW5wdXRgO1xuICBsZXQgY2xhc3NHcmFwaFFMUmVsYXRpb25UeXBlID0gbmV3IEdyYXBoUUxJbnB1dE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBBbGxvdyB0byBhZGQsIHJlbW92ZSwgY3JlYXRlQW5kQWRkIG9iamVjdHMgb2YgdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MgaW50byBhIHJlbGF0aW9uIGZpZWxkLmAsXG4gICAgZmllbGRzOiAoKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZHMgPSB7XG4gICAgICAgIGFkZDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQWRkIGV4aXN0aW5nIG9iamVjdHMgZnJvbSB0aGUgJHtncmFwaFFMQ2xhc3NOYW1lfSBjbGFzcyBpbnRvIHRoZSByZWxhdGlvbi4gWW91IGNhbiB1c2UgZWl0aGVyIHRoZSBnbG9iYWwgb3IgdGhlIG9iamVjdCBpZHMuYCxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QoZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1RfSUQpLFxuICAgICAgICB9LFxuICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYFJlbW92ZSBleGlzdGluZyBvYmplY3RzIGZyb20gdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3Mgb3V0IG9mIHRoZSByZWxhdGlvbi4gWW91IGNhbiB1c2UgZWl0aGVyIHRoZSBnbG9iYWwgb3IgdGhlIG9iamVjdCBpZHMuYCxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QoZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1RfSUQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGlmIChpc0NyZWF0ZUVuYWJsZWQpIHtcbiAgICAgICAgZmllbGRzWydjcmVhdGVBbmRBZGQnXSA9IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSBhbmQgYWRkIG9iamVjdHMgb2YgdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MgaW50byB0aGUgcmVsYXRpb24uYCxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKGNsYXNzR3JhcGhRTENyZWF0ZVR5cGUpKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfSxcbiAgfSk7XG4gIGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSA9XG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSkgfHwgZGVmYXVsdEdyYXBoUUxUeXBlcy5PQkpFQ1Q7XG5cbiAgY29uc3QgY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlTmFtZSA9IGAke2dyYXBoUUxDbGFzc05hbWV9V2hlcmVJbnB1dGA7XG4gIGxldCBjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUgPSBuZXcgR3JhcGhRTElucHV0T2JqZWN0VHlwZSh7XG4gICAgbmFtZTogY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlTmFtZSxcbiAgICBkZXNjcmlwdGlvbjogYFRoZSAke2NsYXNzR3JhcGhRTENvbnN0cmFpbnRzVHlwZU5hbWV9IGlucHV0IHR5cGUgaXMgdXNlZCBpbiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBmaWx0ZXJpbmcgb2JqZWN0cyBvZiAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgZmllbGRzOiAoKSA9PiAoe1xuICAgICAgLi4uY2xhc3NDb25zdHJhaW50RmllbGRzLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoWydPUicsICdBTkQnLCAnTk9SJ10uaW5jbHVkZXMoZmllbGQpKSB7XG4gICAgICAgICAgcGFyc2VHcmFwaFFMU2NoZW1hLmxvZy53YXJuKFxuICAgICAgICAgICAgYEZpZWxkICR7ZmllbGR9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0byBzY2hlbWEgJHtjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGVOYW1lfSBiZWNhdXNlIGl0IGNvbGxpZGVkIHdpdGggYW4gZXhpc3Rpbmcgb25lLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VGaWVsZCA9IGZpZWxkID09PSAnaWQnID8gJ29iamVjdElkJyA6IGZpZWxkO1xuICAgICAgICBjb25zdCB0eXBlID0gdHJhbnNmb3JtQ29uc3RyYWludFR5cGVUb0dyYXBoUUwoXG4gICAgICAgICAgcGFyc2VDbGFzcy5maWVsZHNbcGFyc2VGaWVsZF0udHlwZSxcbiAgICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1twYXJzZUZpZWxkXS50YXJnZXRDbGFzcyxcbiAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpZWxkcyxcbiAgICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBUaGlzIGlzIHRoZSBvYmplY3QgJHtmaWVsZH0uYCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICB9XG4gICAgICB9LCB7fSksXG4gICAgICBPUjoge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIE9SIG9wZXJhdG9yIHRvIGNvbXBvdW5kIGNvbnN0cmFpbnRzLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSksXG4gICAgICB9LFxuICAgICAgQU5EOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgQU5EIG9wZXJhdG9yIHRvIGNvbXBvdW5kIGNvbnN0cmFpbnRzLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSksXG4gICAgICB9LFxuICAgICAgTk9SOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyBpcyB0aGUgTk9SIG9wZXJhdG9yIHRvIGNvbXBvdW5kIGNvbnN0cmFpbnRzLicsXG4gICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSksXG4gICAgICB9LFxuICAgIH0pLFxuICB9KTtcbiAgY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlID1cbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEuYWRkR3JhcGhRTFR5cGUoY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlKSB8fCBkZWZhdWx0R3JhcGhRTFR5cGVzLk9CSkVDVDtcblxuICBjb25zdCBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWUgPSBgJHtncmFwaFFMQ2xhc3NOYW1lfVJlbGF0aW9uV2hlcmVJbnB1dGA7XG4gIGxldCBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZSA9IG5ldyBHcmFwaFFMSW5wdXRPYmplY3RUeXBlKHtcbiAgICBuYW1lOiBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBUaGUgJHtjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZU5hbWV9IGlucHV0IHR5cGUgaXMgdXNlZCBpbiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBmaWx0ZXJpbmcgb2JqZWN0cyBvZiAke2dyYXBoUUxDbGFzc05hbWV9IGNsYXNzLmAsXG4gICAgZmllbGRzOiAoKSA9PiAoe1xuICAgICAgaGF2ZToge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1J1biBhIHJlbGF0aW9uYWwvcG9pbnRlciBxdWVyeSB3aGVyZSBhdCBsZWFzdCBvbmUgY2hpbGQgb2JqZWN0IGNhbiBtYXRjaC4nLFxuICAgICAgICB0eXBlOiBjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUsXG4gICAgICB9LFxuICAgICAgaGF2ZU5vdDoge1xuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnUnVuIGFuIGludmVydGVkIHJlbGF0aW9uYWwvcG9pbnRlciBxdWVyeSB3aGVyZSBhdCBsZWFzdCBvbmUgY2hpbGQgb2JqZWN0IGNhbiBtYXRjaC4nLFxuICAgICAgICB0eXBlOiBjbGFzc0dyYXBoUUxDb25zdHJhaW50c1R5cGUsXG4gICAgICB9LFxuICAgICAgZXhpc3RzOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgdGhlIHJlbGF0aW9uL3BvaW50ZXIgY29udGFpbnMgb2JqZWN0cy4nLFxuICAgICAgICB0eXBlOiBHcmFwaFFMQm9vbGVhbixcbiAgICAgIH0sXG4gICAgfSksXG4gIH0pO1xuICBjbGFzc0dyYXBoUUxSZWxhdGlvbkNvbnN0cmFpbnRzVHlwZSA9XG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTFJlbGF0aW9uQ29uc3RyYWludHNUeXBlKSB8fFxuICAgIGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNUO1xuXG4gIGNvbnN0IGNsYXNzR3JhcGhRTE9yZGVyVHlwZU5hbWUgPSBgJHtncmFwaFFMQ2xhc3NOYW1lfU9yZGVyYDtcbiAgbGV0IGNsYXNzR3JhcGhRTE9yZGVyVHlwZSA9IG5ldyBHcmFwaFFMRW51bVR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTE9yZGVyVHlwZU5hbWUsXG4gICAgZGVzY3JpcHRpb246IGBUaGUgJHtjbGFzc0dyYXBoUUxPcmRlclR5cGVOYW1lfSBpbnB1dCB0eXBlIGlzIHVzZWQgd2hlbiBzb3J0aW5nIG9iamVjdHMgb2YgdGhlICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuYCxcbiAgICB2YWx1ZXM6IGNsYXNzU29ydEZpZWxkcy5yZWR1Y2UoKHNvcnRGaWVsZHMsIGZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICBjb25zdCB7IGZpZWxkLCBhc2MsIGRlc2MgfSA9IGZpZWxkQ29uZmlnO1xuICAgICAgY29uc3QgdXBkYXRlZFNvcnRGaWVsZHMgPSB7XG4gICAgICAgIC4uLnNvcnRGaWVsZHMsXG4gICAgICB9O1xuICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZCA9PT0gJ2lkJyA/ICdvYmplY3RJZCcgOiBmaWVsZDtcbiAgICAgIGlmIChhc2MpIHtcbiAgICAgICAgdXBkYXRlZFNvcnRGaWVsZHNbYCR7ZmllbGR9X0FTQ2BdID0geyB2YWx1ZSB9O1xuICAgICAgfVxuICAgICAgaWYgKGRlc2MpIHtcbiAgICAgICAgdXBkYXRlZFNvcnRGaWVsZHNbYCR7ZmllbGR9X0RFU0NgXSA9IHsgdmFsdWU6IGAtJHt2YWx1ZX1gIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZFNvcnRGaWVsZHM7XG4gICAgfSwge30pLFxuICB9KTtcbiAgY2xhc3NHcmFwaFFMT3JkZXJUeXBlID0gcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGNsYXNzR3JhcGhRTE9yZGVyVHlwZSk7XG5cbiAgY29uc3QgY2xhc3NHcmFwaFFMRmluZEFyZ3MgPSB7XG4gICAgd2hlcmU6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlc2UgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgdGhlIG9iamVjdHMgbmVlZCB0byBtYXRjaCBpbiBvcmRlciB0byBiZSBmb3VuZC4nLFxuICAgICAgdHlwZTogY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlLFxuICAgIH0sXG4gICAgb3JkZXI6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIGZpZWxkcyB0byBiZSB1c2VkIHdoZW4gc29ydGluZyB0aGUgZGF0YSBmZXRjaGVkLicsXG4gICAgICB0eXBlOiBjbGFzc0dyYXBoUUxPcmRlclR5cGVcbiAgICAgICAgPyBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKGNsYXNzR3JhcGhRTE9yZGVyVHlwZSkpXG4gICAgICAgIDogR3JhcGhRTFN0cmluZyxcbiAgICB9LFxuICAgIHNraXA6IGRlZmF1bHRHcmFwaFFMVHlwZXMuU0tJUF9BVFQsXG4gICAgLi4uY29ubmVjdGlvbkFyZ3MsXG4gICAgb3B0aW9uczogZGVmYXVsdEdyYXBoUUxUeXBlcy5SRUFEX09QVElPTlNfQVRULFxuICB9O1xuICBjb25zdCBjbGFzc0dyYXBoUUxPdXRwdXRUeXBlTmFtZSA9IGAke2dyYXBoUUxDbGFzc05hbWV9YDtcbiAgY29uc3QgaW50ZXJmYWNlcyA9IFtkZWZhdWx0R3JhcGhRTFR5cGVzLlBBUlNFX09CSkVDVCwgcGFyc2VHcmFwaFFMU2NoZW1hLnJlbGF5Tm9kZUludGVyZmFjZV07XG4gIGNvbnN0IHBhcnNlT2JqZWN0RmllbGRzID0ge1xuICAgIGlkOiBnbG9iYWxJZEZpZWxkKGNsYXNzTmFtZSwgb2JqID0+IG9iai5vYmplY3RJZCksXG4gICAgLi4uZGVmYXVsdEdyYXBoUUxUeXBlcy5QQVJTRV9PQkpFQ1RfRklFTERTLFxuICAgIC4uLihjbGFzc05hbWUgPT09ICdfVXNlcidcbiAgICAgID8ge1xuICAgICAgICAgIGF1dGhEYXRhUmVzcG9uc2U6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgYXV0aCBwcm92aWRlciByZXNwb25zZSB3aGVuIHRyaWdnZXJlZCBvbiBzaWduVXAvbG9nSW4uYCxcbiAgICAgICAgICAgIHR5cGU6IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNULFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9O1xuICBjb25zdCBvdXRwdXRGaWVsZHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGNsYXNzT3V0cHV0RmllbGRzLnJlZHVjZSgoZmllbGRzLCBmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHRyYW5zZm9ybU91dHB1dFR5cGVUb0dyYXBoUUwoXG4gICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50eXBlLFxuICAgICAgICBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udGFyZ2V0Q2xhc3MsXG4gICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5wYXJzZUNsYXNzVHlwZXNcbiAgICAgICk7XG4gICAgICBpZiAocGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnR5cGUgPT09ICdSZWxhdGlvbicpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UGFyc2VDbGFzc1R5cGVzID1cbiAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc1R5cGVzW3BhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkXS50YXJnZXRDbGFzc107XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0YXJnZXRQYXJzZUNsYXNzVHlwZXMgPyB0YXJnZXRQYXJzZUNsYXNzVHlwZXMuY2xhc3NHcmFwaFFMRmluZEFyZ3MgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgdHlwZTogcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnJlcXVpcmVkID8gbmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpIDogdHlwZSxcbiAgICAgICAgICAgIGFzeW5jIHJlc29sdmUoc291cmNlLCBhcmdzLCBjb250ZXh0LCBxdWVyeUluZm8pIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdoZXJlLCBvcmRlciwgc2tpcCwgZmlyc3QsIGFmdGVyLCBsYXN0LCBiZWZvcmUsIG9wdGlvbnMgfSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByZWFkUHJlZmVyZW5jZSwgaW5jbHVkZVJlYWRQcmVmZXJlbmNlLCBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlIH0gPVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvbmZpZywgYXV0aCwgaW5mbyB9ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IGdldEZpZWxkTmFtZXMocXVlcnlJbmZvKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHsga2V5cywgaW5jbHVkZSB9ID0gZXh0cmFjdEtleXNBbmRJbmNsdWRlKFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKCdlZGdlcy5ub2RlLicpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IGZpZWxkLnJlcGxhY2UoJ2VkZ2VzLm5vZGUuJywgJycpKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmluZGV4T2YoJ2VkZ2VzLm5vZGUnKSA8IDApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZU9yZGVyID0gb3JkZXIgJiYgb3JkZXIuam9pbignLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdHNRdWVyaWVzLmZpbmRPYmplY3RzKFxuICAgICAgICAgICAgICAgICAgc291cmNlW2ZpZWxkXS5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICRyZWxhdGVkVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHlwZTogJ1BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RJZDogc291cmNlLm9iamVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAga2V5OiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHdoZXJlIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwYXJzZU9yZGVyLFxuICAgICAgICAgICAgICAgICAgc2tpcCxcbiAgICAgICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICAgICAgYWZ0ZXIsXG4gICAgICAgICAgICAgICAgICBsYXN0LFxuICAgICAgICAgICAgICAgICAgYmVmb3JlLFxuICAgICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICAgIGluY2x1ZGUsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHJlYWRQcmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgaW5jbHVkZVJlYWRQcmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgICAgICAgICBpbmZvLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHMsXG4gICAgICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEucGFyc2VDbGFzc2VzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5oYW5kbGVFcnJvcihlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0udHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICB0eXBlOiBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0ucmVxdWlyZWQgPyBuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgYXN5bmMgcmVzb2x2ZShzb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHNvdXJjZVtmaWVsZF0gJiYgc291cmNlW2ZpZWxkXS5jb29yZGluYXRlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VbZmllbGRdLmNvb3JkaW5hdGVzLm1hcChjb29yZGluYXRlID0+ICh7XG4gICAgICAgICAgICAgICAgICBsYXRpdHVkZTogY29vcmRpbmF0ZVswXSxcbiAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogY29vcmRpbmF0ZVsxXSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnR5cGUgPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5maWVsZHMsXG4gICAgICAgICAgW2ZpZWxkXToge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBVc2UgSW5saW5lIEZyYWdtZW50IG9uIEFycmF5IHRvIGdldCByZXN1bHRzOiBodHRwczovL2dyYXBocWwub3JnL2xlYXJuL3F1ZXJpZXMvI2lubGluZS1mcmFnbWVudHNgLFxuICAgICAgICAgICAgdHlwZTogcGFyc2VDbGFzcy5maWVsZHNbZmllbGRdLnJlcXVpcmVkID8gbmV3IEdyYXBoUUxOb25OdWxsKHR5cGUpIDogdHlwZSxcbiAgICAgICAgICAgIGFzeW5jIHJlc29sdmUoc291cmNlKSB7XG4gICAgICAgICAgICAgIGlmICghc291cmNlW2ZpZWxkXSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICAgICAgICByZXR1cm4gc291cmNlW2ZpZWxkXS5tYXAoYXN5bmMgZWxlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW0uY2xhc3NOYW1lICYmIGVsZW0ub2JqZWN0SWQgJiYgZWxlbS5fX3R5cGUgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGVsZW0gfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgIFtmaWVsZF06IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVGhpcyBpcyB0aGUgb2JqZWN0ICR7ZmllbGR9LmAsXG4gICAgICAgICAgICB0eXBlOiBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZF0ucmVxdWlyZWQgPyBuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkgOiB0eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgIH0sIHBhcnNlT2JqZWN0RmllbGRzKTtcbiAgfTtcbiAgbGV0IGNsYXNzR3JhcGhRTE91dHB1dFR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGNsYXNzR3JhcGhRTE91dHB1dFR5cGVOYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBgVGhlICR7Y2xhc3NHcmFwaFFMT3V0cHV0VHlwZU5hbWV9IG9iamVjdCB0eXBlIGlzIHVzZWQgaW4gb3BlcmF0aW9ucyB0aGF0IGludm9sdmUgb3V0cHV0dGluZyBvYmplY3RzIG9mICR7Z3JhcGhRTENsYXNzTmFtZX0gY2xhc3MuYCxcbiAgICBpbnRlcmZhY2VzLFxuICAgIGZpZWxkczogb3V0cHV0RmllbGRzLFxuICB9KTtcbiAgY2xhc3NHcmFwaFFMT3V0cHV0VHlwZSA9IHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjbGFzc0dyYXBoUUxPdXRwdXRUeXBlKTtcblxuICBjb25zdCB7IGNvbm5lY3Rpb25UeXBlLCBlZGdlVHlwZSB9ID0gY29ubmVjdGlvbkRlZmluaXRpb25zKHtcbiAgICBuYW1lOiBncmFwaFFMQ2xhc3NOYW1lLFxuICAgIGNvbm5lY3Rpb25GaWVsZHM6IHtcbiAgICAgIGNvdW50OiBkZWZhdWx0R3JhcGhRTFR5cGVzLkNPVU5UX0FUVCxcbiAgICB9LFxuICAgIG5vZGVUeXBlOiBjbGFzc0dyYXBoUUxPdXRwdXRUeXBlIHx8IGRlZmF1bHRHcmFwaFFMVHlwZXMuT0JKRUNULFxuICB9KTtcbiAgbGV0IGNsYXNzR3JhcGhRTEZpbmRSZXN1bHRUeXBlID0gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgcGFyc2VHcmFwaFFMU2NoZW1hLmFkZEdyYXBoUUxUeXBlKGVkZ2VUeXBlKSAmJlxuICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZShjb25uZWN0aW9uVHlwZSwgZmFsc2UsIGZhbHNlLCB0cnVlKVxuICApIHtcbiAgICBjbGFzc0dyYXBoUUxGaW5kUmVzdWx0VHlwZSA9IGNvbm5lY3Rpb25UeXBlO1xuICB9XG5cbiAgcGFyc2VHcmFwaFFMU2NoZW1hLnBhcnNlQ2xhc3NUeXBlc1tjbGFzc05hbWVdID0ge1xuICAgIGNsYXNzR3JhcGhRTFBvaW50ZXJUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFJlbGF0aW9uVHlwZSxcbiAgICBjbGFzc0dyYXBoUUxDcmVhdGVUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFVwZGF0ZVR5cGUsXG4gICAgY2xhc3NHcmFwaFFMQ29uc3RyYWludHNUeXBlLFxuICAgIGNsYXNzR3JhcGhRTFJlbGF0aW9uQ29uc3RyYWludHNUeXBlLFxuICAgIGNsYXNzR3JhcGhRTEZpbmRBcmdzLFxuICAgIGNsYXNzR3JhcGhRTE91dHB1dFR5cGUsXG4gICAgY2xhc3NHcmFwaFFMRmluZFJlc3VsdFR5cGUsXG4gICAgY29uZmlnOiB7XG4gICAgICBwYXJzZUNsYXNzQ29uZmlnLFxuICAgICAgaXNDcmVhdGVFbmFibGVkLFxuICAgICAgaXNVcGRhdGVFbmFibGVkLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19Vc2VyJykge1xuICAgIGNvbnN0IHZpZXdlclR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgbmFtZTogJ1ZpZXdlcicsXG4gICAgICBkZXNjcmlwdGlvbjogYFRoZSBWaWV3ZXIgb2JqZWN0IHR5cGUgaXMgdXNlZCBpbiBvcGVyYXRpb25zIHRoYXQgaW52b2x2ZSBvdXRwdXR0aW5nIHRoZSBjdXJyZW50IHVzZXIgZGF0YS5gLFxuICAgICAgZmllbGRzOiAoKSA9PiAoe1xuICAgICAgICBzZXNzaW9uVG9rZW46IGRlZmF1bHRHcmFwaFFMVHlwZXMuU0VTU0lPTl9UT0tFTl9BVFQsXG4gICAgICAgIHVzZXI6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgaXMgdGhlIGN1cnJlbnQgdXNlci4nLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChjbGFzc0dyYXBoUUxPdXRwdXRUeXBlKSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIHBhcnNlR3JhcGhRTFNjaGVtYS5hZGRHcmFwaFFMVHlwZSh2aWV3ZXJUeXBlLCB0cnVlLCB0cnVlKTtcbiAgICBwYXJzZUdyYXBoUUxTY2hlbWEudmlld2VyVHlwZSA9IHZpZXdlclR5cGU7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGV4dHJhY3RLZXlzQW5kSW5jbHVkZSwgbG9hZCB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFVQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxrQkFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksbUJBQUEsR0FBQUMsdUJBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFNLGNBQUEsR0FBQUQsdUJBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFPLHVCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFULE9B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
@@ -14,8 +14,7 @@ const load = parseGraphQLSchema => {
14
14
  parseGraphQLSchema.graphQLSchemaDirectivesDefinitions = definitions;
15
15
  const resolveDirective = schema => (0, _utils.mapSchema)(schema, {
16
16
  [_utils.MapperKind.OBJECT_FIELD]: fieldConfig => {
17
- var _getDirective;
18
- const directive = (_getDirective = (0, _utils.getDirective)(schema, fieldConfig, 'resolve')) === null || _getDirective === void 0 ? void 0 : _getDirective[0];
17
+ const directive = (0, _utils.getDirective)(schema, fieldConfig, 'resolve')?.[0];
19
18
  if (directive) {
20
19
  const {
21
20
  to: targetCloudFunction
@@ -47,8 +46,7 @@ const load = parseGraphQLSchema => {
47
46
  });
48
47
  const mockDirective = schema => (0, _utils.mapSchema)(schema, {
49
48
  [_utils.MapperKind.OBJECT_FIELD]: fieldConfig => {
50
- var _getDirective2;
51
- const directive = (_getDirective2 = (0, _utils.getDirective)(schema, fieldConfig, 'mock')) === null || _getDirective2 === void 0 ? void 0 : _getDirective2[0];
49
+ const directive = (0, _utils.getDirective)(schema, fieldConfig, 'mock')?.[0];
52
50
  if (directive) {
53
51
  const {
54
52
  with: mockValue
@@ -61,4 +59,4 @@ const load = parseGraphQLSchema => {
61
59
  parseGraphQLSchema.graphQLSchemaDirectives = schema => mockDirective(resolveDirective(schema));
62
60
  };
63
61
  exports.load = load;
64
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX0Z1bmN0aW9uc1JvdXRlciIsImRlZmluaXRpb25zIiwiZXhwb3J0cyIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zIiwicmVzb2x2ZURpcmVjdGl2ZSIsInNjaGVtYSIsIm1hcFNjaGVtYSIsIk1hcHBlcktpbmQiLCJPQkpFQ1RfRklFTEQiLCJmaWVsZENvbmZpZyIsIl9nZXREaXJlY3RpdmUiLCJkaXJlY3RpdmUiLCJnZXREaXJlY3RpdmUiLCJ0byIsInRhcmdldENsb3VkRnVuY3Rpb24iLCJyZXNvbHZlIiwiX3NvdXJjZSIsImFyZ3MiLCJjb250ZXh0IiwiZ3FsSW5mbyIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwiZnVuY3Rpb25OYW1lIiwiZmllbGROYW1lIiwiRnVuY3Rpb25zUm91dGVyIiwiaGFuZGxlQ2xvdWRGdW5jdGlvbiIsInBhcmFtcyIsImJvZHkiLCJyZXNwb25zZSIsInJlc3VsdCIsImUiLCJoYW5kbGVFcnJvciIsIm1vY2tEaXJlY3RpdmUiLCJfZ2V0RGlyZWN0aXZlMiIsIndpdGgiLCJtb2NrVmFsdWUiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2xvYWRlcnMvc2NoZW1hRGlyZWN0aXZlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXBTY2hlbWEsIGdldERpcmVjdGl2ZSwgTWFwcGVyS2luZCB9IGZyb20gJ0BncmFwaHFsLXRvb2xzL3V0aWxzJztcbmltcG9ydCB7IEZ1bmN0aW9uc1JvdXRlciB9IGZyb20gJy4uLy4uL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcblxuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zID0gYFxuICBkaXJlY3RpdmUgQHJlc29sdmUodG86IFN0cmluZykgb24gRklFTERfREVGSU5JVElPTlxuICBkaXJlY3RpdmUgQG1vY2sod2l0aDogQW55ISkgb24gRklFTERfREVGSU5JVElPTlxuYDtcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG5cbiAgY29uc3QgcmVzb2x2ZURpcmVjdGl2ZSA9IHNjaGVtYSA9PlxuICAgIG1hcFNjaGVtYShzY2hlbWEsIHtcbiAgICAgIFtNYXBwZXJLaW5kLk9CSkVDVF9GSUVMRF06IGZpZWxkQ29uZmlnID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHNjaGVtYSwgZmllbGRDb25maWcsICdyZXNvbHZlJyk/LlswXTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSkge1xuICAgICAgICAgIGNvbnN0IHsgdG86IHRhcmdldENsb3VkRnVuY3Rpb24gfSA9IGRpcmVjdGl2ZTtcbiAgICAgICAgICBmaWVsZENvbmZpZy5yZXNvbHZlID0gYXN5bmMgKF9zb3VyY2UsIGFyZ3MsIGNvbnRleHQsIGdxbEluZm8pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0gPSBjb250ZXh0O1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0YXJnZXRDbG91ZEZ1bmN0aW9uIHx8IGdxbEluZm8uZmllbGROYW1lO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGF3YWl0IEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgICBib2R5OiBhcmdzLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICkucmVzcG9uc2UucmVzdWx0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEuaGFuZGxlRXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRDb25maWc7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIGNvbnN0IG1vY2tEaXJlY3RpdmUgPSBzY2hlbWEgPT5cbiAgICBtYXBTY2hlbWEoc2NoZW1hLCB7XG4gICAgICBbTWFwcGVyS2luZC5PQkpFQ1RfRklFTERdOiBmaWVsZENvbmZpZyA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZShzY2hlbWEsIGZpZWxkQ29uZmlnLCAnbW9jaycpPy5bMF07XG4gICAgICAgIGlmIChkaXJlY3RpdmUpIHtcbiAgICAgICAgICBjb25zdCB7IHdpdGg6IG1vY2tWYWx1ZSB9ID0gZGlyZWN0aXZlO1xuICAgICAgICAgIGZpZWxkQ29uZmlnLnJlc29sdmUgPSBhc3luYyAoKSA9PiBtb2NrVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkQ29uZmlnO1xuICAgICAgfSxcbiAgICB9KTtcblxuICBwYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXMgPSBzY2hlbWEgPT4gbW9ja0RpcmVjdGl2ZShyZXNvbHZlRGlyZWN0aXZlKHNjaGVtYSkpO1xufTtcbmV4cG9ydCB7IGxvYWQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUVPLE1BQU1FLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUc7QUFDM0I7QUFDQTtBQUNBLENBQUM7QUFFRCxNQUFNRSxJQUFJLEdBQUdDLGtCQUFrQixJQUFJO0VBQ2pDQSxrQkFBa0IsQ0FBQ0Msa0NBQWtDLEdBQUdKLFdBQVc7RUFFbkUsTUFBTUssZ0JBQWdCLEdBQUdDLE1BQU0sSUFDN0IsSUFBQUMsZ0JBQVMsRUFBQ0QsTUFBTSxFQUFFO0lBQ2hCLENBQUNFLGlCQUFVLENBQUNDLFlBQVksR0FBR0MsV0FBVyxJQUFJO01BQUEsSUFBQUMsYUFBQTtNQUN4QyxNQUFNQyxTQUFTLElBQUFELGFBQUEsR0FBRyxJQUFBRSxtQkFBWSxFQUFDUCxNQUFNLEVBQUVJLFdBQVcsRUFBRSxTQUFTLENBQUMsY0FBQUMsYUFBQSx1QkFBNUNBLGFBQUEsQ0FBK0MsQ0FBQyxDQUFDO01BQ25FLElBQUlDLFNBQVMsRUFBRTtRQUNiLE1BQU07VUFBRUUsRUFBRSxFQUFFQztRQUFvQixDQUFDLEdBQUdILFNBQVM7UUFDN0NGLFdBQVcsQ0FBQ00sT0FBTyxHQUFHLE9BQU9DLE9BQU8sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sS0FBSztVQUMvRCxJQUFJO1lBQ0YsTUFBTTtjQUFFQyxNQUFNO2NBQUVDLElBQUk7Y0FBRUM7WUFBSyxDQUFDLEdBQUdKLE9BQU87WUFDdEMsTUFBTUssWUFBWSxHQUFHVCxtQkFBbUIsSUFBSUssT0FBTyxDQUFDSyxTQUFTO1lBQzdELE9BQU8sQ0FDTCxNQUFNQyxnQ0FBZSxDQUFDQyxtQkFBbUIsQ0FBQztjQUN4Q0MsTUFBTSxFQUFFO2dCQUNOSjtjQUNGLENBQUM7Y0FDREgsTUFBTTtjQUNOQyxJQUFJO2NBQ0pDLElBQUk7Y0FDSk0sSUFBSSxFQUFFWDtZQUNSLENBQUMsQ0FBQyxFQUNGWSxRQUFRLENBQUNDLE1BQU07VUFDbkIsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtZQUNWN0Isa0JBQWtCLENBQUM4QixXQUFXLENBQUNELENBQUMsQ0FBQztVQUNuQztRQUNGLENBQUM7TUFDSDtNQUNBLE9BQU90QixXQUFXO0lBQ3BCO0VBQ0YsQ0FBQyxDQUFDO0VBRUosTUFBTXdCLGFBQWEsR0FBRzVCLE1BQU0sSUFDMUIsSUFBQUMsZ0JBQVMsRUFBQ0QsTUFBTSxFQUFFO0lBQ2hCLENBQUNFLGlCQUFVLENBQUNDLFlBQVksR0FBR0MsV0FBVyxJQUFJO01BQUEsSUFBQXlCLGNBQUE7TUFDeEMsTUFBTXZCLFNBQVMsSUFBQXVCLGNBQUEsR0FBRyxJQUFBdEIsbUJBQVksRUFBQ1AsTUFBTSxFQUFFSSxXQUFXLEVBQUUsTUFBTSxDQUFDLGNBQUF5QixjQUFBLHVCQUF6Q0EsY0FBQSxDQUE0QyxDQUFDLENBQUM7TUFDaEUsSUFBSXZCLFNBQVMsRUFBRTtRQUNiLE1BQU07VUFBRXdCLElBQUksRUFBRUM7UUFBVSxDQUFDLEdBQUd6QixTQUFTO1FBQ3JDRixXQUFXLENBQUNNLE9BQU8sR0FBRyxZQUFZcUIsU0FBUztNQUM3QztNQUNBLE9BQU8zQixXQUFXO0lBQ3BCO0VBQ0YsQ0FBQyxDQUFDO0VBRUpQLGtCQUFrQixDQUFDbUMsdUJBQXVCLEdBQUdoQyxNQUFNLElBQUk0QixhQUFhLENBQUM3QixnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUFDTCxPQUFBLENBQUFDLElBQUEsR0FBQUEsSUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX0Z1bmN0aW9uc1JvdXRlciIsImRlZmluaXRpb25zIiwiZXhwb3J0cyIsImxvYWQiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zIiwicmVzb2x2ZURpcmVjdGl2ZSIsInNjaGVtYSIsIm1hcFNjaGVtYSIsIk1hcHBlcktpbmQiLCJPQkpFQ1RfRklFTEQiLCJmaWVsZENvbmZpZyIsImRpcmVjdGl2ZSIsImdldERpcmVjdGl2ZSIsInRvIiwidGFyZ2V0Q2xvdWRGdW5jdGlvbiIsInJlc29sdmUiLCJfc291cmNlIiwiYXJncyIsImNvbnRleHQiLCJncWxJbmZvIiwiY29uZmlnIiwiYXV0aCIsImluZm8iLCJmdW5jdGlvbk5hbWUiLCJmaWVsZE5hbWUiLCJGdW5jdGlvbnNSb3V0ZXIiLCJoYW5kbGVDbG91ZEZ1bmN0aW9uIiwicGFyYW1zIiwiYm9keSIsInJlc3BvbnNlIiwicmVzdWx0IiwiZSIsImhhbmRsZUVycm9yIiwibW9ja0RpcmVjdGl2ZSIsIndpdGgiLCJtb2NrVmFsdWUiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2xvYWRlcnMvc2NoZW1hRGlyZWN0aXZlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXBTY2hlbWEsIGdldERpcmVjdGl2ZSwgTWFwcGVyS2luZCB9IGZyb20gJ0BncmFwaHFsLXRvb2xzL3V0aWxzJztcbmltcG9ydCB7IEZ1bmN0aW9uc1JvdXRlciB9IGZyb20gJy4uLy4uL1JvdXRlcnMvRnVuY3Rpb25zUm91dGVyJztcblxuZXhwb3J0IGNvbnN0IGRlZmluaXRpb25zID0gYFxuICBkaXJlY3RpdmUgQHJlc29sdmUodG86IFN0cmluZykgb24gRklFTERfREVGSU5JVElPTlxuICBkaXJlY3RpdmUgQG1vY2sod2l0aDogQW55ISkgb24gRklFTERfREVGSU5JVElPTlxuYDtcblxuY29uc3QgbG9hZCA9IHBhcnNlR3JhcGhRTFNjaGVtYSA9PiB7XG4gIHBhcnNlR3JhcGhRTFNjaGVtYS5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG5cbiAgY29uc3QgcmVzb2x2ZURpcmVjdGl2ZSA9IHNjaGVtYSA9PlxuICAgIG1hcFNjaGVtYShzY2hlbWEsIHtcbiAgICAgIFtNYXBwZXJLaW5kLk9CSkVDVF9GSUVMRF06IGZpZWxkQ29uZmlnID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlID0gZ2V0RGlyZWN0aXZlKHNjaGVtYSwgZmllbGRDb25maWcsICdyZXNvbHZlJyk/LlswXTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSkge1xuICAgICAgICAgIGNvbnN0IHsgdG86IHRhcmdldENsb3VkRnVuY3Rpb24gfSA9IGRpcmVjdGl2ZTtcbiAgICAgICAgICBmaWVsZENvbmZpZy5yZXNvbHZlID0gYXN5bmMgKF9zb3VyY2UsIGFyZ3MsIGNvbnRleHQsIGdxbEluZm8pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29uZmlnLCBhdXRoLCBpbmZvIH0gPSBjb250ZXh0O1xuICAgICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0YXJnZXRDbG91ZEZ1bmN0aW9uIHx8IGdxbEluZm8uZmllbGROYW1lO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIGF3YWl0IEZ1bmN0aW9uc1JvdXRlci5oYW5kbGVDbG91ZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgICAgICAgIGluZm8sXG4gICAgICAgICAgICAgICAgICBib2R5OiBhcmdzLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICkucmVzcG9uc2UucmVzdWx0O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBwYXJzZUdyYXBoUUxTY2hlbWEuaGFuZGxlRXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRDb25maWc7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gIGNvbnN0IG1vY2tEaXJlY3RpdmUgPSBzY2hlbWEgPT5cbiAgICBtYXBTY2hlbWEoc2NoZW1hLCB7XG4gICAgICBbTWFwcGVyS2luZC5PQkpFQ1RfRklFTERdOiBmaWVsZENvbmZpZyA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZSA9IGdldERpcmVjdGl2ZShzY2hlbWEsIGZpZWxkQ29uZmlnLCAnbW9jaycpPy5bMF07XG4gICAgICAgIGlmIChkaXJlY3RpdmUpIHtcbiAgICAgICAgICBjb25zdCB7IHdpdGg6IG1vY2tWYWx1ZSB9ID0gZGlyZWN0aXZlO1xuICAgICAgICAgIGZpZWxkQ29uZmlnLnJlc29sdmUgPSBhc3luYyAoKSA9PiBtb2NrVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkQ29uZmlnO1xuICAgICAgfSxcbiAgICB9KTtcblxuICBwYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXMgPSBzY2hlbWEgPT4gbW9ja0RpcmVjdGl2ZShyZXNvbHZlRGlyZWN0aXZlKHNjaGVtYSkpO1xufTtcbmV4cG9ydCB7IGxvYWQgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUVPLE1BQU1FLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUc7QUFDM0I7QUFDQTtBQUNBLENBQUM7QUFFRCxNQUFNRSxJQUFJLEdBQUdDLGtCQUFrQixJQUFJO0VBQ2pDQSxrQkFBa0IsQ0FBQ0Msa0NBQWtDLEdBQUdKLFdBQVc7RUFFbkUsTUFBTUssZ0JBQWdCLEdBQUdDLE1BQU0sSUFDN0IsSUFBQUMsZ0JBQVMsRUFBQ0QsTUFBTSxFQUFFO0lBQ2hCLENBQUNFLGlCQUFVLENBQUNDLFlBQVksR0FBR0MsV0FBVyxJQUFJO01BQ3hDLE1BQU1DLFNBQVMsR0FBRyxJQUFBQyxtQkFBWSxFQUFDTixNQUFNLEVBQUVJLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbkUsSUFBSUMsU0FBUyxFQUFFO1FBQ2IsTUFBTTtVQUFFRSxFQUFFLEVBQUVDO1FBQW9CLENBQUMsR0FBR0gsU0FBUztRQUM3Q0QsV0FBVyxDQUFDSyxPQUFPLEdBQUcsT0FBT0MsT0FBTyxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxLQUFLO1VBQy9ELElBQUk7WUFDRixNQUFNO2NBQUVDLE1BQU07Y0FBRUMsSUFBSTtjQUFFQztZQUFLLENBQUMsR0FBR0osT0FBTztZQUN0QyxNQUFNSyxZQUFZLEdBQUdULG1CQUFtQixJQUFJSyxPQUFPLENBQUNLLFNBQVM7WUFDN0QsT0FBTyxDQUNMLE1BQU1DLGdDQUFlLENBQUNDLG1CQUFtQixDQUFDO2NBQ3hDQyxNQUFNLEVBQUU7Z0JBQ05KO2NBQ0YsQ0FBQztjQUNESCxNQUFNO2NBQ05DLElBQUk7Y0FDSkMsSUFBSTtjQUNKTSxJQUFJLEVBQUVYO1lBQ1IsQ0FBQyxDQUFDLEVBQ0ZZLFFBQVEsQ0FBQ0MsTUFBTTtVQUNuQixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO1lBQ1Y1QixrQkFBa0IsQ0FBQzZCLFdBQVcsQ0FBQ0QsQ0FBQyxDQUFDO1VBQ25DO1FBQ0YsQ0FBQztNQUNIO01BQ0EsT0FBT3JCLFdBQVc7SUFDcEI7RUFDRixDQUFDLENBQUM7RUFFSixNQUFNdUIsYUFBYSxHQUFHM0IsTUFBTSxJQUMxQixJQUFBQyxnQkFBUyxFQUFDRCxNQUFNLEVBQUU7SUFDaEIsQ0FBQ0UsaUJBQVUsQ0FBQ0MsWUFBWSxHQUFHQyxXQUFXLElBQUk7TUFDeEMsTUFBTUMsU0FBUyxHQUFHLElBQUFDLG1CQUFZLEVBQUNOLE1BQU0sRUFBRUksV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNoRSxJQUFJQyxTQUFTLEVBQUU7UUFDYixNQUFNO1VBQUV1QixJQUFJLEVBQUVDO1FBQVUsQ0FBQyxHQUFHeEIsU0FBUztRQUNyQ0QsV0FBVyxDQUFDSyxPQUFPLEdBQUcsWUFBWW9CLFNBQVM7TUFDN0M7TUFDQSxPQUFPekIsV0FBVztJQUNwQjtFQUNGLENBQUMsQ0FBQztFQUVKUCxrQkFBa0IsQ0FBQ2lDLHVCQUF1QixHQUFHOUIsTUFBTSxJQUFJMkIsYUFBYSxDQUFDNUIsZ0JBQWdCLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hHLENBQUM7QUFBQ0wsT0FBQSxDQUFBQyxJQUFBLEdBQUFBLElBQUEiLCJpZ25vcmVMaXN0IjpbXX0=