parse-server 5.3.0-alpha.10 → 5.3.0-alpha.11
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.
- package/lib/GraphQL/ParseGraphQLSchema.js +20 -6
- package/lib/GraphQL/ParseGraphQLServer.js +36 -26
- package/lib/GraphQL/helpers/objectsQueries.js +2 -2
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +9 -6
- package/lib/GraphQL/loaders/filesMutations.js +9 -22
- package/lib/GraphQL/parseGraphQLUtils.js +5 -3
- package/package.json +6 -9
|
@@ -63,6 +63,7 @@ class ParseGraphQLSchema {
|
|
|
63
63
|
this.graphQLCustomTypeDefs = params.graphQLCustomTypeDefs;
|
|
64
64
|
this.appId = params.appId || (0, _requiredParameter.default)('You must provide the appId!');
|
|
65
65
|
this.schemaCache = _SchemaCache.default;
|
|
66
|
+
this.logCache = {};
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
async load() {
|
|
@@ -71,7 +72,7 @@ class ParseGraphQLSchema {
|
|
|
71
72
|
} = await this._initializeSchemaAndConfig();
|
|
72
73
|
const parseClassesArray = await this._getClassesForSchema(parseGraphQLConfig);
|
|
73
74
|
const functionNames = await this._getFunctionNames();
|
|
74
|
-
const functionNamesString =
|
|
75
|
+
const functionNamesString = functionNames.join();
|
|
75
76
|
const parseClasses = parseClassesArray.reduce((acc, clazz) => {
|
|
76
77
|
acc[clazz.className] = clazz;
|
|
77
78
|
return acc;
|
|
@@ -276,6 +277,15 @@ class ParseGraphQLSchema {
|
|
|
276
277
|
return this.graphQLSchema;
|
|
277
278
|
}
|
|
278
279
|
|
|
280
|
+
_logOnce(severity, message) {
|
|
281
|
+
if (this.logCache[message]) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
this.log[severity](message);
|
|
286
|
+
this.logCache[message] = true;
|
|
287
|
+
}
|
|
288
|
+
|
|
279
289
|
addGraphQLType(type, throwError = false, ignoreReserved = false, ignoreConnection = false) {
|
|
280
290
|
if (!ignoreReserved && RESERVED_GRAPHQL_TYPE_NAMES.includes(type.name) || this.graphQLTypes.find(existingType => existingType.name === type.name) || !ignoreConnection && type.name.endsWith('Connection')) {
|
|
281
291
|
const message = `Type ${type.name} could not be added to the auto schema because it collided with an existing type.`;
|
|
@@ -284,7 +294,8 @@ class ParseGraphQLSchema {
|
|
|
284
294
|
throw new Error(message);
|
|
285
295
|
}
|
|
286
296
|
|
|
287
|
-
this.
|
|
297
|
+
this._logOnce('warn', message);
|
|
298
|
+
|
|
288
299
|
return undefined;
|
|
289
300
|
}
|
|
290
301
|
|
|
@@ -300,7 +311,8 @@ class ParseGraphQLSchema {
|
|
|
300
311
|
throw new Error(message);
|
|
301
312
|
}
|
|
302
313
|
|
|
303
|
-
this.
|
|
314
|
+
this._logOnce('warn', message);
|
|
315
|
+
|
|
304
316
|
return undefined;
|
|
305
317
|
}
|
|
306
318
|
|
|
@@ -316,7 +328,8 @@ class ParseGraphQLSchema {
|
|
|
316
328
|
throw new Error(message);
|
|
317
329
|
}
|
|
318
330
|
|
|
319
|
-
this.
|
|
331
|
+
this._logOnce('warn', message);
|
|
332
|
+
|
|
320
333
|
return undefined;
|
|
321
334
|
}
|
|
322
335
|
|
|
@@ -434,7 +447,8 @@ class ParseGraphQLSchema {
|
|
|
434
447
|
if (/^[_a-zA-Z][_a-zA-Z0-9]*$/.test(functionName)) {
|
|
435
448
|
return true;
|
|
436
449
|
} else {
|
|
437
|
-
this.
|
|
450
|
+
this._logOnce('warn', `Function ${functionName} could not be added to the auto schema because GraphQL names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/.`);
|
|
451
|
+
|
|
438
452
|
return false;
|
|
439
453
|
}
|
|
440
454
|
});
|
|
@@ -468,4 +482,4 @@ class ParseGraphQLSchema {
|
|
|
468
482
|
}
|
|
469
483
|
|
|
470
484
|
exports.ParseGraphQLSchema = ParseGraphQLSchema;
|
|
471
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNjaGVtYS5qcyJdLCJuYW1lcyI6WyJSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVMiLCJSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTIiwiUkVTRVJWRURfR1JBUEhRTF9NVVRBVElPTl9OQU1FUyIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImNvbnN0cnVjdG9yIiwicGFyYW1zIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImRhdGFiYXNlQ29udHJvbGxlciIsImxvZyIsImdyYXBoUUxDdXN0b21UeXBlRGVmcyIsImFwcElkIiwic2NoZW1hQ2FjaGUiLCJTY2hlbWFDYWNoZSIsImxvYWQiLCJwYXJzZUdyYXBoUUxDb25maWciLCJfaW5pdGlhbGl6ZVNjaGVtYUFuZENvbmZpZyIsInBhcnNlQ2xhc3Nlc0FycmF5IiwiX2dldENsYXNzZXNGb3JTY2hlbWEiLCJmdW5jdGlvbk5hbWVzIiwiX2dldEZ1bmN0aW9uTmFtZXMiLCJmdW5jdGlvbk5hbWVzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhcnNlQ2xhc3NlcyIsInJlZHVjZSIsImFjYyIsImNsYXp6IiwiY2xhc3NOYW1lIiwiX2hhc1NjaGVtYUlucHV0Q2hhbmdlZCIsImdyYXBoUUxTY2hlbWEiLCJwYXJzZUNsYXNzVHlwZXMiLCJ2aWV3ZXJUeXBlIiwiZ3JhcGhRTEF1dG9TY2hlbWEiLCJncmFwaFFMVHlwZXMiLCJncmFwaFFMUXVlcmllcyIsImdyYXBoUUxNdXRhdGlvbnMiLCJncmFwaFFMU3Vic2NyaXB0aW9ucyIsImdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzRGVmaW5pdGlvbnMiLCJncmFwaFFMU2NoZW1hRGlyZWN0aXZlcyIsInJlbGF5Tm9kZUludGVyZmFjZSIsImRlZmF1bHRHcmFwaFFMVHlwZXMiLCJkZWZhdWx0UmVsYXlTY2hlbWEiLCJzY2hlbWFUeXBlcyIsIl9nZXRQYXJzZUNsYXNzZXNXaXRoQ29uZmlnIiwiZm9yRWFjaCIsInBhcnNlQ2xhc3MiLCJwYXJzZUNsYXNzQ29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImZpZWxkcyIsImZpZWxkTmFtZSIsInN0YXJ0c1dpdGgiLCJvcmRlcmVkRmllbGRzIiwic29ydCIsInBhcnNlQ2xhc3NRdWVyaWVzIiwicGFyc2VDbGFzc011dGF0aW9ucyIsImxvYWRBcnJheVJlc3VsdCIsImRlZmF1bHRHcmFwaFFMUXVlcmllcyIsImRlZmF1bHRHcmFwaFFMTXV0YXRpb25zIiwiZ3JhcGhRTFF1ZXJ5IiwidW5kZWZpbmVkIiwibGVuZ3RoIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhZGRHcmFwaFFMVHlwZSIsImdyYXBoUUxNdXRhdGlvbiIsImdyYXBoUUxTdWJzY3JpcHRpb24iLCJHcmFwaFFMU2NoZW1hIiwidHlwZXMiLCJxdWVyeSIsIm11dGF0aW9uIiwic3Vic2NyaXB0aW9uIiwic2NoZW1hRGlyZWN0aXZlcyIsImdldFR5cGVNYXAiLCJjdXN0b21HcmFwaFFMU2NoZW1hVHlwZU1hcCIsIl90eXBlTWFwIiwiZmluZEFuZFJlcGxhY2VMYXN0VHlwZSIsInBhcmVudCIsImtleSIsIm9mVHlwZSIsImN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5IiwiY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUiLCJhdXRvR3JhcGhRTFNjaGVtYVR5cGUiLCJnZXRGaWVsZHMiLCJfZmllbGRzIiwiZmllbGRLZXkiLCJmaWVsZCIsImRpcmVjdGl2ZXNEZWZpbml0aW9uc1NjaGVtYSIsImF1dG9TY2hlbWEiLCJzdGl0Y2hTY2hlbWFzIiwic2NoZW1hcyIsIm1lcmdlRGlyZWN0aXZlcyIsImdyYXBoUUxTY2hlbWFUeXBlTWFwIiwiZ3JhcGhRTFNjaGVtYVR5cGVOYW1lIiwiZ3JhcGhRTFNjaGVtYVR5cGUiLCJkZWZpbml0aW9ucyIsImdyYXBoUUxDdXN0b21UeXBlRGVmIiwiZmluZCIsImRlZmluaXRpb24iLCJ2YWx1ZSIsImdyYXBoUUxTY2hlbWFUeXBlRmllbGRNYXAiLCJncmFwaFFMU2NoZW1hVHlwZUZpZWxkTmFtZSIsImdyYXBoUUxTY2hlbWFUeXBlRmllbGQiLCJhc3ROb2RlIiwiU2NoZW1hRGlyZWN0aXZlVmlzaXRvciIsInZpc2l0U2NoZW1hRGlyZWN0aXZlcyIsInR5cGUiLCJ0aHJvd0Vycm9yIiwiaWdub3JlUmVzZXJ2ZWQiLCJpZ25vcmVDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJleGlzdGluZ1R5cGUiLCJlbmRzV2l0aCIsIm1lc3NhZ2UiLCJFcnJvciIsIndhcm4iLCJwdXNoIiwiYWRkR3JhcGhRTFF1ZXJ5IiwiYWRkR3JhcGhRTE11dGF0aW9uIiwiaGFuZGxlRXJyb3IiLCJlcnJvciIsIlBhcnNlIiwic3RhY2siLCJzY2hlbWFDb250cm9sbGVyIiwiUHJvbWlzZSIsImFsbCIsImxvYWRTY2hlbWEiLCJnZXRHcmFwaFFMQ29uZmlnIiwiZW5hYmxlZEZvckNsYXNzZXMiLCJkaXNhYmxlZEZvckNsYXNzZXMiLCJhbGxDbGFzc2VzIiwiZ2V0QWxsQ2xhc3NlcyIsIkFycmF5IiwiaXNBcnJheSIsImluY2x1ZGVkQ2xhc3NlcyIsImZpbHRlciIsImlzVXNlcnNDbGFzc0Rpc2FibGVkIiwic29tZSIsImNsYXNzQ29uZmlncyIsInNvcnRDbGFzc2VzIiwiYSIsImIiLCJtYXAiLCJjIiwiZnVuY3Rpb25OYW1lIiwidGVzdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVBLE1BQU1BLDJCQUEyQixHQUFHLENBQ2xDLFFBRGtDLEVBRWxDLFNBRmtDLEVBR2xDLEtBSGtDLEVBSWxDLE9BSmtDLEVBS2xDLElBTGtDLEVBTWxDLGFBTmtDLEVBT2xDLE9BUGtDLEVBUWxDLFVBUmtDLEVBU2xDLGNBVGtDLEVBVWxDLGlCQVZrQyxFQVdsQyxtQkFYa0MsRUFZbEMs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QixNQUFELEVBSVY7QUFDVixVQUFNO0FBQUVrQixNQUFBQSxZQUFGO0FBQWdCVCxNQUFBQSxrQkFBaEI7QUFBb0NNLE1BQUFBO0FBQXBDLFFBQTREZixNQUFsRSxDQURVLENBR1Y7O0FBQ0EsUUFBSSxDQUFDLEtBQUt3QixhQUFWLEVBQXlCO0FBQ3ZCLGFBQU8sSUFBUDtBQUNEOztBQUVELFFBQ0UsNkJBQWtCLEtBQUtmLGtCQUF2QixFQUEyQ0Esa0JBQTNDLEtBQ0EsS0FBS00sbUJBQUwsS0FBNkJBLG1CQUQ3QixJQUVBLDZCQUFrQixLQUFLRyxZQUF2QixFQUFxQ0EsWUFBckMsQ0FIRixFQUlFO0FBQ0EsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBdmNzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IEdyYXBoUUxTY2hlbWEsIEdyYXBoUUxPYmplY3RUeXBlLCBEb2N1bWVudE5vZGUsIEdyYXBoUUxOYW1lZFR5cGUgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IHN0aXRjaFNjaGVtYXMgfSBmcm9tICdAZ3JhcGhxbC10b29scy9zdGl0Y2gnO1xuaW1wb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IFNjaGVtYURpcmVjdGl2ZVZpc2l0b3IgfSBmcm9tICdAZ3JhcGhxbC10b29scy91dGlscyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgZGVmYXVsdEdyYXBoUUxUeXBlcyBmcm9tICcuL2xvYWRlcnMvZGVmYXVsdEdyYXBoUUxUeXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJzZUNsYXNzVHlwZXMgZnJvbSAnLi9sb2FkZXJzL3BhcnNlQ2xhc3NUeXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJzZUNsYXNzUXVlcmllcyBmcm9tICcuL2xvYWRlcnMvcGFyc2VDbGFzc1F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgcGFyc2VDbGFzc011dGF0aW9ucyBmcm9tICcuL2xvYWRlcnMvcGFyc2VDbGFzc011dGF0aW9ucyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTFF1ZXJpZXMgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMUXVlcmllcyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTE11dGF0aW9ucyBmcm9tICcuL2xvYWRlcnMvZGVmYXVsdEdyYXBoUUxNdXRhdGlvbnMnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgRGF0YWJhc2VDb250cm9sbGVyIGZyb20gJy4uL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgU2NoZW1hQ2FjaGUgZnJvbSAnLi4vQWRhcHRlcnMvQ2FjaGUvU2NoZW1hQ2FjaGUnO1xuaW1wb3J0IHsgdG9HcmFwaFFMRXJyb3IgfSBmcm9tICcuL3BhcnNlR3JhcGhRTFV0aWxzJztcbmltcG9ydCAqIGFzIHNjaGVtYURpcmVjdGl2ZXMgZnJvbSAnLi9sb2FkZXJzL3NjaGVtYURpcmVjdGl2ZXMnO1xuaW1wb3J0ICogYXMgc2NoZW1hVHlwZXMgZnJvbSAnLi9sb2FkZXJzL3NjaGVtYVR5cGVzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uTmFtZXMgfSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0UmVsYXlTY2hlbWEgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRSZWxheVNjaGVtYSc7XG5cbmNvbnN0IFJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyA9IFtcbiAgJ1N0cmluZycsXG4gICdCb29sZWFuJyxcbiAgJ0ludCcsXG4gICdGbG9hdCcsXG4gICdJRCcsXG4gICdBcnJheVJlc3VsdCcsXG4gICdRdWVyeScsXG4gICdNdXRhdGlvbicsXG4gICdTdWJzY3JpcHRpb24nLFxuICAnQ3JlYXRlRmlsZUlucHV0JyxcbiAgJ0NyZWF0ZUZpbGVQYXlsb2FkJyxcbiAgJ1ZpZXdlcicsXG4gICdTaWduVXBJbnB1dCcsXG4gICdTaWduVXBQYXlsb2FkJyxcbiAgJ0xvZ0luSW5wdXQnLFxuICAnTG9nSW5QYXlsb2FkJyxcbiAgJ0xvZ091dElucHV0JyxcbiAgJ0xvZ091dFBheWxvYWQnLFxuICAnQ2xvdWRDb2RlRnVuY3Rpb24nLFxuICAnQ2FsbENsb3VkQ29kZUlucHV0JyxcbiAgJ0NhbGxDbG91ZENvZGVQYXlsb2FkJyxcbiAgJ0NyZWF0ZUNsYXNzSW5wdXQnLFxuICAnQ3JlYXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ1VwZGF0ZUNsYXNzSW5wdXQnLFxuICAnVXBkYXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ0RlbGV0ZUNsYXNzSW5wdXQnLFxuICAnRGVsZXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ1BhZ2VJbmZvJyxcbl07XG5jb25zdCBSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTID0gWydoZWFsdGgnLCAndmlld2VyJywgJ2NsYXNzJywgJ2NsYXNzZXMnXTtcbmNvbnN0IFJFU0VSVkVEX0dSQVBIUUxfTVVUQVRJT05fTkFNRVMgPSBbXG4gICdzaWduVXAnLFxuICAnbG9nSW4nLFxuICAnbG9nT3V0JyxcbiAgJ2NyZWF0ZUZpbGUnLFxuICAnY2FsbENsb3VkQ29kZScsXG4gICdjcmVhdGVDbGFzcycsXG4gICd1cGRhdGVDbGFzcycsXG4gICdkZWxldGVDbGFzcycsXG5dO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTY2hlbWEge1xuICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlcjtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgcGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWc7XG4gIGxvZzogYW55O1xuICBhcHBJZDogc3RyaW5nO1xuICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6ID8oc3RyaW5nIHwgR3JhcGhRTFNjaGVtYSB8IERvY3VtZW50Tm9kZSB8IEdyYXBoUUxOYW1lZFR5cGVbXSk7XG4gIHNjaGVtYUNhY2hlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyYW1zOiB7XG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBsb2c6IGFueSxcbiAgICAgIGFwcElkOiBzdHJpbmcsXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6ID8oc3RyaW5nIHwgR3JhcGhRTFNjaGVtYSB8IERvY3VtZW50Tm9kZSB8IEdyYXBoUUxOYW1lZFR5cGVbXSksXG4gICAgfSA9IHt9XG4gICkge1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9XG4gICAgICBwYXJhbXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciB8fFxuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZUdyYXBoUUxDb250cm9sbGVyIGluc3RhbmNlIScpO1xuICAgIHRoaXMuZGF0YWJhc2VDb250cm9sbGVyID1cbiAgICAgIHBhcmFtcy5kYXRhYmFzZUNvbnRyb2xsZXIgfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgZGF0YWJhc2VDb250cm9sbGVyIGluc3RhbmNlIScpO1xuICAgIHRoaXMubG9nID0gcGFyYW1zLmxvZyB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGxvZyBpbnN0YW5jZSEnKTtcbiAgICB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyA9IHBhcmFtcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnM7XG4gICAgdGhpcy5hcHBJZCA9IHBhcmFtcy5hcHBJZCB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSB0aGUgYXBwSWQhJyk7XG4gICAgdGhpcy5zY2hlbWFDYWNoZSA9IFNjaGVtYUNhY2hlO1xuICB9XG5cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCB7IHBhcnNlR3JhcGhRTENvbmZpZyB9ID0gYXdhaXQgdGhpcy5faW5pdGlhbGl6ZVNjaGVtYUFuZENvbmZpZygpO1xuICAgIGNvbnN0IHBhcnNlQ2xhc3Nlc0FycmF5ID0gYXdhaXQgdGhpcy5fZ2V0Q2xhc3Nlc0ZvclNjaGVtYShwYXJzZUdyYXBoUUxDb25maWcpO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBhd2FpdCB0aGlzLl9nZXRGdW5jdGlvbk5hbWVzKCk7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGZ1bmN0aW9uTmFtZXMpO1xuXG4gICAgY29uc3QgcGFyc2VDbGFzc2VzID0gcGFyc2VDbGFzc2VzQXJyYXkucmVkdWNlKChhY2MsIGNsYXp6KSA9PiB7XG4gICAgICBhY2NbY2xhenouY2xhc3NOYW1lXSA9IGNsYXp6O1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2hhc1NjaGVtYUlucHV0Q2hhbmdlZCh7XG4gICAgICAgIHBhcnNlQ2xhc3NlcyxcbiAgICAgICAgcGFyc2VHcmFwaFFMQ29uZmlnLFxuICAgICAgICBmdW5jdGlvbk5hbWVzU3RyaW5nLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmdyYXBoUUxTY2hlbWE7XG4gICAgfVxuXG4gICAgdGhpcy5wYXJzZUNsYXNzZXMgPSBwYXJzZUNsYXNzZXM7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxDb25maWcgPSBwYXJzZUdyYXBoUUxDb25maWc7XG4gICAgdGhpcy5mdW5jdGlvbk5hbWVzID0gZnVuY3Rpb25OYW1lcztcbiAgICB0aGlzLmZ1bmN0aW9uTmFtZXNTdHJpbmcgPSBmdW5jdGlvbk5hbWVzU3RyaW5nO1xuICAgIHRoaXMucGFyc2VDbGFzc1R5cGVzID0ge307XG4gICAgdGhpcy52aWV3ZXJUeXBlID0gbnVsbDtcbiAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hID0gbnVsbDtcbiAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSBudWxsO1xuICAgIHRoaXMuZ3JhcGhRTFR5cGVzID0gW107XG4gICAgdGhpcy5ncmFwaFFMUXVlcmllcyA9IHt9O1xuICAgIHRoaXMuZ3JhcGhRTE11dGF0aW9ucyA9IHt9O1xuICAgIHRoaXMuZ3JhcGhRTFN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzRGVmaW5pdGlvbnMgPSBudWxsO1xuICAgIHRoaXMuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXMgPSB7fTtcbiAgICB0aGlzLnJlbGF5Tm9kZUludGVyZmFjZSA9IG51bGw7XG5cbiAgICBkZWZhdWx0R3JhcGhRTFR5cGVzLmxvYWQodGhpcyk7XG4gICAgZGVmYXVsdFJlbGF5U2NoZW1hLmxvYWQodGhpcyk7XG4gICAgc2NoZW1hVHlwZXMubG9hZCh0aGlzKTtcblxuICAgIHRoaXMuX2dldFBhcnNlQ2xhc3Nlc1dpdGhDb25maWcocGFyc2VDbGFzc2VzQXJyYXksIHBhcnNlR3JhcGhRTENvbmZpZykuZm9yRWFjaChcbiAgICAgIChbcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZ10pID0+IHtcbiAgICAgICAgLy8gU29tZSB0aW1lcyBzY2hlbWEgcmV0dXJuIHRoZSBfYXV0aF9kYXRhXyBmaWVsZFxuICAgICAgICAvLyBpdCB3aWxsIGxlYWQgdG8gdW5zdGFibGUgZ3JhcGhxbCBnZW5lcmF0aW9uIG9yZGVyXG4gICAgICAgIGlmIChwYXJzZUNsYXNzLmNsYXNzTmFtZSA9PT0gJ19Vc2VyJykge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHBhcnNlQ2xhc3MuZmllbGRzKS5mb3JFYWNoKGZpZWxkTmFtZSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lLnN0YXJ0c1dpdGgoJ19hdXRoX2RhdGFfJykpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWVsZHMgb3JkZXIgaW5zaWRlIHRoZSBzY2hlbWEgc2VlbXMgdG8gbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzXG4gICAgICAgIC8vIHJlc3RhcnQgc28gd2UgbmVlZCB0byBlbnN1cmUgYW4gYWxwaGFiZXRpY2FsIG9yZGVyXG4gICAgICAgIC8vIGFsc28gaXQncyBiZXR0ZXIgZm9yIHRoZSBwbGF5Z3JvdW5kIGRvY3VtZW50YXRpb25cbiAgICAgICAgY29uc3Qgb3JkZXJlZEZpZWxkcyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJzZUNsYXNzLmZpZWxkcylcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLmZvckVhY2goZmllbGROYW1lID0+IHtcbiAgICAgICAgICAgIG9yZGVyZWRGaWVsZHNbZmllbGROYW1lXSA9IHBhcnNlQ2xhc3MuZmllbGRzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIHBhcnNlQ2xhc3MuZmllbGRzID0gb3JkZXJlZEZpZWxkcztcbiAgICAgICAgcGFyc2VDbGFzc1R5cGVzLmxvYWQodGhpcywgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZyk7XG4gICAgICAgIHBhcnNlQ2xhc3NRdWVyaWVzLmxvYWQodGhpcywgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZyk7XG4gICAgICAgIHBhcnNlQ2xhc3NNdXRhdGlvbnMubG9hZCh0aGlzLCBwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZGVmYXVsdEdyYXBoUUxUeXBlcy5sb2FkQXJyYXlSZXN1bHQodGhpcywgcGFyc2VDbGFzc2VzQXJyYXkpO1xuICAgIGRlZmF1bHRHcmFwaFFMUXVlcmllcy5sb2FkKHRoaXMpO1xuICAgIGRlZmF1bHRHcmFwaFFMTXV0YXRpb25zLmxvYWQodGhpcyk7XG5cbiAgICBsZXQgZ3JhcGhRTFF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyYXBoUUxRdWVyaWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICBncmFwaFFMUXVlcnkgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiAnUXVlcnknLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1F1ZXJ5IGlzIHRoZSB0b3AgbGV2ZWwgdHlwZSBmb3IgcXVlcmllcy4nLFxuICAgICAgICBmaWVsZHM6IHRoaXMuZ3JhcGhRTFF1ZXJpZXMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkR3JhcGhRTFR5cGUoZ3JhcGhRTFF1ZXJ5LCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICBsZXQgZ3JhcGhRTE11dGF0aW9uID0gdW5kZWZpbmVkO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyYXBoUUxNdXRhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGdyYXBoUUxNdXRhdGlvbiA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgIG5hbWU6ICdNdXRhdGlvbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTXV0YXRpb24gaXMgdGhlIHRvcCBsZXZlbCB0eXBlIGZvciBtdXRhdGlvbnMuJyxcbiAgICAgICAgZmllbGRzOiB0aGlzLmdyYXBoUUxNdXRhdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkR3JhcGhRTFR5cGUoZ3JhcGhRTE11dGF0aW9uLCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICBsZXQgZ3JhcGhRTFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ncmFwaFFMU3Vic2NyaXB0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgZ3JhcGhRTFN1YnNjcmlwdGlvbiA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgIG5hbWU6ICdTdWJzY3JpcHRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1N1YnNjcmlwdGlvbiBpcyB0aGUgdG9wIGxldmVsIHR5cGUgZm9yIHN1YnNjcmlwdGlvbnMuJyxcbiAgICAgICAgZmllbGRzOiB0aGlzLmdyYXBoUUxTdWJzY3JpcHRpb25zLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZEdyYXBoUUxUeXBlKGdyYXBoUUxTdWJzY3JpcHRpb24sIHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEgPSBuZXcgR3JhcGhRTFNjaGVtYSh7XG4gICAgICB0eXBlczogdGhpcy5ncmFwaFFMVHlwZXMsXG4gICAgICBxdWVyeTogZ3JhcGhRTFF1ZXJ5LFxuICAgICAgbXV0YXRpb246IGdyYXBoUUxNdXRhdGlvbixcbiAgICAgIHN1YnNjcmlwdGlvbjogZ3JhcGhRTFN1YnNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcykge1xuICAgICAgc2NoZW1hRGlyZWN0aXZlcy5sb2FkKHRoaXMpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLmdldFR5cGVNYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gSW4gZm9sbG93aW5nIGNvZGUgd2UgdXNlIHVuZGVyc2NvcmUgYXR0ciB0byBhdm9pZCBqcyB2YXIgdW4gcmVmXG4gICAgICAgIGNvbnN0IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwID0gdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMuX3R5cGVNYXA7XG4gICAgICAgIGNvbnN0IGZpbmRBbmRSZXBsYWNlTGFzdFR5cGUgPSAocGFyZW50LCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAocGFyZW50W2tleV0ubmFtZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW3BhcmVudFtrZXldLm5hbWVdICYmXG4gICAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbcGFyZW50W2tleV0ubmFtZV0gIT09IHBhcmVudFtrZXldXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgdW5yZXNvbHZlZCBmaWVsZCBvbiBvdmVybG9hZGVkIHNjaGVtYVxuICAgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBmaW5hbCB0eXBlIHdpdGggdGhlIGF1dG8gc2NoZW1hIG9uZVxuICAgICAgICAgICAgICBwYXJlbnRba2V5XSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbcGFyZW50W2tleV0ubmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRba2V5XS5vZlR5cGUpIHtcbiAgICAgICAgICAgICAgZmluZEFuZFJlcGxhY2VMYXN0VHlwZShwYXJlbnRba2V5XSwgJ29mVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gQWRkIG5vbiBzaGFyZWQgdHlwZXMgZnJvbSBjdXN0b20gc2NoZW1hIHRvIGF1dG8gc2NoZW1hXG4gICAgICAgIC8vIG5vdGU6IHNvbWUgbm9uIHNoYXJlZCB0eXBlcyBjYW4gdXNlIHNvbWUgc2hhcmVkIHR5cGVzXG4gICAgICAgIC8vIHNvIHRoaXMgY29kZSBuZWVkIHRvIGJlIHJhbiBiZWZvcmUgdGhlIHNoYXJlZCB0eXBlcyBhZGRpdGlvblxuICAgICAgICAvLyB3ZSB1c2Ugc29ydCB0byBlbnN1cmUgc2NoZW1hIGNvbnNpc3RlbmN5IG92ZXIgcmVzdGFydHNcbiAgICAgICAgT2JqZWN0LmtleXMoY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXApXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5mb3JFYWNoKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlID0gY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVNYXBbY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVLZXldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUgfHxcbiAgICAgICAgICAgICAgIWN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWUgfHxcbiAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZS5zdGFydHNXaXRoKCdfXycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXV0b0dyYXBoUUxTY2hlbWFUeXBlID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtcbiAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghYXV0b0dyYXBoUUxTY2hlbWFUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbXG4gICAgICAgICAgICAgICAgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZVxuICAgICAgICAgICAgICBdID0gY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIEhhbmRsZSBzaGFyZWQgdHlwZXNcbiAgICAgICAgLy8gV2UgcGFzcyB0aHJvdWdoIGVhY2ggdHlwZSBhbmQgZW5zdXJlIHRoYXQgYWxsIHN1YiBmaWVsZCB0eXBlcyBhcmUgcmVwbGFjZWRcbiAgICAgICAgLy8gd2UgdXNlIHNvcnQgdG8gZW5zdXJlIHNjaGVtYSBjb25zaXN0ZW5jeSBvdmVyIHJlc3RhcnRzXG4gICAgICAgIE9iamVjdC5rZXlzKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuZm9yRWFjaChjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZSA9IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwW2N1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIWN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlIHx8XG4gICAgICAgICAgICAgICFjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lIHx8XG4gICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWUuc3RhcnRzV2l0aCgnX18nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1dG9HcmFwaFFMU2NoZW1hVHlwZSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbXG4gICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWVcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmIChhdXRvR3JhcGhRTFNjaGVtYVR5cGUgJiYgdHlwZW9mIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLmdldEZpZWxkcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5fZmllbGRzKVxuICAgICAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgICAgICAuZm9yRWFjaChmaWVsZEtleSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLl9maWVsZHNbZmllbGRLZXldO1xuICAgICAgICAgICAgICAgICAgZmluZEFuZFJlcGxhY2VMYXN0VHlwZShmaWVsZCwgJ3R5cGUnKTtcbiAgICAgICAgICAgICAgICAgIGF1dG9HcmFwaFFMU2NoZW1hVHlwZS5fZmllbGRzW2ZpZWxkLm5hbWVdID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSBhd2FpdCB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyh7XG4gICAgICAgICAgZGlyZWN0aXZlc0RlZmluaXRpb25zU2NoZW1hOiB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzRGVmaW5pdGlvbnMsXG4gICAgICAgICAgYXV0b1NjaGVtYTogdGhpcy5ncmFwaFFMQXV0b1NjaGVtYSxcbiAgICAgICAgICBzdGl0Y2hTY2hlbWFzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSA9IHN0aXRjaFNjaGVtYXMoe1xuICAgICAgICAgIHNjaGVtYXM6IFtcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXNEZWZpbml0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEsXG4gICAgICAgICAgICB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1lcmdlRGlyZWN0aXZlczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgbWVyZ2UgZGlyZWN0aXZlIHdoZW4gc3RyaW5nIHNjaGVtYSBwcm92aWRlZFxuICAgICAgY29uc3QgZ3JhcGhRTFNjaGVtYVR5cGVNYXAgPSB0aGlzLmdyYXBoUUxTY2hlbWEuZ2V0VHlwZU1hcCgpO1xuICAgICAgT2JqZWN0LmtleXMoZ3JhcGhRTFNjaGVtYVR5cGVNYXApLmZvckVhY2goZ3JhcGhRTFNjaGVtYVR5cGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JhcGhRTFNjaGVtYVR5cGUgPSBncmFwaFFMU2NoZW1hVHlwZU1hcFtncmFwaFFMU2NoZW1hVHlwZU5hbWVdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGdyYXBoUUxTY2hlbWFUeXBlLmdldEZpZWxkcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLmRlZmluaXRpb25zXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGdyYXBoUUxDdXN0b21UeXBlRGVmID0gdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMuZGVmaW5pdGlvbnMuZmluZChcbiAgICAgICAgICAgIGRlZmluaXRpb24gPT4gZGVmaW5pdGlvbi5uYW1lLnZhbHVlID09PSBncmFwaFFMU2NoZW1hVHlwZU5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChncmFwaFFMQ3VzdG9tVHlwZURlZikge1xuICAgICAgICAgICAgY29uc3QgZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZE1hcCA9IGdyYXBoUUxTY2hlbWFUeXBlLmdldEZpZWxkcygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZE1hcCkuZm9yRWFjaChncmFwaFFMU2NoZW1hVHlwZUZpZWxkTmFtZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyYXBoUUxTY2hlbWFUeXBlRmllbGQgPSBncmFwaFFMU2NoZW1hVHlwZUZpZWxkTWFwW2dyYXBoUUxTY2hlbWFUeXBlRmllbGROYW1lXTtcbiAgICAgICAgICAgICAgaWYgKCFncmFwaFFMU2NoZW1hVHlwZUZpZWxkLmFzdE5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3ROb2RlID0gZ3JhcGhRTEN1c3RvbVR5cGVEZWYuZmllbGRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICBmaWVsZCA9PiBmaWVsZC5uYW1lLnZhbHVlID09PSBncmFwaFFMU2NoZW1hVHlwZUZpZWxkTmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFzdE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGdyYXBoUUxTY2hlbWFUeXBlRmllbGQuYXN0Tm9kZSA9IGFzdE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBTY2hlbWFEaXJlY3RpdmVWaXNpdG9yLnZpc2l0U2NoZW1hRGlyZWN0aXZlcyhcbiAgICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hLFxuICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdyYXBoUUxTY2hlbWE7XG4gIH1cblxuICBhZGRHcmFwaFFMVHlwZSh0eXBlLCB0aHJvd0Vycm9yID0gZmFsc2UsIGlnbm9yZVJlc2VydmVkID0gZmFsc2UsIGlnbm9yZUNvbm5lY3Rpb24gPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTLmluY2x1ZGVzKHR5cGUubmFtZSkpIHx8XG4gICAgICB0aGlzLmdyYXBoUUxUeXBlcy5maW5kKGV4aXN0aW5nVHlwZSA9PiBleGlzdGluZ1R5cGUubmFtZSA9PT0gdHlwZS5uYW1lKSB8fFxuICAgICAgKCFpZ25vcmVDb25uZWN0aW9uICYmIHR5cGUubmFtZS5lbmRzV2l0aCgnQ29ubmVjdGlvbicpKVxuICAgICkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBUeXBlICR7dHlwZS5uYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgaXQgY29sbGlkZWQgd2l0aCBhbiBleGlzdGluZyB0eXBlLmA7XG4gICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy53YXJuKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5ncmFwaFFMVHlwZXMucHVzaCh0eXBlKTtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGFkZEdyYXBoUUxRdWVyeShmaWVsZE5hbWUsIGZpZWxkLCB0aHJvd0Vycm9yID0gZmFsc2UsIGlnbm9yZVJlc2VydmVkID0gZmFsc2UpIHtcbiAgICBpZiAoXG4gICAgICAoIWlnbm9yZVJlc2VydmVkICYmIFJFU0VSVkVEX0dSQVBIUUxfUVVFUllfTkFNRVMuaW5jbHVkZXMoZmllbGROYW1lKSkgfHxcbiAgICAgIHRoaXMuZ3JhcGhRTFF1ZXJpZXNbZmllbGROYW1lXVxuICAgICkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBRdWVyeSAke2ZpZWxkTmFtZX0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRvIHNjaGVtYSBiZWNhdXNlIGl0IGNvbGxpZGVkIHdpdGggYW4gZXhpc3RpbmcgZmllbGQuYDtcbiAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLndhcm4obWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxRdWVyaWVzW2ZpZWxkTmFtZV0gPSBmaWVsZDtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICBhZGRHcmFwaFFMTXV0YXRpb24oZmllbGROYW1lLCBmaWVsZCwgdGhyb3dFcnJvciA9IGZhbHNlLCBpZ25vcmVSZXNlcnZlZCA9IGZhbHNlKSB7XG4gICAgaWYgKFxuICAgICAgKCFpZ25vcmVSZXNlcnZlZCAmJiBSRVNFUlZFRF9HUkFQSFFMX01VVEFUSU9OX05BTUVTLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHx8XG4gICAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnNbZmllbGROYW1lXVxuICAgICkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBNdXRhdGlvbiAke2ZpZWxkTmFtZX0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRvIHNjaGVtYSBiZWNhdXNlIGl0IGNvbGxpZGVkIHdpdGggYW4gZXhpc3RpbmcgZmllbGQuYDtcbiAgICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nLndhcm4obWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnNbZmllbGROYW1lXSA9IGZpZWxkO1xuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVycm9yLCBlcnJvci5zdGFjayk7XG4gICAgfVxuICAgIHRocm93IHRvR3JhcGhRTEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIGFzeW5jIF9pbml0aWFsaXplU2NoZW1hQW5kQ29uZmlnKCkge1xuICAgIGNvbnN0IFtzY2hlbWFDb250cm9sbGVyLCBwYXJzZUdyYXBoUUxDb25maWddID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbnRyb2xsZXIubG9hZFNjaGVtYSgpLFxuICAgICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLmdldEdyYXBoUUxDb25maWcoKSxcbiAgICBdKTtcblxuICAgIHRoaXMuc2NoZW1hQ29udHJvbGxlciA9IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VHcmFwaFFMQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgY2xhc3NlcyBmb3VuZCBieSB0aGUgYHNjaGVtYUNvbnRyb2xsZXJgXG4gICAqIG1pbnVzIHRob3NlIGZpbHRlcmVkIG91dCBieSB0aGUgYXBwJ3MgcGFyc2VHcmFwaFFMQ29uZmlnLlxuICAgKi9cbiAgYXN5bmMgX2dldENsYXNzZXNGb3JTY2hlbWEocGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpIHtcbiAgICBjb25zdCB7IGVuYWJsZWRGb3JDbGFzc2VzLCBkaXNhYmxlZEZvckNsYXNzZXMgfSA9IHBhcnNlR3JhcGhRTENvbmZpZztcbiAgICBjb25zdCBhbGxDbGFzc2VzID0gYXdhaXQgdGhpcy5zY2hlbWFDb250cm9sbGVyLmdldEFsbENsYXNzZXMoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuYWJsZWRGb3JDbGFzc2VzKSB8fCBBcnJheS5pc0FycmF5KGRpc2FibGVkRm9yQ2xhc3NlcykpIHtcbiAgICAgIGxldCBpbmNsdWRlZENsYXNzZXMgPSBhbGxDbGFzc2VzO1xuICAgICAgaWYgKGVuYWJsZWRGb3JDbGFzc2VzKSB7XG4gICAgICAgIGluY2x1ZGVkQ2xhc3NlcyA9IGFsbENsYXNzZXMuZmlsdGVyKGNsYXp6ID0+IHtcbiAgICAgICAgICByZXR1cm4gZW5hYmxlZEZvckNsYXNzZXMuaW5jbHVkZXMoY2xhenouY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWRGb3JDbGFzc2VzKSB7XG4gICAgICAgIC8vIENsYXNzZXMgaW5jbHVkZWQgaW4gYGVuYWJsZWRGb3JDbGFzc2VzYCB0aGF0XG4gICAgICAgIC8vIGFyZSBhbHNvIHByZXNlbnQgaW4gYGRpc2FibGVkRm9yQ2xhc3Nlc2Agd2lsbFxuICAgICAgICAvLyBzdGlsbCBiZSBmaWx0ZXJlZCBvdXRcbiAgICAgICAgaW5jbHVkZWRDbGFzc2VzID0gaW5jbHVkZWRDbGFzc2VzLmZpbHRlcihjbGF6eiA9PiB7XG4gICAgICAgICAgcmV0dXJuICFkaXNhYmxlZEZvckNsYXNzZXMuaW5jbHVkZXMoY2xhenouY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNVc2Vyc0NsYXNzRGlzYWJsZWQgPSAhaW5jbHVkZWRDbGFzc2VzLnNvbWUoY2xhenogPT4ge1xuICAgICAgICByZXR1cm4gY2xhenouY2xhc3NOYW1lID09PSAnX1VzZXInO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpbmNsdWRlZENsYXNzZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhbGxDbGFzc2VzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXNcbiAgICogdGhhdCBwcm92aWRlIHRoZSBwYXJzZUNsYXNzIGFsb25nIHdpdGhcbiAgICogaXRzIHBhcnNlQ2xhc3NDb25maWcgd2hlcmUgcHJvdmlkZWQuXG4gICAqL1xuICBfZ2V0UGFyc2VDbGFzc2VzV2l0aENvbmZpZyhwYXJzZUNsYXNzZXMsIHBhcnNlR3JhcGhRTENvbmZpZzogUGFyc2VHcmFwaFFMQ29uZmlnKSB7XG4gICAgY29uc3QgeyBjbGFzc0NvbmZpZ3MgfSA9IHBhcnNlR3JhcGhRTENvbmZpZztcblxuICAgIC8vIE1ha2Ugc3VyZXMgdGhhdCB0aGUgZGVmYXVsdCBjbGFzc2VzIGFuZCBjbGFzc2VzIHRoYXRcbiAgICAvLyBzdGFydHMgd2l0aCBjYXBpdGFsaXplZCBsZXR0ZXIgd2lsbCBiZSBnZW5lcmF0ZWQgZmlyc3QuXG4gICAgY29uc3Qgc29ydENsYXNzZXMgPSAoYSwgYikgPT4ge1xuICAgICAgYSA9IGEuY2xhc3NOYW1lO1xuICAgICAgYiA9IGIuY2xhc3NOYW1lO1xuICAgICAgaWYgKGFbMF0gPT09ICdfJykge1xuICAgICAgICBpZiAoYlswXSAhPT0gJ18nKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYlswXSA9PT0gJ18nKSB7XG4gICAgICAgIGlmIChhWzBdICE9PSAnXycpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2UgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDbGFzc2VzLnNvcnQoc29ydENsYXNzZXMpLm1hcChwYXJzZUNsYXNzID0+IHtcbiAgICAgIGxldCBwYXJzZUNsYXNzQ29uZmlnO1xuICAgICAgaWYgKGNsYXNzQ29uZmlncykge1xuICAgICAgICBwYXJzZUNsYXNzQ29uZmlnID0gY2xhc3NDb25maWdzLmZpbmQoYyA9PiBjLmNsYXNzTmFtZSA9PT0gcGFyc2VDbGFzcy5jbGFzc05hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnXTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRGdW5jdGlvbk5hbWVzKCkge1xuICAgIHJldHVybiBhd2FpdCBnZXRGdW5jdGlvbk5hbWVzKHRoaXMuYXBwSWQpLmZpbHRlcihmdW5jdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKC9eW19hLXpBLVpdW19hLXpBLVowLTldKiQvLnRlc3QoZnVuY3Rpb25OYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oXG4gICAgICAgICAgYEZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgR3JhcGhRTCBuYW1lcyBtdXN0IG1hdGNoIC9eW19hLXpBLVpdW19hLXpBLVowLTldKiQvLmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgY2hhbmdlcyB0byB0aGUgcGFyc2VDbGFzc2VzXG4gICAqIG9iamVjdHMgKGkuZS4gZGF0YWJhc2Ugc2NoZW1hKSBvciB0b1xuICAgKiB0aGUgcGFyc2VHcmFwaFFMQ29uZmlnIG9iamVjdC4gSWYgbm9cbiAgICogY2hhbmdlcyBhcmUgZm91bmQsIHJldHVybiB0cnVlO1xuICAgKi9cbiAgX2hhc1NjaGVtYUlucHV0Q2hhbmdlZChwYXJhbXM6IHtcbiAgICBwYXJzZUNsYXNzZXM6IGFueSxcbiAgICBwYXJzZUdyYXBoUUxDb25maWc6ID9QYXJzZUdyYXBoUUxDb25maWcsXG4gICAgZnVuY3Rpb25OYW1lc1N0cmluZzogc3RyaW5nLFxuICB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBwYXJzZUNsYXNzZXMsIHBhcnNlR3JhcGhRTENvbmZpZywgZnVuY3Rpb25OYW1lc1N0cmluZyB9ID0gcGFyYW1zO1xuXG4gICAgLy8gRmlyc3QgaW5pdFxuICAgIGlmICghdGhpcy5ncmFwaFFMU2NoZW1hKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpc0RlZXBTdHJpY3RFcXVhbCh0aGlzLnBhcnNlR3JhcGhRTENvbmZpZywgcGFyc2VHcmFwaFFMQ29uZmlnKSAmJlxuICAgICAgdGhpcy5mdW5jdGlvbk5hbWVzU3RyaW5nID09PSBmdW5jdGlvbk5hbWVzU3RyaW5nICYmXG4gICAgICBpc0RlZXBTdHJpY3RFcXVhbCh0aGlzLnBhcnNlQ2xhc3NlcywgcGFyc2VDbGFzc2VzKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBQYXJzZUdyYXBoUUxTY2hlbWEgfTtcbiJdfQ==
|
|
485
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNjaGVtYS5qcyJdLCJuYW1lcyI6WyJSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVMiLCJSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTIiwiUkVTRVJWRURfR1JBUEhRTF9NVVRBVElPTl9OQU1FUyIsIlBhcnNlR3JhcGhRTFNjaGVtYSIsImNvbnN0cnVjdG9yIiwicGFyYW1zIiwicGFyc2VHcmFwaFFMQ29udHJvbGxlciIsImRhdGFiYXNlQ29udHJvbGxlciIsImxvZyIsImdyYXBoUUxDdXN0b21UeXBlRGVmcyIsImFwcElkIiwic2NoZW1hQ2FjaGUiLCJTY2hlbWFDYWNoZSIsImxvZ0NhY2hlIiwibG9hZCIsInBhcnNlR3JhcGhRTENvbmZpZyIsIl9pbml0aWFsaXplU2NoZW1hQW5kQ29uZmlnIiwicGFyc2VDbGFzc2VzQXJyYXkiLCJfZ2V0Q2xhc3Nlc0ZvclNjaGVtYSIsImZ1bmN0aW9uTmFtZXMiLCJfZ2V0RnVuY3Rpb25OYW1lcyIsImZ1bmN0aW9uTmFtZXNTdHJpbmciLCJqb2luIiwicGFyc2VDbGFzc2VzIiwicmVkdWNlIiwiYWNjIiwiY2xhenoiLCJjbGFzc05hbWUiLCJfaGFzU2NoZW1hSW5wdXRDaGFuZ2VkIiwiZ3JhcGhRTFNjaGVtYSIsInBhcnNlQ2xhc3NUeXBlcyIsInZpZXdlclR5cGUiLCJncmFwaFFMQXV0b1NjaGVtYSIsImdyYXBoUUxUeXBlcyIsImdyYXBoUUxRdWVyaWVzIiwiZ3JhcGhRTE11dGF0aW9ucyIsImdyYXBoUUxTdWJzY3JpcHRpb25zIiwiZ3JhcGhRTFNjaGVtYURpcmVjdGl2ZXNEZWZpbml0aW9ucyIsImdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzIiwicmVsYXlOb2RlSW50ZXJmYWNlIiwiZGVmYXVsdEdyYXBoUUxUeXBlcyIsImRlZmF1bHRSZWxheVNjaGVtYSIsInNjaGVtYVR5cGVzIiwiX2dldFBhcnNlQ2xhc3Nlc1dpdGhDb25maWciLCJmb3JFYWNoIiwicGFyc2VDbGFzcyIsInBhcnNlQ2xhc3NDb25maWciLCJPYmplY3QiLCJrZXlzIiwiZmllbGRzIiwiZmllbGROYW1lIiwic3RhcnRzV2l0aCIsIm9yZGVyZWRGaWVsZHMiLCJzb3J0IiwicGFyc2VDbGFzc1F1ZXJpZXMiLCJwYXJzZUNsYXNzTXV0YXRpb25zIiwibG9hZEFycmF5UmVzdWx0IiwiZGVmYXVsdEdyYXBoUUxRdWVyaWVzIiwiZGVmYXVsdEdyYXBoUUxNdXRhdGlvbnMiLCJncmFwaFFMUXVlcnkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJHcmFwaFFMT2JqZWN0VHlwZSIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFkZEdyYXBoUUxUeXBlIiwiZ3JhcGhRTE11dGF0aW9uIiwiZ3JhcGhRTFN1YnNjcmlwdGlvbiIsIkdyYXBoUUxTY2hlbWEiLCJ0eXBlcyIsInF1ZXJ5IiwibXV0YXRpb24iLCJzdWJzY3JpcHRpb24iLCJzY2hlbWFEaXJlY3RpdmVzIiwiZ2V0VHlwZU1hcCIsImN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwIiwiX3R5cGVNYXAiLCJmaW5kQW5kUmVwbGFjZUxhc3RUeXBlIiwicGFyZW50Iiwia2V5Iiwib2ZUeXBlIiwiY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVLZXkiLCJjdXN0b21HcmFwaFFMU2NoZW1hVHlwZSIsImF1dG9HcmFwaFFMU2NoZW1hVHlwZSIsImdldEZpZWxkcyIsIl9maWVsZHMiLCJmaWVsZEtleSIsImZpZWxkIiwiZGlyZWN0aXZlc0RlZmluaXRpb25zU2NoZW1hIiwiYXV0b1NjaGVtYSIsInN0aXRjaFNjaGVtYXMiLCJzY2hlbWFzIiwibWVyZ2VEaXJlY3RpdmVzIiwiZ3JhcGhRTFNjaGVtYVR5cGVNYXAiLCJncmFwaFFMU2NoZW1hVHlwZU5hbWUiLCJncmFwaFFMU2NoZW1hVHlwZSIsImRlZmluaXRpb25zIiwiZ3JhcGhRTEN1c3RvbVR5cGVEZWYiLCJmaW5kIiwiZGVmaW5pdGlvbiIsInZhbHVlIiwiZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZE1hcCIsImdyYXBoUUxTY2hlbWFUeXBlRmllbGROYW1lIiwiZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZCIsImFzdE5vZGUiLCJTY2hlbWFEaXJlY3RpdmVWaXNpdG9yIiwidmlzaXRTY2hlbWFEaXJlY3RpdmVzIiwiX2xvZ09uY2UiLCJzZXZlcml0eSIsIm1lc3NhZ2UiLCJ0eXBlIiwidGhyb3dFcnJvciIsImlnbm9yZVJlc2VydmVkIiwiaWdub3JlQ29ubmVjdGlvbiIsImluY2x1ZGVzIiwiZXhpc3RpbmdUeXBlIiwiZW5kc1dpdGgiLCJFcnJvciIsInB1c2giLCJhZGRHcmFwaFFMUXVlcnkiLCJhZGRHcmFwaFFMTXV0YXRpb24iLCJoYW5kbGVFcnJvciIsImVycm9yIiwiUGFyc2UiLCJzdGFjayIsInNjaGVtYUNvbnRyb2xsZXIiLCJQcm9taXNlIiwiYWxsIiwibG9hZFNjaGVtYSIsImdldEdyYXBoUUxDb25maWciLCJlbmFibGVkRm9yQ2xhc3NlcyIsImRpc2FibGVkRm9yQ2xhc3NlcyIsImFsbENsYXNzZXMiLCJnZXRBbGxDbGFzc2VzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZWRDbGFzc2VzIiwiZmlsdGVyIiwiaXNVc2Vyc0NsYXNzRGlzYWJsZWQiLCJzb21lIiwiY2xhc3NDb25maWdzIiwic29ydENsYXNzZXMiLCJhIiwiYiIsIm1hcCIsImMiLCJmdW5jdGlvbk5hbWUiLCJ0ZXN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsTUFBTUEsMkJBQTJCLEdBQUcsQ0FDbEMsUUFEa0MsRUFFbEMsU0FGa0MsRUFHbEMsS0FIa0MsRUFJbEMsT0FKa0MsRUFLbEMsSUFMa0MsRUFNbEMsYUFOa0MsRUFPbEMsT0FQa0MsRUFRbEMsVUFSa0MsRUFTbEMsY0FUa0MsRUFVbEMsaUJBVmtDLEVBV2xDLG1CQVhrQyxFQVlsQyxRQVprQyxFQWFsQyxhQWJrQyxFQWNsQyxlQWRrQyxFQWVsQyxZQWZrQyxFQWdCbEMsY0FoQmtDLEVBaUJsQyxhQWpCa0MsRUFrQmxDLGVBbEJrQyxFQW1CbEMsbUJBbkJrQyxFQW9CbEMsb0JBcEJrQyxFQXFCbEMsc0JBckJrQyxFQXNCbEMsa0JBdEJrQyxFQXVCbEMsb0JBdkJrQyxFQXdCbEMsa0JBeEJrQyxFQXlCbEMsb0JBekJrQyxFQTBCbEMsa0JBMUJrQyxFQTJCbEMsb0JBM0JrQyxFQTRCbEMsVUE1QmtDLENBQXBDO0FBOEJBLE1BQU1DLDRCQUE0QixHQUFHLENBQUMsUUFBRCxFQUFXLFFBQVgsRUFBcUIsT0FBckIsRUFBOEIsU0FBOUIsQ0FBckM7QUFDQSxNQUFNQywrQkFBK0IsR0FBRyxDQUN0QyxRQURzQyxFQUV0QyxPQUZzQyxFQUd0QyxRQUhzQyxFQUl0QyxZQUpzQyxFQUt0QyxlQUxzQyxFQU10QyxhQU5zQyxFQU90QyxhQVBzQyxFQVF0QyxhQVJzQyxDQUF4Qzs7QUFXQSxNQUFNQyxrQkFBTixDQUF5QjtBQVN2QkMsRUFBQUEsV0FBVyxDQUNUQyxNQU1DLEdBQUcsRUFQSyxFQVFUO0FBQ0EsU0FBS0Msc0JBQUwsR0FDRUQsTUFBTSxDQUFDQyxzQkFBUCxJQUNBLGdDQUFrQixxREFBbEIsQ0FGRjtBQUdBLFNBQUtDLGtCQUFMLEdBQ0VGLE1BQU0sQ0FBQ0Usa0JBQVAsSUFDQSxnQ0FBa0IsaURBQWxCLENBRkY7QUFHQSxTQUFLQyxHQUFMLEdBQVdILE1BQU0sQ0FBQ0csR0FBUCxJQUFjLGdDQUFrQixrQ0FBbEIsQ0FBekI7QUFDQSxTQUFLQyxxQkFBTCxHQUE2QkosTUFBTSxDQUFDSSxxQkFBcEM7QUFDQSxTQUFLQyxLQUFMLEdBQWFMLE1BQU0sQ0FBQ0ssS0FBUCxJQUFnQixnQ0FBa0IsNkJBQWxCLENBQTdCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQkMsb0JBQW5CO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixFQUFoQjtBQUNEOztBQUVTLFFBQUpDLElBQUksR0FBRztBQUNYLFVBQU07QUFBRUMsTUFBQUE7QUFBRixRQUF5QixNQUFNLEtBQUtDLDBCQUFMLEVBQXJDO0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUcsTUFBTSxLQUFLQyxvQkFBTCxDQUEwQkgsa0JBQTFCLENBQWhDO0FBQ0EsVUFBTUksYUFBYSxHQUFHLE1BQU0sS0FBS0MsaUJBQUwsRUFBNUI7QUFDQSxVQUFNQyxtQkFBbUIsR0FBR0YsYUFBYSxDQUFDRyxJQUFkLEVBQTVCO0FBRUEsVUFBTUMsWUFBWSxHQUFHTixpQkFBaUIsQ0FBQ08sTUFBbEIsQ0FBeUIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQWdCO0FBQzVERCxNQUFBQSxHQUFHLENBQUNDLEtBQUssQ0FBQ0MsU0FBUCxDQUFILEdBQXVCRCxLQUF2QjtBQUNBLGFBQU9ELEdBQVA7QUFDRCxLQUhvQixFQUdsQixFQUhrQixDQUFyQjs7QUFJQSxRQUNFLENBQUMsS0FBS0csc0JBQUwsQ0FBNEI7QUFDM0JMLE1BQUFBLFlBRDJCO0FBRTNCUixNQUFBQSxrQkFGMkI7QUFHM0JNLE1BQUFBO0FBSDJCLEtBQTVCLENBREgsRUFNRTtBQUNBLGFBQU8sS0FBS1EsYUFBWjtBQUNEOztBQUVELFNBQUtOLFlBQUwsR0FBb0JBLFlBQXBCO0FBQ0EsU0FBS1Isa0JBQUwsR0FBMEJBLGtCQUExQjtBQUNBLFNBQUtJLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsU0FBS0UsbUJBQUwsR0FBMkJBLG1CQUEzQjtBQUNBLFNBQUtTLGVBQUwsR0FBdUIsRUFBdkI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCLElBQWxCO0FBQ0EsU0FBS0MsaUJBQUwsR0FBeUIsSUFBekI7QUFDQSxTQUFLSCxhQUFMLEdBQXFCLElBQXJCO0FBQ0EsU0FBS0ksWUFBTCxHQUFvQixFQUFwQjtBQUNBLFNBQUtDLGNBQUwsR0FBc0IsRUFBdEI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QixFQUF4QjtBQUNBLFNBQUtDLG9CQUFMLEdBQTRCLEVBQTVCO0FBQ0EsU0FBS0Msa0NBQUwsR0FBMEMsSUFBMUM7QUFDQSxTQUFLQyx1QkFBTCxHQUErQixFQUEvQjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLElBQTFCO0FBRUFDLElBQUFBLG1CQUFtQixDQUFDMUIsSUFBcEIsQ0FBeUIsSUFBekI7QUFDQTJCLElBQUFBLGtCQUFrQixDQUFDM0IsSUFBbkIsQ0FBd0IsSUFBeEI7QUFDQTRCLElBQUFBLFdBQVcsQ0FBQzVCLElBQVosQ0FBaUIsSUFBakI7O0FBRUEsU0FBSzZCLDBCQUFMLENBQWdDMUIsaUJBQWhDLEVBQW1ERixrQkFBbkQsRUFBdUU2QixPQUF2RSxDQUNFLENBQUMsQ0FBQ0MsVUFBRCxFQUFhQyxnQkFBYixDQUFELEtBQW9DO0FBQ2xDO0FBQ0E7QUFDQSxVQUFJRCxVQUFVLENBQUNsQixTQUFYLEtBQXlCLE9BQTdCLEVBQXNDO0FBQ3BDb0IsUUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlILFVBQVUsQ0FBQ0ksTUFBdkIsRUFBK0JMLE9BQS9CLENBQXVDTSxTQUFTLElBQUk7QUFDbEQsY0FBSUEsU0FBUyxDQUFDQyxVQUFWLENBQXFCLGFBQXJCLENBQUosRUFBeUM7QUFDdkMsbUJBQU9OLFVBQVUsQ0FBQ0ksTUFBWCxDQUFrQkMsU0FBbEIsQ0FBUDtBQUNEO0FBQ0YsU0FKRDtBQUtELE9BVGlDLENBV2xDO0FBQ0E7QUFDQTs7O0FBQ0EsWUFBTUUsYUFBYSxHQUFHLEVBQXRCO0FBQ0FMLE1BQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSCxVQUFVLENBQUNJLE1BQXZCLEVBQ0dJLElBREgsR0FFR1QsT0FGSCxDQUVXTSxTQUFTLElBQUk7QUFDcEJFLFFBQUFBLGFBQWEsQ0FBQ0YsU0FBRCxDQUFiLEdBQTJCTCxVQUFVLENBQUNJLE1BQVgsQ0FBa0JDLFNBQWxCLENBQTNCO0FBQ0QsT0FKSDtBQUtBTCxNQUFBQSxVQUFVLENBQUNJLE1BQVgsR0FBb0JHLGFBQXBCO0FBQ0F0QixNQUFBQSxlQUFlLENBQUNoQixJQUFoQixDQUFxQixJQUFyQixFQUEyQitCLFVBQTNCLEVBQXVDQyxnQkFBdkM7QUFDQVEsTUFBQUEsaUJBQWlCLENBQUN4QyxJQUFsQixDQUF1QixJQUF2QixFQUE2QitCLFVBQTdCLEVBQXlDQyxnQkFBekM7QUFDQVMsTUFBQUEsbUJBQW1CLENBQUN6QyxJQUFwQixDQUF5QixJQUF6QixFQUErQitCLFVBQS9CLEVBQTJDQyxnQkFBM0M7QUFDRCxLQXpCSDs7QUE0QkFOLElBQUFBLG1CQUFtQixDQUFDZ0IsZUFBcEIsQ0FBb0MsSUFBcEMsRUFBMEN2QyxpQkFBMUM7QUFDQXdDLElBQUFBLHFCQUFxQixDQUFDM0MsSUFBdEIsQ0FBMkIsSUFBM0I7QUFDQTRDLElBQUFBLHVCQUF1QixDQUFDNUMsSUFBeEIsQ0FBNkIsSUFBN0I7QUFFQSxRQUFJNkMsWUFBWSxHQUFHQyxTQUFuQjs7QUFDQSxRQUFJYixNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLZCxjQUFqQixFQUFpQzJCLE1BQWpDLEdBQTBDLENBQTlDLEVBQWlEO0FBQy9DRixNQUFBQSxZQUFZLEdBQUcsSUFBSUcsMEJBQUosQ0FBc0I7QUFDbkNDLFFBQUFBLElBQUksRUFBRSxPQUQ2QjtBQUVuQ0MsUUFBQUEsV0FBVyxFQUFFLDBDQUZzQjtBQUduQ2YsUUFBQUEsTUFBTSxFQUFFLEtBQUtmO0FBSHNCLE9BQXRCLENBQWY7QUFLQSxXQUFLK0IsY0FBTCxDQUFvQk4sWUFBcEIsRUFBa0MsSUFBbEMsRUFBd0MsSUFBeEM7QUFDRDs7QUFFRCxRQUFJTyxlQUFlLEdBQUdOLFNBQXRCOztBQUNBLFFBQUliLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEtBQUtiLGdCQUFqQixFQUFtQzBCLE1BQW5DLEdBQTRDLENBQWhELEVBQW1EO0FBQ2pESyxNQUFBQSxlQUFlLEdBQUcsSUFBSUosMEJBQUosQ0FBc0I7QUFDdENDLFFBQUFBLElBQUksRUFBRSxVQURnQztBQUV0Q0MsUUFBQUEsV0FBVyxFQUFFLCtDQUZ5QjtBQUd0Q2YsUUFBQUEsTUFBTSxFQUFFLEtBQUtkO0FBSHlCLE9BQXRCLENBQWxCO0FBS0EsV0FBSzhCLGNBQUwsQ0FBb0JDLGVBQXBCLEVBQXFDLElBQXJDLEVBQTJDLElBQTNDO0FBQ0Q7O0FBRUQsUUFBSUMsbUJBQW1CLEdBQUdQLFNBQTFCOztBQUNBLFFBQUliLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEtBQUtaLG9CQUFqQixFQUF1Q3lCLE1BQXZDLEdBQWdELENBQXBELEVBQXVEO0FBQ3JETSxNQUFBQSxtQkFBbUIsR0FBRyxJQUFJTCwwQkFBSixDQUFzQjtBQUMxQ0MsUUFBQUEsSUFBSSxFQUFFLGNBRG9DO0FBRTFDQyxRQUFBQSxXQUFXLEVBQUUsdURBRjZCO0FBRzFDZixRQUFBQSxNQUFNLEVBQUUsS0FBS2I7QUFINkIsT0FBdEIsQ0FBdEI7QUFLQSxXQUFLNkIsY0FBTCxDQUFvQkUsbUJBQXBCLEVBQXlDLElBQXpDLEVBQStDLElBQS9DO0FBQ0Q7O0FBRUQsU0FBS25DLGlCQUFMLEdBQXlCLElBQUlvQyxzQkFBSixDQUFrQjtBQUN6Q0MsTUFBQUEsS0FBSyxFQUFFLEtBQUtwQyxZQUQ2QjtBQUV6Q3FDLE1BQUFBLEtBQUssRUFBRVgsWUFGa0M7QUFHekNZLE1BQUFBLFFBQVEsRUFBRUwsZUFIK0I7QUFJekNNLE1BQUFBLFlBQVksRUFBRUw7QUFKMkIsS0FBbEIsQ0FBekI7O0FBT0EsUUFBSSxLQUFLMUQscUJBQVQsRUFBZ0M7QUFDOUJnRSxNQUFBQSxnQkFBZ0IsQ0FBQzNELElBQWpCLENBQXNCLElBQXRCOztBQUVBLFVBQUksT0FBTyxLQUFLTCxxQkFBTCxDQUEyQmlFLFVBQWxDLEtBQWlELFVBQXJELEVBQWlFO0FBQy9EO0FBQ0EsY0FBTUMsMEJBQTBCLEdBQUcsS0FBS2xFLHFCQUFMLENBQTJCbUUsUUFBOUQ7O0FBQ0EsY0FBTUMsc0JBQXNCLEdBQUcsQ0FBQ0MsTUFBRCxFQUFTQyxHQUFULEtBQWlCO0FBQzlDLGNBQUlELE1BQU0sQ0FBQ0MsR0FBRCxDQUFOLENBQVloQixJQUFoQixFQUFzQjtBQUNwQixnQkFDRSxLQUFLL0IsaUJBQUwsQ0FBdUI0QyxRQUF2QixDQUFnQ0UsTUFBTSxDQUFDQyxHQUFELENBQU4sQ0FBWWhCLElBQTVDLEtBQ0EsS0FBSy9CLGlCQUFMLENBQXVCNEMsUUFBdkIsQ0FBZ0NFLE1BQU0sQ0FBQ0MsR0FBRCxDQUFOLENBQVloQixJQUE1QyxNQUFzRGUsTUFBTSxDQUFDQyxHQUFELENBRjlELEVBR0U7QUFDQTtBQUNBO0FBQ0FELGNBQUFBLE1BQU0sQ0FBQ0MsR0FBRCxDQUFOLEdBQWMsS0FBSy9DLGlCQUFMLENBQXVCNEMsUUFBdkIsQ0FBZ0NFLE1BQU0sQ0FBQ0MsR0FBRCxDQUFOLENBQVloQixJQUE1QyxDQUFkO0FBQ0Q7QUFDRixXQVRELE1BU087QUFDTCxnQkFBSWUsTUFBTSxDQUFDQyxHQUFELENBQU4sQ0FBWUMsTUFBaEIsRUFBd0I7QUFDdEJILGNBQUFBLHNCQUFzQixDQUFDQyxNQUFNLENBQUNDLEdBQUQsQ0FBUCxFQUFjLFFBQWQsQ0FBdEI7QUFDRDtBQUNGO0FBQ0YsU0FmRCxDQUgrRCxDQW1CL0Q7QUFDQTtBQUNBO0FBQ0E7OztBQUNBaEMsUUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVkyQiwwQkFBWixFQUNHdEIsSUFESCxHQUVHVCxPQUZILENBRVdxQywwQkFBMEIsSUFBSTtBQUNyQyxnQkFBTUMsdUJBQXVCLEdBQUdQLDBCQUEwQixDQUFDTSwwQkFBRCxDQUExRDs7QUFDQSxjQUNFLENBQUNDLHVCQUFELElBQ0EsQ0FBQ0EsdUJBQXVCLENBQUNuQixJQUR6QixJQUVBbUIsdUJBQXVCLENBQUNuQixJQUF4QixDQUE2QlosVUFBN0IsQ0FBd0MsSUFBeEMsQ0FIRixFQUlFO0FBQ0E7QUFDRDs7QUFDRCxnQkFBTWdDLHFCQUFxQixHQUFHLEtBQUtuRCxpQkFBTCxDQUF1QjRDLFFBQXZCLENBQzVCTSx1QkFBdUIsQ0FBQ25CLElBREksQ0FBOUI7O0FBR0EsY0FBSSxDQUFDb0IscUJBQUwsRUFBNEI7QUFDMUIsaUJBQUtuRCxpQkFBTCxDQUF1QjRDLFFBQXZCLENBQ0VNLHVCQUF1QixDQUFDbkIsSUFEMUIsSUFFSW1CLHVCQUZKO0FBR0Q7QUFDRixTQW5CSCxFQXZCK0QsQ0EyQy9EO0FBQ0E7QUFDQTs7QUFDQW5DLFFBQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZMkIsMEJBQVosRUFDR3RCLElBREgsR0FFR1QsT0FGSCxDQUVXcUMsMEJBQTBCLElBQUk7QUFDckMsZ0JBQU1DLHVCQUF1QixHQUFHUCwwQkFBMEIsQ0FBQ00sMEJBQUQsQ0FBMUQ7O0FBQ0EsY0FDRSxDQUFDQyx1QkFBRCxJQUNBLENBQUNBLHVCQUF1QixDQUFDbkIsSUFEekIsSUFFQW1CLHVCQUF1QixDQUFDbkIsSUFBeEIsQ0FBNkJaLFVBQTdCLENBQXdDLElBQXhDLENBSEYsRUFJRTtBQUNBO0FBQ0Q7O0FBQ0QsZ0JBQU1nQyxxQkFBcUIsR0FBRyxLQUFLbkQsaUJBQUwsQ0FBdUI0QyxRQUF2QixDQUM1Qk0sdUJBQXVCLENBQUNuQixJQURJLENBQTlCOztBQUlBLGNBQUlvQixxQkFBcUIsSUFBSSxPQUFPRCx1QkFBdUIsQ0FBQ0UsU0FBL0IsS0FBNkMsVUFBMUUsRUFBc0Y7QUFDcEZyQyxZQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWWtDLHVCQUF1QixDQUFDRyxPQUFwQyxFQUNHaEMsSUFESCxHQUVHVCxPQUZILENBRVcwQyxRQUFRLElBQUk7QUFDbkIsb0JBQU1DLEtBQUssR0FBR0wsdUJBQXVCLENBQUNHLE9BQXhCLENBQWdDQyxRQUFoQyxDQUFkO0FBQ0FULGNBQUFBLHNCQUFzQixDQUFDVSxLQUFELEVBQVEsTUFBUixDQUF0QjtBQUNBSixjQUFBQSxxQkFBcUIsQ0FBQ0UsT0FBdEIsQ0FBOEJFLEtBQUssQ0FBQ3hCLElBQXBDLElBQTRDd0IsS0FBNUM7QUFDRCxhQU5IO0FBT0Q7QUFDRixTQXhCSDtBQXlCQSxhQUFLMUQsYUFBTCxHQUFxQixLQUFLRyxpQkFBMUI7QUFDRCxPQXhFRCxNQXdFTyxJQUFJLE9BQU8sS0FBS3ZCLHFCQUFaLEtBQXNDLFVBQTFDLEVBQXNEO0FBQzNELGFBQUtvQixhQUFMLEdBQXFCLE1BQU0sS0FBS3BCLHFCQUFMLENBQTJCO0FBQ3BEK0UsVUFBQUEsMkJBQTJCLEVBQUUsS0FBS25ELGtDQURrQjtBQUVwRG9ELFVBQUFBLFVBQVUsRUFBRSxLQUFLekQsaUJBRm1DO0FBR3BEMEQsVUFBQUEsYUFBYSxFQUFiQTtBQUhvRCxTQUEzQixDQUEzQjtBQUtELE9BTk0sTUFNQTtBQUNMLGFBQUs3RCxhQUFMLEdBQXFCLDJCQUFjO0FBQ2pDOEQsVUFBQUEsT0FBTyxFQUFFLENBQ1AsS0FBS3RELGtDQURFLEVBRVAsS0FBS0wsaUJBRkUsRUFHUCxLQUFLdkIscUJBSEUsQ0FEd0I7QUFNakNtRixVQUFBQSxlQUFlLEVBQUU7QUFOZ0IsU0FBZCxDQUFyQjtBQVFELE9BMUY2QixDQTRGOUI7OztBQUNBLFlBQU1DLG9CQUFvQixHQUFHLEtBQUtoRSxhQUFMLENBQW1CNkMsVUFBbkIsRUFBN0I7QUFDQTNCLE1BQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZNkMsb0JBQVosRUFBa0NqRCxPQUFsQyxDQUEwQ2tELHFCQUFxQixJQUFJO0FBQ2pFLGNBQU1DLGlCQUFpQixHQUFHRixvQkFBb0IsQ0FBQ0MscUJBQUQsQ0FBOUM7O0FBQ0EsWUFDRSxPQUFPQyxpQkFBaUIsQ0FBQ1gsU0FBekIsS0FBdUMsVUFBdkMsSUFDQSxLQUFLM0UscUJBQUwsQ0FBMkJ1RixXQUY3QixFQUdFO0FBQ0EsZ0JBQU1DLG9CQUFvQixHQUFHLEtBQUt4RixxQkFBTCxDQUEyQnVGLFdBQTNCLENBQXVDRSxJQUF2QyxDQUMzQkMsVUFBVSxJQUFJQSxVQUFVLENBQUNwQyxJQUFYLENBQWdCcUMsS0FBaEIsS0FBMEJOLHFCQURiLENBQTdCOztBQUdBLGNBQUlHLG9CQUFKLEVBQTBCO0FBQ3hCLGtCQUFNSSx5QkFBeUIsR0FBR04saUJBQWlCLENBQUNYLFNBQWxCLEVBQWxDO0FBQ0FyQyxZQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWXFELHlCQUFaLEVBQXVDekQsT0FBdkMsQ0FBK0MwRCwwQkFBMEIsSUFBSTtBQUMzRSxvQkFBTUMsc0JBQXNCLEdBQUdGLHlCQUF5QixDQUFDQywwQkFBRCxDQUF4RDs7QUFDQSxrQkFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0MsT0FBNUIsRUFBcUM7QUFDbkMsc0JBQU1BLE9BQU8sR0FBR1Asb0JBQW9CLENBQUNoRCxNQUFyQixDQUE0QmlELElBQTVCLENBQ2RYLEtBQUssSUFBSUEsS0FBSyxDQUFDeEIsSUFBTixDQUFXcUMsS0FBWCxLQUFxQkUsMEJBRGhCLENBQWhCOztBQUdBLG9CQUFJRSxPQUFKLEVBQWE7QUFDWEQsa0JBQUFBLHNCQUFzQixDQUFDQyxPQUF2QixHQUFpQ0EsT0FBakM7QUFDRDtBQUNGO0FBQ0YsYUFWRDtBQVdEO0FBQ0Y7QUFDRixPQXhCRDs7QUEwQkFDLG9DQUF1QkMscUJBQXZCLENBQ0UsS0FBSzdFLGFBRFAsRUFFRSxLQUFLUyx1QkFGUDtBQUlELEtBNUhELE1BNEhPO0FBQ0wsV0FBS1QsYUFBTCxHQUFxQixLQUFLRyxpQkFBMUI7QUFDRDs7QUFFRCxXQUFPLEtBQUtILGFBQVo7QUFDRDs7QUFFRDhFLEVBQUFBLFFBQVEsQ0FBQ0MsUUFBRCxFQUFXQyxPQUFYLEVBQW9CO0FBQzFCLFFBQUksS0FBS2hHLFFBQUwsQ0FBY2dHLE9BQWQsQ0FBSixFQUE0QjtBQUMxQjtBQUNEOztBQUNELFNBQUtyRyxHQUFMLENBQVNvRyxRQUFULEVBQW1CQyxPQUFuQjtBQUNBLFNBQUtoRyxRQUFMLENBQWNnRyxPQUFkLElBQXlCLElBQXpCO0FBQ0Q7O0FBRUQ1QyxFQUFBQSxjQUFjLENBQUM2QyxJQUFELEVBQU9DLFVBQVUsR0FBRyxLQUFwQixFQUEyQkMsY0FBYyxHQUFHLEtBQTVDLEVBQW1EQyxnQkFBZ0IsR0FBRyxLQUF0RSxFQUE2RTtBQUN6RixRQUNHLENBQUNELGNBQUQsSUFBbUJoSCwyQkFBMkIsQ0FBQ2tILFFBQTVCLENBQXFDSixJQUFJLENBQUMvQyxJQUExQyxDQUFwQixJQUNBLEtBQUs5QixZQUFMLENBQWtCaUUsSUFBbEIsQ0FBdUJpQixZQUFZLElBQUlBLFlBQVksQ0FBQ3BELElBQWIsS0FBc0IrQyxJQUFJLENBQUMvQyxJQUFsRSxDQURBLElBRUMsQ0FBQ2tELGdCQUFELElBQXFCSCxJQUFJLENBQUMvQyxJQUFMLENBQVVxRCxRQUFWLENBQW1CLFlBQW5CLENBSHhCLEVBSUU7QUFDQSxZQUFNUCxPQUFPLEdBQUksUUFBT0MsSUFBSSxDQUFDL0MsSUFBSyxtRkFBbEM7O0FBQ0EsVUFBSWdELFVBQUosRUFBZ0I7QUFDZCxjQUFNLElBQUlNLEtBQUosQ0FBVVIsT0FBVixDQUFOO0FBQ0Q7O0FBQ0QsV0FBS0YsUUFBTCxDQUFjLE1BQWQsRUFBc0JFLE9BQXRCOztBQUNBLGFBQU9qRCxTQUFQO0FBQ0Q7O0FBQ0QsU0FBSzNCLFlBQUwsQ0FBa0JxRixJQUFsQixDQUF1QlIsSUFBdkI7QUFDQSxXQUFPQSxJQUFQO0FBQ0Q7O0FBRURTLEVBQUFBLGVBQWUsQ0FBQ3JFLFNBQUQsRUFBWXFDLEtBQVosRUFBbUJ3QixVQUFVLEdBQUcsS0FBaEMsRUFBdUNDLGNBQWMsR0FBRyxLQUF4RCxFQUErRDtBQUM1RSxRQUNHLENBQUNBLGNBQUQsSUFBbUIvRyw0QkFBNEIsQ0FBQ2lILFFBQTdCLENBQXNDaEUsU0FBdEMsQ0FBcEIsSUFDQSxLQUFLaEIsY0FBTCxDQUFvQmdCLFNBQXBCLENBRkYsRUFHRTtBQUNBLFlBQU0yRCxPQUFPLEdBQUksU0FBUTNELFNBQVUsb0ZBQW5DOztBQUNBLFVBQUk2RCxVQUFKLEVBQWdCO0FBQ2QsY0FBTSxJQUFJTSxLQUFKLENBQVVSLE9BQVYsQ0FBTjtBQUNEOztBQUNELFdBQUtGLFFBQUwsQ0FBYyxNQUFkLEVBQXNCRSxPQUF0Qjs7QUFDQSxhQUFPakQsU0FBUDtBQUNEOztBQUNELFNBQUsxQixjQUFMLENBQW9CZ0IsU0FBcEIsSUFBaUNxQyxLQUFqQztBQUNBLFdBQU9BLEtBQVA7QUFDRDs7QUFFRGlDLEVBQUFBLGtCQUFrQixDQUFDdEUsU0FBRCxFQUFZcUMsS0FBWixFQUFtQndCLFVBQVUsR0FBRyxLQUFoQyxFQUF1Q0MsY0FBYyxHQUFHLEtBQXhELEVBQStEO0FBQy9FLFFBQ0csQ0FBQ0EsY0FBRCxJQUFtQjlHLCtCQUErQixDQUFDZ0gsUUFBaEMsQ0FBeUNoRSxTQUF6QyxDQUFwQixJQUNBLEtBQUtmLGdCQUFMLENBQXNCZSxTQUF0QixDQUZGLEVBR0U7QUFDQSxZQUFNMkQsT0FBTyxHQUFJLFlBQVczRCxTQUFVLG9GQUF0Qzs7QUFDQSxVQUFJNkQsVUFBSixFQUFnQjtBQUNkLGNBQU0sSUFBSU0sS0FBSixDQUFVUixPQUFWLENBQU47QUFDRDs7QUFDRCxXQUFLRixRQUFMLENBQWMsTUFBZCxFQUFzQkUsT0FBdEI7O0FBQ0EsYUFBT2pELFNBQVA7QUFDRDs7QUFDRCxTQUFLekIsZ0JBQUwsQ0FBc0JlLFNBQXRCLElBQW1DcUMsS0FBbkM7QUFDQSxXQUFPQSxLQUFQO0FBQ0Q7O0FBRURrQyxFQUFBQSxXQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNqQixRQUFJQSxLQUFLLFlBQVlDLGNBQU1OLEtBQTNCLEVBQWtDO0FBQ2hDLFdBQUs3RyxHQUFMLENBQVNrSCxLQUFULENBQWUsZUFBZixFQUFnQ0EsS0FBaEM7QUFDRCxLQUZELE1BRU87QUFDTCxXQUFLbEgsR0FBTCxDQUFTa0gsS0FBVCxDQUFlLGlDQUFmLEVBQWtEQSxLQUFsRCxFQUF5REEsS0FBSyxDQUFDRSxLQUEvRDtBQUNEOztBQUNELFVBQU0sdUNBQWVGLEtBQWYsQ0FBTjtBQUNEOztBQUUrQixRQUExQjFHLDBCQUEwQixHQUFHO0FBQ2pDLFVBQU0sQ0FBQzZHLGdCQUFELEVBQW1COUcsa0JBQW5CLElBQXlDLE1BQU0rRyxPQUFPLENBQUNDLEdBQVIsQ0FBWSxDQUMvRCxLQUFLeEgsa0JBQUwsQ0FBd0J5SCxVQUF4QixFQUQrRCxFQUUvRCxLQUFLMUgsc0JBQUwsQ0FBNEIySCxnQkFBNUIsRUFGK0QsQ0FBWixDQUFyRDtBQUtBLFNBQUtKLGdCQUFMLEdBQXdCQSxnQkFBeEI7QUFFQSxXQUFPO0FBQ0w5RyxNQUFBQTtBQURLLEtBQVA7QUFHRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7QUFDNEIsUUFBcEJHLG9CQUFvQixDQUFDSCxrQkFBRCxFQUF5QztBQUNqRSxVQUFNO0FBQUVtSCxNQUFBQSxpQkFBRjtBQUFxQkMsTUFBQUE7QUFBckIsUUFBNENwSCxrQkFBbEQ7QUFDQSxVQUFNcUgsVUFBVSxHQUFHLE1BQU0sS0FBS1AsZ0JBQUwsQ0FBc0JRLGFBQXRCLEVBQXpCOztBQUVBLFFBQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjTCxpQkFBZCxLQUFvQ0ksS0FBSyxDQUFDQyxPQUFOLENBQWNKLGtCQUFkLENBQXhDLEVBQTJFO0FBQ3pFLFVBQUlLLGVBQWUsR0FBR0osVUFBdEI7O0FBQ0EsVUFBSUYsaUJBQUosRUFBdUI7QUFDckJNLFFBQUFBLGVBQWUsR0FBR0osVUFBVSxDQUFDSyxNQUFYLENBQWtCL0csS0FBSyxJQUFJO0FBQzNDLGlCQUFPd0csaUJBQWlCLENBQUNoQixRQUFsQixDQUEyQnhGLEtBQUssQ0FBQ0MsU0FBakMsQ0FBUDtBQUNELFNBRmlCLENBQWxCO0FBR0Q7O0FBQ0QsVUFBSXdHLGtCQUFKLEVBQXdCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBSyxRQUFBQSxlQUFlLEdBQUdBLGVBQWUsQ0FBQ0MsTUFBaEIsQ0FBdUIvRyxLQUFLLElBQUk7QUFDaEQsaUJBQU8sQ0FBQ3lHLGtCQUFrQixDQUFDakIsUUFBbkIsQ0FBNEJ4RixLQUFLLENBQUNDLFNBQWxDLENBQVI7QUFDRCxTQUZpQixDQUFsQjtBQUdEOztBQUVELFdBQUsrRyxvQkFBTCxHQUE0QixDQUFDRixlQUFlLENBQUNHLElBQWhCLENBQXFCakgsS0FBSyxJQUFJO0FBQ3pELGVBQU9BLEtBQUssQ0FBQ0MsU0FBTixLQUFvQixPQUEzQjtBQUNELE9BRjRCLENBQTdCO0FBSUEsYUFBTzZHLGVBQVA7QUFDRCxLQXJCRCxNQXFCTztBQUNMLGFBQU9KLFVBQVA7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0V6RixFQUFBQSwwQkFBMEIsQ0FBQ3BCLFlBQUQsRUFBZVIsa0JBQWYsRUFBdUQ7QUFDL0UsVUFBTTtBQUFFNkgsTUFBQUE7QUFBRixRQUFtQjdILGtCQUF6QixDQUQrRSxDQUcvRTtBQUNBOztBQUNBLFVBQU04SCxXQUFXLEdBQUcsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVU7QUFDNUJELE1BQUFBLENBQUMsR0FBR0EsQ0FBQyxDQUFDbkgsU0FBTjtBQUNBb0gsTUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNwSCxTQUFOOztBQUNBLFVBQUltSCxDQUFDLENBQUMsQ0FBRCxDQUFELEtBQVMsR0FBYixFQUFrQjtBQUNoQixZQUFJQyxDQUFDLENBQUMsQ0FBRCxDQUFELEtBQVMsR0FBYixFQUFrQjtBQUNoQixpQkFBTyxDQUFDLENBQVI7QUFDRDtBQUNGOztBQUNELFVBQUlBLENBQUMsQ0FBQyxDQUFELENBQUQsS0FBUyxHQUFiLEVBQWtCO0FBQ2hCLFlBQUlELENBQUMsQ0FBQyxDQUFELENBQUQsS0FBUyxHQUFiLEVBQWtCO0FBQ2hCLGlCQUFPLENBQVA7QUFDRDtBQUNGOztBQUNELFVBQUlBLENBQUMsS0FBS0MsQ0FBVixFQUFhO0FBQ1gsZUFBTyxDQUFQO0FBQ0QsT0FGRCxNQUVPLElBQUlELENBQUMsR0FBR0MsQ0FBUixFQUFXO0FBQ2hCLGVBQU8sQ0FBQyxDQUFSO0FBQ0QsT0FGTSxNQUVBO0FBQ0wsZUFBTyxDQUFQO0FBQ0Q7QUFDRixLQXBCRDs7QUFzQkEsV0FBT3hILFlBQVksQ0FBQzhCLElBQWIsQ0FBa0J3RixXQUFsQixFQUErQkcsR0FBL0IsQ0FBbUNuRyxVQUFVLElBQUk7QUFDdEQsVUFBSUMsZ0JBQUo7O0FBQ0EsVUFBSThGLFlBQUosRUFBa0I7QUFDaEI5RixRQUFBQSxnQkFBZ0IsR0FBRzhGLFlBQVksQ0FBQzFDLElBQWIsQ0FBa0IrQyxDQUFDLElBQUlBLENBQUMsQ0FBQ3RILFNBQUYsS0FBZ0JrQixVQUFVLENBQUNsQixTQUFsRCxDQUFuQjtBQUNEOztBQUNELGFBQU8sQ0FBQ2tCLFVBQUQsRUFBYUMsZ0JBQWIsQ0FBUDtBQUNELEtBTk0sQ0FBUDtBQU9EOztBQUVzQixRQUFqQjFCLGlCQUFpQixHQUFHO0FBQ3hCLFdBQU8sTUFBTSxnQ0FBaUIsS0FBS1YsS0FBdEIsRUFBNkIrSCxNQUE3QixDQUFvQ1MsWUFBWSxJQUFJO0FBQy9ELFVBQUksMkJBQTJCQyxJQUEzQixDQUFnQ0QsWUFBaEMsQ0FBSixFQUFtRDtBQUNqRCxlQUFPLElBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxhQUFLdkMsUUFBTCxDQUNFLE1BREYsRUFFRyxZQUFXdUMsWUFBYSxxR0FGM0I7O0FBSUEsZUFBTyxLQUFQO0FBQ0Q7QUFDRixLQVZZLENBQWI7QUFXRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0V0SCxFQUFBQSxzQkFBc0IsQ0FBQ3ZCLE1BQUQsRUFJVjtBQUNWLFVBQU07QUFBRWtCLE1BQUFBLFlBQUY7QUFBZ0JSLE1BQUFBLGtCQUFoQjtBQUFvQ00sTUFBQUE7QUFBcEMsUUFBNERoQixNQUFsRSxDQURVLENBR1Y7O0FBQ0EsUUFBSSxDQUFDLEtBQUt3QixhQUFWLEVBQXlCO0FBQ3ZCLGFBQU8sSUFBUDtBQUNEOztBQUVELFFBQ0UsNkJBQWtCLEtBQUtkLGtCQUF2QixFQUEyQ0Esa0JBQTNDLEtBQ0EsS0FBS00sbUJBQUwsS0FBNkJBLG1CQUQ3QixJQUVBLDZCQUFrQixLQUFLRSxZQUF2QixFQUFxQ0EsWUFBckMsQ0FIRixFQUlFO0FBQ0EsYUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBamRzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IEdyYXBoUUxTY2hlbWEsIEdyYXBoUUxPYmplY3RUeXBlLCBEb2N1bWVudE5vZGUsIEdyYXBoUUxOYW1lZFR5cGUgfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7IHN0aXRjaFNjaGVtYXMgfSBmcm9tICdAZ3JhcGhxbC10b29scy9zdGl0Y2gnO1xuaW1wb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IFNjaGVtYURpcmVjdGl2ZVZpc2l0b3IgfSBmcm9tICdAZ3JhcGhxbC10b29scy91dGlscyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgZGVmYXVsdEdyYXBoUUxUeXBlcyBmcm9tICcuL2xvYWRlcnMvZGVmYXVsdEdyYXBoUUxUeXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJzZUNsYXNzVHlwZXMgZnJvbSAnLi9sb2FkZXJzL3BhcnNlQ2xhc3NUeXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJzZUNsYXNzUXVlcmllcyBmcm9tICcuL2xvYWRlcnMvcGFyc2VDbGFzc1F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgcGFyc2VDbGFzc011dGF0aW9ucyBmcm9tICcuL2xvYWRlcnMvcGFyc2VDbGFzc011dGF0aW9ucyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTFF1ZXJpZXMgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMUXVlcmllcyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0R3JhcGhRTE11dGF0aW9ucyBmcm9tICcuL2xvYWRlcnMvZGVmYXVsdEdyYXBoUUxNdXRhdGlvbnMnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgRGF0YWJhc2VDb250cm9sbGVyIGZyb20gJy4uL0NvbnRyb2xsZXJzL0RhdGFiYXNlQ29udHJvbGxlcic7XG5pbXBvcnQgU2NoZW1hQ2FjaGUgZnJvbSAnLi4vQWRhcHRlcnMvQ2FjaGUvU2NoZW1hQ2FjaGUnO1xuaW1wb3J0IHsgdG9HcmFwaFFMRXJyb3IgfSBmcm9tICcuL3BhcnNlR3JhcGhRTFV0aWxzJztcbmltcG9ydCAqIGFzIHNjaGVtYURpcmVjdGl2ZXMgZnJvbSAnLi9sb2FkZXJzL3NjaGVtYURpcmVjdGl2ZXMnO1xuaW1wb3J0ICogYXMgc2NoZW1hVHlwZXMgZnJvbSAnLi9sb2FkZXJzL3NjaGVtYVR5cGVzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uTmFtZXMgfSBmcm9tICcuLi90cmlnZ2Vycyc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0UmVsYXlTY2hlbWEgZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRSZWxheVNjaGVtYSc7XG5cbmNvbnN0IFJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyA9IFtcbiAgJ1N0cmluZycsXG4gICdCb29sZWFuJyxcbiAgJ0ludCcsXG4gICdGbG9hdCcsXG4gICdJRCcsXG4gICdBcnJheVJlc3VsdCcsXG4gICdRdWVyeScsXG4gICdNdXRhdGlvbicsXG4gICdTdWJzY3JpcHRpb24nLFxuICAnQ3JlYXRlRmlsZUlucHV0JyxcbiAgJ0NyZWF0ZUZpbGVQYXlsb2FkJyxcbiAgJ1ZpZXdlcicsXG4gICdTaWduVXBJbnB1dCcsXG4gICdTaWduVXBQYXlsb2FkJyxcbiAgJ0xvZ0luSW5wdXQnLFxuICAnTG9nSW5QYXlsb2FkJyxcbiAgJ0xvZ091dElucHV0JyxcbiAgJ0xvZ091dFBheWxvYWQnLFxuICAnQ2xvdWRDb2RlRnVuY3Rpb24nLFxuICAnQ2FsbENsb3VkQ29kZUlucHV0JyxcbiAgJ0NhbGxDbG91ZENvZGVQYXlsb2FkJyxcbiAgJ0NyZWF0ZUNsYXNzSW5wdXQnLFxuICAnQ3JlYXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ1VwZGF0ZUNsYXNzSW5wdXQnLFxuICAnVXBkYXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ0RlbGV0ZUNsYXNzSW5wdXQnLFxuICAnRGVsZXRlQ2xhc3NQYXlsb2FkJyxcbiAgJ1BhZ2VJbmZvJyxcbl07XG5jb25zdCBSRVNFUlZFRF9HUkFQSFFMX1FVRVJZX05BTUVTID0gWydoZWFsdGgnLCAndmlld2VyJywgJ2NsYXNzJywgJ2NsYXNzZXMnXTtcbmNvbnN0IFJFU0VSVkVEX0dSQVBIUUxfTVVUQVRJT05fTkFNRVMgPSBbXG4gICdzaWduVXAnLFxuICAnbG9nSW4nLFxuICAnbG9nT3V0JyxcbiAgJ2NyZWF0ZUZpbGUnLFxuICAnY2FsbENsb3VkQ29kZScsXG4gICdjcmVhdGVDbGFzcycsXG4gICd1cGRhdGVDbGFzcycsXG4gICdkZWxldGVDbGFzcycsXG5dO1xuXG5jbGFzcyBQYXJzZUdyYXBoUUxTY2hlbWEge1xuICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlcjtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcbiAgcGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWc7XG4gIGxvZzogYW55O1xuICBhcHBJZDogc3RyaW5nO1xuICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6ID8oc3RyaW5nIHwgR3JhcGhRTFNjaGVtYSB8IERvY3VtZW50Tm9kZSB8IEdyYXBoUUxOYW1lZFR5cGVbXSk7XG4gIHNjaGVtYUNhY2hlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFyYW1zOiB7XG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IERhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBsb2c6IGFueSxcbiAgICAgIGFwcElkOiBzdHJpbmcsXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6ID8oc3RyaW5nIHwgR3JhcGhRTFNjaGVtYSB8IERvY3VtZW50Tm9kZSB8IEdyYXBoUUxOYW1lZFR5cGVbXSksXG4gICAgfSA9IHt9XG4gICkge1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9XG4gICAgICBwYXJhbXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciB8fFxuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBwYXJzZUdyYXBoUUxDb250cm9sbGVyIGluc3RhbmNlIScpO1xuICAgIHRoaXMuZGF0YWJhc2VDb250cm9sbGVyID1cbiAgICAgIHBhcmFtcy5kYXRhYmFzZUNvbnRyb2xsZXIgfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgZGF0YWJhc2VDb250cm9sbGVyIGluc3RhbmNlIScpO1xuICAgIHRoaXMubG9nID0gcGFyYW1zLmxvZyB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIGxvZyBpbnN0YW5jZSEnKTtcbiAgICB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcyA9IHBhcmFtcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnM7XG4gICAgdGhpcy5hcHBJZCA9IHBhcmFtcy5hcHBJZCB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSB0aGUgYXBwSWQhJyk7XG4gICAgdGhpcy5zY2hlbWFDYWNoZSA9IFNjaGVtYUNhY2hlO1xuICAgIHRoaXMubG9nQ2FjaGUgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgY29uc3QgeyBwYXJzZUdyYXBoUUxDb25maWcgfSA9IGF3YWl0IHRoaXMuX2luaXRpYWxpemVTY2hlbWFBbmRDb25maWcoKTtcbiAgICBjb25zdCBwYXJzZUNsYXNzZXNBcnJheSA9IGF3YWl0IHRoaXMuX2dldENsYXNzZXNGb3JTY2hlbWEocGFyc2VHcmFwaFFMQ29uZmlnKTtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gYXdhaXQgdGhpcy5fZ2V0RnVuY3Rpb25OYW1lcygpO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXNTdHJpbmcgPSBmdW5jdGlvbk5hbWVzLmpvaW4oKTtcblxuICAgIGNvbnN0IHBhcnNlQ2xhc3NlcyA9IHBhcnNlQ2xhc3Nlc0FycmF5LnJlZHVjZSgoYWNjLCBjbGF6eikgPT4ge1xuICAgICAgYWNjW2NsYXp6LmNsYXNzTmFtZV0gPSBjbGF6ejtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9oYXNTY2hlbWFJbnB1dENoYW5nZWQoe1xuICAgICAgICBwYXJzZUNsYXNzZXMsXG4gICAgICAgIHBhcnNlR3JhcGhRTENvbmZpZyxcbiAgICAgICAgZnVuY3Rpb25OYW1lc1N0cmluZyxcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncmFwaFFMU2NoZW1hO1xuICAgIH1cblxuICAgIHRoaXMucGFyc2VDbGFzc2VzID0gcGFyc2VDbGFzc2VzO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29uZmlnID0gcGFyc2VHcmFwaFFMQ29uZmlnO1xuICAgIHRoaXMuZnVuY3Rpb25OYW1lcyA9IGZ1bmN0aW9uTmFtZXM7XG4gICAgdGhpcy5mdW5jdGlvbk5hbWVzU3RyaW5nID0gZnVuY3Rpb25OYW1lc1N0cmluZztcbiAgICB0aGlzLnBhcnNlQ2xhc3NUeXBlcyA9IHt9O1xuICAgIHRoaXMudmlld2VyVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ncmFwaFFMQXV0b1NjaGVtYSA9IG51bGw7XG4gICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gbnVsbDtcbiAgICB0aGlzLmdyYXBoUUxUeXBlcyA9IFtdO1xuICAgIHRoaXMuZ3JhcGhRTFF1ZXJpZXMgPSB7fTtcbiAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnMgPSB7fTtcbiAgICB0aGlzLmdyYXBoUUxTdWJzY3JpcHRpb25zID0ge307XG4gICAgdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zID0gbnVsbDtcbiAgICB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzID0ge307XG4gICAgdGhpcy5yZWxheU5vZGVJbnRlcmZhY2UgPSBudWxsO1xuXG4gICAgZGVmYXVsdEdyYXBoUUxUeXBlcy5sb2FkKHRoaXMpO1xuICAgIGRlZmF1bHRSZWxheVNjaGVtYS5sb2FkKHRoaXMpO1xuICAgIHNjaGVtYVR5cGVzLmxvYWQodGhpcyk7XG5cbiAgICB0aGlzLl9nZXRQYXJzZUNsYXNzZXNXaXRoQ29uZmlnKHBhcnNlQ2xhc3Nlc0FycmF5LCBwYXJzZUdyYXBoUUxDb25maWcpLmZvckVhY2goXG4gICAgICAoW3BhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWddKSA9PiB7XG4gICAgICAgIC8vIFNvbWUgdGltZXMgc2NoZW1hIHJldHVybiB0aGUgX2F1dGhfZGF0YV8gZmllbGRcbiAgICAgICAgLy8gaXQgd2lsbCBsZWFkIHRvIHVuc3RhYmxlIGdyYXBocWwgZ2VuZXJhdGlvbiBvcmRlclxuICAgICAgICBpZiAocGFyc2VDbGFzcy5jbGFzc05hbWUgPT09ICdfVXNlcicpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhwYXJzZUNsYXNzLmZpZWxkcykuZm9yRWFjaChmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkTmFtZS5zdGFydHNXaXRoKCdfYXV0aF9kYXRhXycpKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmllbGRzIG9yZGVyIGluc2lkZSB0aGUgc2NoZW1hIHNlZW1zIHRvIG5vdCBiZSBjb25zaXN0ZW50IGFjcm9zc1xuICAgICAgICAvLyByZXN0YXJ0IHNvIHdlIG5lZWQgdG8gZW5zdXJlIGFuIGFscGhhYmV0aWNhbCBvcmRlclxuICAgICAgICAvLyBhbHNvIGl0J3MgYmV0dGVyIGZvciB0aGUgcGxheWdyb3VuZCBkb2N1bWVudGF0aW9uXG4gICAgICAgIGNvbnN0IG9yZGVyZWRGaWVsZHMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyc2VDbGFzcy5maWVsZHMpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5mb3JFYWNoKGZpZWxkTmFtZSA9PiB7XG4gICAgICAgICAgICBvcmRlcmVkRmllbGRzW2ZpZWxkTmFtZV0gPSBwYXJzZUNsYXNzLmZpZWxkc1tmaWVsZE5hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICBwYXJzZUNsYXNzLmZpZWxkcyA9IG9yZGVyZWRGaWVsZHM7XG4gICAgICAgIHBhcnNlQ2xhc3NUeXBlcy5sb2FkKHRoaXMsIHBhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWcpO1xuICAgICAgICBwYXJzZUNsYXNzUXVlcmllcy5sb2FkKHRoaXMsIHBhcnNlQ2xhc3MsIHBhcnNlQ2xhc3NDb25maWcpO1xuICAgICAgICBwYXJzZUNsYXNzTXV0YXRpb25zLmxvYWQodGhpcywgcGFyc2VDbGFzcywgcGFyc2VDbGFzc0NvbmZpZyk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGRlZmF1bHRHcmFwaFFMVHlwZXMubG9hZEFycmF5UmVzdWx0KHRoaXMsIHBhcnNlQ2xhc3Nlc0FycmF5KTtcbiAgICBkZWZhdWx0R3JhcGhRTFF1ZXJpZXMubG9hZCh0aGlzKTtcbiAgICBkZWZhdWx0R3JhcGhRTE11dGF0aW9ucy5sb2FkKHRoaXMpO1xuXG4gICAgbGV0IGdyYXBoUUxRdWVyeSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ncmFwaFFMUXVlcmllcykubGVuZ3RoID4gMCkge1xuICAgICAgZ3JhcGhRTFF1ZXJ5ID0gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgbmFtZTogJ1F1ZXJ5JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdRdWVyeSBpcyB0aGUgdG9wIGxldmVsIHR5cGUgZm9yIHF1ZXJpZXMuJyxcbiAgICAgICAgZmllbGRzOiB0aGlzLmdyYXBoUUxRdWVyaWVzLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZEdyYXBoUUxUeXBlKGdyYXBoUUxRdWVyeSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbGV0IGdyYXBoUUxNdXRhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ncmFwaFFMTXV0YXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICBncmFwaFFMTXV0YXRpb24gPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiAnTXV0YXRpb24nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ011dGF0aW9uIGlzIHRoZSB0b3AgbGV2ZWwgdHlwZSBmb3IgbXV0YXRpb25zLicsXG4gICAgICAgIGZpZWxkczogdGhpcy5ncmFwaFFMTXV0YXRpb25zLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZEdyYXBoUUxUeXBlKGdyYXBoUUxNdXRhdGlvbiwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbGV0IGdyYXBoUUxTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ3JhcGhRTFN1YnNjcmlwdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGdyYXBoUUxTdWJzY3JpcHRpb24gPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiAnU3Vic2NyaXB0aW9uJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTdWJzY3JpcHRpb24gaXMgdGhlIHRvcCBsZXZlbCB0eXBlIGZvciBzdWJzY3JpcHRpb25zLicsXG4gICAgICAgIGZpZWxkczogdGhpcy5ncmFwaFFMU3Vic2NyaXB0aW9ucyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRHcmFwaFFMVHlwZShncmFwaFFMU3Vic2NyaXB0aW9uLCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hID0gbmV3IEdyYXBoUUxTY2hlbWEoe1xuICAgICAgdHlwZXM6IHRoaXMuZ3JhcGhRTFR5cGVzLFxuICAgICAgcXVlcnk6IGdyYXBoUUxRdWVyeSxcbiAgICAgIG11dGF0aW9uOiBncmFwaFFMTXV0YXRpb24sXG4gICAgICBzdWJzY3JpcHRpb246IGdyYXBoUUxTdWJzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMpIHtcbiAgICAgIHNjaGVtYURpcmVjdGl2ZXMubG9hZCh0aGlzKTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcy5nZXRUeXBlTWFwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEluIGZvbGxvd2luZyBjb2RlIHdlIHVzZSB1bmRlcnNjb3JlIGF0dHIgdG8gYXZvaWQganMgdmFyIHVuIHJlZlxuICAgICAgICBjb25zdCBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZU1hcCA9IHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLl90eXBlTWFwO1xuICAgICAgICBjb25zdCBmaW5kQW5kUmVwbGFjZUxhc3RUeXBlID0gKHBhcmVudCwga2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHBhcmVudFtrZXldLm5hbWUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5ncmFwaFFMQXV0b1NjaGVtYS5fdHlwZU1hcFtwYXJlbnRba2V5XS5uYW1lXSAmJlxuICAgICAgICAgICAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW3BhcmVudFtrZXldLm5hbWVdICE9PSBwYXJlbnRba2V5XVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHVucmVzb2x2ZWQgZmllbGQgb24gb3ZlcmxvYWRlZCBzY2hlbWFcbiAgICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgZmluYWwgdHlwZSB3aXRoIHRoZSBhdXRvIHNjaGVtYSBvbmVcbiAgICAgICAgICAgICAgcGFyZW50W2tleV0gPSB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW3BhcmVudFtrZXldLm5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocGFyZW50W2tleV0ub2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGZpbmRBbmRSZXBsYWNlTGFzdFR5cGUocGFyZW50W2tleV0sICdvZlR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIEFkZCBub24gc2hhcmVkIHR5cGVzIGZyb20gY3VzdG9tIHNjaGVtYSB0byBhdXRvIHNjaGVtYVxuICAgICAgICAvLyBub3RlOiBzb21lIG5vbiBzaGFyZWQgdHlwZXMgY2FuIHVzZSBzb21lIHNoYXJlZCB0eXBlc1xuICAgICAgICAvLyBzbyB0aGlzIGNvZGUgbmVlZCB0byBiZSByYW4gYmVmb3JlIHRoZSBzaGFyZWQgdHlwZXMgYWRkaXRpb25cbiAgICAgICAgLy8gd2UgdXNlIHNvcnQgdG8gZW5zdXJlIHNjaGVtYSBjb25zaXN0ZW5jeSBvdmVyIHJlc3RhcnRzXG4gICAgICAgIE9iamVjdC5rZXlzKGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuZm9yRWFjaChjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZSA9IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlTWFwW2N1c3RvbUdyYXBoUUxTY2hlbWFUeXBlS2V5XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIWN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlIHx8XG4gICAgICAgICAgICAgICFjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lIHx8XG4gICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWUuc3RhcnRzV2l0aCgnX18nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF1dG9HcmFwaFFMU2NoZW1hVHlwZSA9IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEuX3R5cGVNYXBbXG4gICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWVcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoIWF1dG9HcmFwaFFMU2NoZW1hVHlwZSkge1xuICAgICAgICAgICAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW1xuICAgICAgICAgICAgICAgIGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlLm5hbWVcbiAgICAgICAgICAgICAgXSA9IGN1c3RvbUdyYXBoUUxTY2hlbWFUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAvLyBIYW5kbGUgc2hhcmVkIHR5cGVzXG4gICAgICAgIC8vIFdlIHBhc3MgdGhyb3VnaCBlYWNoIHR5cGUgYW5kIGVuc3VyZSB0aGF0IGFsbCBzdWIgZmllbGQgdHlwZXMgYXJlIHJlcGxhY2VkXG4gICAgICAgIC8vIHdlIHVzZSBzb3J0IHRvIGVuc3VyZSBzY2hlbWEgY29uc2lzdGVuY3kgb3ZlciByZXN0YXJ0c1xuICAgICAgICBPYmplY3Qua2V5cyhjdXN0b21HcmFwaFFMU2NoZW1hVHlwZU1hcClcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLmZvckVhY2goY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGVLZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUgPSBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZU1hcFtjdXN0b21HcmFwaFFMU2NoZW1hVHlwZUtleV07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFjdXN0b21HcmFwaFFMU2NoZW1hVHlwZSB8fFxuICAgICAgICAgICAgICAhY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUubmFtZSB8fFxuICAgICAgICAgICAgICBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lLnN0YXJ0c1dpdGgoJ19fJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXRvR3JhcGhRTFNjaGVtYVR5cGUgPSB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLl90eXBlTWFwW1xuICAgICAgICAgICAgICBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5uYW1lXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBpZiAoYXV0b0dyYXBoUUxTY2hlbWFUeXBlICYmIHR5cGVvZiBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5nZXRGaWVsZHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VzdG9tR3JhcGhRTFNjaGVtYVR5cGUuX2ZpZWxkcylcbiAgICAgICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goZmllbGRLZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBjdXN0b21HcmFwaFFMU2NoZW1hVHlwZS5fZmllbGRzW2ZpZWxkS2V5XTtcbiAgICAgICAgICAgICAgICAgIGZpbmRBbmRSZXBsYWNlTGFzdFR5cGUoZmllbGQsICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgICBhdXRvR3JhcGhRTFNjaGVtYVR5cGUuX2ZpZWxkc1tmaWVsZC5uYW1lXSA9IGZpZWxkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gYXdhaXQgdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMoe1xuICAgICAgICAgIGRpcmVjdGl2ZXNEZWZpbml0aW9uc1NjaGVtYTogdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc0RlZmluaXRpb25zLFxuICAgICAgICAgIGF1dG9TY2hlbWE6IHRoaXMuZ3JhcGhRTEF1dG9TY2hlbWEsXG4gICAgICAgICAgc3RpdGNoU2NoZW1hcyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWEgPSBzdGl0Y2hTY2hlbWFzKHtcbiAgICAgICAgICBzY2hlbWFzOiBbXG4gICAgICAgICAgICB0aGlzLmdyYXBoUUxTY2hlbWFEaXJlY3RpdmVzRGVmaW5pdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmdyYXBoUUxBdXRvU2NoZW1hLFxuICAgICAgICAgICAgdGhpcy5ncmFwaFFMQ3VzdG9tVHlwZURlZnMsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtZXJnZURpcmVjdGl2ZXM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IG1lcmdlIGRpcmVjdGl2ZSB3aGVuIHN0cmluZyBzY2hlbWEgcHJvdmlkZWRcbiAgICAgIGNvbnN0IGdyYXBoUUxTY2hlbWFUeXBlTWFwID0gdGhpcy5ncmFwaFFMU2NoZW1hLmdldFR5cGVNYXAoKTtcbiAgICAgIE9iamVjdC5rZXlzKGdyYXBoUUxTY2hlbWFUeXBlTWFwKS5mb3JFYWNoKGdyYXBoUUxTY2hlbWFUeXBlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGdyYXBoUUxTY2hlbWFUeXBlID0gZ3JhcGhRTFNjaGVtYVR5cGVNYXBbZ3JhcGhRTFNjaGVtYVR5cGVOYW1lXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBncmFwaFFMU2NoZW1hVHlwZS5nZXRGaWVsZHMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICB0aGlzLmdyYXBoUUxDdXN0b21UeXBlRGVmcy5kZWZpbml0aW9uc1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBncmFwaFFMQ3VzdG9tVHlwZURlZiA9IHRoaXMuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLmRlZmluaXRpb25zLmZpbmQoXG4gICAgICAgICAgICBkZWZpbml0aW9uID0+IGRlZmluaXRpb24ubmFtZS52YWx1ZSA9PT0gZ3JhcGhRTFNjaGVtYVR5cGVOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZ3JhcGhRTEN1c3RvbVR5cGVEZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyYXBoUUxTY2hlbWFUeXBlRmllbGRNYXAgPSBncmFwaFFMU2NoZW1hVHlwZS5nZXRGaWVsZHMoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGdyYXBoUUxTY2hlbWFUeXBlRmllbGRNYXApLmZvckVhY2goZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncmFwaFFMU2NoZW1hVHlwZUZpZWxkID0gZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZE1hcFtncmFwaFFMU2NoZW1hVHlwZUZpZWxkTmFtZV07XG4gICAgICAgICAgICAgIGlmICghZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZC5hc3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXN0Tm9kZSA9IGdyYXBoUUxDdXN0b21UeXBlRGVmLmZpZWxkcy5maW5kKFxuICAgICAgICAgICAgICAgICAgZmllbGQgPT4gZmllbGQubmFtZS52YWx1ZSA9PT0gZ3JhcGhRTFNjaGVtYVR5cGVGaWVsZE5hbWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhc3ROb2RlKSB7XG4gICAgICAgICAgICAgICAgICBncmFwaFFMU2NoZW1hVHlwZUZpZWxkLmFzdE5vZGUgPSBhc3ROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgU2NoZW1hRGlyZWN0aXZlVmlzaXRvci52aXNpdFNjaGVtYURpcmVjdGl2ZXMoXG4gICAgICAgIHRoaXMuZ3JhcGhRTFNjaGVtYSxcbiAgICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hRGlyZWN0aXZlc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncmFwaFFMU2NoZW1hID0gdGhpcy5ncmFwaFFMQXV0b1NjaGVtYTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ncmFwaFFMU2NoZW1hO1xuICB9XG5cbiAgX2xvZ09uY2Uoc2V2ZXJpdHksIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5sb2dDYWNoZVttZXNzYWdlXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvZ1tzZXZlcml0eV0obWVzc2FnZSk7XG4gICAgdGhpcy5sb2dDYWNoZVttZXNzYWdlXSA9IHRydWU7XG4gIH1cblxuICBhZGRHcmFwaFFMVHlwZSh0eXBlLCB0aHJvd0Vycm9yID0gZmFsc2UsIGlnbm9yZVJlc2VydmVkID0gZmFsc2UsIGlnbm9yZUNvbm5lY3Rpb24gPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTLmluY2x1ZGVzKHR5cGUubmFtZSkpIHx8XG4gICAgICB0aGlzLmdyYXBoUUxUeXBlcy5maW5kKGV4aXN0aW5nVHlwZSA9PiBleGlzdGluZ1R5cGUubmFtZSA9PT0gdHlwZS5uYW1lKSB8fFxuICAgICAgKCFpZ25vcmVDb25uZWN0aW9uICYmIHR5cGUubmFtZS5lbmRzV2l0aCgnQ29ubmVjdGlvbicpKVxuICAgICkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBUeXBlICR7dHlwZS5uYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgaXQgY29sbGlkZWQgd2l0aCBhbiBleGlzdGluZyB0eXBlLmA7XG4gICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2dPbmNlKCd3YXJuJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxUeXBlcy5wdXNoKHR5cGUpO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgYWRkR3JhcGhRTFF1ZXJ5KGZpZWxkTmFtZSwgZmllbGQsIHRocm93RXJyb3IgPSBmYWxzZSwgaWdub3JlUmVzZXJ2ZWQgPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9RVUVSWV9OQU1FUy5pbmNsdWRlcyhmaWVsZE5hbWUpKSB8fFxuICAgICAgdGhpcy5ncmFwaFFMUXVlcmllc1tmaWVsZE5hbWVdXG4gICAgKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFF1ZXJ5ICR7ZmllbGROYW1lfSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIGF1dG8gc2NoZW1hIGJlY2F1c2UgaXQgY29sbGlkZWQgd2l0aCBhbiBleGlzdGluZyBmaWVsZC5gO1xuICAgICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5fbG9nT25jZSgnd2FybicsIG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5ncmFwaFFMUXVlcmllc1tmaWVsZE5hbWVdID0gZmllbGQ7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgYWRkR3JhcGhRTE11dGF0aW9uKGZpZWxkTmFtZSwgZmllbGQsIHRocm93RXJyb3IgPSBmYWxzZSwgaWdub3JlUmVzZXJ2ZWQgPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICghaWdub3JlUmVzZXJ2ZWQgJiYgUkVTRVJWRURfR1JBUEhRTF9NVVRBVElPTl9OQU1FUy5pbmNsdWRlcyhmaWVsZE5hbWUpKSB8fFxuICAgICAgdGhpcy5ncmFwaFFMTXV0YXRpb25zW2ZpZWxkTmFtZV1cbiAgICApIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTXV0YXRpb24gJHtmaWVsZE5hbWV9IGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgYXV0byBzY2hlbWEgYmVjYXVzZSBpdCBjb2xsaWRlZCB3aXRoIGFuIGV4aXN0aW5nIGZpZWxkLmA7XG4gICAgICBpZiAodGhyb3dFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9sb2dPbmNlKCd3YXJuJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmdyYXBoUUxNdXRhdGlvbnNbZmllbGROYW1lXSA9IGZpZWxkO1xuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVycm9yLCBlcnJvci5zdGFjayk7XG4gICAgfVxuICAgIHRocm93IHRvR3JhcGhRTEVycm9yKGVycm9yKTtcbiAgfVxuXG4gIGFzeW5jIF9pbml0aWFsaXplU2NoZW1hQW5kQ29uZmlnKCkge1xuICAgIGNvbnN0IFtzY2hlbWFDb250cm9sbGVyLCBwYXJzZUdyYXBoUUxDb25maWddID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5kYXRhYmFzZUNvbnRyb2xsZXIubG9hZFNjaGVtYSgpLFxuICAgICAgdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLmdldEdyYXBoUUxDb25maWcoKSxcbiAgICBdKTtcblxuICAgIHRoaXMuc2NoZW1hQ29udHJvbGxlciA9IHNjaGVtYUNvbnRyb2xsZXI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VHcmFwaFFMQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgY2xhc3NlcyBmb3VuZCBieSB0aGUgYHNjaGVtYUNvbnRyb2xsZXJgXG4gICAqIG1pbnVzIHRob3NlIGZpbHRlcmVkIG91dCBieSB0aGUgYXBwJ3MgcGFyc2VHcmFwaFFMQ29uZmlnLlxuICAgKi9cbiAgYXN5bmMgX2dldENsYXNzZXNGb3JTY2hlbWEocGFyc2VHcmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpIHtcbiAgICBjb25zdCB7IGVuYWJsZWRGb3JDbGFzc2VzLCBkaXNhYmxlZEZvckNsYXNzZXMgfSA9IHBhcnNlR3JhcGhRTENvbmZpZztcbiAgICBjb25zdCBhbGxDbGFzc2VzID0gYXdhaXQgdGhpcy5zY2hlbWFDb250cm9sbGVyLmdldEFsbENsYXNzZXMoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuYWJsZWRGb3JDbGFzc2VzKSB8fCBBcnJheS5pc0FycmF5KGRpc2FibGVkRm9yQ2xhc3NlcykpIHtcbiAgICAgIGxldCBpbmNsdWRlZENsYXNzZXMgPSBhbGxDbGFzc2VzO1xuICAgICAgaWYgKGVuYWJsZWRGb3JDbGFzc2VzKSB7XG4gICAgICAgIGluY2x1ZGVkQ2xhc3NlcyA9IGFsbENsYXNzZXMuZmlsdGVyKGNsYXp6ID0+IHtcbiAgICAgICAgICByZXR1cm4gZW5hYmxlZEZvckNsYXNzZXMuaW5jbHVkZXMoY2xhenouY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlzYWJsZWRGb3JDbGFzc2VzKSB7XG4gICAgICAgIC8vIENsYXNzZXMgaW5jbHVkZWQgaW4gYGVuYWJsZWRGb3JDbGFzc2VzYCB0aGF0XG4gICAgICAgIC8vIGFyZSBhbHNvIHByZXNlbnQgaW4gYGRpc2FibGVkRm9yQ2xhc3Nlc2Agd2lsbFxuICAgICAgICAvLyBzdGlsbCBiZSBmaWx0ZXJlZCBvdXRcbiAgICAgICAgaW5jbHVkZWRDbGFzc2VzID0gaW5jbHVkZWRDbGFzc2VzLmZpbHRlcihjbGF6eiA9PiB7XG4gICAgICAgICAgcmV0dXJuICFkaXNhYmxlZEZvckNsYXNzZXMuaW5jbHVkZXMoY2xhenouY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNVc2Vyc0NsYXNzRGlzYWJsZWQgPSAhaW5jbHVkZWRDbGFzc2VzLnNvbWUoY2xhenogPT4ge1xuICAgICAgICByZXR1cm4gY2xhenouY2xhc3NOYW1lID09PSAnX1VzZXInO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpbmNsdWRlZENsYXNzZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhbGxDbGFzc2VzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0dXBsZXNcbiAgICogdGhhdCBwcm92aWRlIHRoZSBwYXJzZUNsYXNzIGFsb25nIHdpdGhcbiAgICogaXRzIHBhcnNlQ2xhc3NDb25maWcgd2hlcmUgcHJvdmlkZWQuXG4gICAqL1xuICBfZ2V0UGFyc2VDbGFzc2VzV2l0aENvbmZpZyhwYXJzZUNsYXNzZXMsIHBhcnNlR3JhcGhRTENvbmZpZzogUGFyc2VHcmFwaFFMQ29uZmlnKSB7XG4gICAgY29uc3QgeyBjbGFzc0NvbmZpZ3MgfSA9IHBhcnNlR3JhcGhRTENvbmZpZztcblxuICAgIC8vIE1ha2Ugc3VyZXMgdGhhdCB0aGUgZGVmYXVsdCBjbGFzc2VzIGFuZCBjbGFzc2VzIHRoYXRcbiAgICAvLyBzdGFydHMgd2l0aCBjYXBpdGFsaXplZCBsZXR0ZXIgd2lsbCBiZSBnZW5lcmF0ZWQgZmlyc3QuXG4gICAgY29uc3Qgc29ydENsYXNzZXMgPSAoYSwgYikgPT4ge1xuICAgICAgYSA9IGEuY2xhc3NOYW1lO1xuICAgICAgYiA9IGIuY2xhc3NOYW1lO1xuICAgICAgaWYgKGFbMF0gPT09ICdfJykge1xuICAgICAgICBpZiAoYlswXSAhPT0gJ18nKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYlswXSA9PT0gJ18nKSB7XG4gICAgICAgIGlmIChhWzBdICE9PSAnXycpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2UgaWYgKGEgPCBiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDbGFzc2VzLnNvcnQoc29ydENsYXNzZXMpLm1hcChwYXJzZUNsYXNzID0+IHtcbiAgICAgIGxldCBwYXJzZUNsYXNzQ29uZmlnO1xuICAgICAgaWYgKGNsYXNzQ29uZmlncykge1xuICAgICAgICBwYXJzZUNsYXNzQ29uZmlnID0gY2xhc3NDb25maWdzLmZpbmQoYyA9PiBjLmNsYXNzTmFtZSA9PT0gcGFyc2VDbGFzcy5jbGFzc05hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtwYXJzZUNsYXNzLCBwYXJzZUNsYXNzQ29uZmlnXTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRGdW5jdGlvbk5hbWVzKCkge1xuICAgIHJldHVybiBhd2FpdCBnZXRGdW5jdGlvbk5hbWVzKHRoaXMuYXBwSWQpLmZpbHRlcihmdW5jdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKC9eW19hLXpBLVpdW19hLXpBLVowLTldKiQvLnRlc3QoZnVuY3Rpb25OYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2xvZ09uY2UoXG4gICAgICAgICAgJ3dhcm4nLFxuICAgICAgICAgIGBGdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBhdXRvIHNjaGVtYSBiZWNhdXNlIEdyYXBoUUwgbmFtZXMgbXVzdCBtYXRjaCAvXltfYS16QS1aXVtfYS16QS1aMC05XSokLy5gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZm9yIGNoYW5nZXMgdG8gdGhlIHBhcnNlQ2xhc3Nlc1xuICAgKiBvYmplY3RzIChpLmUuIGRhdGFiYXNlIHNjaGVtYSkgb3IgdG9cbiAgICogdGhlIHBhcnNlR3JhcGhRTENvbmZpZyBvYmplY3QuIElmIG5vXG4gICAqIGNoYW5nZXMgYXJlIGZvdW5kLCByZXR1cm4gdHJ1ZTtcbiAgICovXG4gIF9oYXNTY2hlbWFJbnB1dENoYW5nZWQocGFyYW1zOiB7XG4gICAgcGFyc2VDbGFzc2VzOiBhbnksXG4gICAgcGFyc2VHcmFwaFFMQ29uZmlnOiA/UGFyc2VHcmFwaFFMQ29uZmlnLFxuICAgIGZ1bmN0aW9uTmFtZXNTdHJpbmc6IHN0cmluZyxcbiAgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgcGFyc2VDbGFzc2VzLCBwYXJzZUdyYXBoUUxDb25maWcsIGZ1bmN0aW9uTmFtZXNTdHJpbmcgfSA9IHBhcmFtcztcblxuICAgIC8vIEZpcnN0IGluaXRcbiAgICBpZiAoIXRoaXMuZ3JhcGhRTFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXNEZWVwU3RyaWN0RXF1YWwodGhpcy5wYXJzZUdyYXBoUUxDb25maWcsIHBhcnNlR3JhcGhRTENvbmZpZykgJiZcbiAgICAgIHRoaXMuZnVuY3Rpb25OYW1lc1N0cmluZyA9PT0gZnVuY3Rpb25OYW1lc1N0cmluZyAmJlxuICAgICAgaXNEZWVwU3RyaWN0RXF1YWwodGhpcy5wYXJzZUNsYXNzZXMsIHBhcnNlQ2xhc3NlcylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH07XG4iXX0=
|
|
@@ -7,13 +7,7 @@ exports.ParseGraphQLServer = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _cors = _interopRequireDefault(require("cors"));
|
|
9
9
|
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
var _graphqlUpload = require("graphql-upload");
|
|
13
|
-
|
|
14
|
-
var _expressApollo = require("apollo-server-express/dist/expressApollo");
|
|
15
|
-
|
|
16
|
-
var _graphqlPlaygroundHtml = require("@apollographql/graphql-playground-html");
|
|
10
|
+
var _node = require("@graphql-yoga/node");
|
|
17
11
|
|
|
18
12
|
var _graphql = require("graphql");
|
|
19
13
|
|
|
@@ -55,18 +49,23 @@ class ParseGraphQLServer {
|
|
|
55
49
|
});
|
|
56
50
|
}
|
|
57
51
|
|
|
58
|
-
async _getGraphQLOptions(
|
|
52
|
+
async _getGraphQLOptions() {
|
|
59
53
|
try {
|
|
60
54
|
return {
|
|
61
55
|
schema: await this.parseGraphQLSchema.load(),
|
|
62
|
-
context: {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
56
|
+
context: ({
|
|
57
|
+
req: {
|
|
58
|
+
info,
|
|
59
|
+
config,
|
|
60
|
+
auth
|
|
61
|
+
}
|
|
62
|
+
}) => ({
|
|
63
|
+
info,
|
|
64
|
+
config,
|
|
65
|
+
auth
|
|
66
|
+
}),
|
|
67
|
+
multipart: {
|
|
68
|
+
fileSize: this._transformMaxUploadSizeToBytes(this.parseServer.config.maxUploadSize || '20mb')
|
|
70
69
|
}
|
|
71
70
|
};
|
|
72
71
|
} catch (e) {
|
|
@@ -75,6 +74,19 @@ class ParseGraphQLServer {
|
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
76
|
|
|
77
|
+
async _getServer() {
|
|
78
|
+
const schemaRef = this.parseGraphQLSchema.graphQLSchema;
|
|
79
|
+
const newSchemaRef = await this.parseGraphQLSchema.load();
|
|
80
|
+
|
|
81
|
+
if (schemaRef === newSchemaRef && this._server) {
|
|
82
|
+
return this._server;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const options = await this._getGraphQLOptions();
|
|
86
|
+
this._server = (0, _node.createServer)(options);
|
|
87
|
+
return this._server;
|
|
88
|
+
}
|
|
89
|
+
|
|
78
90
|
_transformMaxUploadSizeToBytes(maxUploadSize) {
|
|
79
91
|
const unitMap = {
|
|
80
92
|
kb: 1,
|
|
@@ -89,14 +101,13 @@ class ParseGraphQLServer {
|
|
|
89
101
|
(0, _requiredParameter.default)('You must provide an Express.js app instance!');
|
|
90
102
|
}
|
|
91
103
|
|
|
92
|
-
app.use(this.config.graphQLPath, (0, _graphqlUpload.graphqlUploadExpress)({
|
|
93
|
-
maxFileSize: this._transformMaxUploadSizeToBytes(this.parseServer.config.maxUploadSize || '20mb')
|
|
94
|
-
}));
|
|
95
104
|
app.use(this.config.graphQLPath, (0, _cors.default)());
|
|
96
|
-
app.use(this.config.graphQLPath, _bodyParser.default.json());
|
|
97
105
|
app.use(this.config.graphQLPath, _middlewares.handleParseHeaders);
|
|
98
106
|
app.use(this.config.graphQLPath, _middlewares.handleParseErrors);
|
|
99
|
-
app.use(this.config.graphQLPath, (
|
|
107
|
+
app.use(this.config.graphQLPath, async (req, res) => {
|
|
108
|
+
const server = await this._getServer();
|
|
109
|
+
return server(req, res);
|
|
110
|
+
});
|
|
100
111
|
}
|
|
101
112
|
|
|
102
113
|
applyPlayground(app) {
|
|
@@ -106,14 +117,13 @@ class ParseGraphQLServer {
|
|
|
106
117
|
|
|
107
118
|
app.get(this.config.playgroundPath || (0, _requiredParameter.default)('You must provide a config.playgroundPath to applyPlayground!'), (_req, res) => {
|
|
108
119
|
res.setHeader('Content-Type', 'text/html');
|
|
109
|
-
res.write((0,
|
|
120
|
+
res.write((0, _node.renderGraphiQL)({
|
|
110
121
|
endpoint: this.config.graphQLPath,
|
|
111
|
-
version: '1.7.25',
|
|
112
122
|
subscriptionEndpoint: this.config.subscriptionsPath,
|
|
113
|
-
headers: {
|
|
123
|
+
headers: JSON.stringify({
|
|
114
124
|
'X-Parse-Application-Id': this.parseServer.config.appId,
|
|
115
125
|
'X-Parse-Master-Key': this.parseServer.config.masterKey
|
|
116
|
-
}
|
|
126
|
+
})
|
|
117
127
|
}));
|
|
118
128
|
res.end();
|
|
119
129
|
});
|
|
@@ -137,4 +147,4 @@ class ParseGraphQLServer {
|
|
|
137
147
|
}
|
|
138
148
|
|
|
139
149
|
exports.ParseGraphQLServer = ParseGraphQLServer;
|
|
140
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJuYW1lcyI6WyJQYXJzZUdyYXBoUUxTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlU2VydmVyIiwiY29uZmlnIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInJlcSIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwiaW5mbyIsImF1dGgiLCJmb3JtYXRFcnJvciIsImVycm9yIiwiZSIsInN0YWNrIiwidG9TdHJpbmciLCJfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMiLCJtYXhVcGxvYWRTaXplIiwidW5pdE1hcCIsImtiIiwibWIiLCJnYiIsIk51bWJlciIsInNsaWNlIiwiTWF0aCIsInBvdyIsInRvTG93ZXJDYXNlIiwiYXBwbHlHcmFwaFFMIiwiYXBwIiwidXNlIiwibWF4RmlsZVNpemUiLCJib2R5UGFyc2VyIiwianNvbiIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlRXJyb3JzIiwiYXBwbHlQbGF5Z3JvdW5kIiwiZ2V0IiwicGxheWdyb3VuZFBhdGgiLCJfcmVxIiwicmVzIiwic2V0SGVhZGVyIiwid3JpdGUiLCJlbmRwb2ludCIsInZlcnNpb24iLCJzdWJzY3JpcHRpb25FbmRwb2ludCIsInN1YnNjcmlwdGlvbnNQYXRoIiwiaGVhZGVycyIsIm1hc3RlcktleSIsImVuZCIsImNyZWF0ZVN1YnNjcmlwdGlvbnMiLCJzZXJ2ZXIiLCJTdWJzY3JpcHRpb25TZXJ2ZXIiLCJjcmVhdGUiLCJleGVjdXRlIiwic3Vic2NyaWJlIiwib25PcGVyYXRpb24iLCJfbWVzc2FnZSIsInBhcmFtcyIsIndlYlNvY2tldCIsIk9iamVjdCIsImFzc2lnbiIsInVwZ3JhZGVSZXEiLCJwYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsTUFBTUEsa0JBQU4sQ0FBeUI7QUFHdkJDLEVBQUFBLFdBQVcsQ0FBQ0MsV0FBRCxFQUFjQyxNQUFkLEVBQXNCO0FBQy9CLFNBQUtELFdBQUwsR0FBbUJBLFdBQVcsSUFBSSxnQ0FBa0IsMENBQWxCLENBQWxDOztBQUNBLFFBQUksQ0FBQ0MsTUFBRCxJQUFXLENBQUNBLE1BQU0sQ0FBQ0MsV0FBdkIsRUFBb0M7QUFDbEMsc0NBQWtCLHdDQUFsQjtBQUNEOztBQUNELFNBQUtELE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtFLHNCQUFMLEdBQThCLEtBQUtILFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCRSxzQkFBdEQ7QUFDQSxTQUFLQyxHQUFMLEdBQ0csS0FBS0osV0FBTCxDQUFpQkMsTUFBakIsSUFBMkIsS0FBS0QsV0FBTCxDQUFpQkMsTUFBakIsQ0FBd0JJLGdCQUFwRCxJQUF5RUMsZUFEM0U7QUFFQSxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQyxzQ0FBSixDQUF1QjtBQUMvQ0wsTUFBQUEsc0JBQXNCLEVBQUUsS0FBS0Esc0JBRGtCO0FBRS9DTSxNQUFBQSxrQkFBa0IsRUFBRSxLQUFLVCxXQUFMLENBQWlCQyxNQUFqQixDQUF3QlEsa0JBRkc7QUFHL0NMLE1BQUFBLEdBQUcsRUFBRSxLQUFLQSxHQUhxQztBQUkvQ00sTUFBQUEscUJBQXFCLEVBQUUsS0FBS1QsTUFBTCxDQUFZUyxxQkFKWTtBQUsvQ0MsTUFBQUEsS0FBSyxFQUFFLEtBQUtYLFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCVTtBQUxnQixLQUF2QixDQUExQjtBQU9EOztBQUV1QixRQUFsQkMsa0JBQWtCLENBQUNDLEdBQUQsRUFBTTtBQUM1QixRQUFJO0FBQ0YsYUFBTztBQUNMQyxRQUFBQSxNQUFNLEVBQUUsTUFBTSxLQUFLUCxrQkFBTCxDQUF3QlEsSUFBeEIsRUFEVDtBQUVMQyxRQUFBQSxPQUFPLEVBQUU7QUFDUEMsVUFBQUEsSUFBSSxFQUFFSixHQUFHLENBQUNJLElBREg7QUFFUGhCLFVBQUFBLE1BQU0sRUFBRVksR0FBRyxDQUFDWixNQUZMO0FBR1BpQixVQUFBQSxJQUFJLEVBQUVMLEdBQUcsQ0FBQ0s7QUFISCxTQUZKO0FBT0xDLFFBQUFBLFdBQVcsRUFBRUMsS0FBSyxJQUFJO0FBQ3BCO0FBQ0EsaUJBQU9BLEtBQVA7QUFDRDtBQVZJLE9BQVA7QUFZRCxLQWJELENBYUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1YsV0FBS2pCLEdBQUwsQ0FBU2dCLEtBQVQsQ0FBZUMsQ0FBQyxDQUFDQyxLQUFGLElBQVksT0FBT0QsQ0FBQyxDQUFDRSxRQUFULEtBQXNCLFVBQXRCLElBQW9DRixDQUFDLENBQUNFLFFBQUYsRUFBaEQsSUFBaUVGLENBQWhGO0FBQ0EsWUFBTUEsQ0FBTjtBQUNEO0FBQ0Y7O0FBRURHLEVBQUFBLDhCQUE4QixDQUFDQyxhQUFELEVBQWdCO0FBQzVDLFVBQU1DLE9BQU8sR0FBRztBQUNkQyxNQUFBQSxFQUFFLEVBQUUsQ0FEVTtBQUVkQyxNQUFBQSxFQUFFLEVBQUUsQ0FGVTtBQUdkQyxNQUFBQSxFQUFFLEVBQUU7QUFIVSxLQUFoQjtBQU1BLFdBQ0VDLE1BQU0sQ0FBQ0wsYUFBYSxDQUFDTSxLQUFkLENBQW9CLENBQXBCLEVBQXVCLENBQUMsQ0FBeEIsQ0FBRCxDQUFOLEdBQ0FDLElBQUksQ0FBQ0MsR0FBTCxDQUFTLElBQVQsRUFBZVAsT0FBTyxDQUFDRCxhQUFhLENBQUNNLEtBQWQsQ0FBb0IsQ0FBQyxDQUFyQixFQUF3QkcsV0FBeEIsRUFBRCxDQUF0QixDQUZGO0FBSUQ7O0FBRURDLEVBQUFBLFlBQVksQ0FBQ0MsR0FBRCxFQUFNO0FBQ2hCLFFBQUksQ0FBQ0EsR0FBRCxJQUFRLENBQUNBLEdBQUcsQ0FBQ0MsR0FBakIsRUFBc0I7QUFDcEIsc0NBQWtCLDhDQUFsQjtBQUNEOztBQUVERCxJQUFBQSxHQUFHLENBQUNDLEdBQUosQ0FDRSxLQUFLcEMsTUFBTCxDQUFZQyxXQURkLEVBRUUseUNBQXFCO0FBQ25Cb0MsTUFBQUEsV0FBVyxFQUFFLEtBQUtkLDhCQUFMLENBQ1gsS0FBS3hCLFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCd0IsYUFBeEIsSUFBeUMsTUFEOUI7QUFETSxLQUFyQixDQUZGO0FBUUFXLElBQUFBLEdBQUcsQ0FBQ0MsR0FBSixDQUFRLEtBQUtwQyxNQUFMLENBQVlDLFdBQXBCLEVBQWlDLG9CQUFqQztBQUNBa0MsSUFBQUEsR0FBRyxDQUFDQyxHQUFKLENBQVEsS0FBS3BDLE1BQUwsQ0FBWUMsV0FBcEIsRUFBaUNxQyxvQkFBV0MsSUFBWCxFQUFqQztBQUNBSixJQUFBQSxHQUFHLENBQUNDLEdBQUosQ0FBUSxLQUFLcEMsTUFBTCxDQUFZQyxXQUFwQixFQUFpQ3VDLCtCQUFqQztBQUNBTCxJQUFBQSxHQUFHLENBQUNDLEdBQUosQ0FBUSxLQUFLcEMsTUFBTCxDQUFZQyxXQUFwQixFQUFpQ3dDLDhCQUFqQztBQUNBTixJQUFBQSxHQUFHLENBQUNDLEdBQUosQ0FDRSxLQUFLcEMsTUFBTCxDQUFZQyxXQURkLEVBRUUsbUNBQWUsTUFBTVcsR0FBTixJQUFhLE1BQU0sS0FBS0Qsa0JBQUwsQ0FBd0JDLEdBQXhCLENBQWxDLENBRkY7QUFJRDs7QUFFRDhCLEVBQUFBLGVBQWUsQ0FBQ1AsR0FBRCxFQUFNO0FBQ25CLFFBQUksQ0FBQ0EsR0FBRCxJQUFRLENBQUNBLEdBQUcsQ0FBQ1EsR0FBakIsRUFBc0I7QUFDcEIsc0NBQWtCLDhDQUFsQjtBQUNEOztBQUNEUixJQUFBQSxHQUFHLENBQUNRLEdBQUosQ0FDRSxLQUFLM0MsTUFBTCxDQUFZNEMsY0FBWixJQUNFLGdDQUFrQiw4REFBbEIsQ0FGSixFQUdFLENBQUNDLElBQUQsRUFBT0MsR0FBUCxLQUFlO0FBQ2JBLE1BQUFBLEdBQUcsQ0FBQ0MsU0FBSixDQUFjLGNBQWQsRUFBOEIsV0FBOUI7QUFDQUQsTUFBQUEsR0FBRyxDQUFDRSxLQUFKLENBQ0UsaURBQXFCO0FBQ25CQyxRQUFBQSxRQUFRLEVBQUUsS0FBS2pELE1BQUwsQ0FBWUMsV0FESDtBQUVuQmlELFFBQUFBLE9BQU8sRUFBRSxRQUZVO0FBR25CQyxRQUFBQSxvQkFBb0IsRUFBRSxLQUFLbkQsTUFBTCxDQUFZb0QsaUJBSGY7QUFJbkJDLFFBQUFBLE9BQU8sRUFBRTtBQUNQLG9DQUEwQixLQUFLdEQsV0FBTCxDQUFpQkMsTUFBakIsQ0FBd0JVLEtBRDNDO0FBRVAsZ0NBQXNCLEtBQUtYLFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCc0Q7QUFGdkM7QUFKVSxPQUFyQixDQURGO0FBV0FSLE1BQUFBLEdBQUcsQ0FBQ1MsR0FBSjtBQUNELEtBakJIO0FBbUJEOztBQUVEQyxFQUFBQSxtQkFBbUIsQ0FBQ0MsTUFBRCxFQUFTO0FBQzFCQyxpREFBbUJDLE1BQW5CLENBQ0U7QUFDRUMsTUFBQUEsT0FBTyxFQUFQQSxnQkFERjtBQUVFQyxNQUFBQSxTQUFTLEVBQVRBLGtCQUZGO0FBR0VDLE1BQUFBLFdBQVcsRUFBRSxPQUFPQyxRQUFQLEVBQWlCQyxNQUFqQixFQUF5QkMsU0FBekIsS0FDWEMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkgsTUFBbEIsRUFBMEIsTUFBTSxLQUFLckQsa0JBQUwsQ0FBd0JzRCxTQUFTLENBQUNHLFVBQWxDLENBQWhDO0FBSkosS0FERixFQU9FO0FBQ0VYLE1BQUFBLE1BREY7QUFFRVksTUFBQUEsSUFBSSxFQUNGLEtBQUtyRSxNQUFMLENBQVlvRCxpQkFBWixJQUNBLGdDQUFrQixxRUFBbEI7QUFKSixLQVBGO0FBY0Q7O0FBRURrQixFQUFBQSxnQkFBZ0IsQ0FBQ0MsYUFBRCxFQUE2QztBQUMzRCxXQUFPLEtBQUtyRSxzQkFBTCxDQUE0QnNFLG1CQUE1QixDQUFnREQsYUFBaEQsQ0FBUDtBQUNEOztBQXpIc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgYm9keVBhcnNlciBmcm9tICdib2R5LXBhcnNlcic7XG5pbXBvcnQgeyBncmFwaHFsVXBsb2FkRXhwcmVzcyB9IGZyb20gJ2dyYXBocWwtdXBsb2FkJztcbmltcG9ydCB7IGdyYXBocWxFeHByZXNzIH0gZnJvbSAnYXBvbGxvLXNlcnZlci1leHByZXNzL2Rpc3QvZXhwcmVzc0Fwb2xsbyc7XG5pbXBvcnQgeyByZW5kZXJQbGF5Z3JvdW5kUGFnZSB9IGZyb20gJ0BhcG9sbG9ncmFwaHFsL2dyYXBocWwtcGxheWdyb3VuZC1odG1sJztcbmltcG9ydCB7IGV4ZWN1dGUsIHN1YnNjcmliZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uU2VydmVyIH0gZnJvbSAnc3Vic2NyaXB0aW9ucy10cmFuc3BvcnQtd3MnO1xuaW1wb3J0IHsgaGFuZGxlUGFyc2VFcnJvcnMsIGhhbmRsZVBhcnNlSGVhZGVycyB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucyhyZXEpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBpbmZvOiByZXEuaW5mbyxcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgYXV0aDogcmVxLmF1dGgsXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdEVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQWxsb3cgdG8gY29uc29sZS5sb2cgaGVyZSB0byBkZWJ1Z1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoZS5zdGFjayB8fCAodHlwZW9mIGUudG9TdHJpbmcgPT09ICdmdW5jdGlvbicgJiYgZS50b1N0cmluZygpKSB8fCBlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCB1bml0TWFwID0ge1xuICAgICAga2I6IDEsXG4gICAgICBtYjogMixcbiAgICAgIGdiOiAzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyKG1heFVwbG9hZFNpemUuc2xpY2UoMCwgLTIpKSAqXG4gICAgICBNYXRoLnBvdygxMDI0LCB1bml0TWFwW21heFVwbG9hZFNpemUuc2xpY2UoLTIpLnRvTG93ZXJDYXNlKCldKVxuICAgICk7XG4gIH1cblxuICBhcHBseUdyYXBoUUwoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC51c2UpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cblxuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxVcGxvYWRFeHByZXNzKHtcbiAgICAgICAgbWF4RmlsZVNpemU6IHRoaXMuX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKFxuICAgICAgICAgIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1heFVwbG9hZFNpemUgfHwgJzIwbWInXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgY29yc01pZGRsZXdhcmUoKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgYm9keVBhcnNlci5qc29uKCkpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlSGVhZGVycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VFcnJvcnMpO1xuICAgIGFwcC51c2UoXG4gICAgICB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCxcbiAgICAgIGdyYXBocWxFeHByZXNzKGFzeW5jIHJlcSA9PiBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyhyZXEpKVxuICAgICk7XG4gIH1cblxuICBhcHBseVBsYXlncm91bmQoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC5nZXQpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cbiAgICBhcHAuZ2V0KFxuICAgICAgdGhpcy5jb25maWcucGxheWdyb3VuZFBhdGggfHxcbiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcucGxheWdyb3VuZFBhdGggdG8gYXBwbHlQbGF5Z3JvdW5kIScpLFxuICAgICAgKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgIHJlcy53cml0ZShcbiAgICAgICAgICByZW5kZXJQbGF5Z3JvdW5kUGFnZSh7XG4gICAgICAgICAgICBlbmRwb2ludDogdGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsXG4gICAgICAgICAgICB2ZXJzaW9uOiAnMS43LjI1JyxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbkVuZHBvaW50OiB0aGlzLmNvbmZpZy5zdWJzY3JpcHRpb25zUGF0aCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICAgICAgICAgICAgJ1gtUGFyc2UtTWFzdGVyLUtleSc6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLm1hc3RlcktleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTdWJzY3JpcHRpb25zKHNlcnZlcikge1xuICAgIFN1YnNjcmlwdGlvblNlcnZlci5jcmVhdGUoXG4gICAgICB7XG4gICAgICAgIGV4ZWN1dGUsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgb25PcGVyYXRpb246IGFzeW5jIChfbWVzc2FnZSwgcGFyYW1zLCB3ZWJTb2NrZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyh3ZWJTb2NrZXQudXBncmFkZVJlcSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwYXRoOlxuICAgICAgICAgIHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoIHx8XG4gICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuc3Vic2NyaXB0aW9uc1BhdGggdG8gY3JlYXRlU3Vic2NyaXB0aW9ucyEnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXX0=
|
|
150
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJuYW1lcyI6WyJQYXJzZUdyYXBoUUxTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBhcnNlU2VydmVyIiwiY29uZmlnIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsImF1dGgiLCJtdWx0aXBhcnQiLCJmaWxlU2l6ZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJlIiwiZXJyb3IiLCJzdGFjayIsInRvU3RyaW5nIiwiX2dldFNlcnZlciIsInNjaGVtYVJlZiIsImdyYXBoUUxTY2hlbWEiLCJuZXdTY2hlbWFSZWYiLCJfc2VydmVyIiwib3B0aW9ucyIsInVuaXRNYXAiLCJrYiIsIm1iIiwiZ2IiLCJOdW1iZXIiLCJzbGljZSIsIk1hdGgiLCJwb3ciLCJ0b0xvd2VyQ2FzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsInVzZSIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlRXJyb3JzIiwicmVzIiwic2VydmVyIiwiYXBwbHlQbGF5Z3JvdW5kIiwiZ2V0IiwicGxheWdyb3VuZFBhdGgiLCJfcmVxIiwic2V0SGVhZGVyIiwid3JpdGUiLCJlbmRwb2ludCIsInN1YnNjcmlwdGlvbkVuZHBvaW50Iiwic3Vic2NyaXB0aW9uc1BhdGgiLCJoZWFkZXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hc3RlcktleSIsImVuZCIsImNyZWF0ZVN1YnNjcmlwdGlvbnMiLCJTdWJzY3JpcHRpb25TZXJ2ZXIiLCJjcmVhdGUiLCJleGVjdXRlIiwic3Vic2NyaWJlIiwib25PcGVyYXRpb24iLCJfbWVzc2FnZSIsInBhcmFtcyIsIndlYlNvY2tldCIsIk9iamVjdCIsImFzc2lnbiIsInVwZ3JhZGVSZXEiLCJwYXRoIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsTUFBTUEsa0JBQU4sQ0FBeUI7QUFHdkJDLEVBQUFBLFdBQVcsQ0FBQ0MsV0FBRCxFQUFjQyxNQUFkLEVBQXNCO0FBQy9CLFNBQUtELFdBQUwsR0FBbUJBLFdBQVcsSUFBSSxnQ0FBa0IsMENBQWxCLENBQWxDOztBQUNBLFFBQUksQ0FBQ0MsTUFBRCxJQUFXLENBQUNBLE1BQU0sQ0FBQ0MsV0FBdkIsRUFBb0M7QUFDbEMsc0NBQWtCLHdDQUFsQjtBQUNEOztBQUNELFNBQUtELE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtFLHNCQUFMLEdBQThCLEtBQUtILFdBQUwsQ0FBaUJDLE1BQWpCLENBQXdCRSxzQkFBdEQ7QUFDQSxTQUFLQyxHQUFMLEdBQ0csS0FBS0osV0FBTCxDQUFpQkMsTUFBakIsSUFBMkIsS0FBS0QsV0FBTCxDQUFpQkMsTUFBakIsQ0FBd0JJLGdCQUFwRCxJQUF5RUMsZUFEM0U7QUFFQSxTQUFLQyxrQkFBTCxHQUEwQixJQUFJQyxzQ0FBSixDQUF1QjtBQUMvQ0wsTUFBQUEsc0JBQXNCLEVBQUUsS0FBS0Esc0JBRGtCO0FBRS9DTSxNQUFBQSxrQkFBa0IsRUFBRSxLQUFLVCxXQUFMLENBQWlCQyxNQUFqQixDQUF3QlEsa0JBRkc7QUFHL0NMLE1BQUFBLEdBQUcsRUFBRSxLQUFLQSxHQUhxQztBQUkvQ00sTUFBQUEscUJBQXFCLEVBQUUsS0FBS1QsTUFBTCxDQUFZUyxxQkFKWTtBQUsvQ0MsTUFB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QWQsRUFBa0JILE1BQWxCLEVBQTBCLE1BQU0sS0FBSzFELGtCQUFMLENBQXdCMkQsU0FBUyxDQUFDRyxVQUFsQyxDQUFoQztBQUpKLEtBREYsRUFPRTtBQUNFMUIsTUFBQUEsTUFERjtBQUVFMkIsTUFBQUEsSUFBSSxFQUNGLEtBQUsxRSxNQUFMLENBQVl3RCxpQkFBWixJQUNBLGdDQUFrQixxRUFBbEI7QUFKSixLQVBGO0FBY0Q7O0FBRURtQixFQUFBQSxnQkFBZ0IsQ0FBQ0MsYUFBRCxFQUE2QztBQUMzRCxXQUFPLEtBQUsxRSxzQkFBTCxDQUE0QjJFLG1CQUE1QixDQUFnREQsYUFBaEQsQ0FBUDtBQUNEOztBQTNIc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29yc01pZGRsZXdhcmUgZnJvbSAnY29ycyc7XG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIsIHJlbmRlckdyYXBoaVFMIH0gZnJvbSAnQGdyYXBocWwteW9nYS9ub2RlJztcbmltcG9ydCB7IGV4ZWN1dGUsIHN1YnNjcmliZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uU2VydmVyIH0gZnJvbSAnc3Vic2NyaXB0aW9ucy10cmFuc3BvcnQtd3MnO1xuaW1wb3J0IHsgaGFuZGxlUGFyc2VFcnJvcnMsIGhhbmRsZVBhcnNlSGVhZGVycyB9IGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCByZXF1aXJlZFBhcmFtZXRlciBmcm9tICcuLi9yZXF1aXJlZFBhcmFtZXRlcic7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgUGFyc2VHcmFwaFFMU2NoZW1hIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6ICh7IHJlcTogeyBpbmZvLCBjb25maWcsIGF1dGggfSB9KSA9PiAoe1xuICAgICAgICAgIGluZm8sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgIH0pLFxuICAgICAgICBtdWx0aXBhcnQ6IHtcbiAgICAgICAgICBmaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgICB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXhVcGxvYWRTaXplIHx8ICcyMG1iJ1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGUuc3RhY2sgfHwgKHR5cGVvZiBlLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIGUudG9TdHJpbmcoKSkgfHwgZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9nZXRTZXJ2ZXIoKSB7XG4gICAgY29uc3Qgc2NoZW1hUmVmID0gdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEuZ3JhcGhRTFNjaGVtYTtcbiAgICBjb25zdCBuZXdTY2hlbWFSZWYgPSBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCk7XG4gICAgaWYgKHNjaGVtYVJlZiA9PT0gbmV3U2NoZW1hUmVmICYmIHRoaXMuX3NlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKCk7XG4gICAgdGhpcy5fc2VydmVyID0gY3JlYXRlU2VydmVyKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIGFwcGx5R3JhcGhRTChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLnVzZSkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuXG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgY29yc01pZGRsZXdhcmUoKSk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VIZWFkZXJzKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLmdldChcbiAgICAgIHRoaXMuY29uZmlnLnBsYXlncm91bmRQYXRoIHx8XG4gICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgcmVuZGVyR3JhcGhpUUwoe1xuICAgICAgICAgICAgZW5kcG9pbnQ6IHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uRW5kcG9pbnQ6IHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoLFxuICAgICAgICAgICAgaGVhZGVyczogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgICAgICAgICAgICAnWC1QYXJzZS1NYXN0ZXItS2V5JzogdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTdWJzY3JpcHRpb25zKHNlcnZlcikge1xuICAgIFN1YnNjcmlwdGlvblNlcnZlci5jcmVhdGUoXG4gICAgICB7XG4gICAgICAgIGV4ZWN1dGUsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgb25PcGVyYXRpb246IGFzeW5jIChfbWVzc2FnZSwgcGFyYW1zLCB3ZWJTb2NrZXQpID0+XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCBhd2FpdCB0aGlzLl9nZXRHcmFwaFFMT3B0aW9ucyh3ZWJTb2NrZXQudXBncmFkZVJlcSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBwYXRoOlxuICAgICAgICAgIHRoaXMuY29uZmlnLnN1YnNjcmlwdGlvbnNQYXRoIHx8XG4gICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuc3Vic2NyaXB0aW9uc1BhdGggdG8gY3JlYXRlU3Vic2NyaXB0aW9ucyEnKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXX0=
|
|
@@ -53,7 +53,7 @@ const getObject = async (className, objectId, keys, include, readPreference, inc
|
|
|
53
53
|
options.keys = keys;
|
|
54
54
|
}
|
|
55
55
|
} catch (e) {
|
|
56
|
-
console.
|
|
56
|
+
console.error(e);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
if (include) {
|
|
@@ -300,4 +300,4 @@ const calculateSkipAndLimit = (skipInput, first, after, last, before, maxLimit)
|
|
|
300
300
|
};
|
|
301
301
|
|
|
302
302
|
exports.calculateSkipAndLimit = calculateSkipAndLimit;
|
|
303
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvb2JqZWN0c1F1ZXJpZXMuanMiXSwibmFtZXMiOlsibmVlZFRvR2V0QWxsS2V5cyIsImZpZWxkcyIsImtleXMiLCJwYXJzZUNsYXNzZXMiLCJzcGxpdCIsInNvbWUiLCJrZXlOYW1lIiwia2V5IiwidHlwZSIsInN1YkNsYXNzIiwidGFyZ2V0Q2xhc3MiLCJnZXRPYmplY3QiLCJjbGFzc05hbWUiLCJvYmplY3RJZCIsImluY2x1ZGUiLCJyZWFkUHJlZmVyZW5jZSIsImluY2x1ZGVSZWFkUHJlZmVyZW5jZSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwib3B0aW9ucyIsImUiLCJjb25zb2xlIiwibG9nIiwicmVzcG9uc2UiLCJyZXN0IiwiZ2V0IiwiY2xpZW50U0RLIiwiY29udGV4dCIsInJlc3VsdHMiLCJsZW5ndGgiLCJQYXJzZSIsIkVycm9yIiwiT0JKRUNUX05PVF9GT1VORCIsIm9iamVjdCIsInNlc3Npb25Ub2tlbiIsImZpbmRPYmplY3RzIiwid2hlcmUiLCJvcmRlciIsInNraXBJbnB1dCIsImZpcnN0IiwiYWZ0ZXIiLCJsYXN0IiwiYmVmb3JlIiwiaW5jbHVkZUFsbCIsInN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UiLCJzZWxlY3RlZEZpZWxkcyIsInNraXBBbmRMaW1pdENhbGN1bGF0aW9uIiwiY2FsY3VsYXRlU2tpcEFuZExpbWl0IiwibWF4TGltaXQiLCJza2lwIiwibGltaXQiLCJuZWVkVG9QcmVDb3VudCIsInByZUNvdW50IiwidW5kZWZpbmVkIiwicHJlQ291bnRPcHRpb25zIiwiY291bnQiLCJPYmplY3QiLCJmaW5kIiwiZmllbGQiLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJmaW5kUmVzdWx0IiwiZWRnZXMiLCJwYWdlSW5mbyIsIm1hcCIsInJlc3VsdCIsImluZGV4IiwiY3Vyc29yIiwibm9kZSIsImhhc1ByZXZpb3VzUGFnZSIsInN0YXJ0Q3Vyc29yIiwiZW5kQ3Vyc29yIiwiaGFzTmV4dFBhZ2UiLCJJTlZBTElEX1FVRVJZIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQTs7QUFDQTtBQUNBLE1BQU1BLGdCQUFnQixHQUFHLENBQUNDLE1BQUQsRUFBU0MsSUFBVCxFQUFlQyxZQUFmLEtBQ3ZCRCxJQUFJLEdBQ0FBLElBQUksQ0FBQ0UsS0FBTCxDQUFXLEdBQVgsRUFBZ0JDLElBQWhCLENBQXFCQyxPQUFPLElBQUk7QUFDOUIsUUFBTUMsR0FBRyxHQUFHRCxPQUFPLENBQUNGLEtBQVIsQ0FBYyxHQUFkLENBQVo7O0FBQ0EsTUFBSUgsTUFBTSxDQUFDTSxHQUFHLENBQUMsQ0FBRCxDQUFKLENBQVYsRUFBb0I7QUFDbEIsUUFBSU4sTUFBTSxDQUFDTSxHQUFHLENBQUMsQ0FBRCxDQUFKLENBQU4sQ0FBZUMsSUFBZixLQUF3QixVQUE1QixFQUF3QyxPQUFPLEtBQVA7O0FBQ3hDLFFBQUlQLE1BQU0sQ0FBQ00sR0FBRyxDQUFDLENBQUQsQ0FBSixDQUFOLENBQWVDLElBQWYsS0FBd0IsU0FBNUIsRUFBdUM7QUFDckMsWUFBTUMsUUFBUSxHQUFHTixZQUFZLENBQUNGLE1BQU0sQ0FBQ00sR0FBRyxDQUFDLENBQUQsQ0FBSixDQUFOLENBQWVHLFdBQWhCLENBQTdCOztBQUNBLFVBQUlELFFBQVEsSUFBSUEsUUFBUSxDQUFDUixNQUFULENBQWdCTSxHQUFHLENBQUMsQ0FBRCxDQUFuQixDQUFoQixFQUF5QztBQUN2QztBQUNBLGVBQU8sS0FBUDtBQUNEO0FBQ0YsS0FORCxNQU1PLElBQ0wsQ0FBQ0EsR0FBRyxDQUFDLENBQUQsQ0FBSixJQUNBTixNQUFNLENBQUNNLEdBQUcsQ0FBQyxDQUFELENBQUosQ0FBTixDQUFlQyxJQUFmLEtBQXdCLE9BRHhCLElBRUFQLE1BQU0sQ0FBQ00sR0FBRyxDQUFDLENBQUQsQ0FBSixDQUFOLENBQWVDLElBQWYsS0FBd0IsUUFIbkIsRUFJTDtBQUNBO0FBQ0EsYUFBTyxLQUFQO0FBQ0Q7QUFDRixHQWxCNkIsQ0FtQjlCOzs7QUFDQSxTQUFPLElBQVA7QUFDRCxDQXJCRCxDQURBLEdBdUJBLElBeEJOO0FBeUJBOzs7OztBQUVBLE1BQU1HLFNBQVMsR0FBRyxPQUNoQkMsU0FEZ0IsRUFFaEJDLFFBRmdCLEVBR2hCWCxJQUhnQixFQUloQlksT0FKZ0IsRUFLaEJDLGNBTGdCLEVBTWhCQyxxQkFOZ0IsRUFPaEJDLE1BUGdCLEVBUWhCQyxJQVJnQixFQVNoQkMsSUFUZ0IsRUFVaEJoQixZQVZnQixLQVdiO0FBQ0gsUUFBTWlCLE9BQU8sR0FBRyxFQUFoQjs7QUFDQSxNQUFJO0FBQ0YsUUFBSSxDQUFDcEIsZ0JBQWdCLENBQUNHLFlBQVksQ0FBQ1MsU0FBRCxDQUFaLENBQXdCWCxNQUF6QixFQUFpQ0MsSUFBakMsRUFBdUNDLFlBQXZDLENBQXJCLEVBQTJFO0FBQ3pFaUIsTUFBQUEsT0FBTyxDQUFDbEIsSUFBUixHQUFlQSxJQUFmO0FBQ0Q7QUFDRixHQUpELENBSUUsT0FBT21CLENBQVAsRUFBVTtBQUNWQyxJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsQ0FBWjtBQUNEOztBQUNELE1BQUlQLE9BQUosRUFBYTtBQUNYTSxJQUFBQSxPQUFPLENBQUNOLE9BQVIsR0FBa0JBLE9BQWxCOztBQUNBLFFBQUlFLHFCQUFKLEVBQTJCO0FBQ3pCSSxNQUFBQSxPQUFPLENBQUNKLHFCQUFSLEdBQWdDQSxxQkFBaEM7QUFDRDtBQUNGOztBQUNELE1BQUlELGNBQUosRUFBb0I7QUFDbEJLLElBQUFBLE9BQU8sQ0FBQ0wsY0FBUixHQUF5QkEsY0FBekI7QUFDRDs7QUFFRCxRQUFNUyxRQUFRLEdBQUcsTUFBTUMsY0FBS0MsR0FBTCxDQUNyQlQsTUFEcUIsRUFFckJDLElBRnFCLEVBR3JCTixTQUhxQixFQUlyQkMsUUFKcUIsRUFLckJPLE9BTHFCLEVBTXJCRCxJQUFJLENBQUNRLFNBTmdCLEVBT3JCUixJQUFJLENBQUNTLE9BUGdCLENBQXZCOztBQVVBLE1BQUksQ0FBQ0osUUFBUSxDQUFDSyxPQUFWLElBQXFCTCxRQUFRLENBQUNLLE9BQVQsQ0FBaUJDLE1BQWpCLElBQTJCLENBQXBELEVBQXVEO0FBQ3JELFVBQU0sSUFBSUMsY0FBTUMsS0FBVixDQUFnQkQsY0FBTUMsS0FBTixDQUFZQyxnQkFBNUIsRUFBOEMsbUJBQTlDLENBQU47QUFDRDs7QUFFRCxRQUFNQyxNQUFNLEdBQUdWLFFBQVEsQ0FBQ0ssT0FBVCxDQUFpQixDQUFqQixDQUFmOztBQUNBLE1BQUlqQixTQUFTLEtBQUssT0FBbEIsRUFBMkI7QUFDekIsV0FBT3NCLE1BQU0sQ0FBQ0MsWUFBZDtBQUNEOztBQUNELFNBQU9ELE1BQVA7QUFDRCxDQWpERDs7OztBQW1EQSxNQUFNRSxXQUFXLEdBQUcsT0FDbEJ4QixTQURrQixFQUVsQnlCLEtBRmtCLEVBR2xCQyxLQUhrQixFQUlsQkMsU0FKa0IsRUFLbEJDLEtBTGtCLEVBTWxCQyxLQU5rQixFQU9sQkMsSUFQa0IsRUFRbEJDLE1BUmtCLEVBU2xCekMsSUFUa0IsRUFVbEJZLE9BVmtCLEVBV2xCOEIsVUFYa0IsRUFZbEI3QixjQVprQixFQWFsQkMscUJBYmtCLEVBY2xCNkIsc0JBZGtCLEVBZWxCNUIsTUFma0IsRUFnQmxCQyxJQWhCa0IsRUFpQmxCQyxJQWpCa0IsRUFrQmxCMkIsY0FsQmtCLEVBbUJsQjNDLFlBbkJrQixLQW9CZjtBQUNILE1BQUksQ0FBQ2tDLEtBQUwsRUFBWTtBQUNWQSxJQUFBQSxLQUFLLEdBQUcsRUFBUjtBQUNEOztBQUNELHlDQUEyQkEsS0FBM0IsRUFBa0N6QixTQUFsQyxFQUE2Q1QsWUFBN0M7QUFDQSxRQUFNNEMsdUJBQXVCLEdBQUdDLHFCQUFxQixDQUNuRFQsU0FEbUQsRUFFbkRDLEtBRm1ELEVBR25EQyxLQUhtRCxFQUluREMsSUFKbUQsRUFLbkRDLE1BTG1ELEVBTW5EMUIsTUFBTSxDQUFDZ0MsUUFONEMsQ0FBckQ7QUFRQSxNQUFJO0FBQUVDLElBQUFBO0FBQUYsTUFBV0gsdUJBQWY7QUFDQSxRQUFNO0FBQUVJLElBQUFBLEtBQUY7QUFBU0MsSUFBQUE7QUFBVCxNQUE0QkwsdUJBQWxDO0FBQ0EsTUFBSU0sUUFBUSxHQUFHQyxTQUFmOztBQUNBLE1BQUlGLGNBQUosRUFBb0I7QUFDbEIsVUFBTUcsZUFBZSxHQUFHO0FBQ3RCSixNQUFBQSxLQUFLLEVBQUUsQ0FEZTtBQUV0QkssTUFBQUEsS0FBSyxFQUFFO0FBRmUsS0FBeEI7O0FBSUEsUUFBSXpDLGNBQUosRUFBb0I7QUFDbEJ3QyxNQUFBQSxlQUFlLENBQUN4QyxjQUFoQixHQUFpQ0EsY0FBakM7QUFDRDs7QUFDRCxRQUFJMEMsTUFBTSxDQUFDdkQsSUFBUCxDQUFZbUMsS0FBWixFQUFtQlAsTUFBbkIsR0FBNEIsQ0FBNUIsSUFBaUNlLHNCQUFyQyxFQUE2RDtBQUMzRFUsTUFBQUEsZUFBZSxDQUFDVixzQkFBaEIsR0FBeUNBLHNCQUF6QztBQUNEOztBQUNEUSxJQUFBQSxRQUFRLEdBQUcsQ0FDVCxNQUFNNUIsY0FBS2lDLElBQUwsQ0FBVXpDLE1BQVYsRUFBa0JDLElBQWxCLEVBQXdCTixTQUF4QixFQUFtQ3lCLEtBQW5DLEVBQTBDa0IsZUFBMUMsRUFBMkRwQyxJQUFJLENBQUNRLFNBQWhFLEVBQTJFUixJQUFJLENBQUNTLE9BQWhGLENBREcsRUFFVDRCLEtBRkY7O0FBR0EsUUFBSSxDQUFDTixJQUFJLElBQUksQ0FBVCxJQUFjQyxLQUFkLEdBQXNCRSxRQUExQixFQUFvQztBQUNsQ0gsTUFBQUEsSUFBSSxHQUFHRyxRQUFRLEdBQUdGLEtBQWxCO0FBQ0Q7QUFDRjs7QUFFRCxRQUFNL0IsT0FBTyxHQUFHLEVBQWhCOztBQUVBLE1BQUkwQixjQUFjLENBQUNZLElBQWYsQ0FBb0JDLEtBQUssSUFBSUEsS0FBSyxDQUFDQyxVQUFOLENBQWlCLFFBQWpCLEtBQThCRCxLQUFLLENBQUNDLFVBQU4sQ0FBaUIsV0FBakIsQ0FBM0QsQ0FBSixFQUErRjtBQUM3RixRQUFJVCxLQUFLLElBQUlBLEtBQUssS0FBSyxDQUF2QixFQUEwQjtBQUN4Qi9CLE1BQUFBLE9BQU8sQ0FBQytCLEtBQVIsR0FBZ0JBLEtBQWhCO0FBQ0QsS0FGRCxNQUVPO0FBQ0wvQixNQUFBQSxPQUFPLENBQUMrQixLQUFSLEdBQWdCLEdBQWhCO0FBQ0Q7O0FBQ0QsUUFBSS9CLE9BQU8sQ0FBQytCLEtBQVIsS0FBa0IsQ0FBdEIsRUFBeUI7QUFDdkIsVUFBSWIsS0FBSixFQUFXO0FBQ1RsQixRQUFBQSxPQUFPLENBQUNrQixLQUFSLEdBQWdCQSxLQUFoQjtBQUNEOztBQUNELFVBQUlZLElBQUosRUFBVTtBQUNSOUIsUUFBQUEsT0FBTyxDQUFDOEIsSUFBUixHQUFlQSxJQUFmO0FBQ0Q7O0FBQ0QsVUFBSWpDLE1BQU0sQ0FBQ2dDLFFBQVAsSUFBbUI3QixPQUFPLENBQUMrQixLQUFSLEdBQWdCbEMsTUFBTSxDQUFDZ0MsUUFBOUMsRUFBd0Q7QUFDdEQ7QUFDQTdCLFFBQUFBLE9BQU8sQ0FBQytCLEtBQVIsR0FBZ0JsQyxNQUFNLENBQUNnQyxRQUF2QjtBQUNEOztBQUNELFVBQUksQ0FBQ2pELGdCQUFnQixDQUFDRyxZQUFZLENBQUNTLFNBQUQsQ0FBWixDQUF3QlgsTUFBekIsRUFBaUNDLElBQWpDLEVBQXVDQyxZQUF2QyxDQUFyQixFQUEyRTtBQUN6RWlCLFFBQUFBLE9BQU8sQ0FBQ2xCLElBQVIsR0FBZUEsSUFBZjtBQUNEOztBQUNELFVBQUkwQyxVQUFVLEtBQUssSUFBbkIsRUFBeUI7QUFDdkJ4QixRQUFBQSxPQUFPLENBQUN3QixVQUFSLEdBQXFCQSxVQUFyQjtBQUNEOztBQUNELFVBQUksQ0FBQ3hCLE9BQU8sQ0FBQ3dCLFVBQVQsSUFBdUI5QixPQUEzQixFQUFvQztBQUNsQ00sUUFBQUEsT0FBTyxDQUFDTixPQUFSLEdBQWtCQSxPQUFsQjtBQUNEOztBQUNELFVBQUksQ0FBQ00sT0FBTyxDQUFDd0IsVUFBUixJQUFzQnhCLE9BQU8sQ0FBQ04sT0FBL0IsS0FBMkNFLHFCQUEvQyxFQUFzRTtBQUNwRUksUUFBQUEsT0FBTyxDQUFDSixxQkFBUixHQUFnQ0EscUJBQWhDO0FBQ0Q7QUFDRjtBQUNGLEdBOUJELE1BOEJPO0FBQ0xJLElBQUFBLE9BQU8sQ0FBQytCLEtBQVIsR0FBZ0IsQ0FBaEI7QUFDRDs7QUFFRCxNQUNFLENBQUNMLGNBQWMsQ0FBQ2UsUUFBZixDQUF3QixPQUF4QixLQUNDZixjQUFjLENBQUNlLFFBQWYsQ0FBd0IsMEJBQXhCLENBREQsSUFFQ2YsY0FBYyxDQUFDZSxRQUFmLENBQXdCLHNCQUF4QixDQUZGLEtBR0EsQ0FBQ1QsY0FKSCxFQUtFO0FBQ0FoQyxJQUFBQSxPQUFPLENBQUNvQyxLQUFSLEdBQWdCLElBQWhCO0FBQ0Q7O0FBRUQsTUFBSXpDLGNBQUosRUFBb0I7QUFDbEJLLElBQUFBLE9BQU8sQ0FBQ0wsY0FBUixHQUF5QkEsY0FBekI7QUFDRDs7QUFDRCxNQUFJMEMsTUFBTSxDQUFDdkQsSUFBUCxDQUFZbUMsS0FBWixFQUFtQlAsTUFBbkIsR0FBNEIsQ0FBNUIsSUFBaUNlLHNCQUFyQyxFQUE2RDtBQUMzRHpCLElBQUFBLE9BQU8sQ0FBQ3lCLHNCQUFSLEdBQWlDQSxzQkFBakM7QUFDRDs7QUFFRCxNQUFJaEIsT0FBSixFQUFhMkIsS0FBYjs7QUFDQSxNQUFJcEMsT0FBTyxDQUFDb0MsS0FBUixJQUFpQixDQUFDcEMsT0FBTyxDQUFDK0IsS0FBMUIsSUFBb0MvQixPQUFPLENBQUMrQixLQUFSLElBQWlCL0IsT0FBTyxDQUFDK0IsS0FBUixHQUFnQixDQUF6RSxFQUE2RTtBQUMzRSxVQUFNVyxVQUFVLEdBQUcsTUFBTXJDLGNBQUtpQyxJQUFMLENBQ3ZCekMsTUFEdUIsRUFFdkJDLElBRnVCLEVBR3ZCTixTQUh1QixFQUl2QnlCLEtBSnVCLEVBS3ZCakIsT0FMdUIsRUFNdkJELElBQUksQ0FBQ1EsU0FOa0IsRUFPdkJSLElBQUksQ0FBQ1MsT0FQa0IsQ0FBekI7QUFTQUMsSUFBQUEsT0FBTyxHQUFHaUMsVUFBVSxDQUFDakMsT0FBckI7QUFDQTJCLElBQUFBLEtBQUssR0FBR00sVUFBVSxDQUFDTixLQUFuQjtBQUNEOztBQUVELE1BQUlPLEtBQUssR0FBRyxJQUFaO0FBQ0EsTUFBSUMsUUFBUSxHQUFHLElBQWY7O0FBQ0EsTUFBSW5DLE9BQUosRUFBYTtBQUNYa0MsSUFBQUEsS0FBSyxHQUFHbEMsT0FBTyxDQUFDb0MsR0FBUixDQUFZLENBQUNDLE1BQUQsRUFBU0MsS0FBVCxNQUFvQjtBQUN0Q0MsTUFBQUEsTUFBTSxFQUFFLGtDQUFlLENBQUNsQixJQUFJLElBQUksQ0FBVCxJQUFjaUIsS0FBN0IsQ0FEOEI7QUFFdENFLE1BQUFBLElBQUksRUFBRUg7QUFGZ0MsS0FBcEIsQ0FBWixDQUFSO0FBS0FGLElBQUFBLFFBQVEsR0FBRztBQUNUTSxNQUFBQSxlQUFlLEVBQ2IsQ0FBRWpCLFFBQVEsSUFBSUEsUUFBUSxHQUFHLENBQXhCLElBQStCRyxLQUFLLElBQUlBLEtBQUssR0FBRyxDQUFqRCxLQUF3RE4sSUFBSSxLQUFLSSxTQUFqRSxJQUE4RUosSUFBSSxHQUFHLENBRjlFO0FBR1RxQixNQUFBQSxXQUFXLEVBQUUsa0NBQWVyQixJQUFJLElBQUksQ0FBdkIsQ0FISjtBQUlUc0IsTUFBQUEsU0FBUyxFQUFFLGtDQUFlLENBQUN0QixJQUFJLElBQUksQ0FBVCxLQUFlckIsT0FBTyxDQUFDQyxNQUFSLElBQWtCLENBQWpDLElBQXNDLENBQXJELENBSkY7QUFLVDJDLE1BQUFBLFdBQVcsRUFBRSxDQUFDcEIsUUFBUSxJQUFJRyxLQUFiLElBQXNCLENBQUNOLElBQUksSUFBSSxDQUFULElBQWNyQixPQUFPLENBQUNDO0FBTGhELEtBQVg7QUFPRDs7QUFFRCxTQUFPO0FBQ0xpQyxJQUFBQSxLQURLO0FBRUxDLElBQUFBLFFBRks7QUFHTFIsSUFBQUEsS0FBSyxFQUFFSCxRQUFRLElBQUlHO0FBSGQsR0FBUDtBQUtELENBaEpEOzs7O0FBa0pBLE1BQU1SLHFCQUFxQixHQUFHLENBQUNULFNBQUQsRUFBWUMsS0FBWixFQUFtQkMsS0FBbkIsRUFBMEJDLElBQTFCLEVBQWdDQyxNQUFoQyxFQUF3Q00sUUFBeEMsS0FBcUQ7QUFDakYsTUFBSUMsSUFBSSxHQUFHSSxTQUFYO0FBQ0EsTUFBSUgsS0FBSyxHQUFHRyxTQUFaO0FBQ0EsTUFBSUYsY0FBYyxHQUFHLEtBQXJCLENBSGlGLENBS2pGOztBQUNBLE1BQUliLFNBQVMsSUFBSUEsU0FBUyxLQUFLLENBQS9CLEVBQWtDO0FBQ2hDLFFBQUlBLFNBQVMsR0FBRyxDQUFoQixFQUFtQjtBQUNqQixZQUFNLElBQUlSLGNBQU1DLEtBQVYsQ0FBZ0JELGNBQU1DLEtBQU4sQ0FBWTBDLGFBQTVCLEVBQTJDLGtDQUEzQyxDQUFOO0FBQ0Q7O0FBQ0R4QixJQUFBQSxJQUFJLEdBQUdYLFNBQVA7QUFDRCxHQVhnRixDQWFqRjs7O0FBQ0EsTUFBSUUsS0FBSixFQUFXO0FBQ1RBLElBQUFBLEtBQUssR0FBRyxrQ0FBZUEsS0FBZixDQUFSOztBQUNBLFFBQUssQ0FBQ0EsS0FBRCxJQUFVQSxLQUFLLEtBQUssQ0FBckIsSUFBMkJBLEtBQUssR0FBRyxDQUF2QyxFQUEwQztBQUN4QyxZQUFNLElBQUlWLGNBQU1DLEtBQVYsQ0FBZ0JELGNBQU1DLEtBQU4sQ0FBWTBDLGFBQTVCLEVBQTJDLDZCQUEzQyxDQUFOO0FBQ0QsS0FKUSxDQU1UOzs7QUFDQXhCLElBQUFBLElBQUksR0FBRyxDQUFDQSxJQUFJLElBQUksQ0FBVCxLQUFlVCxLQUFLLEdBQUcsQ0FBdkIsQ0FBUDtBQUNELEdBdEJnRixDQXdCakY7OztBQUNBLE1BQUlELEtBQUssSUFBSUEsS0FBSyxLQUFLLENBQXZCLEVBQTBCO0FBQ3hCLFFBQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDYixZQUFNLElBQUlULGNBQU1DLEtBQVYsQ0FBZ0JELGNBQU1DLEtBQU4sQ0FBWTBDLGFBQTVCLEVBQTJDLG1DQUEzQyxDQUFOO0FBQ0QsS0FIdUIsQ0FLeEI7OztBQUNBdkIsSUFBQUEsS0FBSyxHQUFHWCxLQUFSO0FBQ0QsR0FoQ2dGLENBa0NqRjs7O0FBQ0EsTUFBSUcsTUFBTSxJQUFJQSxNQUFNLEtBQUssQ0FBekIsRUFBNEI7QUFDMUI7QUFDQUEsSUFBQUEsTUFBTSxHQUFHLGtDQUFlQSxNQUFmLENBQVQ7O0FBQ0EsUUFBSyxDQUFDQSxNQUFELElBQVdBLE1BQU0sS0FBSyxDQUF2QixJQUE2QkEsTUFBTSxHQUFHLENBQTFDLEVBQTZDO0FBQzNDLFlBQU0sSUFBSVosY0FBTUMsS0FBVixDQUFnQkQsY0FBTUMsS0FBTixDQUFZMEMsYUFBNUIsRUFBMkMsOEJBQTNDLENBQU47QUFDRDs7QUFFRCxRQUFJLENBQUN4QixJQUFJLElBQUksQ0FBVCxLQUFlUCxNQUFuQixFQUEyQjtBQUN6QjtBQUNBUSxNQUFBQSxLQUFLLEdBQUcsQ0FBUjtBQUNELEtBSEQsTUFHTyxJQUFLLENBQUNBLEtBQUQsSUFBVUEsS0FBSyxLQUFLLENBQXJCLElBQTJCLENBQUNELElBQUksSUFBSSxDQUFULElBQWNDLEtBQWQsR0FBc0JSLE1BQXJELEVBQTZEO0FBQ2xFO0FBQ0FRLE1BQUFBLEtBQUssR0FBR1IsTUFBTSxJQUFJTyxJQUFJLElBQUksQ0FBWixDQUFkO0FBQ0Q7QUFDRixHQWpEZ0YsQ0FtRGpGOzs7QUFDQSxNQUFJUixJQUFJLElBQUlBLElBQUksS0FBSyxDQUFyQixFQUF3QjtBQUN0QixRQUFJQSxJQUFJLEdBQUcsQ0FBWCxFQUFjO0FBQ1osWUFBTSxJQUFJWCxjQUFNQyxLQUFWLENBQWdCRCxjQUFNQyxLQUFOLENBQVkwQyxhQUE1QixFQUEyQyxrQ0FBM0MsQ0FBTjtBQUNEOztBQUVELFFBQUloQyxJQUFJLEdBQUdPLFFBQVgsRUFBcUI7QUFDbkI7QUFDQVAsTUFBQUEsSUFBSSxHQUFHTyxRQUFQO0FBQ0Q7O0FBRUQsUUFBSUUsS0FBSyxJQUFJQSxLQUFLLEtBQUssQ0FBdkIsRUFBMEI7QUFDeEI7QUFDQSxVQUFJVCxJQUFJLEdBQUdTLEtBQVgsRUFBa0I7QUFDaEI7QUFDQUQsUUFBQUEsSUFBSSxHQUFHLENBQUNBLElBQUksSUFBSSxDQUFULEtBQWVDLEtBQUssR0FBR1QsSUFBdkIsQ0FBUCxDQUZnQixDQUVxQjs7QUFDckNTLFFBQUFBLEtBQUssR0FBR1QsSUFBUixDQUhnQixDQUdGO0FBQ2Y7QUFDRixLQVBELE1BT08sSUFBSUEsSUFBSSxLQUFLLENBQWIsRUFBZ0I7QUFDckI7QUFDQVMsTUFBQUEsS0FBSyxHQUFHLENBQVI7QUFDRCxLQUhNLE1BR0E7QUFDTDtBQUNBQSxNQUFBQSxLQUFLLEdBQUdULElBQVI7QUFDQVUsTUFBQUEsY0FBYyxHQUFHLElBQWpCO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPO0FBQ0xGLElBQUFBLElBREs7QUFFTEMsSUFBQUEsS0FGSztBQUdMQyxJQUFBQTtBQUhLLEdBQVA7QUFLRCxDQW5GRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IG9mZnNldFRvQ3Vyc29yLCBjdXJzb3JUb09mZnNldCB9IGZyb20gJ2dyYXBocWwtcmVsYXknO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi4vLi4vcmVzdCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1RdWVyeUlucHV0VG9QYXJzZSB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy9xdWVyeSc7XG5cbi8vIEVzbGludC9QcmV0dGllciBjb25mbGljdFxuLyogZXNsaW50LWRpc2FibGUqL1xuY29uc3QgbmVlZFRvR2V0QWxsS2V5cyA9IChmaWVsZHMsIGtleXMsIHBhcnNlQ2xhc3NlcykgPT5cbiAga2V5c1xuICAgID8ga2V5cy5zcGxpdCgnLCcpLnNvbWUoa2V5TmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleU5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKGZpZWxkc1trZXlbMF1dKSB7XG4gICAgICAgICAgaWYgKGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdSZWxhdGlvbicpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBpZiAoZmllbGRzW2tleVswXV0udHlwZSA9PT0gJ1BvaW50ZXInKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJDbGFzcyA9IHBhcnNlQ2xhc3Nlc1tmaWVsZHNba2V5WzBdXS50YXJnZXRDbGFzc107XG4gICAgICAgICAgICBpZiAoc3ViQ2xhc3MgJiYgc3ViQ2xhc3MuZmllbGRzW2tleVsxXV0pIHtcbiAgICAgICAgICAgICAgLy8gQ3VycmVudCBzdWIga2V5IGlzIG5vdCBjdXN0b21cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAha2V5WzFdIHx8XG4gICAgICAgICAgICBmaWVsZHNba2V5WzBdXS50eXBlID09PSAnQXJyYXknIHx8XG4gICAgICAgICAgICBmaWVsZHNba2V5WzBdXS50eXBlID09PSAnT2JqZWN0J1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gY3VycmVudCBrZXkgaXMgbm90IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZXkgbm90IGZvdW5kIGludG8gUGFyc2UgU2NoZW1hIHNvIGl0J3MgY3VzdG9tXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSlcbiAgICA6IHRydWU7XG4vKiBlc2xpbnQtZW5hYmxlKi9cblxuY29uc3QgZ2V0T2JqZWN0ID0gYXN5bmMgKFxuICBjbGFzc05hbWUsXG4gIG9iamVjdElkLFxuICBrZXlzLFxuICBpbmNsdWRlLFxuICByZWFkUHJlZmVyZW5jZSxcbiAgaW5jbHVkZVJlYWRQcmVmZXJlbmNlLFxuICBjb25maWcsXG4gIGF1dGgsXG4gIGluZm8sXG4gIHBhcnNlQ2xhc3Nlc1xuKSA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgdHJ5IHtcbiAgICBpZiAoIW5lZWRUb0dldEFsbEtleXMocGFyc2VDbGFzc2VzW2NsYXNzTmFtZV0uZmllbGRzLCBrZXlzLCBwYXJzZUNsYXNzZXMpKSB7XG4gICAgICBvcHRpb25zLmtleXMgPSBrZXlzO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUubG9nKGUpO1xuICB9XG4gIGlmIChpbmNsdWRlKSB7XG4gICAgb3B0aW9ucy5pbmNsdWRlID0gaW5jbHVkZTtcbiAgICBpZiAoaW5jbHVkZVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBvcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IGluY2x1ZGVSZWFkUHJlZmVyZW5jZTtcbiAgICB9XG4gIH1cbiAgaWYgKHJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXN0LmdldChcbiAgICBjb25maWcsXG4gICAgYXV0aCxcbiAgICBjbGFzc05hbWUsXG4gICAgb2JqZWN0SWQsXG4gICAgb3B0aW9ucyxcbiAgICBpbmZvLmNsaWVudFNESyxcbiAgICBpbmZvLmNvbnRleHRcbiAgKTtcblxuICBpZiAoIXJlc3BvbnNlLnJlc3VsdHMgfHwgcmVzcG9uc2UucmVzdWx0cy5sZW5ndGggPT0gMCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnT2JqZWN0IG5vdCBmb3VuZC4nKTtcbiAgfVxuXG4gIGNvbnN0IG9iamVjdCA9IHJlc3BvbnNlLnJlc3VsdHNbMF07XG4gIGlmIChjbGFzc05hbWUgPT09ICdfVXNlcicpIHtcbiAgICBkZWxldGUgb2JqZWN0LnNlc3Npb25Ub2tlbjtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuY29uc3QgZmluZE9iamVjdHMgPSBhc3luYyAoXG4gIGNsYXNzTmFtZSxcbiAgd2hlcmUsXG4gIG9yZGVyLFxuICBza2lwSW5wdXQsXG4gIGZpcnN0LFxuICBhZnRlcixcbiAgbGFzdCxcbiAgYmVmb3JlLFxuICBrZXlzLFxuICBpbmNsdWRlLFxuICBpbmNsdWRlQWxsLFxuICByZWFkUHJlZmVyZW5jZSxcbiAgaW5jbHVkZVJlYWRQcmVmZXJlbmNlLFxuICBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlLFxuICBjb25maWcsXG4gIGF1dGgsXG4gIGluZm8sXG4gIHNlbGVjdGVkRmllbGRzLFxuICBwYXJzZUNsYXNzZXNcbikgPT4ge1xuICBpZiAoIXdoZXJlKSB7XG4gICAgd2hlcmUgPSB7fTtcbiAgfVxuICB0cmFuc2Zvcm1RdWVyeUlucHV0VG9QYXJzZSh3aGVyZSwgY2xhc3NOYW1lLCBwYXJzZUNsYXNzZXMpO1xuICBjb25zdCBza2lwQW5kTGltaXRDYWxjdWxhdGlvbiA9IGNhbGN1bGF0ZVNraXBBbmRMaW1pdChcbiAgICBza2lwSW5wdXQsXG4gICAgZmlyc3QsXG4gICAgYWZ0ZXIsXG4gICAgbGFzdCxcbiAgICBiZWZvcmUsXG4gICAgY29uZmlnLm1heExpbWl0XG4gICk7XG4gIGxldCB7IHNraXAgfSA9IHNraXBBbmRMaW1pdENhbGN1bGF0aW9uO1xuICBjb25zdCB7IGxpbWl0LCBuZWVkVG9QcmVDb3VudCB9ID0gc2tpcEFuZExpbWl0Q2FsY3VsYXRpb247XG4gIGxldCBwcmVDb3VudCA9IHVuZGVmaW5lZDtcbiAgaWYgKG5lZWRUb1ByZUNvdW50KSB7XG4gICAgY29uc3QgcHJlQ291bnRPcHRpb25zID0ge1xuICAgICAgbGltaXQ6IDAsXG4gICAgICBjb3VudDogdHJ1ZSxcbiAgICB9O1xuICAgIGlmIChyZWFkUHJlZmVyZW5jZSkge1xuICAgICAgcHJlQ291bnRPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gcmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyh3aGVyZSkubGVuZ3RoID4gMCAmJiBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICBwcmVDb3VudE9wdGlvbnMuc3VicXVlcnlSZWFkUHJlZmVyZW5jZSA9IHN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICAgIHByZUNvdW50ID0gKFxuICAgICAgYXdhaXQgcmVzdC5maW5kKGNvbmZpZywgYXV0aCwgY2xhc3NOYW1lLCB3aGVyZSwgcHJlQ291bnRPcHRpb25zLCBpbmZvLmNsaWVudFNESywgaW5mby5jb250ZXh0KVxuICAgICkuY291bnQ7XG4gICAgaWYgKChza2lwIHx8IDApICsgbGltaXQgPCBwcmVDb3VudCkge1xuICAgICAgc2tpcCA9IHByZUNvdW50IC0gbGltaXQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gIGlmIChzZWxlY3RlZEZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLnN0YXJ0c1dpdGgoJ2VkZ2VzLicpIHx8IGZpZWxkLnN0YXJ0c1dpdGgoJ3BhZ2VJbmZvLicpKSkge1xuICAgIGlmIChsaW1pdCB8fCBsaW1pdCA9PT0gMCkge1xuICAgICAgb3B0aW9ucy5saW1pdCA9IGxpbWl0O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmxpbWl0ID0gMTAwO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5saW1pdCAhPT0gMCkge1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIG9wdGlvbnMub3JkZXIgPSBvcmRlcjtcbiAgICAgIH1cbiAgICAgIGlmIChza2lwKSB7XG4gICAgICAgIG9wdGlvbnMuc2tpcCA9IHNraXA7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1heExpbWl0ICYmIG9wdGlvbnMubGltaXQgPiBjb25maWcubWF4TGltaXQpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgcmVwbGFjZSB0aGUgbGltaXQgb24gdGhlIHF1ZXJ5IHdpdGggdGhlIG1heCBjb25maWd1cmVkXG4gICAgICAgIG9wdGlvbnMubGltaXQgPSBjb25maWcubWF4TGltaXQ7XG4gICAgICB9XG4gICAgICBpZiAoIW5lZWRUb0dldEFsbEtleXMocGFyc2VDbGFzc2VzW2NsYXNzTmFtZV0uZmllbGRzLCBrZXlzLCBwYXJzZUNsYXNzZXMpKSB7XG4gICAgICAgIG9wdGlvbnMua2V5cyA9IGtleXM7XG4gICAgICB9XG4gICAgICBpZiAoaW5jbHVkZUFsbCA9PT0gdHJ1ZSkge1xuICAgICAgICBvcHRpb25zLmluY2x1ZGVBbGwgPSBpbmNsdWRlQWxsO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmluY2x1ZGVBbGwgJiYgaW5jbHVkZSkge1xuICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBpbmNsdWRlO1xuICAgICAgfVxuICAgICAgaWYgKChvcHRpb25zLmluY2x1ZGVBbGwgfHwgb3B0aW9ucy5pbmNsdWRlKSAmJiBpbmNsdWRlUmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBpbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMubGltaXQgPSAwO1xuICB9XG5cbiAgaWYgKFxuICAgIChzZWxlY3RlZEZpZWxkcy5pbmNsdWRlcygnY291bnQnKSB8fFxuICAgICAgc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ3BhZ2VJbmZvLmhhc1ByZXZpb3VzUGFnZScpIHx8XG4gICAgICBzZWxlY3RlZEZpZWxkcy5pbmNsdWRlcygncGFnZUluZm8uaGFzTmV4dFBhZ2UnKSkgJiZcbiAgICAhbmVlZFRvUHJlQ291bnRcbiAgKSB7XG4gICAgb3B0aW9ucy5jb3VudCA9IHRydWU7XG4gIH1cblxuICBpZiAocmVhZFByZWZlcmVuY2UpIHtcbiAgICBvcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gcmVhZFByZWZlcmVuY2U7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKHdoZXJlKS5sZW5ndGggPiAwICYmIHN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UpIHtcbiAgICBvcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICB9XG5cbiAgbGV0IHJlc3VsdHMsIGNvdW50O1xuICBpZiAob3B0aW9ucy5jb3VudCB8fCAhb3B0aW9ucy5saW1pdCB8fCAob3B0aW9ucy5saW1pdCAmJiBvcHRpb25zLmxpbWl0ID4gMCkpIHtcbiAgICBjb25zdCBmaW5kUmVzdWx0ID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgY29uZmlnLFxuICAgICAgYXV0aCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHdoZXJlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGluZm8uY2xpZW50U0RLLFxuICAgICAgaW5mby5jb250ZXh0XG4gICAgKTtcbiAgICByZXN1bHRzID0gZmluZFJlc3VsdC5yZXN1bHRzO1xuICAgIGNvdW50ID0gZmluZFJlc3VsdC5jb3VudDtcbiAgfVxuXG4gIGxldCBlZGdlcyA9IG51bGw7XG4gIGxldCBwYWdlSW5mbyA9IG51bGw7XG4gIGlmIChyZXN1bHRzKSB7XG4gICAgZWRnZXMgPSByZXN1bHRzLm1hcCgocmVzdWx0LCBpbmRleCkgPT4gKHtcbiAgICAgIGN1cnNvcjogb2Zmc2V0VG9DdXJzb3IoKHNraXAgfHwgMCkgKyBpbmRleCksXG4gICAgICBub2RlOiByZXN1bHQsXG4gICAgfSkpO1xuXG4gICAgcGFnZUluZm8gPSB7XG4gICAgICBoYXNQcmV2aW91c1BhZ2U6XG4gICAgICAgICgocHJlQ291bnQgJiYgcHJlQ291bnQgPiAwKSB8fCAoY291bnQgJiYgY291bnQgPiAwKSkgJiYgc2tpcCAhPT0gdW5kZWZpbmVkICYmIHNraXAgPiAwLFxuICAgICAgc3RhcnRDdXJzb3I6IG9mZnNldFRvQ3Vyc29yKHNraXAgfHwgMCksXG4gICAgICBlbmRDdXJzb3I6IG9mZnNldFRvQ3Vyc29yKChza2lwIHx8IDApICsgKHJlc3VsdHMubGVuZ3RoIHx8IDEpIC0gMSksXG4gICAgICBoYXNOZXh0UGFnZTogKHByZUNvdW50IHx8IGNvdW50KSA+IChza2lwIHx8IDApICsgcmVzdWx0cy5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZWRnZXMsXG4gICAgcGFnZUluZm8sXG4gICAgY291bnQ6IHByZUNvdW50IHx8IGNvdW50LFxuICB9O1xufTtcblxuY29uc3QgY2FsY3VsYXRlU2tpcEFuZExpbWl0ID0gKHNraXBJbnB1dCwgZmlyc3QsIGFmdGVyLCBsYXN0LCBiZWZvcmUsIG1heExpbWl0KSA9PiB7XG4gIGxldCBza2lwID0gdW5kZWZpbmVkO1xuICBsZXQgbGltaXQgPSB1bmRlZmluZWQ7XG4gIGxldCBuZWVkVG9QcmVDb3VudCA9IGZhbHNlO1xuXG4gIC8vIFZhbGlkYXRlcyB0aGUgc2tpcCBpbnB1dFxuICBpZiAoc2tpcElucHV0IHx8IHNraXBJbnB1dCA9PT0gMCkge1xuICAgIGlmIChza2lwSW5wdXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ1NraXAgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuICAgIHNraXAgPSBza2lwSW5wdXQ7XG4gIH1cblxuICAvLyBWYWxpZGF0ZXMgdGhlIGFmdGVyIHBhcmFtXG4gIGlmIChhZnRlcikge1xuICAgIGFmdGVyID0gY3Vyc29yVG9PZmZzZXQoYWZ0ZXIpO1xuICAgIGlmICgoIWFmdGVyICYmIGFmdGVyICE9PSAwKSB8fCBhZnRlciA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnQWZ0ZXIgaXMgbm90IGEgdmFsaWQgY3Vyc29yJyk7XG4gICAgfVxuXG4gICAgLy8gSWYgc2tpcCBhbmQgYWZ0ZXIgYXJlIHBhc3NlZCwgYSBuZXcgc2tpcCBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGVtXG4gICAgc2tpcCA9IChza2lwIHx8IDApICsgKGFmdGVyICsgMSk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZXMgdGhlIGZpcnN0IHBhcmFtXG4gIGlmIChmaXJzdCB8fCBmaXJzdCA9PT0gMCkge1xuICAgIGlmIChmaXJzdCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnRmlyc3Qgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGZpcnN0IHBhcmFtIGlzIHRyYW5zbGF0ZWQgdG8gdGhlIGxpbWl0IHBhcmFtIG9mIHRoZSBQYXJzZSBsZWdhY3kgQVBJXG4gICAgbGltaXQgPSBmaXJzdDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlcyB0aGUgYmVmb3JlIHBhcmFtXG4gIGlmIChiZWZvcmUgfHwgYmVmb3JlID09PSAwKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgY29udmVydHMgdGhlIGN1cnNvciB0byB0aGUgaW5kZXggb2YgdGhlIG9iamVjdFxuICAgIGJlZm9yZSA9IGN1cnNvclRvT2Zmc2V0KGJlZm9yZSk7XG4gICAgaWYgKCghYmVmb3JlICYmIGJlZm9yZSAhPT0gMCkgfHwgYmVmb3JlIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdCZWZvcmUgaXMgbm90IGEgdmFsaWQgY3Vyc29yJyk7XG4gICAgfVxuXG4gICAgaWYgKChza2lwIHx8IDApID49IGJlZm9yZSkge1xuICAgICAgLy8gSWYgdGhlIGJlZm9yZSBpbmRleCBpcyBsZXNzIHRoZW4gdGhlIHNraXAsIG5vIG9iamVjdHMgd2lsbCBiZSByZXR1cm5lZFxuICAgICAgbGltaXQgPSAwO1xuICAgIH0gZWxzZSBpZiAoKCFsaW1pdCAmJiBsaW1pdCAhPT0gMCkgfHwgKHNraXAgfHwgMCkgKyBsaW1pdCA+IGJlZm9yZSkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbGltaXQgc2V0LCB0aGUgbGltaXQgaXMgY2FsY3VsYXRlZC4gT3IsIGlmIHRoZSBsaW1pdCAocGx1cyBza2lwKSBpcyBiaWdnZXIgdGhhbiB0aGUgYmVmb3JlIGluZGV4LCB0aGUgbmV3IGxpbWl0IGlzIHNldC5cbiAgICAgIGxpbWl0ID0gYmVmb3JlIC0gKHNraXAgfHwgMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBsYXN0IHBhcmFtXG4gIGlmIChsYXN0IHx8IGxhc3QgPT09IDApIHtcbiAgICBpZiAobGFzdCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnTGFzdCBzaG91bGQgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB9XG5cbiAgICBpZiAobGFzdCA+IG1heExpbWl0KSB7XG4gICAgICAvLyBMYXN0IGNhbid0IGJlIGJpZ2dlciB0aGFuIFBhcnNlIHNlcnZlciBtYXhMaW1pdCBjb25maWcuXG4gICAgICBsYXN0ID0gbWF4TGltaXQ7XG4gICAgfVxuXG4gICAgaWYgKGxpbWl0IHx8IGxpbWl0ID09PSAwKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIHByZXZpb3VzIGxpbWl0IHNldCwgaXQgbWF5IGJlIGFkanVzdGVkXG4gICAgICBpZiAobGFzdCA8IGxpbWl0KSB7XG4gICAgICAgIC8vIGlmIGxhc3QgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGxpbWl0XG4gICAgICAgIHNraXAgPSAoc2tpcCB8fCAwKSArIChsaW1pdCAtIGxhc3QpOyAvLyBUaGUgc2tpcCBpcyBhZGp1c3RlZFxuICAgICAgICBsaW1pdCA9IGxhc3Q7IC8vIHRoZSBsaW1pdCBpcyBhZGp1c3RlZFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gMCkge1xuICAgICAgLy8gTm8gb2JqZWN0cyB3aWxsIGJlIHJldHVybmVkXG4gICAgICBsaW1pdCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIHByZXZpb3VzIGxpbWl0IHNldCwgdGhlIGxpbWl0IHdpbGwgYmUgZXF1YWwgdG8gbGFzdCBhbmQgcHJlIGNvdW50IGlzIG5lZWRlZC5cbiAgICAgIGxpbWl0ID0gbGFzdDtcbiAgICAgIG5lZWRUb1ByZUNvdW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBza2lwLFxuICAgIGxpbWl0LFxuICAgIG5lZWRUb1ByZUNvdW50LFxuICB9O1xufTtcblxuZXhwb3J0IHsgZ2V0T2JqZWN0LCBmaW5kT2JqZWN0cywgY2FsY3VsYXRlU2tpcEFuZExpbWl0LCBuZWVkVG9HZXRBbGxLZXlzIH07XG4iXX0=
|
|
303
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvb2JqZWN0c1F1ZXJpZXMuanMiXSwibmFtZXMiOlsibmVlZFRvR2V0QWxsS2V5cyIsImZpZWxkcyIsImtleXMiLCJwYXJzZUNsYXNzZXMiLCJzcGxpdCIsInNvbWUiLCJrZXlOYW1lIiwia2V5IiwidHlwZSIsInN1YkNsYXNzIiwidGFyZ2V0Q2xhc3MiLCJnZXRPYmplY3QiLCJjbGFzc05hbWUiLCJvYmplY3RJZCIsImluY2x1ZGUiLCJyZWFkUHJlZmVyZW5jZSIsImluY2x1ZGVSZWFkUHJlZmVyZW5jZSIsImNvbmZpZyIsImF1dGgiLCJpbmZvIiwib3B0aW9ucyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJyZXNwb25zZSIsInJlc3QiLCJnZXQiLCJjbGllbnRTREsiLCJjb250ZXh0IiwicmVzdWx0cyIsImxlbmd0aCIsIlBhcnNlIiwiRXJyb3IiLCJPQkpFQ1RfTk9UX0ZPVU5EIiwib2JqZWN0Iiwic2Vzc2lvblRva2VuIiwiZmluZE9iamVjdHMiLCJ3aGVyZSIsIm9yZGVyIiwic2tpcElucHV0IiwiZmlyc3QiLCJhZnRlciIsImxhc3QiLCJiZWZvcmUiLCJpbmNsdWRlQWxsIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsInNlbGVjdGVkRmllbGRzIiwic2tpcEFuZExpbWl0Q2FsY3VsYXRpb24iLCJjYWxjdWxhdGVTa2lwQW5kTGltaXQiLCJtYXhMaW1pdCIsInNraXAiLCJsaW1pdCIsIm5lZWRUb1ByZUNvdW50IiwicHJlQ291bnQiLCJ1bmRlZmluZWQiLCJwcmVDb3VudE9wdGlvbnMiLCJjb3VudCIsIk9iamVjdCIsImZpbmQiLCJmaWVsZCIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsImZpbmRSZXN1bHQiLCJlZGdlcyIsInBhZ2VJbmZvIiwibWFwIiwicmVzdWx0IiwiaW5kZXgiLCJjdXJzb3IiLCJub2RlIiwiaGFzUHJldmlvdXNQYWdlIiwic3RhcnRDdXJzb3IiLCJlbmRDdXJzb3IiLCJoYXNO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QSxLQUFLLEdBQUcsQ0FBUjtBQUNELEtBSE0sTUFHQTtBQUNMO0FBQ0FBLE1BQUFBLEtBQUssR0FBR1QsSUFBUjtBQUNBVSxNQUFBQSxjQUFjLEdBQUcsSUFBakI7QUFDRDtBQUNGOztBQUNELFNBQU87QUFDTEYsSUFBQUEsSUFESztBQUVMQyxJQUFBQSxLQUZLO0FBR0xDLElBQUFBO0FBSEssR0FBUDtBQUtELENBbkZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgb2Zmc2V0VG9DdXJzb3IsIGN1cnNvclRvT2Zmc2V0IH0gZnJvbSAnZ3JhcGhxbC1yZWxheSc7XG5pbXBvcnQgcmVzdCBmcm9tICcuLi8uLi9yZXN0JztcbmltcG9ydCB7IHRyYW5zZm9ybVF1ZXJ5SW5wdXRUb1BhcnNlIH0gZnJvbSAnLi4vdHJhbnNmb3JtZXJzL3F1ZXJ5JztcblxuLy8gRXNsaW50L1ByZXR0aWVyIGNvbmZsaWN0XG4vKiBlc2xpbnQtZGlzYWJsZSovXG5jb25zdCBuZWVkVG9HZXRBbGxLZXlzID0gKGZpZWxkcywga2V5cywgcGFyc2VDbGFzc2VzKSA9PlxuICBrZXlzXG4gICAgPyBrZXlzLnNwbGl0KCcsJykuc29tZShrZXlOYW1lID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5TmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoZmllbGRzW2tleVswXV0pIHtcbiAgICAgICAgICBpZiAoZmllbGRzW2tleVswXV0udHlwZSA9PT0gJ1JlbGF0aW9uJykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGlmIChmaWVsZHNba2V5WzBdXS50eXBlID09PSAnUG9pbnRlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YkNsYXNzID0gcGFyc2VDbGFzc2VzW2ZpZWxkc1trZXlbMF1dLnRhcmdldENsYXNzXTtcbiAgICAgICAgICAgIGlmIChzdWJDbGFzcyAmJiBzdWJDbGFzcy5maWVsZHNba2V5WzFdXSkge1xuICAgICAgICAgICAgICAvLyBDdXJyZW50IHN1YiBrZXkgaXMgbm90IGN1c3RvbVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICFrZXlbMV0gfHxcbiAgICAgICAgICAgIGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdBcnJheScgfHxcbiAgICAgICAgICAgIGZpZWxkc1trZXlbMF1dLnR5cGUgPT09ICdPYmplY3QnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBjdXJyZW50IGtleSBpcyBub3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEtleSBub3QgZm91bmQgaW50byBQYXJzZSBTY2hlbWEgc28gaXQncyBjdXN0b21cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgIDogdHJ1ZTtcbi8qIGVzbGludC1lbmFibGUqL1xuXG5jb25zdCBnZXRPYmplY3QgPSBhc3luYyAoXG4gIGNsYXNzTmFtZSxcbiAgb2JqZWN0SWQsXG4gIGtleXMsXG4gIGluY2x1ZGUsXG4gIHJlYWRQcmVmZXJlbmNlLFxuICBpbmNsdWRlUmVhZFByZWZlcmVuY2UsXG4gIGNvbmZpZyxcbiAgYXV0aCxcbiAgaW5mbyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICB0cnkge1xuICAgIGlmICghbmVlZFRvR2V0QWxsS2V5cyhwYXJzZUNsYXNzZXNbY2xhc3NOYW1lXS5maWVsZHMsIGtleXMsIHBhcnNlQ2xhc3NlcykpIHtcbiAgICAgIG9wdGlvbnMua2V5cyA9IGtleXM7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICBpZiAoaW5jbHVkZSkge1xuICAgIG9wdGlvbnMuaW5jbHVkZSA9IGluY2x1ZGU7XG4gICAgaWYgKGluY2x1ZGVSZWFkUHJlZmVyZW5jZSkge1xuICAgICAgb3B0aW9ucy5pbmNsdWRlUmVhZFByZWZlcmVuY2UgPSBpbmNsdWRlUmVhZFByZWZlcmVuY2U7XG4gICAgfVxuICB9XG4gIGlmIChyZWFkUHJlZmVyZW5jZSkge1xuICAgIG9wdGlvbnMucmVhZFByZWZlcmVuY2UgPSByZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVzdC5nZXQoXG4gICAgY29uZmlnLFxuICAgIGF1dGgsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9iamVjdElkLFxuICAgIG9wdGlvbnMsXG4gICAgaW5mby5jbGllbnRTREssXG4gICAgaW5mby5jb250ZXh0XG4gICk7XG5cbiAgaWYgKCFyZXNwb25zZS5yZXN1bHRzIHx8IHJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ09iamVjdCBub3QgZm91bmQuJyk7XG4gIH1cblxuICBjb25zdCBvYmplY3QgPSByZXNwb25zZS5yZXN1bHRzWzBdO1xuICBpZiAoY2xhc3NOYW1lID09PSAnX1VzZXInKSB7XG4gICAgZGVsZXRlIG9iamVjdC5zZXNzaW9uVG9rZW47XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn07XG5cbmNvbnN0IGZpbmRPYmplY3RzID0gYXN5bmMgKFxuICBjbGFzc05hbWUsXG4gIHdoZXJlLFxuICBvcmRlcixcbiAgc2tpcElucHV0LFxuICBmaXJzdCxcbiAgYWZ0ZXIsXG4gIGxhc3QsXG4gIGJlZm9yZSxcbiAga2V5cyxcbiAgaW5jbHVkZSxcbiAgaW5jbHVkZUFsbCxcbiAgcmVhZFByZWZlcmVuY2UsXG4gIGluY2x1ZGVSZWFkUHJlZmVyZW5jZSxcbiAgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSxcbiAgY29uZmlnLFxuICBhdXRoLFxuICBpbmZvLFxuICBzZWxlY3RlZEZpZWxkcyxcbiAgcGFyc2VDbGFzc2VzXG4pID0+IHtcbiAgaWYgKCF3aGVyZSkge1xuICAgIHdoZXJlID0ge307XG4gIH1cbiAgdHJhbnNmb3JtUXVlcnlJbnB1dFRvUGFyc2Uod2hlcmUsIGNsYXNzTmFtZSwgcGFyc2VDbGFzc2VzKTtcbiAgY29uc3Qgc2tpcEFuZExpbWl0Q2FsY3VsYXRpb24gPSBjYWxjdWxhdGVTa2lwQW5kTGltaXQoXG4gICAgc2tpcElucHV0LFxuICAgIGZpcnN0LFxuICAgIGFmdGVyLFxuICAgIGxhc3QsXG4gICAgYmVmb3JlLFxuICAgIGNvbmZpZy5tYXhMaW1pdFxuICApO1xuICBsZXQgeyBza2lwIH0gPSBza2lwQW5kTGltaXRDYWxjdWxhdGlvbjtcbiAgY29uc3QgeyBsaW1pdCwgbmVlZFRvUHJlQ291bnQgfSA9IHNraXBBbmRMaW1pdENhbGN1bGF0aW9uO1xuICBsZXQgcHJlQ291bnQgPSB1bmRlZmluZWQ7XG4gIGlmIChuZWVkVG9QcmVDb3VudCkge1xuICAgIGNvbnN0IHByZUNvdW50T3B0aW9ucyA9IHtcbiAgICAgIGxpbWl0OiAwLFxuICAgICAgY291bnQ6IHRydWUsXG4gICAgfTtcbiAgICBpZiAocmVhZFByZWZlcmVuY2UpIHtcbiAgICAgIHByZUNvdW50T3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMod2hlcmUpLmxlbmd0aCA+IDAgJiYgc3VicXVlcnlSZWFkUHJlZmVyZW5jZSkge1xuICAgICAgcHJlQ291bnRPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlO1xuICAgIH1cbiAgICBwcmVDb3VudCA9IChcbiAgICAgIGF3YWl0IHJlc3QuZmluZChjb25maWcsIGF1dGgsIGNsYXNzTmFtZSwgd2hlcmUsIHByZUNvdW50T3B0aW9ucywgaW5mby5jbGllbnRTREssIGluZm8uY29udGV4dClcbiAgICApLmNvdW50O1xuICAgIGlmICgoc2tpcCB8fCAwKSArIGxpbWl0IDwgcHJlQ291bnQpIHtcbiAgICAgIHNraXAgPSBwcmVDb3VudCAtIGxpbWl0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICBpZiAoc2VsZWN0ZWRGaWVsZHMuZmluZChmaWVsZCA9PiBmaWVsZC5zdGFydHNXaXRoKCdlZGdlcy4nKSB8fCBmaWVsZC5zdGFydHNXaXRoKCdwYWdlSW5mby4nKSkpIHtcbiAgICBpZiAobGltaXQgfHwgbGltaXQgPT09IDApIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSBsaW1pdDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy5saW1pdCA9IDEwMDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGltaXQgIT09IDApIHtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICBvcHRpb25zLm9yZGVyID0gb3JkZXI7XG4gICAgICB9XG4gICAgICBpZiAoc2tpcCkge1xuICAgICAgICBvcHRpb25zLnNraXAgPSBza2lwO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5tYXhMaW1pdCAmJiBvcHRpb25zLmxpbWl0ID4gY29uZmlnLm1heExpbWl0KSB7XG4gICAgICAgIC8vIFNpbGVudGx5IHJlcGxhY2UgdGhlIGxpbWl0IG9uIHRoZSBxdWVyeSB3aXRoIHRoZSBtYXggY29uZmlndXJlZFxuICAgICAgICBvcHRpb25zLmxpbWl0ID0gY29uZmlnLm1heExpbWl0O1xuICAgICAgfVxuICAgICAgaWYgKCFuZWVkVG9HZXRBbGxLZXlzKHBhcnNlQ2xhc3Nlc1tjbGFzc05hbWVdLmZpZWxkcywga2V5cywgcGFyc2VDbGFzc2VzKSkge1xuICAgICAgICBvcHRpb25zLmtleXMgPSBrZXlzO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVBbGwgPT09IHRydWUpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlQWxsID0gaW5jbHVkZUFsbDtcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5pbmNsdWRlQWxsICYmIGluY2x1ZGUpIHtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gaW5jbHVkZTtcbiAgICAgIH1cbiAgICAgIGlmICgob3B0aW9ucy5pbmNsdWRlQWxsIHx8IG9wdGlvbnMuaW5jbHVkZSkgJiYgaW5jbHVkZVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZVJlYWRQcmVmZXJlbmNlID0gaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zLmxpbWl0ID0gMDtcbiAgfVxuXG4gIGlmIChcbiAgICAoc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ2NvdW50JykgfHxcbiAgICAgIHNlbGVjdGVkRmllbGRzLmluY2x1ZGVzKCdwYWdlSW5mby5oYXNQcmV2aW91c1BhZ2UnKSB8fFxuICAgICAgc2VsZWN0ZWRGaWVsZHMuaW5jbHVkZXMoJ3BhZ2VJbmZvLmhhc05leHRQYWdlJykpICYmXG4gICAgIW5lZWRUb1ByZUNvdW50XG4gICkge1xuICAgIG9wdGlvbnMuY291bnQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZSA9IHJlYWRQcmVmZXJlbmNlO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyh3aGVyZSkubGVuZ3RoID4gMCAmJiBzdWJxdWVyeVJlYWRQcmVmZXJlbmNlKSB7XG4gICAgb3B0aW9ucy5zdWJxdWVyeVJlYWRQcmVmZXJlbmNlID0gc3VicXVlcnlSZWFkUHJlZmVyZW5jZTtcbiAgfVxuXG4gIGxldCByZXN1bHRzLCBjb3VudDtcbiAgaWYgKG9wdGlvbnMuY291bnQgfHwgIW9wdGlvbnMubGltaXQgfHwgKG9wdGlvbnMubGltaXQgJiYgb3B0aW9ucy5saW1pdCA+IDApKSB7XG4gICAgY29uc3QgZmluZFJlc3VsdCA9IGF3YWl0IHJlc3QuZmluZChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGgsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICB3aGVyZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBpbmZvLmNsaWVudFNESyxcbiAgICAgIGluZm8uY29udGV4dFxuICAgICk7XG4gICAgcmVzdWx0cyA9IGZpbmRSZXN1bHQucmVzdWx0cztcbiAgICBjb3VudCA9IGZpbmRSZXN1bHQuY291bnQ7XG4gIH1cblxuICBsZXQgZWRnZXMgPSBudWxsO1xuICBsZXQgcGFnZUluZm8gPSBudWxsO1xuICBpZiAocmVzdWx0cykge1xuICAgIGVkZ2VzID0gcmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+ICh7XG4gICAgICBjdXJzb3I6IG9mZnNldFRvQ3Vyc29yKChza2lwIHx8IDApICsgaW5kZXgpLFxuICAgICAgbm9kZTogcmVzdWx0LFxuICAgIH0pKTtcblxuICAgIHBhZ2VJbmZvID0ge1xuICAgICAgaGFzUHJldmlvdXNQYWdlOlxuICAgICAgICAoKHByZUNvdW50ICYmIHByZUNvdW50ID4gMCkgfHwgKGNvdW50ICYmIGNvdW50ID4gMCkpICYmIHNraXAgIT09IHVuZGVmaW5lZCAmJiBza2lwID4gMCxcbiAgICAgIHN0YXJ0Q3Vyc29yOiBvZmZzZXRUb0N1cnNvcihza2lwIHx8IDApLFxuICAgICAgZW5kQ3Vyc29yOiBvZmZzZXRUb0N1cnNvcigoc2tpcCB8fCAwKSArIChyZXN1bHRzLmxlbmd0aCB8fCAxKSAtIDEpLFxuICAgICAgaGFzTmV4dFBhZ2U6IChwcmVDb3VudCB8fCBjb3VudCkgPiAoc2tpcCB8fCAwKSArIHJlc3VsdHMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVkZ2VzLFxuICAgIHBhZ2VJbmZvLFxuICAgIGNvdW50OiBwcmVDb3VudCB8fCBjb3VudCxcbiAgfTtcbn07XG5cbmNvbnN0IGNhbGN1bGF0ZVNraXBBbmRMaW1pdCA9IChza2lwSW5wdXQsIGZpcnN0LCBhZnRlciwgbGFzdCwgYmVmb3JlLCBtYXhMaW1pdCkgPT4ge1xuICBsZXQgc2tpcCA9IHVuZGVmaW5lZDtcbiAgbGV0IGxpbWl0ID0gdW5kZWZpbmVkO1xuICBsZXQgbmVlZFRvUHJlQ291bnQgPSBmYWxzZTtcblxuICAvLyBWYWxpZGF0ZXMgdGhlIHNraXAgaW5wdXRcbiAgaWYgKHNraXBJbnB1dCB8fCBza2lwSW5wdXQgPT09IDApIHtcbiAgICBpZiAoc2tpcElucHV0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfUVVFUlksICdTa2lwIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cbiAgICBza2lwID0gc2tpcElucHV0O1xuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBhZnRlciBwYXJhbVxuICBpZiAoYWZ0ZXIpIHtcbiAgICBhZnRlciA9IGN1cnNvclRvT2Zmc2V0KGFmdGVyKTtcbiAgICBpZiAoKCFhZnRlciAmJiBhZnRlciAhPT0gMCkgfHwgYWZ0ZXIgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0FmdGVyIGlzIG5vdCBhIHZhbGlkIGN1cnNvcicpO1xuICAgIH1cblxuICAgIC8vIElmIHNraXAgYW5kIGFmdGVyIGFyZSBwYXNzZWQsIGEgbmV3IHNraXAgaXMgY2FsY3VsYXRlZCBieSBhZGRpbmcgdGhlbVxuICAgIHNraXAgPSAoc2tpcCB8fCAwKSArIChhZnRlciArIDEpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGVzIHRoZSBmaXJzdCBwYXJhbVxuICBpZiAoZmlyc3QgfHwgZmlyc3QgPT09IDApIHtcbiAgICBpZiAoZmlyc3QgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0ZpcnN0IHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBwYXJhbSBpcyB0cmFuc2xhdGVkIHRvIHRoZSBsaW1pdCBwYXJhbSBvZiB0aGUgUGFyc2UgbGVnYWN5IEFQSVxuICAgIGxpbWl0ID0gZmlyc3Q7XG4gIH1cblxuICAvLyBWYWxpZGF0ZXMgdGhlIGJlZm9yZSBwYXJhbVxuICBpZiAoYmVmb3JlIHx8IGJlZm9yZSA9PT0gMCkge1xuICAgIC8vIFRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBjdXJzb3IgdG8gdGhlIGluZGV4IG9mIHRoZSBvYmplY3RcbiAgICBiZWZvcmUgPSBjdXJzb3JUb09mZnNldChiZWZvcmUpO1xuICAgIGlmICgoIWJlZm9yZSAmJiBiZWZvcmUgIT09IDApIHx8IGJlZm9yZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1FVRVJZLCAnQmVmb3JlIGlzIG5vdCBhIHZhbGlkIGN1cnNvcicpO1xuICAgIH1cblxuICAgIGlmICgoc2tpcCB8fCAwKSA+PSBiZWZvcmUpIHtcbiAgICAgIC8vIElmIHRoZSBiZWZvcmUgaW5kZXggaXMgbGVzcyB0aGVuIHRoZSBza2lwLCBubyBvYmplY3RzIHdpbGwgYmUgcmV0dXJuZWRcbiAgICAgIGxpbWl0ID0gMDtcbiAgICB9IGVsc2UgaWYgKCghbGltaXQgJiYgbGltaXQgIT09IDApIHx8IChza2lwIHx8IDApICsgbGltaXQgPiBiZWZvcmUpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGxpbWl0IHNldCwgdGhlIGxpbWl0IGlzIGNhbGN1bGF0ZWQuIE9yLCBpZiB0aGUgbGltaXQgKHBsdXMgc2tpcCkgaXMgYmlnZ2VyIHRoYW4gdGhlIGJlZm9yZSBpbmRleCwgdGhlIG5ldyBsaW1pdCBpcyBzZXQuXG4gICAgICBsaW1pdCA9IGJlZm9yZSAtIChza2lwIHx8IDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlcyB0aGUgbGFzdCBwYXJhbVxuICBpZiAobGFzdCB8fCBsYXN0ID09PSAwKSB7XG4gICAgaWYgKGxhc3QgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9RVUVSWSwgJ0xhc3Qgc2hvdWxkIGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKGxhc3QgPiBtYXhMaW1pdCkge1xuICAgICAgLy8gTGFzdCBjYW4ndCBiZSBiaWdnZXIgdGhhbiBQYXJzZSBzZXJ2ZXIgbWF4TGltaXQgY29uZmlnLlxuICAgICAgbGFzdCA9IG1heExpbWl0O1xuICAgIH1cblxuICAgIGlmIChsaW1pdCB8fCBsaW1pdCA9PT0gMCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91cyBsaW1pdCBzZXQsIGl0IG1heSBiZSBhZGp1c3RlZFxuICAgICAgaWYgKGxhc3QgPCBsaW1pdCkge1xuICAgICAgICAvLyBpZiBsYXN0IGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsaW1pdFxuICAgICAgICBza2lwID0gKHNraXAgfHwgMCkgKyAobGltaXQgLSBsYXN0KTsgLy8gVGhlIHNraXAgaXMgYWRqdXN0ZWRcbiAgICAgICAgbGltaXQgPSBsYXN0OyAvLyB0aGUgbGltaXQgaXMgYWRqdXN0ZWRcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09IDApIHtcbiAgICAgIC8vIE5vIG9iamVjdHMgd2lsbCBiZSByZXR1cm5lZFxuICAgICAgbGltaXQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBwcmV2aW91cyBsaW1pdCBzZXQsIHRoZSBsaW1pdCB3aWxsIGJlIGVxdWFsIHRvIGxhc3QgYW5kIHByZSBjb3VudCBpcyBuZWVkZWQuXG4gICAgICBsaW1pdCA9IGxhc3Q7XG4gICAgICBuZWVkVG9QcmVDb3VudCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgc2tpcCxcbiAgICBsaW1pdCxcbiAgICBuZWVkVG9QcmVDb3VudCxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGdldE9iamVjdCwgZmluZE9iamVjdHMsIGNhbGN1bGF0ZVNraXBBbmRMaW1pdCwgbmVlZFRvR2V0QWxsS2V5cyB9O1xuIl19
|