@rudderstack/integrations-lib 0.2.17 → 0.2.19
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/build/types.d.ts +0 -273
- package/build/types.d.ts.map +1 -1
- package/build/types.js +1 -26
- package/build/utils/index.d.ts +2 -2
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +3 -3
- package/build/utils/json-schema-generator.d.ts +109 -0
- package/build/utils/json-schema-generator.d.ts.map +1 -0
- package/build/utils/json-schema-generator.js +218 -0
- package/build/utils/json-schema-generator.test.d.ts +2 -0
- package/build/utils/json-schema-generator.test.d.ts.map +1 -0
- package/build/utils/json-schema-generator.test.js +368 -0
- package/build/utils/misc.d.ts +2 -10
- package/build/utils/misc.d.ts.map +1 -1
- package/build/utils/misc.js +4 -26
- package/build/utils/misc.test.js +21 -65
- package/build/utils/tests.d.ts +8 -0
- package/build/utils/tests.d.ts.map +1 -0
- package/build/utils/tests.js +15 -0
- package/build/utils/tests.test.d.ts +2 -0
- package/build/utils/tests.test.d.ts.map +1 -0
- package/build/utils/tests.test.js +89 -0
- package/package.json +4 -3
- package/build/utils/json.d.ts +0 -51
- package/build/utils/json.d.ts.map +0 -1
- package/build/utils/json.js +0 -520
- package/build/utils/json.test.d.ts +0 -2
- package/build/utils/json.test.d.ts.map +0 -1
- package/build/utils/json.test.js +0 -1290
- package/build/utils/sem.d.ts +0 -49
- package/build/utils/sem.d.ts.map +0 -1
- package/build/utils/sem.js +0 -247
- package/build/utils/sem.test.d.ts +0 -2
- package/build/utils/sem.test.d.ts.map +0 -1
- package/build/utils/sem.test.js +0 -317
package/build/utils/misc.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
29
|
+
exports.generateRandomString = exports.uuidv5 = exports.convertToString = exports.generateUUID = exports.hashToSha256 = exports.formatTimeStamp = exports.getOffsetInSec = exports.flattenJson = exports.getValueFromPropertiesOrTraits = exports.getHashFromArrayWithValueAsObject = exports.getHashFromArrayWithDuplicate = exports.getHashFromArray = exports.removeUndefinedNullEmptyExclBoolInt = exports.isDefinedNotNullNotEmpty = exports.isEmptyObject = exports.isEmpty = exports.isObject = exports.getType = exports.isPrimitive = exports.stripTrailingSlash = exports.isValidUrl = exports.base64Convertor = exports.flattenMap = exports.removeUndefinedAndNullAndEmptyValues = exports.removeUndefinedAndNullValues = exports.removeNullValues = exports.removeUndefinedValues = exports.isBlank = exports.isDefinedAndNotNullAndNotEmpty = exports.isDefinedAndNotNull = exports.isNotNull = exports.isNotEmpty = exports.isDefined = exports.set = exports.get = void 0;
|
|
30
30
|
const lodash_1 = __importDefault(require("lodash"));
|
|
31
31
|
const get_value_1 = __importDefault(require("get-value"));
|
|
32
32
|
exports.get = get_value_1.default;
|
|
@@ -37,7 +37,6 @@ const sha256_1 = __importDefault(require("sha256"));
|
|
|
37
37
|
const crypto_1 = __importDefault(require("crypto"));
|
|
38
38
|
const uuid_1 = require("uuid");
|
|
39
39
|
const logger = __importStar(require("../logger"));
|
|
40
|
-
const instrumentation_error_1 = require("../errors/instrumentation_error");
|
|
41
40
|
const isDefined = (x) => !lodash_1.default.isUndefined(x);
|
|
42
41
|
exports.isDefined = isDefined;
|
|
43
42
|
const isNotEmpty = (x) => !lodash_1.default.isEmpty(x);
|
|
@@ -89,19 +88,6 @@ exports.flattenMap = flattenMap;
|
|
|
89
88
|
// ========================================================================
|
|
90
89
|
// GENERIC UTLITY
|
|
91
90
|
// ========================================================================
|
|
92
|
-
const getEventTime = (message) => {
|
|
93
|
-
if (!message.timestamp && !message.originalTimestamp)
|
|
94
|
-
throw new instrumentation_error_1.InstrumentationError('Event does not have timestamp or originalTimestamp');
|
|
95
|
-
try {
|
|
96
|
-
if (message.timestamp)
|
|
97
|
-
return new Date(message.timestamp);
|
|
98
|
-
}
|
|
99
|
-
catch (e) {
|
|
100
|
-
logger.error('Error in parsing timestamp', e);
|
|
101
|
-
}
|
|
102
|
-
return new Date(message.originalTimestamp);
|
|
103
|
-
};
|
|
104
|
-
exports.getEventTime = getEventTime;
|
|
105
91
|
const base64Convertor = (string) => Buffer.from(string).toString('base64');
|
|
106
92
|
exports.base64Convertor = base64Convertor;
|
|
107
93
|
// return a valid URL object if correct else null
|
|
@@ -356,16 +342,6 @@ exports.hashToSha256 = hashToSha256;
|
|
|
356
342
|
*/
|
|
357
343
|
const generateUUID = () => crypto_1.default.randomUUID({ disableEntropyCache: true });
|
|
358
344
|
exports.generateUUID = generateUUID;
|
|
359
|
-
// Router transformer
|
|
360
|
-
// Error responses
|
|
361
|
-
const getErrorRespEvents = (metadata, statusCode, error, statTags, batched = false) => ({
|
|
362
|
-
metadata,
|
|
363
|
-
batched,
|
|
364
|
-
statusCode,
|
|
365
|
-
error,
|
|
366
|
-
statTags,
|
|
367
|
-
});
|
|
368
|
-
exports.getErrorRespEvents = getErrorRespEvents;
|
|
369
345
|
const convertToString = (value) => {
|
|
370
346
|
if (typeof value === 'string') {
|
|
371
347
|
return value;
|
|
@@ -376,4 +352,6 @@ exports.convertToString = convertToString;
|
|
|
376
352
|
const uuid_namespace = 'e76c6e51-06f9-4222-9636-5aba7e3a84b6';
|
|
377
353
|
const uuidv5 = (val) => (0, uuid_1.v5)(val, uuid_namespace);
|
|
378
354
|
exports.uuidv5 = uuidv5;
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQXVCO0FBQ3ZCLDBEQUE0QjtBQWFuQixjQWJGLG1CQUFHLENBYUU7QUFaWiwwREFBNEI7QUFZZCxjQVpQLG1CQUFHLENBWU87QUFYakIsc0VBQXFDO0FBQ3JDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsK0JBQTBCO0FBQzFCLGtEQUFvQztBQUVwQywyRUFBdUU7QUFNaEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBOUMsUUFBQSxTQUFTLGFBQXFDO0FBQ3BELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGdCQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQTNDLFFBQUEsVUFBVSxjQUFpQztBQUNqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUF0QyxRQUFBLFNBQVMsYUFBNkI7QUFDNUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsSUFBQSxpQkFBUyxFQUFDLENBQUMsQ0FBQyxJQUFJLElBQUEsaUJBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQztBQUFuRSxRQUFBLG1CQUFtQix1QkFBZ0Q7QUFDekUsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQzNELElBQUEsaUJBQVMsRUFBQyxDQUFDLENBQUMsSUFBSSxJQUFBLGlCQUFTLEVBQUMsQ0FBQyxDQUFDLElBQUksSUFBQSxrQkFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBRG5DLFFBQUEsOEJBQThCLGtDQUNL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QUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFMVyxRQUFBLGVBQWUsbUJBSzFCO0FBRUYsTUFBTSxjQUFjLEdBQUcsc0NBQXNDLENBQUM7QUFDdkQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUEsU0FBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUFsRCxRQUFBLE1BQU0sVUFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGdldCBmcm9tICdnZXQtdmFsdWUnO1xuaW1wb3J0IHNldCBmcm9tICdzZXQtdmFsdWUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IHNoYTI1NiBmcm9tICdzaGEyNTYnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgdjUgfSBmcm9tICd1dWlkJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgTWV0YWRhdGEsIFJ1ZGRlclN0YWNrRXZlbnQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBJbnN0cnVtZW50YXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycy9pbnN0cnVtZW50YXRpb25fZXJyb3InO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOTElORVJTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IGdldCwgc2V0IH07XG5leHBvcnQgY29uc3QgaXNEZWZpbmVkID0gKHg6IHVua25vd24pID0+ICFfLmlzVW5kZWZpbmVkKHgpO1xuZXhwb3J0IGNvbnN0IGlzTm90RW1wdHkgPSAoeDogdW5rbm93bikgPT4gIV8uaXNFbXB0eSh4KTtcbmV4cG9ydCBjb25zdCBpc05vdE51bGwgPSAoeDogdW5rbm93bikgPT4geCAhPSBudWxsO1xuZXhwb3J0IGNvbnN0IGlzRGVmaW5lZEFuZE5vdE51bGwgPSAoeDogdW5rbm93bikgPT4gaXNEZWZpbmVkKHgpICYmIGlzTm90TnVsbCh4KTtcbmV4cG9ydCBjb25zdCBpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkgPSAoeDogdW5rbm93bikgPT5cbiAgaXNEZWZpbmVkKHgpICYmIGlzTm90TnVsbCh4KSAmJiBpc05vdEVtcHR5KHgpO1xuZXhwb3J0IGNvbnN0IGlzQmxhbmsgPSAodmFsdWU6IHVua25vd24pID0+IF8uaXNFbXB0eShfLnRvU3RyaW5nKHZhbHVlKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGNvbnN0IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyA9IChvYmo6IHVua25vd24pID0+IHtcbiAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBfLnBpY2tCeShvYmosIGlzRGVmaW5lZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTnVsbFZhbHVlcyA9IChvYmo6IHVua25vd24pID0+IHtcbiAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBfLnBpY2tCeShvYmosIGlzTm90TnVsbCk7XG59O1xuZXhwb3J0IGNvbnN0IHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMgPSAob2JqOiB1bmtub3duKSA9PiB7XG4gIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICByZXR1cm4gXy5waWNrQnkob2JqLCBpc0RlZmluZWRBbmROb3ROdWxsKTtcbn07XG5leHBvcnQgY29uc3QgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzID0gKG9iajogdW5rbm93bikgPT4ge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIF8ucGlja0J5KG9iaiwgaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KTtcbn07XG5cbi8qKlxuICogVGhlIGZsYXR0ZW5NYXAgZnVuY3Rpb24gdGFrZXMgYSBjb2xsZWN0aW9uIGFzIGlucHV0IGFuZCByZXR1cm5zIGEgZmxhdHRlbmVkIHZlcnNpb24gb2YgdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBpbnB1dCBpcyBub3QgYW4gYXJyYXkgb3IgYW4gb2JqZWN0LCBpdCBpcyByZXR1cm5lZCBhcyBpcy4gT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgZmxhdE1hcCBmdW5jdGlvbiBmcm9tIHRoZSBsb2Rhc2ggbGlicmFyeSB0byBmbGF0dGVuIHRoZSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmbGF0dGVuTWFwID0gKGNvbGxlY3Rpb246IHVua25vd24pID0+IHtcbiAgaWYgKCFfLmlzQXJyYXkoY29sbGVjdGlvbikgJiYgIV8uaXNPYmplY3QoY29sbGVjdGlvbikpIHJldHVybiBjb2xsZWN0aW9uO1xuICByZXR1cm4gXy5mbGF0TWFwKGNvbGxlY3Rpb24sICh4KSA9PiB4KTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR0VORVJJQyBVVExJVFlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnRUaW1lID0gKG1lc3NhZ2U6IFJ1ZGRlclN0YWNrRXZlbnQpID0+IHtcbiAgaWYgKCFtZXNzYWdlLnRpbWVzdGFtcCAmJiAhbWVzc2FnZS5vcmlnaW5hbFRpbWVzdGFtcClcbiAgICB0aHJvdyBuZXcgSW5zdHJ1bWVudGF0aW9uRXJyb3IoJ0V2ZW50IGRvZXMgbm90IGhhdmUgdGltZXN0YW1wIG9yIG9yaWdpbmFsVGltZXN0YW1wJyk7XG4gIHRyeSB7XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wKSByZXR1cm4gbmV3IERhdGUobWVzc2FnZS50aW1lc3RhbXApO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdFcnJvciBpbiBwYXJzaW5nIHRpbWVzdGFtcCcsIGUpO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShtZXNzYWdlLm9yaWdpbmFsVGltZXN0YW1wKTtcbn07XG5cbmV4cG9ydCBjb25zdCBiYXNlNjRDb252ZXJ0b3IgPSAoc3RyaW5nOiBzdHJpbmcpID0+IEJ1ZmZlci5mcm9tKHN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4vLyByZXR1cm4gYSB2YWxpZCBVUkwgb2JqZWN0IGlmIGNvcnJlY3QgZWxzZSBudWxsXG5leHBvcnQgY29uc3QgaXNWYWxpZFVybCA9ICh1cmw6IHN0cmluZyB8IFVSTCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHVybCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RyaXBUcmFpbGluZ1NsYXNoID0gKHN0cjogc3RyaW5nKSA9PlxuICBzdHIgJiYgc3RyLmVuZHNXaXRoKCcvJykgPyBzdHIuc2xpY2UoMCwgLTEpIDogc3RyO1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAoYXJnOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICByZXR1cm4gYXJnID09IG51bGwgfHwgKHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGUgIT09ICdmdW5jdGlvbicpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhcmdcbiAqIEByZXR1cm5zIHt0eXBlfVxuICpcbiAqIFJldHVybnMgdHlwZSBvZiBwYXNzZWQgYXJnXG4gKiBmb3IgbnVsbCBhcmdzcyByZXR1cm5zIFwiTlVMTFwiIGluc3RlZCBvZiBcIm9iamVjdFwiXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0VHlwZSA9IChhcmc6IHVua25vd24pID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gIGlmIChhcmcgPT0gbnVsbCkge1xuICAgIHJldHVybiAnTlVMTCc7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG4gIHJldHVybiB0eXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChpbnB1dDogdW5rbm93bikgPT4gXy5pc0VtcHR5KF8udG9TdHJpbmcoaW5wdXQpLnRyaW0oKSk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGZvciBlbXB0eSBvYmplY3Qge31cbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNFbXB0eU9iamVjdCA9IChvYmo6IGFueSkgPT4ge1xuICBpZiAoIW9iaikge1xuICAgIGxvZ2dlci53YXJuKCdpbnB1dCBpcyB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdmFsdWUgaXMgRGVmaW5lZCwgTm90IG51bGwgYW5kIE5vdCBFbXB0eS5cbiAqIENyZWF0ZSB0aGlzIGZ1bmN0aW9uLCBCZWNhdXNlIGV4aXN0aW5nIGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgxMjMpIGlzIHJldHVybmluZyBmYWxzZSBkdWUgdG8gbG9kYXNoIF8uaXNFbXB0eSBmdW5jdGlvbi5cbiAqIF8uaXNFbXB0eSBpcyB1c2VkIHRvIGRldGVjdCBlbXB0eSBjb2xsZWN0aW9ucy9vYmplY3RzIGFuZCBpdCB3aWxsIHJldHVybiB0cnVlIGZvciBJbnRlZ2VyLCBCb29sZWFuIHZhbHVlcy5cbiAqIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvaXNzdWVzLzQ5NlxuICogQHBhcmFtIHsqfSB2YWx1ZSAxMjNcbiAqIEByZXR1cm5zIHllc1xuICovXG5leHBvcnQgY29uc3QgaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5ID0gKHZhbHVlOiB1bmtub3duKSA9PlxuICAhKFxuICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgIE51bWJlci5pc05hTih2YWx1ZSkgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApXG4gICk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCA9IChvYmo6IHVua25vd24pID0+IHtcbiAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBfLnBpY2tCeShvYmosIGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSk7XG59O1xuXG4vLyBGb3JtYXQgdGhlIGRlc3RpbmF0aW9uLkNvbmZpZy5keW5hbWljTWFwIGFycmF5cyB0byBoYXNoTWFwXG5leHBvcnQgY29uc3QgZ2V0SGFzaEZyb21BcnJheSA9IChhcnJheXMsIGZyb21LZXkgPSAnZnJvbScsIHRvS2V5ID0gJ3RvJywgaXNMb3dlckNhc2UgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IGhhc2hNYXAgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlzKSkge1xuICAgIGFycmF5cy5mb3JFYWNoKChhcnJheSkgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkoYXJyYXlbZnJvbUtleV0pKSByZXR1cm47XG4gICAgICBoYXNoTWFwW2lzTG93ZXJDYXNlID8gYXJyYXlbZnJvbUtleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIDogYXJyYXlbZnJvbUtleV1dID1cbiAgICAgICAgYXJyYXlbdG9LZXldO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBoYXNoTWFwO1xufTtcblxuLyoqXG4gKiBGb3JtYXQgdGhlIGRlc3RpbmF0aW9uLkNvbmZpZy5keW5hbWljTWFwIGFycmF5cyB0byBoYXNoTWFwXG4gKiB3aGVyZSB2YWx1ZSBpcyBhbiBhcnJheVxuICogQHBhcmFtICB7fSBhcnJheXMgW3tcImZyb21cIjpcInByb3AxXCIsXCJ0b1wiOlwidmFsMVwifSx7XCJmcm9tXCI6XCJwcm9wMVwiLFwidG9cIjpcInZhbDJcIn0se1wiZnJvbVwiOlwicHJvcDJcIixcInRvXCI6XCJ2YWwyXCJ9XVxuICogQHBhcmFtICB7fSBmcm9tS2V5PVwiZnJvbVwiXG4gKiBAcGFyYW0gIHt9IHRvS2V5PVwidG9cIlxuICogQHBhcmFtICB7fSBpc0xvd2VyQ2FzZT10cnVlXG4gKiBAcGFyYW0gIHt9IHJldHVybiBoYXNobWFwIHtcInByb3AxXCI6W1widmFsMVwiLFwidmFsMlwiXSxcInByb3AyXCI6W1widmFsMlwiXX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlID0gKFxuICBhcnJheXM6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH1bXSxcbiAgZnJvbUtleSA9ICdmcm9tJyxcbiAgdG9LZXkgPSAndG8nLFxuICBpc0xvd2VyQ2FzZSA9IHRydWUsXG4pID0+IHtcbiAgY29uc3QgaGFzaE1hcCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheXMpKSB7XG4gICAgYXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eShhcnJheVtmcm9tS2V5XSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGtleSA9IGlzTG93ZXJDYXNlXG4gICAgICAgID8gYXJyYXlbZnJvbUtleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKVxuICAgICAgICA6IGFycmF5W2Zyb21LZXldLnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgICBpZiAoaGFzaE1hcFtrZXldKSB7XG4gICAgICAgIGhhc2hNYXBba2V5XS5hZGQoYXJyYXlbdG9LZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc2hNYXBba2V5XSA9IG5ldyBTZXQoKTtcbiAgICAgICAgaGFzaE1hcFtrZXldLmFkZChhcnJheVt0b0tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBoYXNoTWFwO1xufTtcblxuLyoqXG4gKiBGb3JtYXQgdGhlIGFycmF5cyB0byBoYXNoTWFwIHdpdGgga2V5IGFzIGBmcm9tS2V5YCBhbmQgdmFsdWUgYXMgT2JqZWN0XG4gKiBAcGFyYW0geyp9IGFycmF5cyBbe1wiaWRcIjpcImEwYjhlZmUxLWM4MjgtNGM2My04ODUwLTBkMDc0Mjg4OGY5ZFwiLFwibmFtZVwiOlwiRW1haWxcIixcInR5cGVcIjpcImVtYWlsXCIsXCJ0eXBlX2NvbmZpZ1wiOnt9LFwiZGF0ZV9jcmVhdGVkXCI6XCIxNjYyMjI1ODQwMjg0XCIsXCJoaWRlX2Zyb21fZ3Vlc3RzXCI6ZmFsc2UsXCJyZXF1aXJlZFwiOmZhbHNlfV1cbiAqIEBwYXJhbSB7Kn0gZnJvbUtleSBuYW1lXG4gKiBAcGFyYW0geyp9IGlzTG93ZXJDYXNlIGZhbHNlXG4gKiBAcmV0dXJucyAvLyB7XCJFbWFpbFwiOntcImlkXCI6XCJhMGI4ZWZlMS1jODI4LTRjNjMtODg1MC0wZDA3NDI4ODhmOWRcIixcIm5hbWVcIjpcIkVtYWlsXCIsXCJ0eXBlXCI6XCJlbWFpbFwiLFwidHlwZV9jb25maWdcIjp7fSxcImRhdGVfY3JlYXRlZFwiOlwiMTY2MjIyNTg0MDI4NFwiLFwiaGlkZV9mcm9tX2d1ZXN0c1wiOmZhbHNlLFwicmVxdWlyZWRcIjpmYWxzZX19XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIYXNoRnJvbUFycmF5V2l0aFZhbHVlQXNPYmplY3QgPSAoYXJyYXlzLCBmcm9tS2V5ID0gJ2Zyb20nLCBpc0xvd2VyQ2FzZSA9IHRydWUpID0+IHtcbiAgY29uc3QgaGFzaE1hcCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheXMpKSB7XG4gICAgYXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eShhcnJheVtmcm9tS2V5XSkpIHJldHVybjtcbiAgICAgIGhhc2hNYXBbaXNMb3dlckNhc2UgPyBhcnJheVtmcm9tS2V5XS50b0xvd2VyQ2FzZSgpIDogYXJyYXlbZnJvbUtleV1dID0gYXJyYXk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGhhc2hNYXA7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gYSBtZXNzYWdlIG9iamVjdCBiYXNlZCBvbiBhIGdpdmVuIGtleS4gSXQgc2VhcmNoZXMgZm9yIHRoZSBrZXkgaW4gdGhlIHByb3BlcnRpZXMsIHRyYWl0cywgYW5kIGNvbnRleHQudHJhaXRzIG9mIHRoZSBtZXNzYWdlIG9iamVjdCBpbiB0aGF0IG9yZGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMubWVzc2FnZSAtIFRoZSBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMsIHRyYWl0cywgYW5kIGNvbnRleHQudHJhaXRzLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMua2V5IC0gVGhlIGtleSB0byBzZWFyY2ggZm9yIGluIHRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgZm91bmQgaW4gdGhlIG1lc3NhZ2Ugb2JqZWN0IGZvciB0aGUgZ2l2ZW4ga2V5LCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kIG9yIHRoZSB2YWx1ZSBpcyBudWxsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzID0gKHsgbWVzc2FnZSwga2V5IH0pID0+IHtcbiAgY29uc3Qga2V5U2V0ID0gWydwcm9wZXJ0aWVzJywgJ3RyYWl0cycsICdjb250ZXh0LnRyYWl0cyddO1xuXG4gIGNvbnN0IHZhbCA9IF8uZmluZChcbiAgICBfLm1hcChrZXlTZXQsIChrKSA9PiBnZXQobWVzc2FnZSwgYCR7a30uJHtrZXl9YCkpLFxuICAgICh2KSA9PiAhXy5pc05pbCh2KSxcbiAgKTtcbiAgcmV0dXJuICFfLmlzTmlsKHZhbCkgPyB2YWwgOiBudWxsO1xufTtcblxuLyoqXG4gKiBGbGF0dGVucyBhIEpTT04gb2JqZWN0IGludG8gYSBzaW5nbGUtbGV2ZWwgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBkYXRhIC0gVGhlIEpTT04gb2JqZWN0IHRvIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSBzZXBhcmF0b3IgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgdGhlIGtleXMgaW4gdGhlIGZsYXR0ZW5lZCBvYmplY3QuIERlZmF1bHQgaXMgJy4nLlxuICogQHBhcmFtIG1vZGUgLSBUaGUgbW9kZSB1c2VkIHRvIGZsYXR0ZW4gYXJyYXlzLiBJZiBzZXQgdG8gJ3N0cmljdCcsIHRoZSBhcnJheSBpbmRpY2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZsYXR0ZW5lZCBrZXlzLiBEZWZhdWx0IGlzICdub3JtYWwnLlxuICogQHJldHVybnMgVGhlIGZsYXR0ZW5lZCBKU09OIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXR0ZW5Kc29uID0gKGRhdGE6IHVua25vd24sIHNlcGFyYXRvciA9ICcuJywgbW9kZSA9ICdub3JtYWwnKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIC8vIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdGhlIGRhdGFcbiAgY29uc3QgcmVjdXJzZSA9IChjdXIsIHByb3ApID0+IHtcbiAgICBsZXQgaTtcbiAgICBpZiAoT2JqZWN0KGN1cikgIT09IGN1cikge1xuICAgICAgcmVzdWx0W3Byb3BdID0gY3VyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXIpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY3VyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChtb2RlID09PSAnc3RyaWN0Jykge1xuICAgICAgICAgIHJlY3Vyc2UoY3VyW2ldLCBgJHtwcm9wfSR7c2VwYXJhdG9yfSR7aX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWN1cnNlKGN1cltpXSwgYCR7cHJvcH1bJHtpfV1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVzdWx0W3Byb3BdID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc0VtcHR5RmxhZyA9IHRydWU7XG4gICAgICBPYmplY3Qua2V5cyhjdXIpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpc0VtcHR5RmxhZyA9IGZhbHNlO1xuICAgICAgICByZWN1cnNlKGN1cltrZXldLCBwcm9wID8gYCR7cHJvcH0ke3NlcGFyYXRvcn0ke2tleX1gIDoga2V5KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzRW1wdHlGbGFnICYmIHByb3ApIHJlc3VsdFtwcm9wXSA9IHt9O1xuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGRhdGEsICcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBvZmZzZXQgdmFsdWUgaW4gc2Vjb25kcyBmb3IgYSBnaXZlbiB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdGltZXpvbmUgdmFsdWUgZm9yIHdoaWNoIHRoZSBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZC5cbiAqIEByZXR1cm5zIFRoZSBvZmZzZXQgdmFsdWUgaW4gc2Vjb25kcyBmb3IgdGhlIGdpdmVuIHRpbWV6b25lLiBJZiB0aGUgdGltZXpvbmUgaXMgaW52YWxpZCBvciBub3QgZm91bmQsIGl0IHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldEluU2VjKCdBc2lhL0NhbGN1dHRhJyk7XG4gKiBjb25zb2xlLmxvZyhvZmZzZXQpOyAvLyBPdXRwdXQ6IDE5ODAwXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRPZmZzZXRJblNlYyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBtb21lbnQudHouem9uZSh2YWx1ZSk7XG4gIGlmIChuYW1lKSB7XG4gICAgY29uc3QgeCA9IG1vbWVudCgpLnR6KHZhbHVlKS5mb3JtYXQoJ1onKTtcbiAgICBjb25zdCBzcGxpdCA9IHguc3BsaXQoJzonKTtcbiAgICBjb25zdCBob3VyID0gTnVtYmVyKHNwbGl0WzBdKTtcbiAgICBjb25zdCBtaW4gPSBOdW1iZXIoc3BsaXRbMV0pO1xuICAgIGxldCBzZWMgPSAwO1xuICAgIHNlYyA9IGhvdXIgPCAwID8gLTEgKiAoaG91ciAqIC02MCAqIDYwICsgbWluICogNjApIDogaG91ciAqIDYwICogNjAgKyBtaW4gKiA2MDtcbiAgICByZXR1cm4gc2VjO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGF0ZSBzdHJpbmcgaW50byBhIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKiBJZiBhIGZvcm1hdCBzdHJpbmcgaXMgcHJvdmlkZWQsIGl0IHVzZXMgdGhlIG1vbWVudCBsaWJyYXJ5IHRvIGZvcm1hdCB0aGUgZGF0ZS5cbiAqIElmIG5vIGZvcm1hdCBzdHJpbmcgaXMgcHJvdmlkZWQsIGl0IHJldHVybnMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZGF0ZS5cbiAqIEBwYXJhbSBkYXRlU3RyIC0gVGhlIGRhdGUgc3RyaW5nIHRvIGJlIGZvcm1hdHRlZC5cbiAqIEBwYXJhbSBmb3JtYXQgLSAoT3B0aW9uYWwpIFRoZSBmb3JtYXQgc3RyaW5nIHRvIGJlIHVzZWQgZm9yIGZvcm1hdHRpbmcgdGhlIGRhdGUuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgYXMgYSBzdHJpbmcgaWYgYSBmb3JtYXQgc3RyaW5nIGlzIHByb3ZpZGVkLFxuICogICAgICAgICAgb3RoZXJ3aXNlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGRhdGUgYXMgYSBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRUaW1lU3RhbXAgPSAoZGF0ZVN0cjogc3RyaW5nLCBmb3JtYXQ/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuICAvLyBtb21lbnQgZm9ybWF0IGlzIHBhc3NlZC4gZm9ybWF0IGFjY29yZGluZ2x5XG4gIGlmIChmb3JtYXQpIHtcbiAgICByZXR1cm4gbW9tZW50LnV0YyhkYXRlKS5mb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8vIHJldHVybiBkZWZhdWx0IGZvcm1hdFxuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzaFRvU2hhMjU2ID0gKHZhbHVlOiBzdHJpbmcgfCBCdWZmZXIgfCBudW1iZXJbXSkgPT4gc2hhMjU2KHZhbHVlKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgdXNpbmcgdGhlIGBjcnlwdG8ucmFuZG9tVVVJRCgpYCBtZXRob2QuXG4gKiBUaGUgYGRpc2FibGVFbnRyb3B5Q2FjaGVgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgIHRvIHByZXZlbnQgY2FjaGluZyBvZiBnZW5lcmF0ZWQgVVVJRHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSByYW5kb21seSBnZW5lcmF0ZWQgVVVJRC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL2NyeXB0by5odG1sI2NyeXB0b3JhbmRvbXV1aWRvcHRpb25zOn46dGV4dD1vcHRpb25zJTIwJTNDT2JqZWN0JTNFLSxkaXNhYmxlRW50cm9weUNhY2hlLC0lM0Nib29sZWFuJTNFJTIwQnl9XG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVVVSUQgPSAoKTogc3RyaW5nID0+IGNyeXB0by5yYW5kb21VVUlEKHsgZGlzYWJsZUVudHJvcHlDYWNoZTogdHJ1ZSB9KTtcblxuLy8gUm91dGVyIHRyYW5zZm9ybWVyXG4vLyBFcnJvciByZXNwb25zZXNcbmV4cG9ydCBjb25zdCBnZXRFcnJvclJlc3BFdmVudHMgPSAoXG4gIG1ldGFkYXRhOiBNZXRhZGF0YVtdLFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIGVycm9yOiBzdHJpbmcsXG4gIHN0YXRUYWdzOiBPYmplY3QsXG4gIGJhdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbik6IHtcbiAgbWV0YWRhdGE6IE1ldGFkYXRhW107XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbiAgc3RhdFRhZ3M6IE9iamVjdDtcbiAgYmF0Y2hlZDogYm9vbGVhbjtcbn0gPT4gKHtcbiAgbWV0YWRhdGEsXG4gIGJhdGNoZWQsXG4gIHN0YXR1c0NvZGUsXG4gIGVycm9yLFxuICBzdGF0VGFncyxcbn0pO1xuXG5leHBvcnQgY29uc3QgY29udmVydFRvU3RyaW5nID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07XG5cbmNvbnN0IHV1aWRfbmFtZXNwYWNlID0gJ2U3NmM2ZTUxLTA2ZjktNDIyMi05NjM2LTVhYmE3ZTNhODRiNic7XG5leHBvcnQgY29uc3QgdXVpZHY1ID0gKHZhbDogc3RyaW5nKSA9PiB2NSh2YWwsIHV1aWRfbmFtZXNwYWNlKTtcbiJdfQ==
|
|
355
|
+
const generateRandomString = (length = 10) => crypto_1.default.randomBytes(length).toString('hex').slice(0, length);
|
|
356
|
+
exports.generateRandomString = generateRandomString;
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQXVCO0FBQ3ZCLDBEQUE0QjtBQVduQixjQVhGLG1CQUFHLENBV0U7QUFWWiwwREFBNEI7QUFVZCxjQVZQLG1CQUFHLENBVU87QUFUakIsc0VBQXFDO0FBQ3JDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsK0JBQTBCO0FBQzFCLGtEQUFvQztBQU03QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUE5QyxRQUFBLFNBQVMsYUFBcUM7QUFDcEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBM0MsUUFBQSxVQUFVLGNBQWlDO0FBQ2pELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQXRDLFFBQUEsU0FBUyxhQUE2QjtBQUM1QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFBLGlCQUFTLEVBQUMsQ0FBQyxDQUFDLElBQUksSUFBQSxpQkFBUyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQW5FLFFBQUEsbUJBQW1CLHVCQUFnRDtBQUN6RSxNQUFNLDhCQUE4QixHQUFHLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FDM0QsSUFBQSxpQkFBUyxFQUFDLENBQUMsQ0FBQyxJQUFJLElBQUEsaUJBQVMsRUFBQyxDQUFDLENBQUMsSUFBSSxJQUFBLGtCQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUM7QUFEbkMsUUFBQSw4QkFBOEIsa0NBQ0s7QUFDekMsTUFBTSxP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S0FBaUMsRUFBRSxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLEtBQUssQ0FBQyxDQUFDO0FBQXBFLFFBQUEsWUFBWSxnQkFBd0Q7QUFFakY7Ozs7Ozs7R0FPRztBQUNJLE1BQU0sWUFBWSxHQUFHLEdBQVcsRUFBRSxDQUFDLGdCQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUE5RSxRQUFBLFlBQVksZ0JBQWtFO0FBRXBGLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7SUFDNUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFMVyxRQUFBLGVBQWUsbUJBSzFCO0FBRUYsTUFBTSxjQUFjLEdBQUcsc0NBQXNDLENBQUM7QUFDdkQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUEsU0FBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUFsRCxRQUFBLE1BQU0sVUFBNEM7QUFFeEQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxFQUFFLENBQzFELGdCQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRGpELFFBQUEsb0JBQW9CLHdCQUM2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2dldC12YWx1ZSc7XG5pbXBvcnQgc2V0IGZyb20gJ3NldC12YWx1ZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgc2hhMjU2IGZyb20gJ3NoYTI1Nic7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyB2NSB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSU5MSU5FUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHsgZ2V0LCBzZXQgfTtcbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSAoeDogdW5rbm93bikgPT4gIV8uaXNVbmRlZmluZWQoeCk7XG5leHBvcnQgY29uc3QgaXNOb3RFbXB0eSA9ICh4OiB1bmtub3duKSA9PiAhXy5pc0VtcHR5KHgpO1xuZXhwb3J0IGNvbnN0IGlzTm90TnVsbCA9ICh4OiB1bmtub3duKSA9PiB4ICE9IG51bGw7XG5leHBvcnQgY29uc3QgaXNEZWZpbmVkQW5kTm90TnVsbCA9ICh4OiB1bmtub3duKSA9PiBpc0RlZmluZWQoeCkgJiYgaXNOb3ROdWxsKHgpO1xuZXhwb3J0IGNvbnN0IGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSA9ICh4OiB1bmtub3duKSA9PlxuICBpc0RlZmluZWQoeCkgJiYgaXNOb3ROdWxsKHgpICYmIGlzTm90RW1wdHkoeCk7XG5leHBvcnQgY29uc3QgaXNCbGFuayA9ICh2YWx1ZTogdW5rbm93bikgPT4gXy5pc0VtcHR5KF8udG9TdHJpbmcodmFsdWUpKTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgcmVtb3ZlVW5kZWZpbmVkVmFsdWVzID0gKG9iajogdW5rbm93bikgPT4ge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIF8ucGlja0J5KG9iaiwgaXNEZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVOdWxsVmFsdWVzID0gKG9iajogdW5rbm93bikgPT4ge1xuICBpZiAoIV8uaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIF8ucGlja0J5KG9iaiwgaXNOb3ROdWxsKTtcbn07XG5leHBvcnQgY29uc3QgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyA9IChvYmo6IHVua25vd24pID0+IHtcbiAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBfLnBpY2tCeShvYmosIGlzRGVmaW5lZEFuZE5vdE51bGwpO1xufTtcbmV4cG9ydCBjb25zdCByZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMgPSAob2JqOiB1bmtub3duKSA9PiB7XG4gIGlmICghXy5pc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICByZXR1cm4gXy5waWNrQnkob2JqLCBpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkpO1xufTtcblxuLyoqXG4gKiBUaGUgZmxhdHRlbk1hcCBmdW5jdGlvbiB0YWtlcyBhIGNvbGxlY3Rpb24gYXMgaW5wdXQgYW5kIHJldHVybnMgYSBmbGF0dGVuZWQgdmVyc2lvbiBvZiB0aGUgY29sbGVjdGlvbi4gSWYgdGhlIGlucHV0IGlzIG5vdCBhbiBhcnJheSBvciBhbiBvYmplY3QsIGl0IGlzIHJldHVybmVkIGFzIGlzLiBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBmbGF0TWFwIGZ1bmN0aW9uIGZyb20gdGhlIGxvZGFzaCBsaWJyYXJ5IHRvIGZsYXR0ZW4gdGhlIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXR0ZW5NYXAgPSAoY29sbGVjdGlvbjogdW5rbm93bikgPT4ge1xuICBpZiAoIV8uaXNBcnJheShjb2xsZWN0aW9uKSAmJiAhXy5pc09iamVjdChjb2xsZWN0aW9uKSkgcmV0dXJuIGNvbGxlY3Rpb247XG4gIHJldHVybiBfLmZsYXRNYXAoY29sbGVjdGlvbiwgKHgpID0+IHgpO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBHRU5FUklDIFVUTElUWVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBiYXNlNjRDb252ZXJ0b3IgPSAoc3RyaW5nOiBzdHJpbmcpID0+IEJ1ZmZlci5mcm9tKHN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4vLyByZXR1cm4gYSB2YWxpZCBVUkwgb2JqZWN0IGlmIGNvcnJlY3QgZWxzZSBudWxsXG5leHBvcnQgY29uc3QgaXNWYWxpZFVybCA9ICh1cmw6IHN0cmluZyB8IFVSTCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHVybCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RyaXBUcmFpbGluZ1NsYXNoID0gKHN0cjogc3RyaW5nKSA9PlxuICBzdHIgJiYgc3RyLmVuZHNXaXRoKCcvJykgPyBzdHIuc2xpY2UoMCwgLTEpIDogc3RyO1xuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAoYXJnOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICByZXR1cm4gYXJnID09IG51bGwgfHwgKHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGUgIT09ICdmdW5jdGlvbicpO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhcmdcbiAqIEByZXR1cm5zIHt0eXBlfVxuICpcbiAqIFJldHVybnMgdHlwZSBvZiBwYXNzZWQgYXJnXG4gKiBmb3IgbnVsbCBhcmdzcyByZXR1cm5zIFwiTlVMTFwiIGluc3RlZCBvZiBcIm9iamVjdFwiXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0VHlwZSA9IChhcmc6IHVua25vd24pID0+IHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gIGlmIChhcmcgPT0gbnVsbCkge1xuICAgIHJldHVybiAnTlVMTCc7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG4gIHJldHVybiB0eXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChpbnB1dDogdW5rbm93bikgPT4gXy5pc0VtcHR5KF8udG9TdHJpbmcoaW5wdXQpLnRyaW0oKSk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGZvciBlbXB0eSBvYmplY3Qge31cbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNFbXB0eU9iamVjdCA9IChvYmo6IGFueSkgPT4ge1xuICBpZiAoIW9iaikge1xuICAgIGxvZ2dlci53YXJuKCdpbnB1dCBpcyB1bmRlZmluZWQgb3IgbnVsbCcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgdmFsdWUgaXMgRGVmaW5lZCwgTm90IG51bGwgYW5kIE5vdCBFbXB0eS5cbiAqIENyZWF0ZSB0aGlzIGZ1bmN0aW9uLCBCZWNhdXNlIGV4aXN0aW5nIGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgxMjMpIGlzIHJldHVybmluZyBmYWxzZSBkdWUgdG8gbG9kYXNoIF8uaXNFbXB0eSBmdW5jdGlvbi5cbiAqIF8uaXNFbXB0eSBpcyB1c2VkIHRvIGRldGVjdCBlbXB0eSBjb2xsZWN0aW9ucy9vYmplY3RzIGFuZCBpdCB3aWxsIHJldHVybiB0cnVlIGZvciBJbnRlZ2VyLCBCb29sZWFuIHZhbHVlcy5cbiAqIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvaXNzdWVzLzQ5NlxuICogQHBhcmFtIHsqfSB2YWx1ZSAxMjNcbiAqIEByZXR1cm5zIHllc1xuICovXG5leHBvcnQgY29uc3QgaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5ID0gKHZhbHVlOiB1bmtub3duKSA9PlxuICAhKFxuICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgIE51bWJlci5pc05hTih2YWx1ZSkgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApXG4gICk7XG5cbmV4cG9ydCBjb25zdCByZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCA9IChvYmo6IHVua25vd24pID0+IHtcbiAgaWYgKCFfLmlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7XG4gIHJldHVybiBfLnBpY2tCeShvYmosIGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSk7XG59O1xuXG4vLyBGb3JtYXQgdGhlIGRlc3RpbmF0aW9uLkNvbmZpZy5keW5hbWljTWFwIGFycmF5cyB0byBoYXNoTWFwXG5leHBvcnQgY29uc3QgZ2V0SGFzaEZyb21BcnJheSA9IChhcnJheXMsIGZyb21LZXkgPSAnZnJvbScsIHRvS2V5ID0gJ3RvJywgaXNMb3dlckNhc2UgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IGhhc2hNYXAgPSB7fTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlzKSkge1xuICAgIGFycmF5cy5mb3JFYWNoKChhcnJheSkgPT4ge1xuICAgICAgaWYgKGlzRW1wdHkoYXJyYXlbZnJvbUtleV0pKSByZXR1cm47XG4gICAgICBoYXNoTWFwW2lzTG93ZXJDYXNlID8gYXJyYXlbZnJvbUtleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIDogYXJyYXlbZnJvbUtleV1dID1cbiAgICAgICAgYXJyYXlbdG9LZXldO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBoYXNoTWFwO1xufTtcblxuLyoqXG4gKiBGb3JtYXQgdGhlIGRlc3RpbmF0aW9uLkNvbmZpZy5keW5hbWljTWFwIGFycmF5cyB0byBoYXNoTWFwXG4gKiB3aGVyZSB2YWx1ZSBpcyBhbiBhcnJheVxuICogQHBhcmFtICB7fSBhcnJheXMgW3tcImZyb21cIjpcInByb3AxXCIsXCJ0b1wiOlwidmFsMVwifSx7XCJmcm9tXCI6XCJwcm9wMVwiLFwidG9cIjpcInZhbDJcIn0se1wiZnJvbVwiOlwicHJvcDJcIixcInRvXCI6XCJ2YWwyXCJ9XVxuICogQHBhcmFtICB7fSBmcm9tS2V5PVwiZnJvbVwiXG4gKiBAcGFyYW0gIHt9IHRvS2V5PVwidG9cIlxuICogQHBhcmFtICB7fSBpc0xvd2VyQ2FzZT10cnVlXG4gKiBAcGFyYW0gIHt9IHJldHVybiBoYXNobWFwIHtcInByb3AxXCI6W1widmFsMVwiLFwidmFsMlwiXSxcInByb3AyXCI6W1widmFsMlwiXX1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlID0gKFxuICBhcnJheXM6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH1bXSxcbiAgZnJvbUtleSA9ICdmcm9tJyxcbiAgdG9LZXkgPSAndG8nLFxuICBpc0xvd2VyQ2FzZSA9IHRydWUsXG4pID0+IHtcbiAgY29uc3QgaGFzaE1hcCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheXMpKSB7XG4gICAgYXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eShhcnJheVtmcm9tS2V5XSkpIHJldHVybjtcbiAgICAgIGNvbnN0IGtleSA9IGlzTG93ZXJDYXNlXG4gICAgICAgID8gYXJyYXlbZnJvbUtleV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKVxuICAgICAgICA6IGFycmF5W2Zyb21LZXldLnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgICBpZiAoaGFzaE1hcFtrZXldKSB7XG4gICAgICAgIGhhc2hNYXBba2V5XS5hZGQoYXJyYXlbdG9LZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc2hNYXBba2V5XSA9IG5ldyBTZXQoKTtcbiAgICAgICAgaGFzaE1hcFtrZXldLmFkZChhcnJheVt0b0tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBoYXNoTWFwO1xufTtcblxuLyoqXG4gKiBGb3JtYXQgdGhlIGFycmF5cyB0byBoYXNoTWFwIHdpdGgga2V5IGFzIGBmcm9tS2V5YCBhbmQgdmFsdWUgYXMgT2JqZWN0XG4gKiBAcGFyYW0geyp9IGFycmF5cyBbe1wiaWRcIjpcImEwYjhlZmUxLWM4MjgtNGM2My04ODUwLTBkMDc0Mjg4OGY5ZFwiLFwibmFtZVwiOlwiRW1haWxcIixcInR5cGVcIjpcImVtYWlsXCIsXCJ0eXBlX2NvbmZpZ1wiOnt9LFwiZGF0ZV9jcmVhdGVkXCI6XCIxNjYyMjI1ODQwMjg0XCIsXCJoaWRlX2Zyb21fZ3Vlc3RzXCI6ZmFsc2UsXCJyZXF1aXJlZFwiOmZhbHNlfV1cbiAqIEBwYXJhbSB7Kn0gZnJvbUtleSBuYW1lXG4gKiBAcGFyYW0geyp9IGlzTG93ZXJDYXNlIGZhbHNlXG4gKiBAcmV0dXJucyAvLyB7XCJFbWFpbFwiOntcImlkXCI6XCJhMGI4ZWZlMS1jODI4LTRjNjMtODg1MC0wZDA3NDI4ODhmOWRcIixcIm5hbWVcIjpcIkVtYWlsXCIsXCJ0eXBlXCI6XCJlbWFpbFwiLFwidHlwZV9jb25maWdcIjp7fSxcImRhdGVfY3JlYXRlZFwiOlwiMTY2MjIyNTg0MDI4NFwiLFwiaGlkZV9mcm9tX2d1ZXN0c1wiOmZhbHNlLFwicmVxdWlyZWRcIjpmYWxzZX19XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRIYXNoRnJvbUFycmF5V2l0aFZhbHVlQXNPYmplY3QgPSAoYXJyYXlzLCBmcm9tS2V5ID0gJ2Zyb20nLCBpc0xvd2VyQ2FzZSA9IHRydWUpID0+IHtcbiAgY29uc3QgaGFzaE1hcCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheXMpKSB7XG4gICAgYXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eShhcnJheVtmcm9tS2V5XSkpIHJldHVybjtcbiAgICAgIGhhc2hNYXBbaXNMb3dlckNhc2UgPyBhcnJheVtmcm9tS2V5XS50b0xvd2VyQ2FzZSgpIDogYXJyYXlbZnJvbUtleV1dID0gYXJyYXk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGhhc2hNYXA7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gYSBtZXNzYWdlIG9iamVjdCBiYXNlZCBvbiBhIGdpdmVuIGtleS4gSXQgc2VhcmNoZXMgZm9yIHRoZSBrZXkgaW4gdGhlIHByb3BlcnRpZXMsIHRyYWl0cywgYW5kIGNvbnRleHQudHJhaXRzIG9mIHRoZSBtZXNzYWdlIG9iamVjdCBpbiB0aGF0IG9yZGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMubWVzc2FnZSAtIFRoZSBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMsIHRyYWl0cywgYW5kIGNvbnRleHQudHJhaXRzLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMua2V5IC0gVGhlIGtleSB0byBzZWFyY2ggZm9yIGluIHRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgZm91bmQgaW4gdGhlIG1lc3NhZ2Ugb2JqZWN0IGZvciB0aGUgZ2l2ZW4ga2V5LCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kIG9yIHRoZSB2YWx1ZSBpcyBudWxsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzID0gKHsgbWVzc2FnZSwga2V5IH0pID0+IHtcbiAgY29uc3Qga2V5U2V0ID0gWydwcm9wZXJ0aWVzJywgJ3RyYWl0cycsICdjb250ZXh0LnRyYWl0cyddO1xuXG4gIGNvbnN0IHZhbCA9IF8uZmluZChcbiAgICBfLm1hcChrZXlTZXQsIChrKSA9PiBnZXQobWVzc2FnZSwgYCR7a30uJHtrZXl9YCkpLFxuICAgICh2KSA9PiAhXy5pc05pbCh2KSxcbiAgKTtcbiAgcmV0dXJuICFfLmlzTmlsKHZhbCkgPyB2YWwgOiBudWxsO1xufTtcblxuLyoqXG4gKiBGbGF0dGVucyBhIEpTT04gb2JqZWN0IGludG8gYSBzaW5nbGUtbGV2ZWwgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBkYXRhIC0gVGhlIEpTT04gb2JqZWN0IHRvIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSBzZXBhcmF0b3IgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgdGhlIGtleXMgaW4gdGhlIGZsYXR0ZW5lZCBvYmplY3QuIERlZmF1bHQgaXMgJy4nLlxuICogQHBhcmFtIG1vZGUgLSBUaGUgbW9kZSB1c2VkIHRvIGZsYXR0ZW4gYXJyYXlzLiBJZiBzZXQgdG8gJ3N0cmljdCcsIHRoZSBhcnJheSBpbmRpY2VzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZsYXR0ZW5lZCBrZXlzLiBEZWZhdWx0IGlzICdub3JtYWwnLlxuICogQHJldHVybnMgVGhlIGZsYXR0ZW5lZCBKU09OIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXR0ZW5Kc29uID0gKGRhdGE6IHVua25vd24sIHNlcGFyYXRvciA9ICcuJywgbW9kZSA9ICdub3JtYWwnKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIC8vIGEgcmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdGhlIGRhdGFcbiAgY29uc3QgcmVjdXJzZSA9IChjdXIsIHByb3ApID0+IHtcbiAgICBsZXQgaTtcbiAgICBpZiAoT2JqZWN0KGN1cikgIT09IGN1cikge1xuICAgICAgcmVzdWx0W3Byb3BdID0gY3VyO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXIpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY3VyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChtb2RlID09PSAnc3RyaWN0Jykge1xuICAgICAgICAgIHJlY3Vyc2UoY3VyW2ldLCBgJHtwcm9wfSR7c2VwYXJhdG9yfSR7aX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWN1cnNlKGN1cltpXSwgYCR7cHJvcH1bJHtpfV1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVzdWx0W3Byb3BdID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc0VtcHR5RmxhZyA9IHRydWU7XG4gICAgICBPYmplY3Qua2V5cyhjdXIpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpc0VtcHR5RmxhZyA9IGZhbHNlO1xuICAgICAgICByZWN1cnNlKGN1cltrZXldLCBwcm9wID8gYCR7cHJvcH0ke3NlcGFyYXRvcn0ke2tleX1gIDoga2V5KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzRW1wdHlGbGFnICYmIHByb3ApIHJlc3VsdFtwcm9wXSA9IHt9O1xuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGRhdGEsICcnKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBvZmZzZXQgdmFsdWUgaW4gc2Vjb25kcyBmb3IgYSBnaXZlbiB0aW1lem9uZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdGltZXpvbmUgdmFsdWUgZm9yIHdoaWNoIHRoZSBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZC5cbiAqIEByZXR1cm5zIFRoZSBvZmZzZXQgdmFsdWUgaW4gc2Vjb25kcyBmb3IgdGhlIGdpdmVuIHRpbWV6b25lLiBJZiB0aGUgdGltZXpvbmUgaXMgaW52YWxpZCBvciBub3QgZm91bmQsIGl0IHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldEluU2VjKCdBc2lhL0NhbGN1dHRhJyk7XG4gKiBjb25zb2xlLmxvZyhvZmZzZXQpOyAvLyBPdXRwdXQ6IDE5ODAwXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRPZmZzZXRJblNlYyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBtb21lbnQudHouem9uZSh2YWx1ZSk7XG4gIGlmIChuYW1lKSB7XG4gICAgY29uc3QgeCA9IG1vbWVudCgpLnR6KHZhbHVlKS5mb3JtYXQoJ1onKTtcbiAgICBjb25zdCBzcGxpdCA9IHguc3BsaXQoJzonKTtcbiAgICBjb25zdCBob3VyID0gTnVtYmVyKHNwbGl0WzBdKTtcbiAgICBjb25zdCBtaW4gPSBOdW1iZXIoc3BsaXRbMV0pO1xuICAgIGxldCBzZWMgPSAwO1xuICAgIHNlYyA9IGhvdXIgPCAwID8gLTEgKiAoaG91ciAqIC02MCAqIDYwICsgbWluICogNjApIDogaG91ciAqIDYwICogNjAgKyBtaW4gKiA2MDtcbiAgICByZXR1cm4gc2VjO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGF0ZSBzdHJpbmcgaW50byBhIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKiBJZiBhIGZvcm1hdCBzdHJpbmcgaXMgcHJvdmlkZWQsIGl0IHVzZXMgdGhlIG1vbWVudCBsaWJyYXJ5IHRvIGZvcm1hdCB0aGUgZGF0ZS5cbiAqIElmIG5vIGZvcm1hdCBzdHJpbmcgaXMgcHJvdmlkZWQsIGl0IHJldHVybnMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgZGF0ZS5cbiAqIEBwYXJhbSBkYXRlU3RyIC0gVGhlIGRhdGUgc3RyaW5nIHRvIGJlIGZvcm1hdHRlZC5cbiAqIEBwYXJhbSBmb3JtYXQgLSAoT3B0aW9uYWwpIFRoZSBmb3JtYXQgc3RyaW5nIHRvIGJlIHVzZWQgZm9yIGZvcm1hdHRpbmcgdGhlIGRhdGUuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgYXMgYSBzdHJpbmcgaWYgYSBmb3JtYXQgc3RyaW5nIGlzIHByb3ZpZGVkLFxuICogICAgICAgICAgb3RoZXJ3aXNlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGRhdGUgYXMgYSBudW1iZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRUaW1lU3RhbXAgPSAoZGF0ZVN0cjogc3RyaW5nLCBmb3JtYXQ/OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuICAvLyBtb21lbnQgZm9ybWF0IGlzIHBhc3NlZC4gZm9ybWF0IGFjY29yZGluZ2x5XG4gIGlmIChmb3JtYXQpIHtcbiAgICByZXR1cm4gbW9tZW50LnV0YyhkYXRlKS5mb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8vIHJldHVybiBkZWZhdWx0IGZvcm1hdFxuICByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzaFRvU2hhMjU2ID0gKHZhbHVlOiBzdHJpbmcgfCBCdWZmZXIgfCBudW1iZXJbXSkgPT4gc2hhMjU2KHZhbHVlKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgdXNpbmcgdGhlIGBjcnlwdG8ucmFuZG9tVVVJRCgpYCBtZXRob2QuXG4gKiBUaGUgYGRpc2FibGVFbnRyb3B5Q2FjaGVgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgIHRvIHByZXZlbnQgY2FjaGluZyBvZiBnZW5lcmF0ZWQgVVVJRHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSByYW5kb21seSBnZW5lcmF0ZWQgVVVJRC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL2NyeXB0by5odG1sI2NyeXB0b3JhbmRvbXV1aWRvcHRpb25zOn46dGV4dD1vcHRpb25zJTIwJTNDT2JqZWN0JTNFLSxkaXNhYmxlRW50cm9weUNhY2hlLC0lM0Nib29sZWFuJTNFJTIwQnl9XG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVVVSUQgPSAoKTogc3RyaW5nID0+IGNyeXB0by5yYW5kb21VVUlEKHsgZGlzYWJsZUVudHJvcHlDYWNoZTogdHJ1ZSB9KTtcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRUb1N0cmluZyA9ICh2YWx1ZTogYW55KSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59O1xuXG5jb25zdCB1dWlkX25hbWVzcGFjZSA9ICdlNzZjNmU1MS0wNmY5LTQyMjItOTYzNi01YWJhN2UzYTg0YjYnO1xuZXhwb3J0IGNvbnN0IHV1aWR2NSA9ICh2YWw6IHN0cmluZykgPT4gdjUodmFsLCB1dWlkX25hbWVzcGFjZSk7XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJhbmRvbVN0cmluZyA9IChsZW5ndGg6IG51bWJlciA9IDEwKSA9PlxuICBjcnlwdG8ucmFuZG9tQnl0ZXMobGVuZ3RoKS50b1N0cmluZygnaGV4Jykuc2xpY2UoMCwgbGVuZ3RoKTtcbiJdfQ==
|