parse-server 9.5.0 → 9.5.1-alpha.2
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/Utils.js +19 -10
- package/lib/triggers.js +19 -9
- package/package.json +1 -1
package/lib/Utils.js
CHANGED
|
@@ -339,16 +339,25 @@ class Utils {
|
|
|
339
339
|
const isMatch = (a, b) => typeof a === 'string' && new RegExp(b).test(a) || a === b;
|
|
340
340
|
const isKeyMatch = k => isMatch(k, key);
|
|
341
341
|
const isValueMatch = v => isMatch(v, value);
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
return true;
|
|
342
|
+
const stack = [obj];
|
|
343
|
+
const seen = new WeakSet();
|
|
344
|
+
while (stack.length > 0) {
|
|
345
|
+
const current = stack.pop();
|
|
346
|
+
if (seen.has(current)) {
|
|
347
|
+
continue;
|
|
349
348
|
}
|
|
350
|
-
|
|
351
|
-
|
|
349
|
+
seen.add(current);
|
|
350
|
+
for (const [k, v] of Object.entries(current)) {
|
|
351
|
+
if (key !== undefined && value === undefined && isKeyMatch(k)) {
|
|
352
|
+
return true;
|
|
353
|
+
} else if (key === undefined && value !== undefined && isValueMatch(v)) {
|
|
354
|
+
return true;
|
|
355
|
+
} else if (key !== undefined && value !== undefined && isKeyMatch(k) && isValueMatch(v)) {
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
if (['[object Object]', '[object Array]'].includes(Object.prototype.toString.call(v))) {
|
|
359
|
+
stack.push(v);
|
|
360
|
+
}
|
|
352
361
|
}
|
|
353
362
|
}
|
|
354
363
|
return false;
|
|
@@ -499,4 +508,4 @@ class Utils {
|
|
|
499
508
|
}
|
|
500
509
|
}
|
|
501
510
|
module.exports = Utils;
|
|
502
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwicHJvbWlzZXMiLCJVdGlscyIsImdldExvY2FsaXplZFBhdGgiLCJkZWZhdWx0UGF0aCIsImxvY2FsZSIsImZpbGUiLCJiYXNlbmFtZSIsImJhc2VQYXRoIiwiZGlybmFtZSIsImxvY2FsZVBhdGgiLCJqb2luIiwibG9jYWxlRmlsZUV4aXN0cyIsImZpbGVFeGlzdHMiLCJzdWJkaXIiLCJsYW5ndWFnZSIsInNwbGl0IiwibGFuZ3VhZ2VQYXRoIiwibGFuZ3VhZ2VGaWxlRXhpc3RzIiwiYWNjZXNzIiwiaXNQYXRoIiwicyIsInRlc3QiLCJmbGF0dGVuT2JqZWN0Iiwib2JqIiwicGFyZW50S2V5IiwiZGVsaW1pdGVyIiwicmVzdWx0Iiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwibmV3S2V5IiwiaXNQcm9taXNlIiwib2JqZWN0IiwiUHJvbWlzZSIsImdldE9iamVjdEtleVBlcm11dGF0aW9ucyIsImluZGV4IiwiY3VycmVudCIsInJlc3VsdHMiLCJrZXlzIiwidmFsdWVzIiwidmFsdWUiLCJuZXh0SW5kZXgiLCJsZW5ndGgiLCJhc3NpZ24iLCJwdXNoIiwidmFsaWRhdGVQYXJhbXMiLCJwYXJhbXMiLCJ0eXBlcyIsInR5cGUiLCJpc09wdGlvbmFsIiwibyIsInBhcmFtIiwidiIsInQiLCJyZWxhdGl2ZVRpbWVUb0RhdGUiLCJ0ZXh0Iiwibm93IiwiRGF0ZSIsInRvTG93ZXJDYXNlIiwicGFydHMiLCJmaWx0ZXIiLCJwYXJ0IiwiZnV0dXJlIiwicGFzdCIsInN0YXR1cyIsImluZm8iLCJzbGljZSIsInBhaXJzIiwic2hpZnQiLCJzZWNvbmRzIiwibnVtIiwiaW50ZXJ2YWwiLCJ2YWwiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJtaWxsaXNlY29uZHMiLCJ2YWx1ZU9mIiwib2JqZWN0Q29udGFpbnNLZXlWYWx1ZSIsImlzTWF0Y2giLCJhIiwiYiIsIlJlZ0V4cCIsImlzS2V5TWF0Y2giLCJrIiwiaXNWYWx1ZU1hdGNoIiwiZW50cmllcyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwidG9TdHJpbmciLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsImNvbmZpZyIsImRhdGEiLCJyZXF1ZXN0S2V5d29yZERlbnlsaXN0Iiwia2V5d29yZCIsIm1hdGNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImFkZE5lc3RlZEtleXNUb1Jvb3QiLCJlbmNvZGVGb3JVcmwiLCJpbnB1dCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJjaGFyIiwiY2hhckNvZGVBdCIsInRvVXBwZXJDYXNlIiwiZ2V0Q2lyY3VsYXJSZXBsYWNlciIsInNlZW4iLCJXZWFrU2V0IiwiTWFwIiwiZnJvbUVudHJpZXMiLCJTZXQiLCJBcnJheSIsImZyb20iLCJoYXMiLCJhZGQiLCJnZXROZXN0ZWRQcm9wZXJ0eSIsInBhcnNlU2l6ZVRvQnl0ZXMiLCJzaXplIiwiaXNGaW5pdGUiLCJFcnJvciIsIk1hdGgiLCJmbG9vciIsInN0ciIsIlN0cmluZyIsInRyaW0iLCJwYXJzZUZsb2F0IiwidW5pdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvVXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB1dGlscy5qc1xuICogQGZpbGUgR2VuZXJhbCBwdXJwb3NlIHV0aWxpdGllc1xuICogQGRlc2NyaXB0aW9uIEdlbmVyYWwgcHVycG9zZSB1dGlsaXRpZXMuXG4gKi9cblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKS5wcm9taXNlcztcblxuLyoqXG4gKiBUaGUgZ2VuZXJhbCBwdXJwb3NlIHV0aWxpdGllcy5cbiAqL1xuY2xhc3MgVXRpbHMge1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGdldExvY2FsaXplZFBhdGhcbiAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBsb2NhbGl6ZWQgZmlsZSBwYXRoIGFjY29yaW5nIHRvIHRoZSBsb2NhbGUuXG4gICAqXG4gICAqIExvY2FsaXplZCBmaWxlcyBhcmUgc2VhcmNoZWQgaW4gc3ViZm9sZGVycyBvZiBhIGdpdmVuIHBhdGgsIGUuZy5cbiAgICpcbiAgICogcm9vdC9cbiAgICog4pSc4pSA4pSAIGJhc2UvICAgICAgICAgICAgICAgICAgICAvLyBiYXNlIHBhdGggdG8gZmlsZXNcbiAgICog4pSCICAg4pSc4pSA4pSAIGV4YW1wbGUuaHRtbCAgICAgICAgIC8vIGRlZmF1bHQgZmlsZVxuICAgKiDilIIgICDilJTilIDilIAgZGUvICAgICAgICAgICAgICAgICAgLy8gZGUgbGFuZ3VhZ2UgZm9sZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBleGFtcGxlLmh0bWwgICAgIC8vIGRlIGxvY2FsaXplZCBmaWxlXG4gICAqIOKUgiAgIOKUlOKUgOKUgCBkZS1BVC8gICAgICAgICAgICAgICAvLyBkZS1BVCBsb2NhbGUgZm9sZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBleGFtcGxlLmh0bWwgICAgIC8vIGRlLUFUIGxvY2FsaXplZCBmaWxlXG4gICAqXG4gICAqIEZpbGVzIGFyZSBtYXRjaGVkIHdpdGggdGhlIGxvY2FsZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOlxuICAgKiAxLiBMb2NhbGUgbWF0Y2gsIGUuZy4gbG9jYWxlIGBkZS1BVGAgbWF0Y2hlcyBmaWxlIGluIGZvbGRlciBgZGUtQVRgLlxuICAgKiAyLiBMYW5ndWFnZSBtYXRjaCwgZS5nLiBsb2NhbGUgYGRlLUFUYCBtYXRjaGVzIGZpbGUgaW4gZm9sZGVyIGBkZWAuXG4gICAqIDMuIERlZmF1bHQ7IGZpbGUgaW4gYmFzZSBmb2xkZXIgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0UGF0aCBUaGUgYWJzb2x1dGUgZmlsZSBwYXRoLCB3aGljaCBpcyBhbHNvXG4gICAqIHRoZSBkZWZhdWx0IHBhdGggcmV0dXJuZWQgaWYgbG9jYWxpemF0aW9uIGlzIG5vdCBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGUgVGhlIGxvY2FsZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gVGhlIG9iamVjdCBjb250YWluczpcbiAgICogLSBgcGF0aGA6IFRoZSBwYXRoIHRvIHRoZSBsb2NhbGl6ZWQgZmlsZSwgb3IgdGhlIG9yaWdpbmFsIHBhdGggaWZcbiAgICogICBsb2NhbGl6YXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbiAgICogLSBgc3ViZGlyYDogVGhlIHN1YmRpcmVjdG9yeSBvZiB0aGUgbG9jYWxpemVkIGZpbGUsIG9yIHVuZGVmaW5lZCBpZlxuICAgKiAgIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGxvY2FsaXplZCBmaWxlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldExvY2FsaXplZFBhdGgoZGVmYXVsdFBhdGgsIGxvY2FsZSkge1xuICAgIC8vIEdldCBmaWxlIG5hbWUgYW5kIHBhdGhzXG4gICAgY29uc3QgZmlsZSA9IHBhdGguYmFzZW5hbWUoZGVmYXVsdFBhdGgpO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gcGF0aC5kaXJuYW1lKGRlZmF1bHRQYXRoKTtcblxuICAgIC8vIElmIGxvY2FsZSBpcyBub3Qgc2V0IHJldHVybiBkZWZhdWx0IGZpbGVcbiAgICBpZiAoIWxvY2FsZSkge1xuICAgICAgcmV0dXJuIHsgcGF0aDogZGVmYXVsdFBhdGggfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmaWxlIGZvciBsb2NhbGUgZXhpc3RzXG4gICAgY29uc3QgbG9jYWxlUGF0aCA9IHBhdGguam9pbihiYXNlUGF0aCwgbG9jYWxlLCBmaWxlKTtcbiAgICBjb25zdCBsb2NhbGVGaWxlRXhpc3RzID0gYXdhaXQgVXRpbHMuZmlsZUV4aXN0cyhsb2NhbGVQYXRoKTtcblxuICAgIC8vIElmIGZpbGUgZm9yIGxvY2FsZSBleGlzdHMgcmV0dXJuIGZpbGVcbiAgICBpZiAobG9jYWxlRmlsZUV4aXN0cykge1xuICAgICAgcmV0dXJuIHsgcGF0aDogbG9jYWxlUGF0aCwgc3ViZGlyOiBsb2NhbGUgfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmaWxlIGZvciBsYW5ndWFnZSBleGlzdHNcbiAgICBjb25zdCBsYW5ndWFnZSA9IGxvY2FsZS5zcGxpdCgnLScpWzBdO1xuICAgIGNvbnN0IGxhbmd1YWdlUGF0aCA9IHBhdGguam9pbihiYXNlUGF0aCwgbGFuZ3VhZ2UsIGZpbGUpO1xuICAgIGNvbnN0IGxhbmd1YWdlRmlsZUV4aXN0cyA9IGF3YWl0IFV0aWxzLmZpbGVFeGlzdHMobGFuZ3VhZ2VQYXRoKTtcblxuICAgIC8vIElmIGZpbGUgZm9yIGxhbmd1YWdlIGV4aXN0cyByZXR1cm4gZmlsZVxuICAgIGlmIChsYW5ndWFnZUZpbGVFeGlzdHMpIHtcbiAgICAgIHJldHVybiB7IHBhdGg6IGxhbmd1YWdlUGF0aCwgc3ViZGlyOiBsYW5ndWFnZSB9O1xuICAgIH1cblxuICAgIC8vIFJldHVybiBkZWZhdWx0IGZpbGVcbiAgICByZXR1cm4geyBwYXRoOiBkZWZhdWx0UGF0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBmaWxlRXhpc3RzXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3Mgd2hldGhlciBhIGZpbGUgZXhpc3RzLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgZmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gSXMgdHJ1ZSBpZiB0aGUgZmlsZSBjYW4gYmUgYWNjZXNzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBmaWxlRXhpc3RzKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHBhdGgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBpc1BhdGhcbiAgICogQGRlc2NyaXB0aW9uIEV2YWx1YXRlcyB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgZmlsZSBwYXRoIChhcyBvcHBvc2VkIHRvIGEgVVJMIGZvciBleGFtcGxlKS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHMgVGhlIHN0cmluZyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZhbHVhdGVkIHN0cmluZyBpcyBhIHBhdGguXG4gICAqL1xuICBzdGF0aWMgaXNQYXRoKHMpIHtcbiAgICByZXR1cm4gLyheXFwvKXwoXlxcLlxcLyl8KF5cXC5cXC5cXC8pLy50ZXN0KHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5zIGFuIG9iamVjdCBhbmQgY3JhdGVzIG5ldyBrZXlzIHdpdGggY3VzdG9tIGRlbGltaXRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBmbGF0dGVuLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlbGltaXRlcj0nLiddIFRoZSBkZWxpbWl0ZXIgb2YgdGhlIG5ld2x5IGdlbmVyYXRlZCBrZXlzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmbGF0dGVuZWQgb2JqZWN0LlxuICAgKiovXG4gIHN0YXRpYyBmbGF0dGVuT2JqZWN0KG9iaiwgcGFyZW50S2V5LCBkZWxpbWl0ZXIgPSAnLicsIHJlc3VsdCA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBjb25zdCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyBkZWxpbWl0ZXIgKyBrZXkgOiBrZXk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmZsYXR0ZW5PYmplY3Qob2JqW2tleV0sIG5ld0tleSwgZGVsaW1pdGVyLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtuZXdLZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgUHJvbWlzZS5cbiAgICogQHBhcmFtIHthbnl9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBwcm9taXNlLlxuICAgKi9cbiAgc3RhdGljIGlzUHJvbWlzZShvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgUHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIGFsbCBwZXJtdXRhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGtleXMuXG4gICAqIEZvciBleGFtcGxlLCB0aGlzIGRlZmluaXRpb246XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgYTogW3RydWUsIGZhbHNlXSxcbiAgICogICBiOiBbMSwgMl0sXG4gICAqICAgYzogWyd4J11cbiAgICogfVxuICAgKiBgYGBcbiAgICogcGVybXV0YXRlcyB0bzpcbiAgICogYGBgXG4gICAqIFtcbiAgICogICB7IGE6IHRydWUsIGI6IDEsIGM6ICd4JyB9LFxuICAgKiAgIHsgYTogdHJ1ZSwgYjogMiwgYzogJ3gnIH0sXG4gICAqICAgeyBhOiBmYWxzZSwgYjogMSwgYzogJ3gnIH0sXG4gICAqICAgeyBhOiBmYWxzZSwgYjogMiwgYzogJ3gnIH1cbiAgICogXVxuICAgKiBgYGBcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHBlcm11dGF0ZS5cbiAgICogQHBhcmFtIHtJbnRlZ2VyfSBbaW5kZXg9MF0gVGhlIGN1cnJlbnQga2V5IGluZGV4LlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2N1cnJlbnQ9e31dIFRoZSBjdXJyZW50IHJlc3VsdCBlbnRyeSBiZWluZyBjb21wb3NlZC5cbiAgICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHM9W11dIFRoZSByZXN1bHRpbmcgYXJyYXkgb2YgcGVybXV0YXRpb25zLlxuICAgKi9cbiAgc3RhdGljIGdldE9iamVjdEtleVBlcm11dGF0aW9ucyhvYmplY3QsIGluZGV4ID0gMCwgY3VycmVudCA9IHt9LCByZXN1bHRzID0gW10pIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2luZGV4XTtcbiAgICBjb25zdCB2YWx1ZXMgPSBvYmplY3Rba2V5XTtcblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBjdXJyZW50W2tleV0gPSB2YWx1ZTtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgMTtcblxuICAgICAgaWYgKG5leHRJbmRleCA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIFV0aWxzLmdldE9iamVjdEtleVBlcm11dGF0aW9ucyhvYmplY3QsIG5leHRJbmRleCwgY3VycmVudCwgcmVzdWx0cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50KTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBwYXJhbWV0ZXJzIGFuZCB0aHJvd3MgaWYgYSBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cbiAgICogRXhhbXBsZSBwYXJhbWV0ZXIgdHlwZXMgc3ludGF4OlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIHBhcmFtZXRlck5hbWU6IHtcbiAgICogICAgICB0OiAnYm9vbGVhbicsXG4gICAqICAgICAgdjogaXNCb29sZWFuLFxuICAgKiAgICAgIG86IHRydWVcbiAgICogICB9LFxuICAgKiAgIC4uLlxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIFRoZSBwYXJhbWV0ZXJzIHRvIHZhbGlkYXRlLlxuICAgKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IHR5cGVzIFRoZSBwYXJhbWV0ZXIgdHlwZXMgdXNlZCBmb3IgdmFsaWRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHR5cGVzLnQgVGhlIHBhcmFtZXRlciB0eXBlOyB1c2VkIGZvciBlcnJvciBtZXNzYWdlLCBub3QgZm9yIHZhbGlkYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlcy52IFRoZSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFt0eXBlcy5vPWZhbHNlXSBJcyB0cnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVQYXJhbXMocGFyYW1zLCB0eXBlcykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlc1trZXldO1xuICAgICAgY29uc3QgaXNPcHRpb25hbCA9ICEhdHlwZS5vO1xuICAgICAgY29uc3QgcGFyYW0gPSBwYXJhbXNba2V5XTtcbiAgICAgIGlmICghKGlzT3B0aW9uYWwgJiYgcGFyYW0gPT0gbnVsbCkgJiYgIXR5cGUudihwYXJhbSkpIHtcbiAgICAgICAgdGhyb3cgYEludmFsaWQgcGFyYW1ldGVyICR7a2V5fSBtdXN0IGJlIG9mIHR5cGUgJHt0eXBlLnR9IGJ1dCBpcyAke3R5cGVvZiBwYXJhbX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgcmVsYXRpdmUgZGF0ZSBiYXNlZCBvbiBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgVGhlIHN0cmluZyB0byBpbnRlcnByZXQgdGhlIGRhdGUgZnJvbS5cbiAgICogQHBhcmFtIHtEYXRlfSBub3cgVGhlIGRhdGUgdGhlIHN0cmluZyBpcyBjb21wYXJpbmcgYWdhaW5zdC5cbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIHJlbGF0aXZlIGRhdGUgb2JqZWN0LlxuICAgKiovXG4gIHN0YXRpYyByZWxhdGl2ZVRpbWVUb0RhdGUodGV4dCwgbm93ID0gbmV3IERhdGUoKSkge1xuICAgIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgbGV0IHBhcnRzID0gdGV4dC5zcGxpdCgnICcpO1xuXG4gICAgLy8gRmlsdGVyIG91dCB3aGl0ZXNwYWNlXG4gICAgcGFydHMgPSBwYXJ0cy5maWx0ZXIocGFydCA9PiBwYXJ0ICE9PSAnJyk7XG5cbiAgICBjb25zdCBmdXR1cmUgPSBwYXJ0c1swXSA9PT0gJ2luJztcbiAgICBjb25zdCBwYXN0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdhZ28nO1xuXG4gICAgaWYgKCFmdXR1cmUgJiYgIXBhc3QgJiYgdGV4dCAhPT0gJ25vdycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogXCJUaW1lIHNob3VsZCBlaXRoZXIgc3RhcnQgd2l0aCAnaW4nIG9yIGVuZCB3aXRoICdhZ28nXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChmdXR1cmUgJiYgcGFzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiBcIlRpbWUgY2Fubm90IGhhdmUgYm90aCAnaW4nIGFuZCAnYWdvJ1wiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBzdHJpcCB0aGUgJ2Fnbycgb3IgJ2luJ1xuICAgIGlmIChmdXR1cmUpIHtcbiAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHBhc3RcbiAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCAlIDIgIT09IDAgJiYgdGV4dCAhPT0gJ25vdycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0ludmFsaWQgdGltZSBzdHJpbmcuIERhbmdsaW5nIHVuaXQgb3IgbnVtYmVyLicsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgd2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuICAgICAgcGFpcnMucHVzaChbcGFydHMuc2hpZnQoKSwgcGFydHMuc2hpZnQoKV0pO1xuICAgIH1cblxuICAgIGxldCBzZWNvbmRzID0gMDtcbiAgICBmb3IgKGNvbnN0IFtudW0sIGludGVydmFsXSBvZiBwYWlycykge1xuICAgICAgY29uc3QgdmFsID0gTnVtYmVyKG51bSk7XG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICBpbmZvOiBgJyR7bnVtfScgaXMgbm90IGFuIGludGVnZXIuYCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgICBjYXNlICd5cic6XG4gICAgICAgIGNhc2UgJ3lycyc6XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjYXNlICd5ZWFycyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiAzMTUzNjAwMDsgLy8gMzY1ICogMjQgKiA2MCAqIDYwXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnd2snOlxuICAgICAgICBjYXNlICd3a3MnOlxuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsICogNjA0ODAwOyAvLyA3ICogMjQgKiA2MCAqIDYwXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsICogODY0MDA7IC8vIDI0ICogNjAgKiA2MFxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2hyJzpcbiAgICAgICAgY2FzZSAnaHJzJzpcbiAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNhc2UgJ2hvdXJzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDM2MDA7IC8vIDYwICogNjBcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtaW5zJzpcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiA2MDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzZWNzJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWw7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgaW5mbzogYEludmFsaWQgaW50ZXJ2YWw6ICcke2ludGVydmFsfSdgLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gc2Vjb25kcyAqIDEwMDA7XG4gICAgaWYgKGZ1dHVyZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGluZm86ICdmdXR1cmUnLFxuICAgICAgICByZXN1bHQ6IG5ldyBEYXRlKG5vdy52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHBhc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpbmZvOiAncGFzdCcsXG4gICAgICAgIHJlc3VsdDogbmV3IERhdGUobm93LnZhbHVlT2YoKSAtIG1pbGxpc2Vjb25kcyksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaW5mbzogJ3ByZXNlbnQnLFxuICAgICAgICByZXN1bHQ6IG5ldyBEYXRlKG5vdy52YWx1ZU9mKCkpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVlcC1zY2FucyBhbiBvYmplY3QgZm9yIGEgbWF0Y2hpbmcga2V5L3ZhbHVlIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBzY2FuLlxuICAgKiBAcGFyYW0ge1N0cmluZyB8IHVuZGVmaW5lZH0ga2V5IFRoZSBrZXkgdG8gbWF0Y2gsIG9yIHVuZGVmaW5lZCBpZiBvbmx5IHRoZSB2YWx1ZSBzaG91bGQgYmUgbWF0Y2hlZC5cbiAgICogQHBhcmFtIHthbnkgfCB1bmRlZmluZWR9IHZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaCwgb3IgdW5kZWZpbmVkIGlmIG9ubHkgdGhlIGtleSBzaG91bGQgYmUgbWF0Y2hlZC5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgYSBtYXRjaCB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBvYmplY3RDb250YWluc0tleVZhbHVlKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSAoYSwgYikgPT4gKHR5cGVvZiBhID09PSAnc3RyaW5nJyAmJiBuZXcgUmVnRXhwKGIpLnRlc3QoYSkpIHx8IGEgPT09IGI7XG4gICAgY29uc3QgaXNLZXlNYXRjaCA9IGsgPT4gaXNNYXRjaChrLCBrZXkpO1xuICAgIGNvbnN0IGlzVmFsdWVNYXRjaCA9IHYgPT4gaXNNYXRjaCh2LCB2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB1bmRlZmluZWQgJiYgaXNLZXlNYXRjaChrKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpc1ZhbHVlTWF0Y2godikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNLZXlNYXRjaChrKSAmJiBpc1ZhbHVlTWF0Y2godikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoWydbb2JqZWN0IE9iamVjdF0nLCAnW29iamVjdCBBcnJheV0nXS5pbmNsdWRlcyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikpKSB7XG4gICAgICAgIHJldHVybiBVdGlscy5vYmplY3RDb250YWluc0tleVZhbHVlKHYsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBkYXRhKSB7XG4gICAgaWYgKGNvbmZpZz8ucmVxdWVzdEtleXdvcmREZW55bGlzdCkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGNvbmZpZy5yZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gVXRpbHMub2JqZWN0Q29udGFpbnNLZXlWYWx1ZShkYXRhLCBrZXl3b3JkLmtleSwga2V5d29yZC52YWx1ZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRocm93IGBQcm9oaWJpdGVkIGtleXdvcmQgaW4gcmVxdWVzdCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGtleXdvcmQpfS5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBuZXN0ZWQga2V5cyBvZiBhIHNwZWNpZmllZCBrZXkgaW4gYW4gb2JqZWN0IHRvIHRoZSByb290IG9mIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtleSB3aG9zZSBuZXN0ZWQga2V5cyB3aWxsIGJlIG1vdmVkIHRvIHJvb3QuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtb2RpZmllZCBvYmplY3QsIG9yIHRoZSBvcmlnaW5hbCBvYmplY3QgaWYgbm8gbW9kaWZpY2F0aW9uIGhhcHBlbmVkLlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBvYmogPSB7XG4gICAqICAgYTogMSxcbiAgICogICBiOiB7XG4gICAqICAgICBjOiAyLFxuICAgKiAgICAgZDogM1xuICAgKiAgIH0sXG4gICAqICAgZTogNFxuICAgKiB9O1xuICAgKiBhZGROZXN0ZWRLZXlzVG9Sb290KG9iaiwgJ2InKTtcbiAgICogY29uc29sZS5sb2cob2JqKTtcbiAgICogLy8gT3V0cHV0OiB7IGE6IDEsIGU6IDQsIGM6IDIsIGQ6IDMgfVxuICAqL1xuICBzdGF0aWMgYWRkTmVzdGVkS2V5c1RvUm9vdChvYmosIGtleSkge1xuICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBBZGQgbmVzdGVkIGtleXMgdG8gcm9vdFxuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHsgLi4ub2JqW2tleV0gfSk7XG4gICAgICAvLyBEZWxldGUgb3JpZ2luYWwgbmVzdGVkIGtleVxuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBhIFVSTC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZW5jb2RlRm9yVXJsKGlucHV0KSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkucmVwbGFjZSgvWyEnLigpKl0vZywgY2hhciA9PlxuICAgICAgJyUnICsgY2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgSlNPTiByZXBsYWNlciBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgTWFwLCBTZXQsIGFuZCBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgKiBUaGlzIHJlcGxhY2VyIGNhbiBiZSB1c2VkIHdpdGggSlNPTi5zdHJpbmdpZnkgdG8gc2FmZWx5IHNlcmlhbGl6ZSBjb21wbGV4IG9iamVjdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZXBsYWNlciBmdW5jdGlvbiBmb3IgSlNPTi5zdHJpbmdpZnkgdGhhdDpcbiAgICogLSBDb252ZXJ0cyBNYXAgaW5zdGFuY2VzIHRvIHBsYWluIG9iamVjdHNcbiAgICogLSBDb252ZXJ0cyBTZXQgaW5zdGFuY2VzIHRvIGFycmF5c1xuICAgKiAtIFJlcGxhY2VzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2l0aCAnW0NpcmN1bGFyXScgbWFya2VyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG9iaiA9IHsgbmFtZTogJ3Rlc3QnLCBtYXA6IG5ldyBNYXAoW1sna2V5JywgJ3ZhbHVlJ11dKSB9O1xuICAgKiBvYmouc2VsZiA9IG9iajsgLy8gY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAqIEpTT04uc3RyaW5naWZ5KG9iaiwgVXRpbHMuZ2V0Q2lyY3VsYXJSZXBsYWNlcigpKTtcbiAgICogLy8gT3V0cHV0OiB7XCJuYW1lXCI6XCJ0ZXN0XCIsXCJtYXBcIjp7XCJrZXlcIjpcInZhbHVlXCJ9LFwic2VsZlwiOlwiW0NpcmN1bGFyXVwifVxuICAgKi9cbiAgc3RhdGljIGdldENpcmN1bGFyUmVwbGFjZXIoKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgcmV0dXJuIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBnZXQgdGhlIHByb3BlcnR5IGZyb20uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIGluIGRvdCBub3RhdGlvbiwgZS5nLiAnZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbicuXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBwcm9wZXJ0eSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBvYmogPSB7IGRhdGFiYXNlOiB7IG9wdGlvbnM6IHsgZW5hYmxlZDogdHJ1ZSB9IH0gfTtcbiAgICogVXRpbHMuZ2V0TmVzdGVkUHJvcGVydHkob2JqLCAnZGF0YWJhc2Uub3B0aW9ucy5lbmFibGVkJyk7XG4gICAqIC8vIE91dHB1dDogdHJ1ZVxuICAgKi9cbiAgc3RhdGljIGdldE5lc3RlZFByb3BlcnR5KG9iaiwgcGF0aCkge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmIChjdXJyZW50ID09IG51bGwgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBodW1hbi1yZWFkYWJsZSBzaXplIHN0cmluZyBpbnRvIGEgYnl0ZSBjb3VudC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHNpemUgLSBBIG51bWJlciAoZmxvb3JlZCB0byBhbiBpbnRlZ2VyKSwgYSBudW1lcmljIHN0cmluZ1xuICAgKiAgICh0cmVhdGVkIGFzIGJ5dGVzKSwgb3IgYSBzdHJpbmcgd2l0aCBhIHVuaXQgc3VmZml4OiBgYmAsIGBrYmAsIGBtYmAsIGBnYmBcbiAgICogICAoY2FzZS1pbnNlbnNpdGl2ZSkuIEV4YW1wbGVzOiBgJzIwbWInYCwgYCc1MTJrYidgLCBgJzEuNWdiJ2AsIGAxMDQ4NTc2YC5cbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIHNpemUgaW4gYnl0ZXMsIGZsb29yZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC5cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNpemVUb0J5dGVzKHNpemUpIHtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzaXplKSB8fCBzaXplIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2l6ZSB2YWx1ZTogJHtzaXplfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2l6ZSk7XG4gICAgfVxuICAgIGNvbnN0IHN0ciA9IFN0cmluZyhzaXplKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtYXRjaCA9IHN0ci5tYXRjaCgvXihcXGQrKD86XFwuXFxkKyk/KVxccyooYnxrYnxtYnxnYik/JC8pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzaXplIHZhbHVlOiAke3NpemV9YCk7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBtYXRjaFsyXTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ2tiJzpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtICogMTAyNCk7XG4gICAgICBjYXNlICdtYic6XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bSAqIDEwMjQgKiAxMDI0KTtcbiAgICAgIGNhc2UgJ2diJzpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtICogMTAyNCAqIDEwMjQgKiAxMDI0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUNFLFFBQVE7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLEtBQUssQ0FBQztFQUNWO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsYUFBYUMsZ0JBQWdCQSxDQUFDQyxXQUFXLEVBQUVDLE1BQU0sRUFBRTtJQUNqRDtJQUNBLE1BQU1DLElBQUksR0FBR1IsSUFBSSxDQUFDUyxRQUFRLENBQUNILFdBQVcsQ0FBQztJQUN2QyxNQUFNSSxRQUFRLEdBQUdWLElBQUksQ0FBQ1csT0FBTyxDQUFDTCxXQUFXLENBQUM7O0lBRTFDO0lBQ0EsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDWCxPQUFPO1FBQUVQLElBQUksRUFBRU07TUFBWSxDQUFDO0lBQzlCOztJQUVBO0lBQ0EsTUFBTU0sVUFBVSxHQUFHWixJQUFJLENBQUNhLElBQUksQ0FBQ0gsUUFBUSxFQUFFSCxNQUFNLEVBQUVDLElBQUksQ0FBQztJQUNwRCxNQUFNTSxnQkFBZ0IsR0FBRyxNQUFNVixLQUFLLENBQUNXLFVBQVUsQ0FBQ0gsVUFBVSxDQUFDOztJQUUzRDtJQUNBLElBQUlFLGdCQUFnQixFQUFF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
|
|
511
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwicHJvbWlzZXMiLCJVdGlscyIsImdldExvY2FsaXplZFBhdGgiLCJkZWZhdWx0UGF0aCIsImxvY2FsZSIsImZpbGUiLCJiYXNlbmFtZSIsImJhc2VQYXRoIiwiZGlybmFtZSIsImxvY2FsZVBhdGgiLCJqb2luIiwibG9jYWxlRmlsZUV4aXN0cyIsImZpbGVFeGlzdHMiLCJzdWJkaXIiLCJsYW5ndWFnZSIsInNwbGl0IiwibGFuZ3VhZ2VQYXRoIiwibGFuZ3VhZ2VGaWxlRXhpc3RzIiwiYWNjZXNzIiwiaXNQYXRoIiwicyIsInRlc3QiLCJmbGF0dGVuT2JqZWN0Iiwib2JqIiwicGFyZW50S2V5IiwiZGVsaW1pdGVyIiwicmVzdWx0Iiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwibmV3S2V5IiwiaXNQcm9taXNlIiwib2JqZWN0IiwiUHJvbWlzZSIsImdldE9iamVjdEtleVBlcm11dGF0aW9ucyIsImluZGV4IiwiY3VycmVudCIsInJlc3VsdHMiLCJrZXlzIiwidmFsdWVzIiwidmFsdWUiLCJuZXh0SW5kZXgiLCJsZW5ndGgiLCJhc3NpZ24iLCJwdXNoIiwidmFsaWRhdGVQYXJhbXMiLCJwYXJhbXMiLCJ0eXBlcyIsInR5cGUiLCJpc09wdGlvbmFsIiwibyIsInBhcmFtIiwidiIsInQiLCJyZWxhdGl2ZVRpbWVUb0RhdGUiLCJ0ZXh0Iiwibm93IiwiRGF0ZSIsInRvTG93ZXJDYXNlIiwicGFydHMiLCJmaWx0ZXIiLCJwYXJ0IiwiZnV0dXJlIiwicGFzdCIsInN0YXR1cyIsImluZm8iLCJzbGljZSIsInBhaXJzIiwic2hpZnQiLCJzZWNvbmRzIiwibnVtIiwiaW50ZXJ2YWwiLCJ2YWwiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJtaWxsaXNlY29uZHMiLCJ2YWx1ZU9mIiwib2JqZWN0Q29udGFpbnNLZXlWYWx1ZSIsImlzTWF0Y2giLCJhIiwiYiIsIlJlZ0V4cCIsImlzS2V5TWF0Y2giLCJrIiwiaXNWYWx1ZU1hdGNoIiwic3RhY2siLCJzZWVuIiwiV2Vha1NldCIsInBvcCIsImhhcyIsImFkZCIsImVudHJpZXMiLCJ1bmRlZmluZWQiLCJpbmNsdWRlcyIsInRvU3RyaW5nIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJjb25maWciLCJkYXRhIiwicmVxdWVzdEtleXdvcmREZW55bGlzdCIsImtleXdvcmQiLCJtYXRjaCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhZGROZXN0ZWRLZXlzVG9Sb290IiwiZW5jb2RlRm9yVXJsIiwiaW5wdXQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwiY2hhciIsImNoYXJDb2RlQXQiLCJ0b1VwcGVyQ2FzZSIsImdldENpcmN1bGFyUmVwbGFjZXIiLCJNYXAiLCJmcm9tRW50cmllcyIsIlNldCIsIkFycmF5IiwiZnJvbSIsImdldE5lc3RlZFByb3BlcnR5IiwicGFyc2VTaXplVG9CeXRlcyIsInNpemUiLCJpc0Zpbml0ZSIsIkVycm9yIiwiTWF0aCIsImZsb29yIiwic3RyIiwiU3RyaW5nIiwidHJpbSIsInBhcnNlRmxvYXQiLCJ1bml0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9VdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHV0aWxzLmpzXG4gKiBAZmlsZSBHZW5lcmFsIHB1cnBvc2UgdXRpbGl0aWVzXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJhbCBwdXJwb3NlIHV0aWxpdGllcy5cbiAqL1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpLnByb21pc2VzO1xuXG4vKipcbiAqIFRoZSBnZW5lcmFsIHB1cnBvc2UgdXRpbGl0aWVzLlxuICovXG5jbGFzcyBVdGlscyB7XG4gIC8qKlxuICAgKiBAZnVuY3Rpb24gZ2V0TG9jYWxpemVkUGF0aFxuICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIGxvY2FsaXplZCBmaWxlIHBhdGggYWNjb3JpbmcgdG8gdGhlIGxvY2FsZS5cbiAgICpcbiAgICogTG9jYWxpemVkIGZpbGVzIGFyZSBzZWFyY2hlZCBpbiBzdWJmb2xkZXJzIG9mIGEgZ2l2ZW4gcGF0aCwgZS5nLlxuICAgKlxuICAgKiByb290L1xuICAgKiDilJzilIDilIAgYmFzZS8gICAgICAgICAgICAgICAgICAgIC8vIGJhc2UgcGF0aCB0byBmaWxlc1xuICAgKiDilIIgICDilJzilIDilIAgZXhhbXBsZS5odG1sICAgICAgICAgLy8gZGVmYXVsdCBmaWxlXG4gICAqIOKUgiAgIOKUlOKUgOKUgCBkZS8gICAgICAgICAgICAgICAgICAvLyBkZSBsYW5ndWFnZSBmb2xkZXJcbiAgICog4pSCICAg4pSCICAg4pSU4pSA4pSAIGV4YW1wbGUuaHRtbCAgICAgLy8gZGUgbG9jYWxpemVkIGZpbGVcbiAgICog4pSCICAg4pSU4pSA4pSAIGRlLUFULyAgICAgICAgICAgICAgIC8vIGRlLUFUIGxvY2FsZSBmb2xkZXJcbiAgICog4pSCICAg4pSCICAg4pSU4pSA4pSAIGV4YW1wbGUuaHRtbCAgICAgLy8gZGUtQVQgbG9jYWxpemVkIGZpbGVcbiAgICpcbiAgICogRmlsZXMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgbG9jYWxlIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6XG4gICAqIDEuIExvY2FsZSBtYXRjaCwgZS5nLiBsb2NhbGUgYGRlLUFUYCBtYXRjaGVzIGZpbGUgaW4gZm9sZGVyIGBkZS1BVGAuXG4gICAqIDIuIExhbmd1YWdlIG1hdGNoLCBlLmcuIGxvY2FsZSBgZGUtQVRgIG1hdGNoZXMgZmlsZSBpbiBmb2xkZXIgYGRlYC5cbiAgICogMy4gRGVmYXVsdDsgZmlsZSBpbiBiYXNlIGZvbGRlciBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRQYXRoIFRoZSBhYnNvbHV0ZSBmaWxlIHBhdGgsIHdoaWNoIGlzIGFsc29cbiAgICogdGhlIGRlZmF1bHQgcGF0aCByZXR1cm5lZCBpZiBsb2NhbGl6YXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGxvY2FsZSBUaGUgbG9jYWxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBUaGUgb2JqZWN0IGNvbnRhaW5zOlxuICAgKiAtIGBwYXRoYDogVGhlIHBhdGggdG8gdGhlIGxvY2FsaXplZCBmaWxlLCBvciB0aGUgb3JpZ2luYWwgcGF0aCBpZlxuICAgKiAgIGxvY2FsaXphdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICAgKiAtIGBzdWJkaXJgOiBUaGUgc3ViZGlyZWN0b3J5IG9mIHRoZSBsb2NhbGl6ZWQgZmlsZSwgb3IgdW5kZWZpbmVkIGlmXG4gICAqICAgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgbG9jYWxpemVkIGZpbGUuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0TG9jYWxpemVkUGF0aChkZWZhdWx0UGF0aCwgbG9jYWxlKSB7XG4gICAgLy8gR2V0IGZpbGUgbmFtZSBhbmQgcGF0aHNcbiAgICBjb25zdCBmaWxlID0gcGF0aC5iYXNlbmFtZShkZWZhdWx0UGF0aCk7XG4gICAgY29uc3QgYmFzZVBhdGggPSBwYXRoLmRpcm5hbWUoZGVmYXVsdFBhdGgpO1xuXG4gICAgLy8gSWYgbG9jYWxlIGlzIG5vdCBzZXQgcmV0dXJuIGRlZmF1bHQgZmlsZVxuICAgIGlmICghbG9jYWxlKSB7XG4gICAgICByZXR1cm4geyBwYXRoOiBkZWZhdWx0UGF0aCB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZpbGUgZm9yIGxvY2FsZSBleGlzdHNcbiAgICBjb25zdCBsb2NhbGVQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCBsb2NhbGUsIGZpbGUpO1xuICAgIGNvbnN0IGxvY2FsZUZpbGVFeGlzdHMgPSBhd2FpdCBVdGlscy5maWxlRXhpc3RzKGxvY2FsZVBhdGgpO1xuXG4gICAgLy8gSWYgZmlsZSBmb3IgbG9jYWxlIGV4aXN0cyByZXR1cm4gZmlsZVxuICAgIGlmIChsb2NhbGVGaWxlRXhpc3RzKSB7XG4gICAgICByZXR1cm4geyBwYXRoOiBsb2NhbGVQYXRoLCBzdWJkaXI6IGxvY2FsZSB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZpbGUgZm9yIGxhbmd1YWdlIGV4aXN0c1xuICAgIGNvbnN0IGxhbmd1YWdlID0gbG9jYWxlLnNwbGl0KCctJylbMF07XG4gICAgY29uc3QgbGFuZ3VhZ2VQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCBsYW5ndWFnZSwgZmlsZSk7XG4gICAgY29uc3QgbGFuZ3VhZ2VGaWxlRXhpc3RzID0gYXdhaXQgVXRpbHMuZmlsZUV4aXN0cyhsYW5ndWFnZVBhdGgpO1xuXG4gICAgLy8gSWYgZmlsZSBmb3IgbGFuZ3VhZ2UgZXhpc3RzIHJldHVybiBmaWxlXG4gICAgaWYgKGxhbmd1YWdlRmlsZUV4aXN0cykge1xuICAgICAgcmV0dXJuIHsgcGF0aDogbGFuZ3VhZ2VQYXRoLCBzdWJkaXI6IGxhbmd1YWdlIH07XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGRlZmF1bHQgZmlsZVxuICAgIHJldHVybiB7IHBhdGg6IGRlZmF1bHRQYXRoIH07XG4gIH1cblxuICAvKipcbiAgICogQGZ1bmN0aW9uIGZpbGVFeGlzdHNcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyB3aGV0aGVyIGEgZmlsZSBleGlzdHMuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBmaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fSBJcyB0cnVlIGlmIHRoZSBmaWxlIGNhbiBiZSBhY2Nlc3NlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGZpbGVFeGlzdHMocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MocGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGZ1bmN0aW9uIGlzUGF0aFxuICAgKiBAZGVzY3JpcHRpb24gRXZhbHVhdGVzIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSBmaWxlIHBhdGggKGFzIG9wcG9zZWQgdG8gYSBVUkwgZm9yIGV4YW1wbGUpLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcyBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBldmFsdWF0ZWQgc3RyaW5nIGlzIGEgcGF0aC5cbiAgICovXG4gIHN0YXRpYyBpc1BhdGgocykge1xuICAgIHJldHVybiAvKF5cXC8pfCheXFwuXFwvKXwoXlxcLlxcLlxcLykvLnRlc3Qocyk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbnMgYW4gb2JqZWN0IGFuZCBjcmF0ZXMgbmV3IGtleXMgd2l0aCBjdXN0b20gZGVsaW1pdGVycy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGZsYXR0ZW4uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbZGVsaW1pdGVyPScuJ10gVGhlIGRlbGltaXRlciBvZiB0aGUgbmV3bHkgZ2VuZXJhdGVkIGtleXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXN1bHRcbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIGZsYXR0ZW5lZCBvYmplY3QuXG4gICAqKi9cbiAgc3RhdGljIGZsYXR0ZW5PYmplY3Qob2JqLCBwYXJlbnRLZXksIGRlbGltaXRlciA9ICcuJywgcmVzdWx0ID0ge30pIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IG5ld0tleSA9IHBhcmVudEtleSA/IHBhcmVudEtleSArIGRlbGltaXRlciArIGtleSA6IGtleTtcblxuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JyAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZmxhdHRlbk9iamVjdChvYmpba2V5XSwgbmV3S2V5LCBkZWxpbWl0ZXIsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W25ld0tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaXMgYSBQcm9taXNlLlxuICAgKiBAcGFyYW0ge2FueX0gb2JqZWN0IFRoZSBvYmplY3QgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHByb21pc2UuXG4gICAqL1xuICBzdGF0aWMgaXNQcm9taXNlKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggYWxsIHBlcm11dGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwga2V5cy5cbiAgICogRm9yIGV4YW1wbGUsIHRoaXMgZGVmaW5pdGlvbjpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBhOiBbdHJ1ZSwgZmFsc2VdLFxuICAgKiAgIGI6IFsxLCAyXSxcbiAgICogICBjOiBbJ3gnXVxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBwZXJtdXRhdGVzIHRvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgIHsgYTogdHJ1ZSwgYjogMSwgYzogJ3gnIH0sXG4gICAqICAgeyBhOiB0cnVlLCBiOiAyLCBjOiAneCcgfSxcbiAgICogICB7IGE6IGZhbHNlLCBiOiAxLCBjOiAneCcgfSxcbiAgICogICB7IGE6IGZhbHNlLCBiOiAyLCBjOiAneCcgfVxuICAgKiBdXG4gICAqIGBgYFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcGVybXV0YXRlLlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IFtpbmRleD0wXSBUaGUgY3VycmVudCBrZXkgaW5kZXguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY3VycmVudD17fV0gVGhlIGN1cnJlbnQgcmVzdWx0IGVudHJ5IGJlaW5nIGNvbXBvc2VkLlxuICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0cz1bXV0gVGhlIHJlc3VsdGluZyBhcnJheSBvZiBwZXJtdXRhdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0T2JqZWN0S2V5UGVybXV0YXRpb25zKG9iamVjdCwgaW5kZXggPSAwLCBjdXJyZW50ID0ge30sIHJlc3VsdHMgPSBbXSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iamVjdFtrZXldO1xuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IHZhbHVlO1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyAxO1xuXG4gICAgICBpZiAobmV4dEluZGV4IDwga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgVXRpbHMuZ2V0T2JqZWN0S2V5UGVybXV0YXRpb25zKG9iamVjdCwgbmV4dEluZGV4LCBjdXJyZW50LCByZXN1bHRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHBhcmFtZXRlcnMgYW5kIHRocm93cyBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkLlxuICAgKiBFeGFtcGxlIHBhcmFtZXRlciB0eXBlcyBzeW50YXg6XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgcGFyYW1ldGVyTmFtZToge1xuICAgKiAgICAgIHQ6ICdib29sZWFuJyxcbiAgICogICAgICB2OiBpc0Jvb2xlYW4sXG4gICAqICAgICAgbzogdHJ1ZVxuICAgKiAgIH0sXG4gICAqICAgLi4uXG4gICAqIH1cbiAgICogYGBgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gdHlwZXMgVGhlIHBhcmFtZXRlciB0eXBlcyB1c2VkIGZvciB2YWxpZGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdHlwZXMudCBUaGUgcGFyYW1ldGVyIHR5cGU7IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2UsIG5vdCBmb3IgdmFsaWRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHR5cGVzLnYgVGhlIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3R5cGVzLm89ZmFsc2VdIElzIHRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBvcHRpb25hbC5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHR5cGVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2tleV07XG4gICAgICBjb25zdCBpc09wdGlvbmFsID0gISF0eXBlLm87XG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1trZXldO1xuICAgICAgaWYgKCEoaXNPcHRpb25hbCAmJiBwYXJhbSA9PSBudWxsKSAmJiAhdHlwZS52KHBhcmFtKSkge1xuICAgICAgICB0aHJvdyBgSW52YWxpZCBwYXJhbWV0ZXIgJHtrZXl9IG11c3QgYmUgb2YgdHlwZSAke3R5cGUudH0gYnV0IGlzICR7dHlwZW9mIHBhcmFtfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSByZWxhdGl2ZSBkYXRlIGJhc2VkIG9uIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBUaGUgc3RyaW5nIHRvIGludGVycHJldCB0aGUgZGF0ZSBmcm9tLlxuICAgKiBAcGFyYW0ge0RhdGV9IG5vdyBUaGUgZGF0ZSB0aGUgc3RyaW5nIGlzIGNvbXBhcmluZyBhZ2FpbnN0LlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVsYXRpdmUgZGF0ZSBvYmplY3QuXG4gICAqKi9cbiAgc3RhdGljIHJlbGF0aXZlVGltZVRvRGF0ZSh0ZXh0LCBub3cgPSBuZXcgRGF0ZSgpKSB7XG4gICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgcGFydHMgPSB0ZXh0LnNwbGl0KCcgJyk7XG5cbiAgICAvLyBGaWx0ZXIgb3V0IHdoaXRlc3BhY2VcbiAgICBwYXJ0cyA9IHBhcnRzLmZpbHRlcihwYXJ0ID0+IHBhcnQgIT09ICcnKTtcblxuICAgIGNvbnN0IGZ1dHVyZSA9IHBhcnRzWzBdID09PSAnaW4nO1xuICAgIGNvbnN0IHBhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gJ2Fnbyc7XG5cbiAgICBpZiAoIWZ1dHVyZSAmJiAhcGFzdCAmJiB0ZXh0ICE9PSAnbm93Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiBcIlRpbWUgc2hvdWxkIGVpdGhlciBzdGFydCB3aXRoICdpbicgb3IgZW5kIHdpdGggJ2FnbydcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGZ1dHVyZSAmJiBwYXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIGluZm86IFwiVGltZSBjYW5ub3QgaGF2ZSBib3RoICdpbicgYW5kICdhZ28nXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHN0cmlwIHRoZSAnYWdvJyBvciAnaW4nXG4gICAgaWYgKGZ1dHVyZSkge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcGFzdFxuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubGVuZ3RoICUgMiAhPT0gMCAmJiB0ZXh0ICE9PSAnbm93Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnSW52YWxpZCB0aW1lIHN0cmluZy4gRGFuZ2xpbmcgdW5pdCBvciBudW1iZXIuJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICB3aGlsZSAocGFydHMubGVuZ3RoKSB7XG4gICAgICBwYWlycy5wdXNoKFtwYXJ0cy5zaGlmdCgpLCBwYXJ0cy5zaGlmdCgpXSk7XG4gICAgfVxuXG4gICAgbGV0IHNlY29uZHMgPSAwO1xuICAgIGZvciAoY29uc3QgW251bSwgaW50ZXJ2YWxdIG9mIHBhaXJzKSB7XG4gICAgICBjb25zdCB2YWwgPSBOdW1iZXIobnVtKTtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86IGAnJHtudW19JyBpcyBub3QgYW4gaW50ZWdlci5gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICAgIGNhc2UgJ3lyJzpcbiAgICAgICAgY2FzZSAneXJzJzpcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIGNhc2UgJ3llYXJzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDMxNTM2MDAwOyAvLyAzNjUgKiAyNCAqIDYwICogNjBcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd3ayc6XG4gICAgICAgIGNhc2UgJ3drcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiA2MDQ4MDA7IC8vIDcgKiAyNCAqIDYwICogNjBcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiA4NjQwMDsgLy8gMjQgKiA2MCAqIDYwXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnaHInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2FzZSAnaG91cnMnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsICogMzYwMDsgLy8gNjAgKiA2MFxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDYwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3NlY3MnOlxuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICBpbmZvOiBgSW52YWxpZCBpbnRlcnZhbDogJyR7aW50ZXJ2YWx9J2AsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBzZWNvbmRzICogMTAwMDtcbiAgICBpZiAoZnV0dXJlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaW5mbzogJ2Z1dHVyZScsXG4gICAgICAgIHJlc3VsdDogbmV3IERhdGUobm93LnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocGFzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGluZm86ICdwYXN0JyxcbiAgICAgICAgcmVzdWx0OiBuZXcgRGF0ZShub3cudmFsdWVPZigpIC0gbWlsbGlzZWNvbmRzKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpbmZvOiAncHJlc2VudCcsXG4gICAgICAgIHJlc3VsdDogbmV3IERhdGUobm93LnZhbHVlT2YoKSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWVwLXNjYW5zIGFuIG9iamVjdCBmb3IgYSBtYXRjaGluZyBrZXkvdmFsdWUgZGVmaW5pdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHNjYW4uXG4gICAqIEBwYXJhbSB7U3RyaW5nIHwgdW5kZWZpbmVkfSBrZXkgVGhlIGtleSB0byBtYXRjaCwgb3IgdW5kZWZpbmVkIGlmIG9ubHkgdGhlIHZhbHVlIHNob3VsZCBiZSBtYXRjaGVkLlxuICAgKiBAcGFyYW0ge2FueSB8IHVuZGVmaW5lZH0gdmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLCBvciB1bmRlZmluZWQgaWYgb25seSB0aGUga2V5IHNob3VsZCBiZSBtYXRjaGVkLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiBhIG1hdGNoIHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RhdGljIG9iamVjdENvbnRhaW5zS2V5VmFsdWUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgY29uc3QgaXNNYXRjaCA9IChhLCBiKSA9PiAodHlwZW9mIGEgPT09ICdzdHJpbmcnICYmIG5ldyBSZWdFeHAoYikudGVzdChhKSkgfHwgYSA9PT0gYjtcbiAgICBjb25zdCBpc0tleU1hdGNoID0gayA9PiBpc01hdGNoKGssIGtleSk7XG4gICAgY29uc3QgaXNWYWx1ZU1hdGNoID0gdiA9PiBpc01hdGNoKHYsIHZhbHVlKTtcbiAgICBjb25zdCBzdGFjayA9IFtvYmpdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCk7XG4gICAgICBpZiAoc2Vlbi5oYXMoY3VycmVudCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjdXJyZW50KTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlzS2V5TWF0Y2goaykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGlzVmFsdWVNYXRjaCh2KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNLZXlNYXRjaChrKSAmJiBpc1ZhbHVlTWF0Y2godikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoWydbb2JqZWN0IE9iamVjdF0nLCAnW29iamVjdCBBcnJheV0nXS5pbmNsdWRlcyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikpKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBkYXRhKSB7XG4gICAgaWYgKGNvbmZpZz8ucmVxdWVzdEtleXdvcmREZW55bGlzdCkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGNvbmZpZy5yZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gVXRpbHMub2JqZWN0Q29udGFpbnNLZXlWYWx1ZShkYXRhLCBrZXl3b3JkLmtleSwga2V5d29yZC52YWx1ZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRocm93IGBQcm9oaWJpdGVkIGtleXdvcmQgaW4gcmVxdWVzdCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGtleXdvcmQpfS5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBuZXN0ZWQga2V5cyBvZiBhIHNwZWNpZmllZCBrZXkgaW4gYW4gb2JqZWN0IHRvIHRoZSByb290IG9mIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtleSB3aG9zZSBuZXN0ZWQga2V5cyB3aWxsIGJlIG1vdmVkIHRvIHJvb3QuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtb2RpZmllZCBvYmplY3QsIG9yIHRoZSBvcmlnaW5hbCBvYmplY3QgaWYgbm8gbW9kaWZpY2F0aW9uIGhhcHBlbmVkLlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBvYmogPSB7XG4gICAqICAgYTogMSxcbiAgICogICBiOiB7XG4gICAqICAgICBjOiAyLFxuICAgKiAgICAgZDogM1xuICAgKiAgIH0sXG4gICAqICAgZTogNFxuICAgKiB9O1xuICAgKiBhZGROZXN0ZWRLZXlzVG9Sb290KG9iaiwgJ2InKTtcbiAgICogY29uc29sZS5sb2cob2JqKTtcbiAgICogLy8gT3V0cHV0OiB7IGE6IDEsIGU6IDQsIGM6IDIsIGQ6IDMgfVxuICAqL1xuICBzdGF0aWMgYWRkTmVzdGVkS2V5c1RvUm9vdChvYmosIGtleSkge1xuICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBBZGQgbmVzdGVkIGtleXMgdG8gcm9vdFxuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHsgLi4ub2JqW2tleV0gfSk7XG4gICAgICAvLyBEZWxldGUgb3JpZ2luYWwgbmVzdGVkIGtleVxuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBhIFVSTC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZW5jb2RlRm9yVXJsKGlucHV0KSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkucmVwbGFjZSgvWyEnLigpKl0vZywgY2hhciA9PlxuICAgICAgJyUnICsgY2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgSlNPTiByZXBsYWNlciBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgTWFwLCBTZXQsIGFuZCBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgKiBUaGlzIHJlcGxhY2VyIGNhbiBiZSB1c2VkIHdpdGggSlNPTi5zdHJpbmdpZnkgdG8gc2FmZWx5IHNlcmlhbGl6ZSBjb21wbGV4IG9iamVjdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZXBsYWNlciBmdW5jdGlvbiBmb3IgSlNPTi5zdHJpbmdpZnkgdGhhdDpcbiAgICogLSBDb252ZXJ0cyBNYXAgaW5zdGFuY2VzIHRvIHBsYWluIG9iamVjdHNcbiAgICogLSBDb252ZXJ0cyBTZXQgaW5zdGFuY2VzIHRvIGFycmF5c1xuICAgKiAtIFJlcGxhY2VzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2l0aCAnW0NpcmN1bGFyXScgbWFya2VyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG9iaiA9IHsgbmFtZTogJ3Rlc3QnLCBtYXA6IG5ldyBNYXAoW1sna2V5JywgJ3ZhbHVlJ11dKSB9O1xuICAgKiBvYmouc2VsZiA9IG9iajsgLy8gY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAqIEpTT04uc3RyaW5naWZ5KG9iaiwgVXRpbHMuZ2V0Q2lyY3VsYXJSZXBsYWNlcigpKTtcbiAgICogLy8gT3V0cHV0OiB7XCJuYW1lXCI6XCJ0ZXN0XCIsXCJtYXBcIjp7XCJrZXlcIjpcInZhbHVlXCJ9LFwic2VsZlwiOlwiW0NpcmN1bGFyXVwifVxuICAgKi9cbiAgc3RhdGljIGdldENpcmN1bGFyUmVwbGFjZXIoKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgcmV0dXJuIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB1c2luZyBkb3Qgbm90YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBnZXQgdGhlIHByb3BlcnR5IGZyb20uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIGluIGRvdCBub3RhdGlvbiwgZS5nLiAnZGF0YWJhc2VPcHRpb25zLmFsbG93UHVibGljRXhwbGFpbicuXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBwcm9wZXJ0eSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBvYmogPSB7IGRhdGFiYXNlOiB7IG9wdGlvbnM6IHsgZW5hYmxlZDogdHJ1ZSB9IH0gfTtcbiAgICogVXRpbHMuZ2V0TmVzdGVkUHJvcGVydHkob2JqLCAnZGF0YWJhc2Uub3B0aW9ucy5lbmFibGVkJyk7XG4gICAqIC8vIE91dHB1dDogdHJ1ZVxuICAgKi9cbiAgc3RhdGljIGdldE5lc3RlZFByb3BlcnR5KG9iaiwgcGF0aCkge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmIChjdXJyZW50ID09IG51bGwgfHwgdHlwZW9mIGN1cnJlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBodW1hbi1yZWFkYWJsZSBzaXplIHN0cmluZyBpbnRvIGEgYnl0ZSBjb3VudC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHNpemUgLSBBIG51bWJlciAoZmxvb3JlZCB0byBhbiBpbnRlZ2VyKSwgYSBudW1lcmljIHN0cmluZ1xuICAgKiAgICh0cmVhdGVkIGFzIGJ5dGVzKSwgb3IgYSBzdHJpbmcgd2l0aCBhIHVuaXQgc3VmZml4OiBgYmAsIGBrYmAsIGBtYmAsIGBnYmBcbiAgICogICAoY2FzZS1pbnNlbnNpdGl2ZSkuIEV4YW1wbGVzOiBgJzIwbWInYCwgYCc1MTJrYidgLCBgJzEuNWdiJ2AsIGAxMDQ4NTc2YC5cbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIHNpemUgaW4gYnl0ZXMsIGZsb29yZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC5cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNpemVUb0J5dGVzKHNpemUpIHtcbiAgICBpZiAodHlwZW9mIHNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzaXplKSB8fCBzaXplIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2l6ZSB2YWx1ZTogJHtzaXplfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2l6ZSk7XG4gICAgfVxuICAgIGNvbnN0IHN0ciA9IFN0cmluZyhzaXplKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtYXRjaCA9IHN0ci5tYXRjaCgvXihcXGQrKD86XFwuXFxkKyk/KVxccyooYnxrYnxtYnxnYik/JC8pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzaXplIHZhbHVlOiAke3NpemV9YCk7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBtYXRjaFsyXTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ2tiJzpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtICogMTAyNCk7XG4gICAgICBjYXNlICdtYic6XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bSAqIDEwMjQgKiAxMDI0KTtcbiAgICAgIGNhc2UgJ2diJzpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtICogMTAyNCAqIDEwMjQgKiAxMDI0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUNFLFFBQVE7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLEtBQUssQ0FBQztFQUNWO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsYUFBYUMsZ0JBQWdCQSxDQUFDQyxXQUFXLEVBQUVDLE1BQU0sRUFBRTtJQUNqRDtJQUNBLE1BQU1DLElBQUksR0FBR1IsSUFBSSxDQUFDUyxRQUFRLENBQUNILFdBQVcsQ0FBQztJQUN2QyxNQUFNSSxRQUFRLEdBQUdWLElBQUksQ0FBQ1csT0FBTyxDQUFDTCxXQUFXLENBQUM7O0lBRTFDO0lBQ0EsSUFBSSxDQUFDQyxN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
|
package/lib/triggers.js
CHANGED
|
@@ -56,18 +56,28 @@ const Types = exports.Types = {
|
|
|
56
56
|
afterEvent: 'afterEvent'
|
|
57
57
|
};
|
|
58
58
|
const ConnectClassName = '@Connect';
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Creates a prototype-free object for use as a lookup store.
|
|
62
|
+
* This prevents prototype chain properties (e.g. `constructor`, `toString`)
|
|
63
|
+
* from being resolved as registered handlers when using bracket notation
|
|
64
|
+
* for lookups. Always use this instead of `{}` for handler stores.
|
|
65
|
+
*/
|
|
66
|
+
function createStore() {
|
|
67
|
+
return Object.create(null);
|
|
68
|
+
}
|
|
59
69
|
const baseStore = function () {
|
|
60
70
|
const Validators = Object.keys(Types).reduce(function (base, key) {
|
|
61
|
-
base[key] =
|
|
71
|
+
base[key] = createStore();
|
|
62
72
|
return base;
|
|
63
|
-
},
|
|
64
|
-
const Functions =
|
|
65
|
-
const Jobs =
|
|
73
|
+
}, createStore());
|
|
74
|
+
const Functions = createStore();
|
|
75
|
+
const Jobs = createStore();
|
|
66
76
|
const LiveQuery = [];
|
|
67
77
|
const Triggers = Object.keys(Types).reduce(function (base, key) {
|
|
68
|
-
base[key] =
|
|
78
|
+
base[key] = createStore();
|
|
69
79
|
return base;
|
|
70
|
-
},
|
|
80
|
+
}, createStore());
|
|
71
81
|
return Object.freeze({
|
|
72
82
|
Functions,
|
|
73
83
|
Jobs,
|
|
@@ -120,7 +130,7 @@ function getStore(category, name, applicationId) {
|
|
|
120
130
|
const invalidNameRegex = /['"`]/;
|
|
121
131
|
if (invalidNameRegex.test(name)) {
|
|
122
132
|
// Prevent a malicious user from injecting properties into the store
|
|
123
|
-
return
|
|
133
|
+
return createStore();
|
|
124
134
|
}
|
|
125
135
|
const path = name.split('.');
|
|
126
136
|
path.splice(-1); // remove last component
|
|
@@ -130,7 +140,7 @@ function getStore(category, name, applicationId) {
|
|
|
130
140
|
for (const component of path) {
|
|
131
141
|
store = store[component];
|
|
132
142
|
if (!store) {
|
|
133
|
-
return
|
|
143
|
+
return createStore();
|
|
134
144
|
}
|
|
135
145
|
}
|
|
136
146
|
return store;
|
|
@@ -926,4 +936,4 @@ async function maybeRunGlobalConfigTrigger(triggerType, auth, configObject, orig
|
|
|
926
936
|
}
|
|
927
937
|
return configObject;
|
|
928
938
|
}
|
|
929
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlR5cGVzIiwiZXhwb3J0cyIsImJlZm9yZUxvZ2luIiwiYWZ0ZXJMb2dpbiIsImFmdGVyTG9nb3V0IiwiYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QiLCJiZWZvcmVTYXZlIiwiYWZ0ZXJTYXZlIiwiYmVmb3JlRGVsZXRlIiwiYWZ0ZXJEZWxldGUiLCJiZWZvcmVGaW5kIiwiYWZ0ZXJGaW5kIiwiYmVmb3JlQ29ubmVjdCIsImJlZm9yZVN1YnNjcmliZSIsImFmdGVyRXZlbnQiLCJDb25uZWN0Q2xhc3NOYW1lIiwiYmFzZVN0b3JlIiwiVmFsaWRhdG9ycyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJiYXNlIiwia2V5IiwiRnVuY3Rpb25zIiwiSm9icyIsIkxpdmVRdWVyeSIsIlRyaWdnZXJzIiwiZnJlZXplIiwiZ2V0Q2xhc3NOYW1lIiwicGFyc2VDbGFzcyIsImNsYXNzTmFtZSIsIm5hbWUiLCJyZXBsYWNlIiwidmFsaWRhdGVDbGFzc05hbWVGb3JUcmlnZ2VycyIsInR5cGUiLCJfdHJpZ2dlclN0b3JlIiwiQ2F0ZWdvcnkiLCJnZXRTdG9yZSIsImNhdGVnb3J5IiwiYXBwbGljYXRpb25JZCIsImludmFsaWROYW1lUmVnZXgiLCJ0ZXN0IiwicGF0aCIsInNwbGl0Iiwic3BsaWNlIiwiUGFyc2UiLCJzdG9yZSIsImNvbXBvbmVudCIsImFkZCIsImhhbmRsZXIiLCJsYXN0Q29tcG9uZW50IiwibG9nZ2VyIiwid2FybiIsInJlbW92ZSIsImdldCIsImFkZEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lIiwidmFsaWRhdGlvbkhhbmRsZXIiLCJhZGRKb2IiLCJqb2JOYW1lIiwiYWRkVHJpZ2dlciIsImFkZENvbm5lY3RUcmlnZ2VyIiwiYWRkTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVyIiwicHVzaCIsInJlbW92ZUZ1bmN0aW9uIiwicmVtb3ZlVHJpZ2dlciIsIl91bnJlZ2lzdGVyQWxsIiwiZm9yRWFjaCIsImFwcElkIiwidG9KU09Od2l0aE9iamVjdHMiLCJvYmplY3QiLCJ0b0pTT04iLCJzdGF0ZUNvbnRyb2xsZXIiLCJDb3JlTWFuYWdlciIsImdldE9iamVjdFN0YXRlQ29udHJvbGxlciIsInBlbmRpbmciLCJnZXRQZW5kaW5nT3BzIiwiX2dldFN0YXRlSWRlbnRpZmllciIsInZhbCIsIl90b0Z1bGxKU09OIiwiZ2V0VHJpZ2dlciIsInRyaWdnZXJUeXBlIiwicnVuVHJpZ2dlciIsInRyaWdnZXIiLCJyZXF1ZXN0IiwiYXV0aCIsIm1heWJlUnVuVmFsaWRhdG9yIiwic2tpcFdpdGhNYXN0ZXJLZXkiLCJ0cmlnZ2VyRXhpc3RzIiwidW5kZWZpbmVkIiwiZ2V0RnVuY3Rpb24iLCJnZXRGdW5jdGlvbk5hbWVzIiwiZnVuY3Rpb25OYW1lcyIsImV4dHJhY3RGdW5jdGlvbk5hbWVzIiwibmFtZXNwYWNlIiwidmFsdWUiLCJnZXRKb2IiLCJnZXRKb2JzIiwibWFuYWdlciIsImdldFZhbGlkYXRvciIsImdldFJlcXVlc3RPYmplY3QiLCJwYXJzZU9iamVjdCIsIm9yaWdpbmFsUGFyc2VPYmplY3QiLCJjb25maWciLCJjb250ZXh0IiwiaXNHZXQiLCJ0cmlnZ2VyTmFtZSIsIm1hc3RlciIsImlzUmVhZE9ubHkiLCJsb2ciLCJsb2dnZXJDb250cm9sbGVyIiwiaGVhZGVycyIsImlwIiwib3JpZ2luYWwiLCJhc3NpZ24iLCJpc01hc3RlciIsInVzZXIiLCJpbnN0YWxsYXRpb25JZCIsImdldFJlcXVlc3RRdWVyeU9iamVjdCIsInF1ZXJ5IiwiY291bnQiLCJnZXRSZXNwb25zZU9iamVjdCIsInJlc29sdmUiLCJyZWplY3QiLCJzdWNjZXNzIiwicmVzcG9uc2UiLCJvYmplY3RzIiwibWFwIiwiZXF1YWxzIiwiX2dldFNhdmVKU09OIiwiaWQiLCJlcnJvciIsInJlc29sdmVFcnJvciIsImNvZGUiLCJFcnJvciIsIlNDUklQVF9GQUlMRUQiLCJtZXNzYWdlIiwidXNlcklkRm9yTG9nIiwibG9nVHJpZ2dlckFmdGVySG9vayIsImlucHV0IiwibG9nTGV2ZWwiLCJjbGVhbklucHV0IiwidHJ1bmNhdGVMb2dNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImxvZ1RyaWdnZXJTdWNjZXNzQmVmb3JlSG9vayIsInJlc3VsdCIsImNsZWFuUmVzdWx0IiwibG9nVHJpZ2dlckVycm9yQmVmb3JlSG9vayIsIm1heWJlUnVuQWZ0ZXJGaW5kVHJpZ2dlciIsImNsYXNzTmFtZVF1ZXJ5Iiwib2JqZWN0c0lucHV0IiwiUHJvbWlzZSIsImxlbmd0aCIsIm9iaiIsIlF1ZXJ5IiwicGFyc2VRdWVyeUluc3RhbmNlIiwid2hlcmUiLCJ3aXRoSlNPTiIsInByb2Nlc3NlZE9iamVjdHNKU09OIiwiZXJyb3JEYXRhIiwibyIsImxvZ0xldmVscyIsInRyaWdnZXJCZWZvcmVTdWNjZXNzIiwiY3VycmVudE9iamVjdCIsIm9yaWdpbmFsQ2xhc3NOYW1lIiwidGVtcE9iamVjdFdpdGhDbGFzc05hbWUiLCJmcm9tSlNPTiIsInRoZW4iLCJyZXNwb25zZUZyb21UcmlnZ2VyIiwicmVzdWx0cyIsInJlc3VsdHNBc0pTT04iLCJ0cmlnZ2VyQWZ0ZXIiLCJtYXliZVJ1blF1ZXJ5VHJpZ2dlciIsInJlc3RXaGVyZSIsInJlc3RPcHRpb25zIiwianNvbiIsInBhcnNlUXVlcnkiLCJyZXF1ZXN0T2JqZWN0IiwicXVlcnlSZXN1bHQiLCJqc29uUXVlcnkiLCJsaW1pdCIsInNraXAiLCJpbmNsdWRlIiwiZXhjbHVkZUtleXMiLCJleHBsYWluIiwib3JkZXIiLCJoaW50IiwiY29tbWVudCIsInJlYWRQcmVmZXJlbmNlIiwiaW5jbHVkZVJlYWRQcmVmZXJlbmNlIiwic3VicXVlcnlSZWFkUHJlZmVyZW5jZSIsIkFycmF5IiwiaXNBcnJheSIsImV2ZXJ5IiwiZXJyIiwiZGVmYXVsdE9wdHMiLCJzdGFjayIsInRoZVZhbGlkYXRvciIsImJ1aWx0SW5UcmlnZ2VyVmFsaWRhdG9yIiwiY2F0Y2giLCJWQUxJREFUSU9OX0VSUk9SIiwib3B0aW9ucyIsInZhbGlkYXRlTWFzdGVyS2V5IiwicmVxVXNlciIsImV4aXN0ZWQiLCJyZXF1aXJlVXNlciIsInJlcXVpcmVBbnlVc2VyUm9sZXMiLCJyZXF1aXJlQWxsVXNlclJvbGVzIiwicmVxdWlyZU1hc3RlciIsInBhcmFtcyIsInJlcXVpcmVkUGFyYW0iLCJ2YWxpZGF0ZU9wdGlvbnMiLCJvcHQiLCJvcHRzIiwiaW5jbHVkZXMiLCJqb2luIiwiZ2V0VHlwZSIsImZuIiwibWF0Y2giLCJ0b1N0cmluZyIsInRvTG93ZXJDYXNlIiwiZmllbGRzIiwib3B0aW9uUHJvbWlzZXMiLCJzZXQiLCJjb25zdGFudCIsInJldmVydCIsInJlcXVpcmVkIiwib3B0aW9uYWwiLCJ2YWxUeXBlIiwiYWxsIiwidXNlclJvbGVzIiwicmVxdWlyZUFsbFJvbGVzIiwicHJvbWlzZXMiLCJnZXRVc2VyUm9sZXMiLCJyb2xlcyIsInJlc29sdmVkVXNlclJvbGVzIiwicmVzb2x2ZWRSZXF1aXJlQWxsIiwiaGFzUm9sZSIsInNvbWUiLCJyZXF1aXJlZFJvbGUiLCJ1c2VyS2V5cyIsInJlcXVpcmVVc2VyS2V5cyIsIm1heWJlUnVuVHJpZ2dlciIsInN0YXJ0c1dpdGgiLCJ0cmlnZ2VyQmVmb3JlRXJyb3IiLCJwcm9taXNlIiwiaW5mbGF0ZSIsImRhdGEiLCJyZXN0T2JqZWN0IiwiY29weSIsInJ1bkxpdmVRdWVyeUV2ZW50SGFuZGxlcnMiLCJnZXRSZXF1ZXN0RmlsZU9iamVjdCIsImZpbGVPYmplY3QiLCJtYXliZVJ1bkZpbGVUcmlnZ2VyIiwiRmlsZUNsYXNzTmFtZSIsIkZpbGUiLCJmaWxlVHJpZ2dlciIsImZvcmNlRG93bmxvYWQiLCJmaWxlIiwiZmlsZVNpemUiLCJtYXliZVJ1bkdsb2JhbENvbmZpZ1RyaWdnZXIiLCJjb25maWdPYmplY3QiLCJvcmlnaW5hbENvbmZpZ09iamVjdCIsIkdsb2JhbENvbmZpZ0NsYXNzTmFtZSIsIkNvbmZpZyIsImNvbmZpZ1RyaWdnZXIiXSwic291cmNlcyI6WyIuLi9zcmMvdHJpZ2dlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJpZ2dlcnMuanNcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFR5cGVzID0ge1xuICBiZWZvcmVMb2dpbjogJ2JlZm9yZUxvZ2luJyxcbiAgYWZ0ZXJMb2dpbjogJ2FmdGVyTG9naW4nLFxuICBhZnRlckxvZ291dDogJ2FmdGVyTG9nb3V0JyxcbiAgYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3Q6ICdiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCcsXG4gIGJlZm9yZVNhdmU6ICdiZWZvcmVTYXZlJyxcbiAgYWZ0ZXJTYXZlOiAnYWZ0ZXJTYXZlJyxcbiAgYmVmb3JlRGVsZXRlOiAnYmVmb3JlRGVsZXRlJyxcbiAgYWZ0ZXJEZWxldGU6ICdhZnRlckRlbGV0ZScsXG4gIGJlZm9yZUZpbmQ6ICdiZWZvcmVGaW5kJyxcbiAgYWZ0ZXJGaW5kOiAnYWZ0ZXJGaW5kJyxcbiAgYmVmb3JlQ29ubmVjdDogJ2JlZm9yZUNvbm5lY3QnLFxuICBiZWZvcmVTdWJzY3JpYmU6ICdiZWZvcmVTdWJzY3JpYmUnLFxuICBhZnRlckV2ZW50OiAnYWZ0ZXJFdmVudCcsXG59O1xuXG5jb25zdCBDb25uZWN0Q2xhc3NOYW1lID0gJ0BDb25uZWN0JztcblxuY29uc3QgYmFzZVN0b3JlID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBWYWxpZGF0b3JzID0gT2JqZWN0LmtleXMoVHlwZXMpLnJlZHVjZShmdW5jdGlvbiAoYmFzZSwga2V5KSB7XG4gICAgYmFzZVtrZXldID0ge307XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0sIHt9KTtcbiAgY29uc3QgRnVuY3Rpb25zID0ge307XG4gIGNvbnN0IEpvYnMgPSB7fTtcbiAgY29uc3QgTGl2ZVF1ZXJ5ID0gW107XG4gIGNvbnN0IFRyaWdnZXJzID0gT2JqZWN0LmtleXMoVHlwZXMpLnJlZHVjZShmdW5jdGlvbiAoYmFzZSwga2V5KSB7XG4gICAgYmFzZVtrZXldID0ge307XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgRnVuY3Rpb25zLFxuICAgIEpvYnMsXG4gICAgVmFsaWRhdG9ycyxcbiAgICBUcmlnZ2VycyxcbiAgICBMaXZlUXVlcnksXG4gIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzTmFtZShwYXJzZUNsYXNzKSB7XG4gIGlmIChwYXJzZUNsYXNzICYmIHBhcnNlQ2xhc3MuY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHBhcnNlQ2xhc3MuY2xhc3NOYW1lO1xuICB9XG4gIGlmIChwYXJzZUNsYXNzICYmIHBhcnNlQ2xhc3MubmFtZSkge1xuICAgIHJldHVybiBwYXJzZUNsYXNzLm5hbWUucmVwbGFjZSgnUGFyc2UnLCAnQCcpO1xuICB9XG4gIHJldHVybiBwYXJzZUNsYXNzO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNsYXNzTmFtZUZvclRyaWdnZXJzKGNsYXNzTmFtZSwgdHlwZSkge1xuICBpZiAodHlwZSA9PSBUeXBlcy5iZWZvcmVTYXZlICYmIGNsYXNzTmFtZSA9PT0gJ19QdXNoU3RhdHVzJykge1xuICAgIC8vIF9QdXNoU3RhdHVzIHVzZXMgdW5kb2N1bWVudGVkIG5lc3RlZCBrZXkgaW5jcmVtZW50IG9wc1xuICAgIC8vIGFsbG93aW5nIGJlZm9yZVNhdmUgd291bGQgbWVzcyB1cCB0aGUgb2JqZWN0cyBiaWcgdGltZVxuICAgIC8vIFRPRE86IEFsbG93IHByb3BlciBkb2N1bWVudGVkIHdheSBvZiB1c2luZyBuZXN0ZWQgaW5jcmVtZW50IG9wc1xuICAgIHRocm93ICdPbmx5IGFmdGVyU2F2ZSBpcyBhbGxvd2VkIG9uIF9QdXNoU3RhdHVzJztcbiAgfVxuICBpZiAoKHR5cGUgPT09IFR5cGVzLmJlZm9yZUxvZ2luIHx8IHR5cGUgPT09IFR5cGVzLmFmdGVyTG9naW4gfHwgdHlwZSA9PT0gVHlwZXMuYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QpICYmIGNsYXNzTmFtZSAhPT0gJ19Vc2VyJykge1xuICAgIC8vIFRPRE86IGNoZWNrIGlmIHVwc3RyZWFtIGNvZGUgd2lsbCBoYW5kbGUgYEVycm9yYCBpbnN0YW5jZSByYXRoZXJcbiAgICAvLyB0aGFuIHRoaXMgYW50aS1wYXR0ZXJuIG9mIHRocm93aW5nIHN0cmluZ3NcbiAgICB0aHJvdyAnT25seSB0aGUgX1VzZXIgY2xhc3MgaXMgYWxsb3dlZCBmb3IgdGhlIGJlZm9yZUxvZ2luLCBhZnRlckxvZ2luLCBhbmQgYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QgdHJpZ2dlcnMnO1xuICB9XG4gIGlmICh0eXBlID09PSBUeXBlcy5hZnRlckxvZ291dCAmJiBjbGFzc05hbWUgIT09ICdfU2Vzc2lvbicpIHtcbiAgICAvLyBUT0RPOiBjaGVjayBpZiB1cHN0cmVhbSBjb2RlIHdpbGwgaGFuZGxlIGBFcnJvcmAgaW5zdGFuY2UgcmF0aGVyXG4gICAgLy8gdGhhbiB0aGlzIGFudGktcGF0dGVybiBvZiB0aHJvd2luZyBzdHJpbmdzXG4gICAgdGhyb3cgJ09ubHkgdGhlIF9TZXNzaW9uIGNsYXNzIGlzIGFsbG93ZWQgZm9yIHRoZSBhZnRlckxvZ291dCB0cmlnZ2VyLic7XG4gIH1cbiAgaWYgKGNsYXNzTmFtZSA9PT0gJ19TZXNzaW9uJyAmJiB0eXBlICE9PSBUeXBlcy5hZnRlckxvZ291dCkge1xuICAgIC8vIFRPRE86IGNoZWNrIGlmIHVwc3RyZWFtIGNvZGUgd2lsbCBoYW5kbGUgYEVycm9yYCBpbnN0YW5jZSByYXRoZXJcbiAgICAvLyB0aGFuIHRoaXMgYW50aS1wYXR0ZXJuIG9mIHRocm93aW5nIHN0cmluZ3NcbiAgICB0aHJvdyAnT25seSB0aGUgYWZ0ZXJMb2dvdXQgdHJpZ2dlciBpcyBhbGxvd2VkIGZvciB0aGUgX1Nlc3Npb24gY2xhc3MuJztcbiAgfVxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5jb25zdCBfdHJpZ2dlclN0b3JlID0ge307XG5cbmNvbnN0IENhdGVnb3J5ID0ge1xuICBGdW5jdGlvbnM6ICdGdW5jdGlvbnMnLFxuICBWYWxpZGF0b3JzOiAnVmFsaWRhdG9ycycsXG4gIEpvYnM6ICdKb2JzJyxcbiAgVHJpZ2dlcnM6ICdUcmlnZ2VycycsXG59O1xuXG5mdW5jdGlvbiBnZXRTdG9yZShjYXRlZ29yeSwgbmFtZSwgYXBwbGljYXRpb25JZCkge1xuICBjb25zdCBpbnZhbGlkTmFtZVJlZ2V4ID0gL1snXCJgXS87XG4gIGlmIChpbnZhbGlkTmFtZVJlZ2V4LnRlc3QobmFtZSkpIHtcbiAgICAvLyBQcmV2ZW50IGEgbWFsaWNpb3VzIHVzZXIgZnJvbSBpbmplY3RpbmcgcHJvcGVydGllcyBpbnRvIHRoZSBzdG9yZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBuYW1lLnNwbGl0KCcuJyk7XG4gIHBhdGguc3BsaWNlKC0xKTsgLy8gcmVtb3ZlIGxhc3QgY29tcG9uZW50XG4gIGFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkIHx8IFBhcnNlLmFwcGxpY2F0aW9uSWQ7XG4gIF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF0gPSBfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdIHx8IGJhc2VTdG9yZSgpO1xuICBsZXQgc3RvcmUgPSBfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdW2NhdGVnb3J5XTtcbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcGF0aCkge1xuICAgIHN0b3JlID0gc3RvcmVbY29tcG9uZW50XTtcbiAgICBpZiAoIXN0b3JlKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG4gIHJldHVybiBzdG9yZTtcbn1cblxuZnVuY3Rpb24gYWRkKGNhdGVnb3J5LCBuYW1lLCBoYW5kbGVyLCBhcHBsaWNhdGlvbklkKSB7XG4gIGNvbnN0IGxhc3RDb21wb25lbnQgPSBuYW1lLnNwbGl0KCcuJykuc3BsaWNlKC0xKTtcbiAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZShjYXRlZ29yeSwgbmFtZSwgYXBwbGljYXRpb25JZCk7XG4gIGlmIChzdG9yZVtsYXN0Q29tcG9uZW50XSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYFdhcm5pbmc6IER1cGxpY2F0ZSBjbG91ZCBmdW5jdGlvbnMgZXhpc3QgZm9yICR7bGFzdENvbXBvbmVudH0uIE9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCBhbmQgdGhlIG90aGVycyB3aWxsIGJlIGlnbm9yZWQuYFxuICAgICk7XG4gIH1cbiAgc3RvcmVbbGFzdENvbXBvbmVudF0gPSBoYW5kbGVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoY2F0ZWdvcnksIG5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgY29uc3QgbGFzdENvbXBvbmVudCA9IG5hbWUuc3BsaXQoJy4nKS5zcGxpY2UoLTEpO1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGNhdGVnb3J5LCBuYW1lLCBhcHBsaWNhdGlvbklkKTtcbiAgZGVsZXRlIHN0b3JlW2xhc3RDb21wb25lbnRdO1xufVxuXG5mdW5jdGlvbiBnZXQoY2F0ZWdvcnksIG5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgY29uc3QgbGFzdENvbXBvbmVudCA9IG5hbWUuc3BsaXQoJy4nKS5zcGxpY2UoLTEpO1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGNhdGVnb3J5LCBuYW1lLCBhcHBsaWNhdGlvbklkKTtcbiAgcmV0dXJuIHN0b3JlW2xhc3RDb21wb25lbnRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBoYW5kbGVyLCB2YWxpZGF0aW9uSGFuZGxlciwgYXBwbGljYXRpb25JZCkge1xuICBhZGQoQ2F0ZWdvcnkuRnVuY3Rpb25zLCBmdW5jdGlvbk5hbWUsIGhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xuICBhZGQoQ2F0ZWdvcnkuVmFsaWRhdG9ycywgZnVuY3Rpb25OYW1lLCB2YWxpZGF0aW9uSGFuZGxlciwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRKb2Ioam9iTmFtZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCkge1xuICBhZGQoQ2F0ZWdvcnkuSm9icywgam9iTmFtZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUcmlnZ2VyKHR5cGUsIGNsYXNzTmFtZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCwgdmFsaWRhdGlvbkhhbmRsZXIpIHtcbiAgdmFsaWRhdGVDbGFzc05hbWVGb3JUcmlnZ2VycyhjbGFzc05hbWUsIHR5cGUpO1xuICBhZGQoQ2F0ZWdvcnkuVHJpZ2dlcnMsIGAke3R5cGV9LiR7Y2xhc3NOYW1lfWAsIGhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xuICBhZGQoQ2F0ZWdvcnkuVmFsaWRhdG9ycywgYCR7dHlwZX0uJHtjbGFzc05hbWV9YCwgdmFsaWRhdGlvbkhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29ubmVjdFRyaWdnZXIodHlwZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCwgdmFsaWRhdGlvbkhhbmRsZXIpIHtcbiAgYWRkKENhdGVnb3J5LlRyaWdnZXJzLCBgJHt0eXBlfS4ke0Nvbm5lY3RDbGFzc05hbWV9YCwgaGFuZGxlciwgYXBwbGljYXRpb25JZCk7XG4gIGFkZChDYXRlZ29yeS5WYWxpZGF0b3JzLCBgJHt0eXBlfS4ke0Nvbm5lY3RDbGFzc05hbWV9YCwgdmFsaWRhdGlvbkhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVyKGhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpIHtcbiAgYXBwbGljYXRpb25JZCA9IGFwcGxpY2F0aW9uSWQgfHwgUGFyc2UuYXBwbGljYXRpb25JZDtcbiAgX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXSA9IF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF0gfHwgYmFzZVN0b3JlKCk7XG4gIF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF0uTGl2ZVF1ZXJ5LnB1c2goaGFuZGxlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgcmVtb3ZlKENhdGVnb3J5LkZ1bmN0aW9ucywgZnVuY3Rpb25OYW1lLCBhcHBsaWNhdGlvbklkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyaWdnZXIodHlwZSwgY2xhc3NOYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIHJlbW92ZShDYXRlZ29yeS5UcmlnZ2VycywgYCR7dHlwZX0uJHtjbGFzc05hbWV9YCwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdW5yZWdpc3RlckFsbCgpIHtcbiAgT2JqZWN0LmtleXMoX3RyaWdnZXJTdG9yZSkuZm9yRWFjaChhcHBJZCA9PiBkZWxldGUgX3RyaWdnZXJTdG9yZVthcHBJZF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9KU09Od2l0aE9iamVjdHMob2JqZWN0LCBjbGFzc05hbWUpIHtcbiAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC50b0pTT04pIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3QgdG9KU09OID0gb2JqZWN0LnRvSlNPTigpO1xuICBjb25zdCBzdGF0ZUNvbnRyb2xsZXIgPSBQYXJzZS5Db3JlTWFuYWdlci5nZXRPYmplY3RTdGF0ZUNvbnRyb2xsZXIoKTtcbiAgY29uc3QgW3BlbmRpbmddID0gc3RhdGVDb250cm9sbGVyLmdldFBlbmRpbmdPcHMob2JqZWN0Ll9nZXRTdGF0ZUlkZW50aWZpZXIoKSk7XG4gIGZvciAoY29uc3Qga2V5IGluIHBlbmRpbmcpIHtcbiAgICBjb25zdCB2YWwgPSBvYmplY3QuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWwgfHwgIXZhbC5fdG9GdWxsSlNPTikge1xuICAgICAgdG9KU09OW2tleV0gPSB2YWw7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdG9KU09OW2tleV0gPSB2YWwuX3RvRnVsbEpTT04oKTtcbiAgfVxuICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBvYmplY3QncyBjbGFzc05hbWUgaWYgbm8gb3ZlcnJpZGUgY2xhc3NOYW1lIGlzIHByb3ZpZGVkXG4gIGlmIChjbGFzc05hbWUpIHtcbiAgICB0b0pTT04uY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICB9IGVsc2UgaWYgKG9iamVjdC5jbGFzc05hbWUgJiYgIXRvSlNPTi5jbGFzc05hbWUpIHtcbiAgICB0b0pTT04uY2xhc3NOYW1lID0gb2JqZWN0LmNsYXNzTmFtZTtcbiAgfVxuICByZXR1cm4gdG9KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJUeXBlLCBhcHBsaWNhdGlvbklkKSB7XG4gIGlmICghYXBwbGljYXRpb25JZCkge1xuICAgIHRocm93ICdNaXNzaW5nIEFwcGxpY2F0aW9uSUQnO1xuICB9XG4gIHJldHVybiBnZXQoQ2F0ZWdvcnkuVHJpZ2dlcnMsIGAke3RyaWdnZXJUeXBlfS4ke2NsYXNzTmFtZX1gLCBhcHBsaWNhdGlvbklkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRyaWdnZXIodHJpZ2dlciwgbmFtZSwgcmVxdWVzdCwgYXV0aCkge1xuICBpZiAoIXRyaWdnZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgbWF5YmVSdW5WYWxpZGF0b3IocmVxdWVzdCwgbmFtZSwgYXV0aCk7XG4gIGlmIChyZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBhd2FpdCB0cmlnZ2VyKHJlcXVlc3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckV4aXN0cyhjbGFzc05hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFRyaWdnZXIoY2xhc3NOYW1lLCB0eXBlLCBhcHBsaWNhdGlvbklkKSAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgcmV0dXJuIGdldChDYXRlZ29yeS5GdW5jdGlvbnMsIGZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVzKGFwcGxpY2F0aW9uSWQpIHtcbiAgY29uc3Qgc3RvcmUgPVxuICAgIChfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdICYmIF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF1bQ2F0ZWdvcnkuRnVuY3Rpb25zXSkgfHwge307XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXTtcbiAgY29uc3QgZXh0cmFjdEZ1bmN0aW9uTmFtZXMgPSAobmFtZXNwYWNlLCBzdG9yZSkgPT4ge1xuICAgIE9iamVjdC5rZXlzKHN0b3JlKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBzdG9yZVtuYW1lXTtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgbmFtZSA9IGAke25hbWVzcGFjZX0uJHtuYW1lfWA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZXMucHVzaChuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhY3RGdW5jdGlvbk5hbWVzKG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgZXh0cmFjdEZ1bmN0aW9uTmFtZXMobnVsbCwgc3RvcmUpO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpvYihqb2JOYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIHJldHVybiBnZXQoQ2F0ZWdvcnkuSm9icywgam9iTmFtZSwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2JzKGFwcGxpY2F0aW9uSWQpIHtcbiAgdmFyIG1hbmFnZXIgPSBfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdO1xuICBpZiAobWFuYWdlciAmJiBtYW5hZ2VyLkpvYnMpIHtcbiAgICByZXR1cm4gbWFuYWdlci5Kb2JzO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3IoZnVuY3Rpb25OYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIHJldHVybiBnZXQoQ2F0ZWdvcnkuVmFsaWRhdG9ycywgZnVuY3Rpb25OYW1lLCBhcHBsaWNhdGlvbklkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVlc3RPYmplY3QoXG4gIHRyaWdnZXJUeXBlLFxuICBhdXRoLFxuICBwYXJzZU9iamVjdCxcbiAgb3JpZ2luYWxQYXJzZU9iamVjdCxcbiAgY29uZmlnLFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJUeXBlLFxuICAgIG9iamVjdDogcGFyc2VPYmplY3QsXG4gICAgbWFzdGVyOiBmYWxzZSxcbiAgICBpc1JlYWRPbmx5OiBmYWxzZSxcbiAgICBsb2c6IGNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgIGhlYWRlcnM6IGNvbmZpZy5oZWFkZXJzLFxuICAgIGlwOiBjb25maWcuaXAsXG4gICAgY29uZmlnLFxuICB9O1xuXG4gIGlmIChpc0dldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdC5pc0dldCA9ICEhaXNHZXQ7XG4gIH1cblxuICBpZiAob3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgIHJlcXVlc3Qub3JpZ2luYWwgPSBvcmlnaW5hbFBhcnNlT2JqZWN0O1xuICB9XG4gIGlmIChcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlU2F2ZSB8fFxuICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlclNhdmUgfHxcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlRGVsZXRlIHx8XG4gICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyRGVsZXRlIHx8XG4gICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmJlZm9yZUxvZ2luIHx8XG4gICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyTG9naW4gfHxcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QgfHxcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYWZ0ZXJGaW5kXG4gICkge1xuICAgIC8vIFNldCBhIGNvcHkgb2YgdGhlIGNvbnRleHQgb24gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgIHJlcXVlc3QuY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQpO1xuICB9XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbiAgaWYgKGF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXF1ZXN0WydtYXN0ZXInXSA9IHRydWU7XG4gIH1cbiAgaWYgKGF1dGguaXNSZWFkT25seSkge1xuICAgIHJlcXVlc3RbJ2lzUmVhZE9ubHknXSA9IHRydWU7XG4gIH1cbiAgaWYgKGF1dGgudXNlcikge1xuICAgIHJlcXVlc3RbJ3VzZXInXSA9IGF1dGgudXNlcjtcbiAgfVxuICBpZiAoYXV0aC5pbnN0YWxsYXRpb25JZCkge1xuICAgIHJlcXVlc3RbJ2luc3RhbGxhdGlvbklkJ10gPSBhdXRoLmluc3RhbGxhdGlvbklkO1xuICB9XG4gIHJldHVybiByZXF1ZXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdFF1ZXJ5T2JqZWN0KHRyaWdnZXJUeXBlLCBhdXRoLCBxdWVyeSwgY291bnQsIGNvbmZpZywgY29udGV4dCwgaXNHZXQpIHtcbiAgaXNHZXQgPSAhIWlzR2V0O1xuXG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIHRyaWdnZXJOYW1lOiB0cmlnZ2VyVHlwZSxcbiAgICBxdWVyeSxcbiAgICBtYXN0ZXI6IGZhbHNlLFxuICAgIGlzUmVhZE9ubHk6IGZhbHNlLFxuICAgIGNvdW50LFxuICAgIGxvZzogY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIsXG4gICAgaXNHZXQsXG4gICAgaGVhZGVyczogY29uZmlnLmhlYWRlcnMsXG4gICAgaXA6IGNvbmZpZy5pcCxcbiAgICBjb250ZXh0OiBjb250ZXh0IHx8IHt9LFxuICAgIGNvbmZpZyxcbiAgfTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBpZiAoYXV0aC5pc01hc3Rlcikge1xuICAgIHJlcXVlc3RbJ21hc3RlciddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgcmVxdWVzdFsnaXNSZWFkT25seSddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC51c2VyKSB7XG4gICAgcmVxdWVzdFsndXNlciddID0gYXV0aC51c2VyO1xuICB9XG4gIGlmIChhdXRoLmluc3RhbGxhdGlvbklkKSB7XG4gICAgcmVxdWVzdFsnaW5zdGFsbGF0aW9uSWQnXSA9IGF1dGguaW5zdGFsbGF0aW9uSWQ7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbi8vIENyZWF0ZXMgdGhlIHJlc3BvbnNlIG9iamVjdCwgYW5kIHVzZXMgdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIHBhc3MgZGF0YVxuLy8gVGhlIEFQSSB3aWxsIGNhbGwgdGhpcyB3aXRoIFJFU1QgQVBJIGZvcm1hdHRlZCBvYmplY3RzLCB0aGlzIHdpbGxcbi8vIHRyYW5zZm9ybSB0aGVtIHRvIFBhcnNlLk9iamVjdCBpbnN0YW5jZXMgZXhwZWN0ZWQgYnkgQ2xvdWQgQ29kZS5cbi8vIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIG9iamVjdCBpbiBhIGJlZm9yZVNhdmUgd2lsbCBiZSBpbmNsdWRlZC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNwb25zZU9iamVjdChyZXF1ZXN0LCByZXNvbHZlLCByZWplY3QpIHtcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChyZXF1ZXN0LnRyaWdnZXJOYW1lID09PSBUeXBlcy5hZnRlckZpbmQpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdC5vYmplY3RzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UubWFwKG9iamVjdCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRvSlNPTndpdGhPYmplY3RzKG9iamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICAvLyBVc2UgdGhlIEpTT04gcmVzcG9uc2VcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UgJiZcbiAgICAgICAgdHlwZW9mIHJlc3BvbnNlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhcmVxdWVzdC5vYmplY3QuZXF1YWxzKHJlc3BvbnNlKSAmJlxuICAgICAgICByZXF1ZXN0LnRyaWdnZXJOYW1lID09PSBUeXBlcy5iZWZvcmVTYXZlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcgJiYgcmVxdWVzdC50cmlnZ2VyTmFtZSA9PT0gVHlwZXMuYWZ0ZXJTYXZlKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1ZXN0LnRyaWdnZXJOYW1lID09PSBUeXBlcy5hZnRlclNhdmUpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlID0ge307XG4gICAgICBpZiAocmVxdWVzdC50cmlnZ2VyTmFtZSA9PT0gVHlwZXMuYmVmb3JlU2F2ZSkge1xuICAgICAgICByZXNwb25zZVsnb2JqZWN0J10gPSByZXF1ZXN0Lm9iamVjdC5fZ2V0U2F2ZUpTT04oKTtcbiAgICAgICAgcmVzcG9uc2VbJ29iamVjdCddWydvYmplY3RJZCddID0gcmVxdWVzdC5vYmplY3QuaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBjb25zdCBlID0gcmVzb2x2ZUVycm9yKGVycm9yLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdTY3JpcHQgZmFpbGVkLiBVbmtub3duIGVycm9yLicsXG4gICAgICB9KTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VySWRGb3JMb2coYXV0aCkge1xuICByZXR1cm4gYXV0aCAmJiBhdXRoLnVzZXIgPyBhdXRoLnVzZXIuaWQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxvZ1RyaWdnZXJBZnRlckhvb2sodHJpZ2dlclR5cGUsIGNsYXNzTmFtZSwgaW5wdXQsIGF1dGgsIGxvZ0xldmVsKSB7XG4gIGlmIChsb2dMZXZlbCA9PT0gJ3NpbGVudCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xlYW5JbnB1dCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKTtcbiAgbG9nZ2VyW2xvZ0xldmVsXShcbiAgICBgJHt0cmlnZ2VyVHlwZX0gdHJpZ2dlcmVkIGZvciAke2NsYXNzTmFtZX0gZm9yIHVzZXIgJHt1c2VySWRGb3JMb2coXG4gICAgICBhdXRoXG4gICAgKX06XFxuICBJbnB1dDogJHtjbGVhbklucHV0fWAsXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICB1c2VyOiB1c2VySWRGb3JMb2coYXV0aCksXG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBsb2dUcmlnZ2VyU3VjY2Vzc0JlZm9yZUhvb2sodHJpZ2dlclR5cGUsIGNsYXNzTmFtZSwgaW5wdXQsIHJlc3VsdCwgYXV0aCwgbG9nTGV2ZWwpIHtcbiAgaWYgKGxvZ0xldmVsID09PSAnc2lsZW50Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShpbnB1dCkpO1xuICBjb25zdCBjbGVhblJlc3VsdCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gIGxvZ2dlcltsb2dMZXZlbF0oXG4gICAgYCR7dHJpZ2dlclR5cGV9IHRyaWdnZXJlZCBmb3IgJHtjbGFzc05hbWV9IGZvciB1c2VyICR7dXNlcklkRm9yTG9nKFxuICAgICAgYXV0aFxuICAgICl9OlxcbiAgSW5wdXQ6ICR7Y2xlYW5JbnB1dH1cXG4gIFJlc3VsdDogJHtjbGVhblJlc3VsdH1gLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgdXNlcjogdXNlcklkRm9yTG9nKGF1dGgpLFxuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gbG9nVHJpZ2dlckVycm9yQmVmb3JlSG9vayh0cmlnZ2VyVHlwZSwgY2xhc3NOYW1lLCBpbnB1dCwgYXV0aCwgZXJyb3IsIGxvZ0xldmVsKSB7XG4gIGlmIChsb2dMZXZlbCA9PT0gJ3NpbGVudCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xlYW5JbnB1dCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKTtcbiAgbG9nZ2VyW2xvZ0xldmVsXShcbiAgICBgJHt0cmlnZ2VyVHlwZX0gZmFpbGVkIGZvciAke2NsYXNzTmFtZX0gZm9yIHVzZXIgJHt1c2VySWRGb3JMb2coXG4gICAgICBhdXRoXG4gICAgKX06XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWAsXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICBlcnJvcixcbiAgICAgIHVzZXI6IHVzZXJJZEZvckxvZyhhdXRoKSxcbiAgICB9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJ1bkFmdGVyRmluZFRyaWdnZXIoXG4gIHRyaWdnZXJUeXBlLFxuICBhdXRoLFxuICBjbGFzc05hbWVRdWVyeSxcbiAgb2JqZWN0c0lucHV0LFxuICBjb25maWcsXG4gIHF1ZXJ5LFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoY2xhc3NOYW1lUXVlcnksIHRyaWdnZXJUeXBlLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG5cbiAgICBpZiAoIXRyaWdnZXIpIHtcbiAgICAgIGlmIChvYmplY3RzSW5wdXQgJiYgb2JqZWN0c0lucHV0Lmxlbmd0aCA+IDAgJiYgb2JqZWN0c0lucHV0WzBdIGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKG9iamVjdHNJbnB1dC5tYXAob2JqID0+IHRvSlNPTndpdGhPYmplY3RzKG9iaikpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG9iamVjdHNJbnB1dCB8fCBbXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGdldFJlcXVlc3RPYmplY3QodHJpZ2dlclR5cGUsIGF1dGgsIG51bGwsIG51bGwsIGNvbmZpZywgY29udGV4dCwgaXNHZXQpO1xuICAgIC8vIENvbnZlcnQgcXVlcnkgcGFyYW1ldGVyIHRvIFBhcnNlLlF1ZXJ5IGluc3RhbmNlXG4gICAgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgUGFyc2UuUXVlcnkpIHtcbiAgICAgIHJlcXVlc3QucXVlcnkgPSBxdWVyeTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgcXVlcnkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlUXVlcnlJbnN0YW5jZSA9IG5ldyBQYXJzZS5RdWVyeShjbGFzc05hbWVRdWVyeSk7XG4gICAgICBpZiAocXVlcnkud2hlcmUpIHtcbiAgICAgICAgcGFyc2VRdWVyeUluc3RhbmNlLndpdGhKU09OKHF1ZXJ5KTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QucXVlcnkgPSBwYXJzZVF1ZXJ5SW5zdGFuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QucXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lUXVlcnkpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IGdldFJlc3BvbnNlT2JqZWN0KFxuICAgICAgcmVxdWVzdCxcbiAgICAgIHByb2Nlc3NlZE9iamVjdHNKU09OID0+IHtcbiAgICAgICAgcmVzb2x2ZShwcm9jZXNzZWRPYmplY3RzSlNPTik7XG4gICAgICB9LFxuICAgICAgZXJyb3JEYXRhID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yRGF0YSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBsb2dUcmlnZ2VyU3VjY2Vzc0JlZm9yZUhvb2soXG4gICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgIGNsYXNzTmFtZVF1ZXJ5LFxuICAgICAgJ0FmdGVyRmluZCBJbnB1dCAoUHJlLVRyYW5zZm9ybSknLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIG9iamVjdHNJbnB1dC5tYXAobyA9PiAobyBpbnN0YW5jZW9mIFBhcnNlLk9iamVjdCA/IG8uaWQgKyAnOicgKyBvLmNsYXNzTmFtZSA6IG8pKVxuICAgICAgKSxcbiAgICAgIGF1dGgsXG4gICAgICBjb25maWcubG9nTGV2ZWxzLnRyaWdnZXJCZWZvcmVTdWNjZXNzXG4gICAgKTtcblxuICAgIC8vIENvbnZlcnQgcGxhaW4gb2JqZWN0cyB0byBQYXJzZS5PYmplY3QgaW5zdGFuY2VzIGZvciB0cmlnZ2VyXG4gICAgcmVxdWVzdC5vYmplY3RzID0gb2JqZWN0c0lucHV0Lm1hcChjdXJyZW50T2JqZWN0ID0+IHtcbiAgICAgIGlmIChjdXJyZW50T2JqZWN0IGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50T2JqZWN0O1xuICAgICAgfVxuICAgICAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGNsYXNzTmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB1c2UgdGhlIHF1ZXJ5IGNsYXNzTmFtZVxuICAgICAgY29uc3Qgb3JpZ2luYWxDbGFzc05hbWUgPSBjdXJyZW50T2JqZWN0LmNsYXNzTmFtZSB8fCBjbGFzc05hbWVRdWVyeTtcbiAgICAgIGNvbnN0IHRlbXBPYmplY3RXaXRoQ2xhc3NOYW1lID0geyAuLi5jdXJyZW50T2JqZWN0LCBjbGFzc05hbWU6IG9yaWdpbmFsQ2xhc3NOYW1lIH07XG4gICAgICByZXR1cm4gUGFyc2UuT2JqZWN0LmZyb21KU09OKHRlbXBPYmplY3RXaXRoQ2xhc3NOYW1lKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG1heWJlUnVuVmFsaWRhdG9yKHJlcXVlc3QsIGAke3RyaWdnZXJUeXBlfS4ke2NsYXNzTmFtZVF1ZXJ5fWAsIGF1dGgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3Quc2tpcFdpdGhNYXN0ZXJLZXkpIHtcbiAgICAgICAgICByZXR1cm4gcmVxdWVzdC5vYmplY3RzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRnJvbVRyaWdnZXIgPSB0cmlnZ2VyKHJlcXVlc3QpO1xuICAgICAgICBpZiAocmVzcG9uc2VGcm9tVHJpZ2dlciAmJiB0eXBlb2YgcmVzcG9uc2VGcm9tVHJpZ2dlci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlRnJvbVRyaWdnZXIudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZUZyb21UcmlnZ2VyO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHN1Y2Nlc3MsIGVycm9yKTtcbiAgfSkudGhlbihyZXN1bHRzQXNKU09OID0+IHtcbiAgICBsb2dUcmlnZ2VyQWZ0ZXJIb29rKFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICBjbGFzc05hbWVRdWVyeSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHJlc3VsdHNBc0pTT04pLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckFmdGVyXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0c0FzSlNPTjtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgdHJpZ2dlclR5cGUsXG4gIGNsYXNzTmFtZSxcbiAgcmVzdFdoZXJlLFxuICByZXN0T3B0aW9ucyxcbiAgY29uZmlnLFxuICBhdXRoLFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgdHJpZ2dlclR5cGUsIGNvbmZpZy5hcHBsaWNhdGlvbklkKTtcbiAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBqc29uID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpO1xuICBqc29uLndoZXJlID0gcmVzdFdoZXJlO1xuXG4gIGNvbnN0IHBhcnNlUXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lKTtcbiAgcGFyc2VRdWVyeS53aXRoSlNPTihqc29uKTtcblxuICBsZXQgY291bnQgPSBmYWxzZTtcbiAgaWYgKHJlc3RPcHRpb25zKSB7XG4gICAgY291bnQgPSAhIXJlc3RPcHRpb25zLmNvdW50O1xuICB9XG4gIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBnZXRSZXF1ZXN0UXVlcnlPYmplY3QoXG4gICAgdHJpZ2dlclR5cGUsXG4gICAgYXV0aCxcbiAgICBwYXJzZVF1ZXJ5LFxuICAgIGNvdW50LFxuICAgIGNvbmZpZyxcbiAgICBjb250ZXh0LFxuICAgIGlzR2V0XG4gICk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBtYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0T2JqZWN0LCBgJHt0cmlnZ2VyVHlwZX0uJHtjbGFzc05hbWV9YCwgYXV0aCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdE9iamVjdC5za2lwV2l0aE1hc3RlcktleSkge1xuICAgICAgICByZXR1cm4gcmVxdWVzdE9iamVjdC5xdWVyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmlnZ2VyKHJlcXVlc3RPYmplY3QpO1xuICAgIH0pXG4gICAgLnRoZW4oXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBsZXQgcXVlcnlSZXN1bHQgPSBwYXJzZVF1ZXJ5O1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLlF1ZXJ5KSB7XG4gICAgICAgICAgcXVlcnlSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvblF1ZXJ5ID0gcXVlcnlSZXN1bHQudG9KU09OKCk7XG4gICAgICAgIGlmIChqc29uUXVlcnkud2hlcmUpIHtcbiAgICAgICAgICByZXN0V2hlcmUgPSBqc29uUXVlcnkud2hlcmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5saW1pdCkge1xuICAgICAgICAgIHJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgcmVzdE9wdGlvbnMubGltaXQgPSBqc29uUXVlcnkubGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5za2lwKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5za2lwID0ganNvblF1ZXJ5LnNraXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5pbmNsdWRlKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5pbmNsdWRlID0ganNvblF1ZXJ5LmluY2x1ZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5leGNsdWRlS2V5cykge1xuICAgICAgICAgIHJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgcmVzdE9wdGlvbnMuZXhjbHVkZUtleXMgPSBqc29uUXVlcnkuZXhjbHVkZUtleXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5leHBsYWluKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5leHBsYWluID0ganNvblF1ZXJ5LmV4cGxhaW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5rZXlzKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5rZXlzID0ganNvblF1ZXJ5LmtleXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5vcmRlcikge1xuICAgICAgICAgIHJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgcmVzdE9wdGlvbnMub3JkZXIgPSBqc29uUXVlcnkub3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5oaW50KSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5oaW50ID0ganNvblF1ZXJ5LmhpbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5jb21tZW50KSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5jb21tZW50ID0ganNvblF1ZXJ5LmNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3RPYmplY3QucmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXN0T3B0aW9ucyA9IHJlc3RPcHRpb25zIHx8IHt9O1xuICAgICAgICAgIHJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gcmVxdWVzdE9iamVjdC5yZWFkUHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdE9iamVjdC5pbmNsdWRlUmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXN0T3B0aW9ucyA9IHJlc3RPcHRpb25zIHx8IHt9O1xuICAgICAgICAgIHJlc3RPcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IHJlcXVlc3RPYmplY3QuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0T2JqZWN0LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXN0T3B0aW9ucyA9IHJlc3RPcHRpb25zIHx8IHt9O1xuICAgICAgICAgIHJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSByZXF1ZXN0T2JqZWN0LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9iamVjdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5PYmplY3QpIHtcbiAgICAgICAgICBvYmplY3RzID0gW3Jlc3VsdF07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQpICYmXG4gICAgICAgICAgKCFyZXN1bHQubGVuZ3RoIHx8IHJlc3VsdC5ldmVyeShvYmogPT4gb2JqIGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqZWN0cyA9IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICAgICBvYmplY3RzLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGVyciwge1xuICAgICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgICAgbWVzc2FnZTogJ1NjcmlwdCBmYWlsZWQuIFVua25vd24gZXJyb3IuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXJyb3IobWVzc2FnZSwgZGVmYXVsdE9wdHMpIHtcbiAgaWYgKCFkZWZhdWx0T3B0cykge1xuICAgIGRlZmF1bHRPcHRzID0ge307XG4gIH1cbiAgaWYgKCFtZXNzYWdlKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIGRlZmF1bHRPcHRzLmNvZGUgfHwgUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgIGRlZmF1bHRPcHRzLm1lc3NhZ2UgfHwgJ1NjcmlwdCBmYWlsZWQuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgY29uc3QgY29kZSA9IGRlZmF1bHRPcHRzLmNvZGUgfHwgUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRDtcbiAgLy8gSWYgaXQncyBhbiBlcnJvciwgbWFyayBpdCBhcyBhIHNjcmlwdCBmYWlsZWRcbiAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoY29kZSwgbWVzc2FnZSk7XG4gIH1cbiAgY29uc3QgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoY29kZSwgbWVzc2FnZS5tZXNzYWdlIHx8IG1lc3NhZ2UpO1xuICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgZXJyb3Iuc3RhY2sgPSBtZXNzYWdlLnN0YWNrO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBmdW5jdGlvbk5hbWUsIGF1dGgpIHtcbiAgY29uc3QgdGhlVmFsaWRhdG9yID0gZ2V0VmFsaWRhdG9yKGZ1bmN0aW9uTmFtZSwgUGFyc2UuYXBwbGljYXRpb25JZCk7XG4gIGlmICghdGhlVmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0eXBlb2YgdGhlVmFsaWRhdG9yID09PSAnb2JqZWN0JyAmJiB0aGVWYWxpZGF0b3Iuc2tpcFdpdGhNYXN0ZXJLZXkgJiYgcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICByZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoZVZhbGlkYXRvciA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IGJ1aWx0SW5UcmlnZ2VyVmFsaWRhdG9yKHRoZVZhbGlkYXRvciwgcmVxdWVzdCwgYXV0aClcbiAgICAgICAgICA6IHRoZVZhbGlkYXRvcihyZXF1ZXN0KTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5WQUxJREFUSU9OX0VSUk9SLFxuICAgICAgICAgIG1lc3NhZ2U6ICdWYWxpZGF0aW9uIGZhaWxlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWx0SW5UcmlnZ2VyVmFsaWRhdG9yKG9wdGlvbnMsIHJlcXVlc3QsIGF1dGgpIHtcbiAgaWYgKHJlcXVlc3QubWFzdGVyICYmICFvcHRpb25zLnZhbGlkYXRlTWFzdGVyS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCByZXFVc2VyID0gcmVxdWVzdC51c2VyO1xuICBpZiAoXG4gICAgIXJlcVVzZXIgJiZcbiAgICByZXF1ZXN0Lm9iamVjdCAmJlxuICAgIHJlcXVlc3Qub2JqZWN0LmNsYXNzTmFtZSA9PT0gJ19Vc2VyJyAmJlxuICAgICFyZXF1ZXN0Lm9iamVjdC5leGlzdGVkKClcbiAgKSB7XG4gICAgcmVxVXNlciA9IHJlcXVlc3Qub2JqZWN0O1xuICB9XG4gIGlmIChcbiAgICAob3B0aW9ucy5yZXF1aXJlVXNlciB8fCBvcHRpb25zLnJlcXVpcmVBbnlVc2VyUm9sZXMgfHwgb3B0aW9ucy5yZXF1aXJlQWxsVXNlclJvbGVzKSAmJlxuICAgICFyZXFVc2VyXG4gICkge1xuICAgIHRocm93ICdWYWxpZGF0aW9uIGZhaWxlZC4gUGxlYXNlIGxvZ2luIHRvIGNvbnRpbnVlLic7XG4gIH1cbiAgaWYgKG9wdGlvbnMucmVxdWlyZU1hc3RlciAmJiAhcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICB0aHJvdyAnVmFsaWRhdGlvbiBmYWlsZWQuIE1hc3RlciBrZXkgaXMgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhpcyByZXF1ZXN0Lic7XG4gIH1cbiAgbGV0IHBhcmFtcyA9IHJlcXVlc3QucGFyYW1zIHx8IHt9O1xuICBpZiAocmVxdWVzdC5vYmplY3QpIHtcbiAgICBwYXJhbXMgPSByZXF1ZXN0Lm9iamVjdC50b0pTT04oKTtcbiAgfVxuICBjb25zdCByZXF1aXJlZFBhcmFtID0ga2V5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBgVmFsaWRhdGlvbiBmYWlsZWQuIFBsZWFzZSBzcGVjaWZ5IGRhdGEgZm9yICR7a2V5fS5gO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB2YWxpZGF0ZU9wdGlvbnMgPSBhc3luYyAob3B0LCBrZXksIHZhbCkgPT4ge1xuICAgIGxldCBvcHRzID0gb3B0Lm9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRzKHZhbCk7XG4gICAgICAgIGlmICghcmVzdWx0ICYmIHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgb3B0LmVycm9yIHx8IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCB2YWx1ZSBmb3IgJHtrZXl9LmA7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgdGhyb3cgb3B0LmVycm9yIHx8IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCB2YWx1ZSBmb3IgJHtrZXl9LmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBvcHQuZXJyb3IgfHwgZS5tZXNzYWdlIHx8IGU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgb3B0cyA9IFtvcHQub3B0aW9uc107XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzLmluY2x1ZGVzKHZhbCkpIHtcbiAgICAgIHRocm93IChcbiAgICAgICAgb3B0LmVycm9yIHx8IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCBvcHRpb24gZm9yICR7a2V5fS4gRXhwZWN0ZWQ6ICR7b3B0cy5qb2luKCcsICcpfWBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFR5cGUgPSBmbiA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICAgIHJldHVybiAobWF0Y2ggPyBtYXRjaFsxXSA6ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9O1xuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmZpZWxkcykpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBvcHRpb25zLmZpZWxkcykge1xuICAgICAgcmVxdWlyZWRQYXJhbShrZXkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvcHRpb25Qcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBjb25zdCBvcHQgPSBvcHRpb25zLmZpZWxkc1trZXldO1xuICAgICAgbGV0IHZhbCA9IHBhcmFtc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW0ob3B0KTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAob3B0LmRlZmF1bHQgIT0gbnVsbCAmJiB2YWwgPT0gbnVsbCkge1xuICAgICAgICAgIHZhbCA9IG9wdC5kZWZhdWx0O1xuICAgICAgICAgIHBhcmFtc1trZXldID0gdmFsO1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm9iamVjdCkge1xuICAgICAgICAgICAgcmVxdWVzdC5vYmplY3Quc2V0KGtleSwgdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC5jb25zdGFudCAmJiByZXF1ZXN0Lm9iamVjdCkge1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXF1ZXN0Lm9iamVjdC5yZXZlcnQoa2V5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5kZWZhdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qub2JqZWN0LnNldChrZXksIG9wdC5kZWZhdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC5yZXF1aXJlZCkge1xuICAgICAgICAgIHJlcXVpcmVkUGFyYW0oa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25hbCA9ICFvcHQucmVxdWlyZWQgJiYgdmFsID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghb3B0aW9uYWwpIHtcbiAgICAgICAgICBpZiAob3B0LnR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKG9wdC50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbFR5cGUgPSBBcnJheS5pc0FycmF5KHZhbCkgPyAnYXJyYXknIDogdHlwZW9mIHZhbDtcbiAgICAgICAgICAgIGlmICh2YWxUeXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgIHRocm93IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCB0eXBlIGZvciAke2tleX0uIEV4cGVjdGVkOiAke3R5cGV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdC5vcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25Qcm9taXNlcy5wdXNoKHZhbGlkYXRlT3B0aW9ucyhvcHQsIGtleSwgdmFsKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IFByb21pc2UuYWxsKG9wdGlvblByb21pc2VzKTtcbiAgfVxuICBsZXQgdXNlclJvbGVzID0gb3B0aW9ucy5yZXF1aXJlQW55VXNlclJvbGVzO1xuICBsZXQgcmVxdWlyZUFsbFJvbGVzID0gb3B0aW9ucy5yZXF1aXJlQWxsVXNlclJvbGVzO1xuICBjb25zdCBwcm9taXNlcyA9IFtQcm9taXNlLnJlc29sdmUoKSwgUHJvbWlzZS5yZXNvbHZlKCksIFByb21pc2UucmVzb2x2ZSgpXTtcbiAgaWYgKHVzZXJSb2xlcyB8fCByZXF1aXJlQWxsUm9sZXMpIHtcbiAgICBwcm9taXNlc1swXSA9IGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB1c2VyUm9sZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm9taXNlc1sxXSA9IHVzZXJSb2xlcygpO1xuICB9XG4gIGlmICh0eXBlb2YgcmVxdWlyZUFsbFJvbGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvbWlzZXNbMl0gPSByZXF1aXJlQWxsUm9sZXMoKTtcbiAgfVxuICBjb25zdCBbcm9sZXMsIHJlc29sdmVkVXNlclJvbGVzLCByZXNvbHZlZFJlcXVpcmVBbGxdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICBpZiAocmVzb2x2ZWRVc2VyUm9sZXMgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFVzZXJSb2xlcykpIHtcbiAgICB1c2VyUm9sZXMgPSByZXNvbHZlZFVzZXJSb2xlcztcbiAgfVxuICBpZiAocmVzb2x2ZWRSZXF1aXJlQWxsICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRSZXF1aXJlQWxsKSkge1xuICAgIHJlcXVpcmVBbGxSb2xlcyA9IHJlc29sdmVkUmVxdWlyZUFsbDtcbiAgfVxuICBpZiAodXNlclJvbGVzKSB7XG4gICAgY29uc3QgaGFzUm9sZSA9IHVzZXJSb2xlcy5zb21lKHJlcXVpcmVkUm9sZSA9PiByb2xlcy5pbmNsdWRlcyhgcm9sZToke3JlcXVpcmVkUm9sZX1gKSk7XG4gICAgaWYgKCFoYXNSb2xlKSB7XG4gICAgICB0aHJvdyBgVmFsaWRhdGlvbiBmYWlsZWQuIFVzZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIHJvbGVzLmA7XG4gICAgfVxuICB9XG4gIGlmIChyZXF1aXJlQWxsUm9sZXMpIHtcbiAgICBmb3IgKGNvbnN0IHJlcXVpcmVkUm9sZSBvZiByZXF1aXJlQWxsUm9sZXMpIHtcbiAgICAgIGlmICghcm9sZXMuaW5jbHVkZXMoYHJvbGU6JHtyZXF1aXJlZFJvbGV9YCkpIHtcbiAgICAgICAgdGhyb3cgYFZhbGlkYXRpb24gZmFpbGVkLiBVc2VyIGRvZXMgbm90IG1hdGNoIGFsbCB0aGUgcmVxdWlyZWQgcm9sZXMuYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgdXNlcktleXMgPSBvcHRpb25zLnJlcXVpcmVVc2VyS2V5cyB8fCBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodXNlcktleXMpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdXNlcktleXMpIHtcbiAgICAgIGlmICghcmVxVXNlcikge1xuICAgICAgICB0aHJvdyAnUGxlYXNlIGxvZ2luIHRvIG1ha2UgdGhpcyByZXF1ZXN0Lic7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXFVc2VyLmdldChrZXkpID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYFZhbGlkYXRpb24gZmFpbGVkLiBQbGVhc2Ugc2V0IGRhdGEgZm9yICR7a2V5fSBvbiB5b3VyIGFjY291bnQuYDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHVzZXJLZXlzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IG9wdGlvblByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5yZXF1aXJlVXNlcktleXMpIHtcbiAgICAgIGNvbnN0IG9wdCA9IG9wdGlvbnMucmVxdWlyZVVzZXJLZXlzW2tleV07XG4gICAgICBpZiAob3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9uUHJvbWlzZXMucHVzaCh2YWxpZGF0ZU9wdGlvbnMob3B0LCBrZXksIHJlcVVzZXIuZ2V0KGtleSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwob3B0aW9uUHJvbWlzZXMpO1xuICB9XG59XG5cbi8vIFRvIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcHJvbWlzZSBjaGFpbiB3aGVuIHNhdmluZy9kZWxldGluZyBhbiBvYmplY3Rcbi8vIFdpbGwgcmVzb2x2ZSBzdWNjZXNzZnVsbHkgaWYgbm8gdHJpZ2dlciBpcyBjb25maWd1cmVkXG4vLyBSZXNvbHZlcyB0byBhbiBvYmplY3QsIGVtcHR5IG9yIGNvbnRhaW5pbmcgYW4gb2JqZWN0IGtleS4gQSBiZWZvcmVTYXZlXG4vLyB0cmlnZ2VyIHdpbGwgc2V0IHRoZSBvYmplY3Qga2V5IHRvIHRoZSByZXN0IGZvcm1hdCBvYmplY3QgdG8gc2F2ZS5cbi8vIG9yaWdpbmFsUGFyc2VPYmplY3QgaXMgb3B0aW9uYWwsIHdlIG9ubHkgbmVlZCB0aGF0IGZvciBiZWZvcmUvYWZ0ZXJTYXZlIGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIG1heWJlUnVuVHJpZ2dlcihcbiAgdHJpZ2dlclR5cGUsXG4gIGF1dGgsXG4gIHBhcnNlT2JqZWN0LFxuICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICBjb25maWcsXG4gIGNvbnRleHRcbikge1xuICBpZiAoIXBhcnNlT2JqZWN0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgdHJpZ2dlciA9IGdldFRyaWdnZXIocGFyc2VPYmplY3QuY2xhc3NOYW1lLCB0cmlnZ2VyVHlwZSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICAgIGlmICghdHJpZ2dlcikgeyByZXR1cm4gcmVzb2x2ZSgpOyB9XG4gICAgdmFyIHJlcXVlc3QgPSBnZXRSZXF1ZXN0T2JqZWN0KFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICBhdXRoLFxuICAgICAgcGFyc2VPYmplY3QsXG4gICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgY29uZmlnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgdmFyIHsgc3VjY2VzcywgZXJyb3IgfSA9IGdldFJlc3BvbnNlT2JqZWN0KFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG9iamVjdCA9PiB7XG4gICAgICAgIGxvZ1RyaWdnZXJTdWNjZXNzQmVmb3JlSG9vayhcbiAgICAgICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgICAgICBwYXJzZU9iamVjdC5jbGFzc05hbWUsXG4gICAgICAgICAgcGFyc2VPYmplY3QudG9KU09OKCksXG4gICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgdHJpZ2dlclR5cGUuc3RhcnRzV2l0aCgnYWZ0ZXInKVxuICAgICAgICAgICAgPyBjb25maWcubG9nTGV2ZWxzLnRyaWdnZXJBZnRlclxuICAgICAgICAgICAgOiBjb25maWcubG9nTGV2ZWxzLnRyaWdnZXJCZWZvcmVTdWNjZXNzXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlU2F2ZSB8fFxuICAgICAgICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlclNhdmUgfHxcbiAgICAgICAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlRGVsZXRlIHx8XG4gICAgICAgICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyRGVsZXRlXG4gICAgICAgICkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGV4dCwgcmVxdWVzdC5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKG9iamVjdCk7XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBsb2dUcmlnZ2VyRXJyb3JCZWZvcmVIb29rKFxuICAgICAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgICAgIHBhcnNlT2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgICBwYXJzZU9iamVjdC50b0pTT04oKSxcbiAgICAgICAgICBhdXRoLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckJlZm9yZUVycm9yXG4gICAgICAgICk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFmdGVyU2F2ZSBhbmQgYWZ0ZXJEZWxldGUgdHJpZ2dlcnMgY2FuIHJldHVybiBhIHByb21pc2UsIHdoaWNoIGlmIHRoZXlcbiAgICAvLyBkbywgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIHRoaXMgcHJvbWlzZSBpcyByZXNvbHZlZCxcbiAgICAvLyBzbyB0cmlnZ2VyIGV4ZWN1dGlvbiBpcyBzeW5jZWQgd2l0aCBSZXN0V3JpdGUuZXhlY3V0ZSgpIGNhbGwuXG4gICAgLy8gSWYgdHJpZ2dlcnMgZG8gbm90IHJldHVybiBhIHByb21pc2UsIHRoZXkgY2FuIHJ1biBhc3luYyBjb2RlIHBhcmFsbGVsXG4gICAgLy8gdG8gdGhlIFJlc3RXcml0ZS5leGVjdXRlKCkgY2FsbC5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG1heWJlUnVuVmFsaWRhdG9yKHJlcXVlc3QsIGAke3RyaWdnZXJUeXBlfS4ke3BhcnNlT2JqZWN0LmNsYXNzTmFtZX1gLCBhdXRoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0cmlnZ2VyKHJlcXVlc3QpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyU2F2ZSB8fFxuICAgICAgICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlckRlbGV0ZSB8fFxuICAgICAgICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlckxvZ2luXG4gICAgICAgICkge1xuICAgICAgICAgIGxvZ1RyaWdnZXJBZnRlckhvb2soXG4gICAgICAgICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgICAgICAgIHBhcnNlT2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHBhcnNlT2JqZWN0LnRvSlNPTigpLFxuICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckFmdGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBiZWZvcmVTYXZlIGlzIGV4cGVjdGVkIHRvIHJldHVybiBudWxsIChub3RoaW5nKVxuICAgICAgICBpZiAodHJpZ2dlclR5cGUgPT09IFR5cGVzLmJlZm9yZVNhdmUpIHtcbiAgICAgICAgICBpZiAocHJvbWlzZSAmJiB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgLy8gcmVzcG9uc2Uub2JqZWN0IG1heSBjb21lIGZyb20gZXhwcmVzcyByb3V0aW5nIGJlZm9yZSBob29rXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgIH0pXG4gICAgICAudGhlbihzdWNjZXNzLCBlcnJvcik7XG4gIH0pO1xufVxuXG4vLyBDb252ZXJ0cyBhIFJFU1QtZm9ybWF0IG9iamVjdCB0byBhIFBhcnNlLk9iamVjdFxuLy8gZGF0YSBpcyBlaXRoZXIgY2xhc3NOYW1lIG9yIGFuIG9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIGluZmxhdGUoZGF0YSwgcmVzdE9iamVjdCkge1xuICB2YXIgY29weSA9IHR5cGVvZiBkYXRhID09ICdvYmplY3QnID8gZGF0YSA6IHsgY2xhc3NOYW1lOiBkYXRhIH07XG4gIGZvciAodmFyIGtleSBpbiByZXN0T2JqZWN0KSB7XG4gICAgY29weVtrZXldID0gcmVzdE9iamVjdFtrZXldO1xuICB9XG4gIHJldHVybiBQYXJzZS5PYmplY3QuZnJvbUpTT04oY29weSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKGRhdGEsIGFwcGxpY2F0aW9uSWQgPSBQYXJzZS5hcHBsaWNhdGlvbklkKSB7XG4gIGlmICghX3RyaWdnZXJTdG9yZSB8fCAhX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXSB8fCAhX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXS5MaXZlUXVlcnkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXS5MaXZlUXVlcnkuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoZGF0YSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEZpbGVPYmplY3QodHJpZ2dlclR5cGUsIGF1dGgsIGZpbGVPYmplY3QsIGNvbmZpZykge1xuICBjb25zdCByZXF1ZXN0ID0ge1xuICAgIC4uLmZpbGVPYmplY3QsXG4gICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJUeXBlLFxuICAgIG1hc3RlcjogZmFsc2UsXG4gICAgaXNSZWFkT25seTogZmFsc2UsXG4gICAgbG9nOiBjb25maWcubG9nZ2VyQ29udHJvbGxlcixcbiAgICBoZWFkZXJzOiBjb25maWcuaGVhZGVycyxcbiAgICBpcDogY29uZmlnLmlwLFxuICAgIGNvbmZpZyxcbiAgfTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBpZiAoYXV0aC5pc01hc3Rlcikge1xuICAgIHJlcXVlc3RbJ21hc3RlciddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgcmVxdWVzdFsnaXNSZWFkT25seSddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC51c2VyKSB7XG4gICAgcmVxdWVzdFsndXNlciddID0gYXV0aC51c2VyO1xuICB9XG4gIGlmIChhdXRoLmluc3RhbGxhdGlvbklkKSB7XG4gICAgcmVxdWVzdFsnaW5zdGFsbGF0aW9uSWQnXSA9IGF1dGguaW5zdGFsbGF0aW9uSWQ7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJUeXBlLCBmaWxlT2JqZWN0LCBjb25maWcsIGF1dGgpIHtcbiAgY29uc3QgRmlsZUNsYXNzTmFtZSA9IGdldENsYXNzTmFtZShQYXJzZS5GaWxlKTtcbiAgY29uc3QgZmlsZVRyaWdnZXIgPSBnZXRUcmlnZ2VyKEZpbGVDbGFzc05hbWUsIHRyaWdnZXJUeXBlLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG4gIGlmICh0eXBlb2YgZmlsZVRyaWdnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGdldFJlcXVlc3RGaWxlT2JqZWN0KHRyaWdnZXJUeXBlLCBhdXRoLCBmaWxlT2JqZWN0LCBjb25maWcpO1xuICAgICAgYXdhaXQgbWF5YmVSdW5WYWxpZGF0b3IocmVxdWVzdCwgYCR7dHJpZ2dlclR5cGV9LiR7RmlsZUNsYXNzTmFtZX1gLCBhdXRoKTtcbiAgICAgIGlmIChyZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5KSB7XG4gICAgICAgIHJldHVybiBmaWxlT2JqZWN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlsZVRyaWdnZXIocmVxdWVzdCk7XG4gICAgICBpZiAocmVxdWVzdC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZm9yY2VEb3dubG9hZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBsb2dUcmlnZ2VyU3VjY2Vzc0JlZm9yZUhvb2soXG4gICAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgICAnUGFyc2UuRmlsZScsXG4gICAgICAgIHsgLi4uZmlsZU9iamVjdC5maWxlLnRvSlNPTigpLCBmaWxlU2l6ZTogZmlsZU9iamVjdC5maWxlU2l6ZSB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckJlZm9yZVN1Y2Nlc3NcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzdWx0IHx8IGZpbGVPYmplY3Q7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ1RyaWdnZXJFcnJvckJlZm9yZUhvb2soXG4gICAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgICAnUGFyc2UuRmlsZScsXG4gICAgICAgIHsgLi4uZmlsZU9iamVjdC5maWxlLnRvSlNPTigpLCBmaWxlU2l6ZTogZmlsZU9iamVjdC5maWxlU2l6ZSB9LFxuICAgICAgICBhdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgY29uZmlnLmxvZ0xldmVscy50cmlnZ2VyQmVmb3JlRXJyb3JcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVPYmplY3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXliZVJ1bkdsb2JhbENvbmZpZ1RyaWdnZXIodHJpZ2dlclR5cGUsIGF1dGgsIGNvbmZpZ09iamVjdCwgb3JpZ2luYWxDb25maWdPYmplY3QsIGNvbmZpZywgY29udGV4dCkge1xuICBjb25zdCBHbG9iYWxDb25maWdDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUoUGFyc2UuQ29uZmlnKTtcbiAgY29uc3QgY29uZmlnVHJpZ2dlciA9IGdldFRyaWdnZXIoR2xvYmFsQ29uZmlnQ2xhc3NOYW1lLCB0cmlnZ2VyVHlwZSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICBpZiAodHlwZW9mIGNvbmZpZ1RyaWdnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGdldFJlcXVlc3RPYmplY3QodHJpZ2dlclR5cGUsIGF1dGgsIGNvbmZpZ09iamVjdCwgb3JpZ2luYWxDb25maWdPYmplY3QsIGNvbmZpZywgY29udGV4dCk7XG4gICAgICBhd2FpdCBtYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBgJHt0cmlnZ2VyVHlwZX0uJHtHbG9iYWxDb25maWdDbGFzc05hbWV9YCwgYXV0aCk7XG4gICAgICBpZiAocmVxdWVzdC5za2lwV2l0aE1hc3RlcktleSkge1xuICAgICAgICByZXR1cm4gY29uZmlnT2JqZWN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29uZmlnVHJpZ2dlcihyZXF1ZXN0KTtcbiAgICAgIGxvZ1RyaWdnZXJTdWNjZXNzQmVmb3JlSG9vayhcbiAgICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICAgICdQYXJzZS5Db25maWcnLFxuICAgICAgICBjb25maWdPYmplY3QsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY29uZmlnLmxvZ0xldmVscy50cmlnZ2VyQmVmb3JlU3VjY2Vzc1xuICAgICAgKTtcbiAgICAgIHJldHVybiByZXN1bHQgfHwgY29uZmlnT2JqZWN0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dUcmlnZ2VyRXJyb3JCZWZvcmVIb29rKFxuICAgICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgICAgJ1BhcnNlLkNvbmZpZycsXG4gICAgICAgIGNvbmZpZ09iamVjdCxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckJlZm9yZUVycm9yXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb25maWdPYmplY3Q7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFBa0MsU0FBQUQsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFGbEM7O0FBSU8sTUFBTUcsS0FBSyxHQUFBQyxPQUFBLENBQUFELEtBQUEsR0FBRztFQUNuQkUsV0FBVyxFQUFFLGFBQWE7RUFDMUJDLFVBQVUsRUFBRSxZQUFZO0VBQ3hCQyxXQUFXLEVBQUUsYUFBYTtFQUMxQkMsMEJBQTBCLEVBQUUsNEJBQTRCO0VBQ3hEQyxVQUFVLEVBQUUsWUFBWTtFQUN4QkMsU0FBUyxFQUFFLFdBQVc7RUFDdEJDLFlBQVksRUFBRSxjQUFjO0VBQzVCQyxXQUFXLEVBQUUsYUFBYTtFQUMxQkMsVUFBVSxFQUFFLFlBQVk7RUFDeEJDLFNBQVMsRUFBRSxXQUFXO0VBQ3RCQyxhQUFhLEVBQUUsZUFBZTtFQUM5QkMsZUFBZSxFQUFFLGlCQUFpQjtFQUNsQ0MsVUFBVSxFQUFFO0FBQ2QsQ0FBQztBQUVELE1BQU1DLGdCQUFnQixHQUFHLFVBQVU7QUFFbkMsTUFBTUMsU0FBUyxHQUFHLFNBQUFBLENBQUEsRUFBWTtFQUM1QixNQUFNQyxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbkIsS0FBSyxDQUFDLENBQUNvQixNQUFNLENBQUMsVUFBVUMsSUFBSSxFQUFFQyxHQUFHLEVBQUU7SUFDaEVELElBQUksQ0FBQ0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsT0FBT0QsSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNOLE1BQU1FLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDcEIsTUFBTUMsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUNmLE1BQU1DLFNBQVMsR0FBRyxFQUFFO0VBQ3BCLE1BQU1DLFFBQVEsR0FBR1IsTUFBTSxDQUFDQyxJQUFJLENBQUNuQixLQUFLLENBQUMsQ0FBQ29CLE1BQU0sQ0FBQyxVQUFVQyxJQUFJLEVBQUVDLEdBQUcsRUFBRTtJQUM5REQsSUFBSSxDQUFDQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPRCxJQUFJO0VBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBRU4sT0FBT0gsTUFBTSxDQUFDUyxNQUFNLENBQUM7SUFDbkJKLFNBQVM7SUFDVEMsSUFBSTtJQUNKUCxVQUFVO0lBQ1ZTLFFBQVE7SUFDUkQ7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBRU0sU0FBU0csWUFBWUEsQ0FBQ0MsVUFBVSxFQUFFO0VBQ3ZDLElBQUlBLFVBQVUsSUFBSUEsVUFBVSxDQUFDQyxTQUFTLEVBQUU7SUFDdEMsT0FBT0QsVUFBVSxDQUFDQyxTQUFTO0VBQzdCO0VBQ0EsSUFBSUQsVUFBVSxJQUFJQSxVQUFVLENBQUNFLElBQUksRUFBRTtJQUNqQyxPQUFPRixVQUFVLENBQUNFLElBQUksQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7RUFDOUM7RUFDQSxPQUFPSCxVQUFVO0FBQ25CO0FBRUEsU0FBU0ksNEJBQTRCQSxDQUFDSCxTQUFTLEVBQUVJLElBQUksRUFBRTtFQUNyRCxJQUFJQSxJQUFJLElBQUlsQyxLQUFLLENBQUNNLFVBQVUsSUFBSXdCLFNBQVMsS0FBSyxhQUFhLEVBQUU7SUFDM0Q7SUFDQTtJQUNBO0lBQ0EsTUFBTSwwQ0FBMEM7RUFDbEQ7RUFDQSxJQUFJLENBQUNJLElBQUksS0FBS2xDLEtBQUssQ0FBQ0UsV0FBVyxJQUFJZ0MsSUFBSSxLQUFLbEMsS0FBSyxDQUFDRyxVQUFVLElBQUkrQixJQUFJLEtBQUtsQyxLQUFLLENBQUNLLDBCQUEwQixLQUFLeUIsU0FBUyxLQUFLLE9BQU8sRUFBRTtJQUNuSTtJQUNBO0lBQ0EsTUFBTSwwR0FBMEc7RUFDbEg7RUFDQSxJQUFJSSxJQUFJLEtBQUtsQyxLQUFLLENBQUNJLFdBQVcsSUFBSTBCLFNBQVMsS0FBSyxVQUFVLEVBQUU7SUFDMUQ7SUFDQTtJQUNBLE1BQU0saUVBQWlFO0VBQ3pFO0VBQ0EsSUFBSUEsU0FBUyxLQUFLLFVBQVUsSUFBSUksSUFBSSxLQUFLbEMsS0FBSyxDQUFDSSxXQUFXLEVBQUU7SUFDMUQ7SUFDQTtJQUNBLE1BQU0saUVBQWlFO0VBQ3pFO0VBQ0EsT0FBTzBCLFNBQVM7QUFDbEI7QUFFQSxNQUFNSyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRXhCLE1BQU1DLFFBQVEsR0FBRztFQUNmYixTQUFTLEVBQUUsV0FBVztFQUN0Qk4sVUFBVSxFQUFFLFlBQVk7RUFDeEJPLElBQUksRUFBRSxNQUFNO0VBQ1pFLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFFRCxTQUFTVyxRQUFRQSxDQUFDQyxRQUFRLEVBQUVQLElBQUksRUFBRVEsYUFBYSxFQUFFO0VBQy9DLE1BQU1DLGdCQUFnQixHQUFHLE9BQU87RUFDaEMsSUFBSUEsZ0JBQWdCLENBQUNDLElBQUksQ0FBQ1YsSUFBSSxDQUFDLEVBQUU7SUFDL0I7SUFDQSxPQUFPLENBQUMsQ0FBQztFQUNYO0VBRUEsTUFBTVcsSUFBSSxHQUFHWCxJQUFJLENBQUNZLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDNUJELElBQUksQ0FBQ0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqQkwsYUFBYSxHQUFHQSxhQUFhLElBQUlNLGFBQUssQ0FBQ04sYUFBYTtFQUNwREosYUFBYSxDQUFDSSxhQUFhLENBQUMsR0FBR0osYUFBYSxDQUFDSSxhQUFhLENBQUMsSUFBSXZCLFNBQVMsQ0FBQyxDQUFDO0VBQzFFLElBQUk4QixLQUFLLEdBQUdYLGFBQWEsQ0FBQ0ksYUFBYSxDQUFDLENBQUNELFFBQVEsQ0FBQztFQUNsRCxLQUFLLE1BQU1TLFNBQVMsSUFBSUwsSUFBSSxFQUFFO0lBQzVCSSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0MsU0FBUyxDQUFDO0lBQ3hCLElBQUksQ0FBQ0QsS0FBSyxFQUFFO01BQ1YsT0FBTyxDQUFDLENBQUM7SUFDWDtFQUNGO0VBQ0EsT0FBT0EsS0FBSztBQUNkO0FBRUEsU0FBU0UsR0FBR0EsQ0FBQ1YsUUFBUSxFQUFFUCxJQUFJLEVBQUVrQixPQUFPLEVBQUVWLGFBQWEsRUFBRTtFQUNuRCxNQUFNVyxhQUFhLEdBQUduQixJQUFJLENBQUNZLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELE1BQU1FLEtBQUssR0FBR1QsUUFBUSxDQUFDQyxRQUFRLEVBQUVQLElBQUksRUFBRVEsYUFBYSxDQUFDO0VBQ3JELElBQUlPLEtBQUssQ0FBQ0ksYUFBYSxDQUFDLEVBQUU7SUFDeEJDLGNBQU0sQ0FBQ0MsSUFBSSxDQUNULGdEQUFnREYsYUFBYSxrRUFDL0QsQ0FBQztFQUNIO0VBQ0FKLEtBQUssQ0FBQ0ksYUFBYSxDQUFDLEdBQUdELE9BQU87QUFDaEM7QUFFQSxTQUFTSSxNQUFNQSxDQUFDZixRQUFRLEVBQUVQLElBQUksRUFBRVEsYUFBYSxFQUFFO0VBQzdDLE1BQU1XLGFBQWEsR0FBR25CLElBQUksQ0FBQ1ksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDaEQsTUFBTUUsS0FBSyxHQUFHVCxRQUFRLENBQUNDLFFBQVEsRUFBRVAsSUFBSSxFQUFFUSxhQUFhLENBQUM7RUFDckQsT0FBT08sS0FBSyxDQUFDSSxhQUFhLENBQUM7QUFDN0I7QUFFQSxTQUFTSSxHQUFHQSxDQUFDaEIsUUFBUSxFQUFFUCxJQUFJLEVBQUVRLGFBQWEsRUFBRTtFQUMxQyxNQUFNVyxhQUFhLEdBQUduQixJQUFJLENBQUNZLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hELE1BQU1FLEtBQUssR0FBR1QsUUFBUSxDQUFDQyxRQUFRLEVBQUVQLElBQUksRUFBRVEsYUFBYSxDQUFDO0VBQ3JELE9BQU9PLEtBQUssQ0FBQ0ksYUFBYSxDQUFDO0FBQzdCO0FBRU8sU0FBU0ssV0FBV0EsQ0FBQ0MsWUFBWSxFQUFFUCxPQUFPLEVBQUVRLGlCQUFpQixFQUFFbEIsYUFBYSxFQUFFO0VBQ25GUyxHQUFHLENBQUNaLFFBQVEsQ0FBQ2IsU0FBUyxFQUFFaUMsWUFBWSxFQUFFUCxPQUFPLEVBQUVWLGFBQWEsQ0FBQztFQUM3RFMsR0FBRyxDQUFDWixRQUFRLENBQUNuQixVQUFVLEVBQUV1QyxZQUFZLEVBQUVDLGlCQUFpQixFQUFFbEIsYUFBYSxDQUFDO0FBQzFFO0FBRU8sU0FBU21CLE1BQU1BLENBQUNDLE9BQU8sRUFBRVYsT0FBTyxFQUFFVixhQUFhLEVBQUU7RUFDdERTLEdBQUcsQ0FBQ1osUUFBUSxDQUFDWixJQUFJLEVBQUVtQyxPQUFPLEVBQUVWLE9BQU8sRUFBRVYsYUFBYSxDQUFDO0FBQ3JEO0FBRU8sU0FBU3FCLFVBQVVBLENBQUMxQixJQUFJLEVBQUVKLFNBQVMsRUFBRW1CLE9BQU8sRUFBRVYsYUFBYSxFQUFFa0IsaUJBQWlCLEVBQUU7RUFDckZ4Qiw0QkFBNEIsQ0FBQ0gsU0FBUyxFQUFFSSxJQUFJLENBQUM7RUFDN0NjLEdBQUcsQ0FBQ1osUUFBUSxDQUFDVixRQUFRLEVBQUUsR0FBR1EsSUFBSSxJQUFJSixTQUFTLEVBQUUsRUFBRW1CLE9BQU8sRUFBRVYsYUFBYSxDQUFDO0VBQ3RFUyxHQUFHLENBQUNaLFFBQVEsQ0FBQ25CLFVBQVUsRUFBRSxHQUFHaUIsSUFBSSxJQUFJSixTQUFTLEVBQUUsRUFBRTJCLGlCQUFpQixFQUFFbEIsYUFBYSxDQUFDO0FBQ3BGO0FBRU8sU0FBU3NCLGlCQUFpQkEsQ0FBQzNCLElBQUksRUFBRWUsT0FBTyxFQUFFVixhQUFhLEVBQUVrQixpQkFBaUIsRUFBRTtFQUNqRlQsR0FBRyxDQUFDWixRQUFRLENBQUNWLFFBQVEsRUFBRSxHQUFHUSxJQUFJLElBQUluQixnQkFBZ0IsRUFBRSxFQUFFa0MsT0FBTyxFQUFFVixhQUFhLENBQUM7RUFDN0VTLEdBQUcsQ0FBQ1osUUFBUSxDQUFDbkIsVUFBVSxFQUFFLEdBQUdpQixJQUFJLElBQUluQixnQkFBZ0IsRUFBRSxFQUFFMEMsaUJBQWlCLEVBQUVsQixhQUFhLENBQUM7QUFDM0Y7QUFFTyxTQUFTdUIsd0JBQXdCQSxDQUFDYixPQUFPLEVBQUVWLGFBQWEsRUFBRTtFQUMvREEsYUFBYSxHQUFHQSxhQUFhLElBQUlNLGFBQUssQ0FBQ04sYUFBYTtFQUNwREosYUFBYSxDQUFDSSxhQUFhLENBQUMsR0FBR0osYUFBYSxDQUFDSSxhQUFhLENBQUMsSUFBSXZCLFNBQVMsQ0FBQyxDQUFDO0VBQzFFbUIsYUFBYSxDQUFDSSxhQUFhLENBQUMsQ0FBQ2QsU0FBUyxDQUFDc0MsSUFBSSxDQUFDZCxPQUFPLENBQUM7QUFDdEQ7QUFFTyxTQUFTZSxjQUFjQSxDQUFDUixZQUFZLEVBQUVqQixhQUFhLEVBQUU7RUFDMURjLE1BQU0sQ0FBQ2pCLFFBQVEsQ0FBQ2IsU0FBUyxFQUFFaUMsWUFBWSxFQUFFakIsYUFBYSxDQUFDO0FBQ3pEO0FBRU8sU0FBUzBCLGFBQWFBLENBQUMvQixJQUFJLEVBQUVKLFNBQVMsRUFBRVMsYUFBYSxFQUFFO0VBQzVEYyxNQUFNLENBQUNqQixRQUFRLENBQUNWLFFBQVEsRUFBRSxHQUFHUSxJQUFJLElBQUlKLFNBQVMsRUFBRSxFQUFFUyxhQUFhLENBQUM7QUFDbEU7QUFFTyxTQUFTMkIsY0FBY0EsQ0FBQSxFQUFHO0VBQy9CaEQsTUFBTSxDQUFDQyxJQUFJLENBQUNnQixhQUFhLENBQUMsQ0FBQ2dDLE9BQU8sQ0FBQ0MsS0FBSyxJQUFJLE9BQU9qQyxhQUFhLENBQUNpQyxLQUFLLENBQUMsQ0FBQztBQUMxRTtBQUVPLFNBQVNDLGlCQUFpQkEsQ0FBQ0MsTUFBTSxFQUFFeEMsU0FBUyxFQUFFO0VBQ25ELElBQUksQ0FBQ3dDLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNDLE1BQU0sRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQztFQUNYO0VBQ0EsTUFBTUEsTUFBTSxHQUFHRCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0VBQzlCLE1BQU1DLGVBQWUsR0FBRzNCLGFBQUssQ0FBQzRCLFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUMsQ0FBQztFQUNwRSxNQUFNLENBQUNDLE9BQU8sQ0FBQyxHQUFHSCxlQUFlLENBQUNJLGFBQWEsQ0FBQ04sTUFBTSxDQUFDTyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7RUFDN0UsS0FBSyxNQUFNdkQsR0FBRyxJQUFJcUQsT0FBTyxFQUFFO0lBQ3pCLE1BQU1HLEdBQUcsR0FBR1IsTUFBTSxDQUFDaEIsR0FBRyxDQUFDaEMsR0FBRyxDQUFDO0lBQzNCLElBQUksQ0FBQ3dELEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUNDLFdBQVcsRUFBRTtNQUM1QlIsTUFBTSxDQUFDakQsR0FBRyxDQUFDLEdBQUd3RCxHQUFHO01BQ2pCO0lBQ0Y7SUFDQVAsTUFBTSxDQUFDakQsR0FBRyxDQUFDLEdBQUd3RCxHQUFHLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0VBQ2pDO0VBQ0E7RUFDQSxJQUFJakQsU0FBUyxFQUFFO0lBQ2J5QyxNQUFNLENBQUN6QyxTQUFTLEdBQUdBLFNBQVM7RUFDOUIsQ0FBQyxNQUFNLElBQUl3QyxNQUFNLENBQUN4QyxTQUFTLElBQUksQ0FBQ3lDLE1BQU0sQ0FBQ3pDLFNBQVMsRUFBRTtJQUNoRHlDLE1BQU0sQ0FBQ3pDLFNBQVMsR0FBR3dDLE1BQU0sQ0FBQ3hDLFNBQVM7RUFDckM7RUFDQSxPQUFPeUMsTUFBTTtBQUNmO0FBRU8sU0FBU1MsVUFBVUEsQ0FBQ2xELFNBQVMsRUFBRW1ELFdBQVcsRUFBRTFDLGFBQWEsRUFBRTtFQUNoRSxJQUFJLENBQUNBLGFBQWEsRUFBRTtJQUNsQixNQUFNLHVCQUF1QjtFQUMvQjtFQUNBLE9BQU9lLEdBQUcsQ0FBQ2xCLFFBQVEsQ0FBQ1YsUUFBUSxFQUFFLEdBQUd1RCxXQUFXLElBQUluRCxTQUFTLEVBQUUsRUFBRVMsYUFBYSxDQUFDO0FBQzdFO0FBRU8sZUFBZTJDLFVBQVVBLENBQUNDLE9BQU8sRUFBRXBELElBQUksRUFBRXFELE9BQU8sRUFBRUMsSUFBSSxFQUFFO0VBQzdELElBQUksQ0FBQ0YsT0FBTyxFQUFFO0lBQ1o7RUFDRjtFQUNBLE1BQU1HLGlCQUFpQixDQUFDRixPQUFPLEVBQUVyRCxJQUFJLEVBQUVzRCxJQUFJLENBQUM7RUFDNUMsSUFBSUQsT0FBTyxDQUFDRyxpQkFBaUIsRUFBRTtJQUM3QjtFQUNGO0VBQ0EsT0FBTyxNQUFNSixPQUFPLENBQUNDLE9BQU8sQ0FBQztBQUMvQjtBQUVPLFNBQVNJLGFBQWFBLENBQUMxRCxTQUFpQixFQUFFSSxJQUFZLEVBQUVLLGFBQXFCLEVBQVc7RUFDN0YsT0FBT3lDLFVBQVUsQ0FBQ2xELFNBQVMsRUFBRUksSUFBSSxFQUFFSyxhQUFhLENBQUMsSUFBSWtELFNBQVM7QUFDaEU7QUFFTyxTQUFTQyxXQUFXQSxDQUFDbEMsWUFBWSxFQUFFakIsYUFBYSxFQUFFO0VBQ3ZELE9BQU9lLEdBQUcsQ0FBQ2xCLFFBQVEsQ0FBQ2IsU0FBUyxFQUFFaUMsWUFBWSxFQUFFakIsYUFBYSxDQUFDO0FBQzdEO0FBRU8sU0FBU29ELGdCQUFnQkEsQ0FBQ3BELGFBQWEsRUFBRTtFQUM5QyxNQUFNTyxLQUFLLEdBQ1JYLGFBQWEsQ0FBQ0ksYUFBYSxDQUFDLElBQUlKLGFBQWEsQ0FBQ0ksYUFBYSxDQUFDLENBQUNILFFBQVEsQ0FBQ2IsU0FBUyxDQUFDLElBQUssQ0FBQyxDQUFDO0VBQzFGLE1BQU1xRSxhQUFhLEdBQUcsRUFBRTtFQUN4QixNQUFNQyxvQkFBb0IsR0FBR0EsQ0FBQ0MsU0FBUyxFQUFFaEQsS0FBSyxLQUFLO0lBQ2pENUIsTUFBTSxDQUFDQyxJQUFJLENBQUMyQixLQUFLLENBQUMsQ0FBQ3FCLE9BQU8sQ0FBQ3BDLElBQUksSUFBSTtNQUNqQyxNQUFNZ0UsS0FBSyxHQUFHakQsS0FBSyxDQUFDZixJQUFJLENBQUM7TUFDekIsSUFBSStELFNBQVMsRUFBRTtRQUNiL0QsSUFBSSxHQUFHLEdBQUcrRCxTQUFTLElBQUkvRCxJQUFJLEVBQUU7TUFDL0I7TUFDQSxJQUFJLE9BQU9nRSxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQy9CSCxhQUFhLENBQUM3QixJQUFJLENBQUNoQyxJQUFJLENBQUM7TUFDMUIsQ0FBQyxNQUFNO1FBQ0w4RCxvQkFBb0IsQ0FBQzlELElBQUksRUFBRWdFLEtBQUssQ0FBQztNQUNuQztJQUNGLENBQUMsQ0FBQztFQUNKLENBQUM7RUFDREYsb0JBQW9CLENBQUMsSUFBSSxFQUFFL0MsS0FBSyxDQUFDO0VBQ2pDLE9BQU84QyxhQUFhO0FBQ3RCO0FBRU8sU0FBU0ksTUFBTUEsQ0FBQ3JDLE9BQU8sRUFBRXBCLGFBQWEsRUFBRTtFQUM3QyxPQUFPZSxHQUFHLENBQUNsQixRQUFRLENBQUNaLElBQUksRUFBRW1DLE9BQU8sRUFBRXBCLGFBQWEsQ0FBQztBQUNuRDtBQUVPLFNBQVMwRCxPQUFPQSxDQUFDMUQsYUFBYSxFQUFFO0VBQ3JDLElBQUkyRCxPQUFPLEdBQUcvRCxhQUFhLENBQUNJLGFBQWEsQ0FBQztFQUMxQyxJQUFJMkQsT0FBTyxJQUFJQSxPQUFPLENBQUMxRSxJQUFJLEVBQUU7SUFDM0IsT0FBTzBFLE9BQU8sQ0FBQzFFLElBQUk7RUFDckI7RUFDQSxPQUFPaUUsU0FBUztBQUNsQjtBQUVPLFNBQVNVLFlBQVlBLENBQUMzQyxZQUFZLEVBQUVqQixhQUFhLEVBQUU7RUFDeEQsT0FBT2UsR0FBRyxDQUFDbEIsUUFBUSxDQUFDbkIsVUFBVSxFQUFFdUMsWUFBWSxFQUFFakIsYUFBYSxDQUFDO0FBQzlEO0FBRU8sU0FBUzZELGdCQUFnQkEsQ0FDOUJuQixXQUFXLEVBQ1hJLElBQUksRUFDSmdCLFdBQVcsRUFDWEMsbUJBQW1CLEVBQ25CQyxNQUFNLEVBQ05DLE9BQU8sRUFDUEMsS0FBSyxFQUNMO0VBQ0EsTUFBTXJCLE9BQU8sR0FBRztJQUNkc0IsV0FBVyxFQUFFekIsV0FBVztJQUN4QlgsTUFBTSxFQUFFK0IsV0FBVztJQUNuQk0sTUFBTSxFQUFFLEtBQUs7SUFDYkMsVUFBVSxFQUFFLEtBQUs7SUFDakJDLEdBQUcsRUFBRU4sTUFBTSxDQUFDTyxnQkFBZ0I7SUFDNUJDLE9BQU8sRUFBRVIsTUFBTSxDQUFDUSxPQUFPO0lBQ3ZCQyxFQUFFLEVBQUVULE1BQU0sQ0FBQ1MsRUFBRTtJQUNiVDtFQUNGLENBQUM7RUFFRCxJQUFJRSxLQUFLLEtBQUtoQixTQUFTLEVBQUU7SUFDdkJMLE9BQU8sQ0FBQ3FCLEtBQUssR0FBRyxDQUFDLENBQUNBLEtBQUs7RUFDekI7RUFFQSxJQUFJSCxtQkFBbUIsRUFBRTtJQUN2QmxCLE9BQU8sQ0FBQzZCLFFBQVEsR0FBR1gsbUJBQW1CO0VBQ3hDO0VBQ0EsSUFDRXJCLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ00sVUFBVSxJQUNoQzJFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ08sU0FBUyxJQUMvQjBFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ1EsWUFBWSxJQUNsQ3lFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ1MsV0FBVyxJQUNqQ3dFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ0UsV0FBVyxJQUNqQytFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ0csVUFBVSxJQUNoQzhFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ0ssMEJBQTBCLElBQ2hENEUsV0FBVyxLQUFLakYsS0FBSyxDQUFDVyxTQUFTLEVBQy9CO0lBQ0E7SUFDQXlFLE9BQU8sQ0FBQ29CLE9BQU8sR0FBR3RGLE1BQU0sQ0FBQ2dHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRVYsT0FBTyxDQUFDO0VBQzlDO0VBRUEsSUFBSSxDQUFDbkIsSUFBSSxFQUFFO0lBQ1QsT0FBT0QsT0FBTztFQUNoQjtFQUNBLElBQUlDLElBQUksQ0FBQzhCLFFBQVEsRUFBRTtJQUNqQi9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJO0VBQzFCO0VBQ0EsSUFBSUMsSUFBSSxDQUFDdUIsVUFBVSxFQUFFO0lBQ25CeEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUk7RUFDOUI7RUFDQSxJQUFJQyxJQUFJLENBQUMrQixJQUFJLEVBQUU7SUFDYmhDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBR0MsSUFBSSxDQUFDK0IsSUFBSTtFQUM3QjtFQUNBLElBQUkvQixJQUFJLENBQUNnQyxjQUFjLEVBQUU7SUFDdkJqQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBR0MsSUFBSSxDQUFDZ0MsY0FBYztFQUNqRDtFQUNBLE9BQU9qQyxPQUFPO0FBQ2hCO0FBRU8sU0FBU2tDLHFCQUFxQkEsQ0FBQ3JDLFdBQVcsRUFBRUksSUFBSSxFQUFFa0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVqQixNQUFNLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxFQUFFO0VBQzdGQSxLQUFLLEdBQUcsQ0FBQyxDQUFDQSxLQUFLO0VBRWYsSUFBSXJCLE9BQU8sR0FBRztJQUNac0IsV0FBVyxFQUFFekIsV0FBVztJQUN4QnNDLEtBQUs7SUFDTFosTUFBTSxFQUFFLEtBQUs7SUFDYkMsVUFBVSxFQUFFLEtBQUs7SUFDakJZLEtBQUs7SUFDTFgsR0FBRyxFQUFFTixNQUFNLENBQUNPLGdCQUFnQjtJQUM1QkwsS0FBSztJQUNMTSxPQUFPLEVBQUVSLE1BQU0sQ0FBQ1EsT0FBTztJQUN2QkMsRUFBRSxFQUFFVCxNQUFNLENBQUNTLEVBQUU7SUFDYlIsT0FBTyxFQUFFQSxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ3RCRDtFQUNGLENBQUM7RUFFRCxJQUFJLENBQUNsQixJQUFJLEVBQUU7SUFDVCxPQUFPRCxPQUFPO0VBQ2hCO0VBQ0EsSUFBSUMsSUFBSSxDQUFDOEIsUUFBUSxFQUFFO0lBQ2pCL0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUk7RUFDMUI7RUFDQSxJQUFJQyxJQUFJLENBQUN1QixVQUFVLEVBQUU7SUFDbkJ4QixPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSTtFQUM5QjtFQUNBLElBQUlDLElBQUksQ0FBQytCLElBQUksRUFBRTtJQUNiaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHQyxJQUFJLENBQUMrQixJQUFJO0VBQzdCO0VBQ0EsSUFBSS9CLElBQUksQ0FBQ2dDLGNBQWMsRUFBRTtJQUN2QmpDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHQyxJQUFJLENBQUNnQyxjQUFjO0VBQ2pEO0VBQ0EsT0FBT2pDLE9BQU87QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTcUMsaUJBQWlCQSxDQUFDckMsT0FBTyxFQUFFc0MsT0FBTyxFQUFFQyxNQUFNLEVBQUU7RUFDMUQsT0FBTztJQUNMQyxPQUFPLEVBQUUsU0FBQUEsQ0FBVUMsUUFBUSxFQUFFO01BQzNCLElBQUl6QyxPQUFPLENBQUNzQixXQUFXLEtBQUsxRyxLQUFLLENBQUNXLFNBQVMsRUFBRTtRQUMzQyxJQUFJLENBQUNrSCxRQUFRLEVBQUU7VUFDYkEsUUFBUSxHQUFHekMsT0FBTyxDQUFDMEMsT0FBTztRQUM1QjtRQUNBRCxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0UsR0FBRyxDQUFDekQsTUFBTSxJQUFJO1VBQ2hDLE9BQU9ELGlCQUFpQixDQUFDQyxNQUFNLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBQ0YsT0FBT29ELE9BQU8sQ0FBQ0csUUFBUSxDQUFDO01BQzFCO01BQ0E7TUFDQSxJQUNFQSxRQUFRLElBQ1IsT0FBT0EsUUFBUSxLQUFLLFFBQVEsSUFDNUIsQ0FBQ3pDLE9BQU8sQ0FBQ2QsTUFBTSxDQUFDMEQsTUFBTSxDQUFDSCxRQUFRLENBQUMsSUFDaEN6QyxPQUFPLENBQUNzQixXQUFXLEtBQUsxRyxLQUFLLENBQUNNLFVBQVUsRUFDeEM7UUFDQSxPQUFPb0gsT0FBTyxDQUFDRyxRQUFRLENBQUM7TUFDMUI7TUFDQSxJQUFJQSxRQUFRLElBQUksT0FBT0EsUUFBUSxLQUFLLFFBQVEsSUFBSXpDLE9BQU8sQ0FBQ3NCLFdBQVcsS0FBSzFHLEtBQUssQ0FBQ08sU0FBUyxFQUFFO1FBQ3ZGLE9BQU9tSCxPQUFPLENBQUNHLFFBQVEsQ0FBQztNQUMxQjtNQUNBLElBQUl6QyxPQUFPLENBQUNzQixXQUFXLEtBQUsxRyxLQUFLLENBQUNPLFNBQVMsRUFBRTtRQUMzQyxPQUFPbUgsT0FBTyxDQUFDLENBQUM7TUFDbEI7TUFDQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztNQUNiLElBQUl6QyxPQUFPLENBQUNzQixXQUFXLEtBQUsxRyxLQUFLLENBQUNNLFVBQVUsRUFBRTtRQUM1Q3VILFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBR3pDLE9BQU8sQ0FBQ2QsTUFBTSxDQUFDMkQsWUFBWSxDQUFDLENBQUM7UUFDbERKLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBR3pDLE9BQU8sQ0FBQ2QsTUFBTSxDQUFDNEQsRUFBRTtNQUNwRDtNQUNBLE9BQU9SLE9BQU8sQ0FBQ0csUUFBUSxDQUFDO0lBQzFCLENBQUM7SUFDRE0sS0FBSyxFQUFFLFNBQUFBLENBQVVBLEtBQUssRUFBRTtNQUN0QixNQUFNdEksQ0FBQyxHQUFHdUksWUFBWSxDQUFDRCxLQUFLLEVBQUU7UUFDNUJFLElBQUksRUFBRXhGLGFBQUssQ0FBQ3lGLEtBQUssQ0FBQ0MsYUFBYTtRQUMvQkMsT0FBTyxFQUFFO01BQ1gsQ0FBQyxDQUFDO01BQ0ZiLE1BQU0sQ0FBQzlILENBQUMsQ0FBQztJQUNYO0VBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUzRJLFlBQVlBLENBQUNwRCxJQUFJLEVBQUU7RUFDMUIsT0FBT0EsSUFBSSxJQUFJQSxJQUFJLENBQUMrQixJQUFJLEdBQUcvQixJQUFJLENBQUMrQixJQUFJLENBQUNjLEVBQUUsR0FBR3pDLFNBQVM7QUFDckQ7QUFFQSxTQUFTaUQsbUJBQW1CQSxDQUFDekQsV0FBVyxFQUFFbkQsU0FBUyxFQUFFNkcsS0FBSyxFQUFFdEQsSUFBSSxFQUFFdUQsUUFBUSxFQUFFO0VBQzFFLElBQUlBLFFBQVEsS0FBSyxRQUFRLEVBQUU7SUFDekI7RUFDRjtFQUNBLE1BQU1DLFVBQVUsR0FBRzFGLGNBQU0sQ0FBQzJGLGtCQUFrQixDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0wsS0FBSyxDQUFDLENBQUM7RUFDbkV4RixjQUFNLENBQUN5RixRQUFRLENBQUMsQ0FDZCxHQUFHM0QsV0FBVyxrQkFBa0JuRCxTQUFTLGFBQWEyRyxZQUFZLENBQ2hFcEQsSUFDRixDQUFDLGVBQWV3RCxVQUFVLEVBQUUsRUFDNUI7SUFDRS9HLFNBQVM7SUFDVG1ELFdBQVc7SUFDWG1DLElBQUksRUFBRXFCLFlBQVksQ0FBQ3BELElBQUk7RUFDekIsQ0FDRixDQUFDO0FBQ0g7QUFFQSxTQUFTNEQsMkJBQTJCQSxDQUFDaEUsV0FBVyxFQUFFbkQsU0FBUyxFQUFFNkcsS0FBSyxFQUFFTyxNQUFNLEVBQUU3RCxJQUFJLEVBQUV1RCxRQUFRLEVBQUU7RUFDMUYsSUFBSUEsUUFBUSxLQUFLLFFBQVEsRUFBRTtJQUN6QjtFQUNGO0VBQ0EsTUFBTUMsVUFBVSxHQUFHMUYsY0FBTSxDQUFDMkYsa0JBQWtCLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTCxLQUFLLENBQUMsQ0FBQztFQUNuRSxNQUFNUSxXQUFXLEdBQUdoRyxjQUFNLENBQUMyRixrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxDQUFDO0VBQ3JFL0YsY0FBTSxDQUFDeUYsUUFBUSxDQUFDLENBQ2QsR0FBRzNELFdBQVcsa0JBQWtCbkQsU0FBUyxhQUFhMkcsWUFBWSxDQUNoRXBELElBQ0YsQ0FBQyxlQUFld0QsVUFBVSxlQUFlTSxXQUFXLEVBQUUsRUFDdEQ7SUFDRXJILFNBQVM7SUFDVG1ELFdBQVc7SUFDWG1DLElBQUksRUFBRXFCLFlBQVksQ0FBQ3BELElBQUk7RUFDekIsQ0FDRixDQUFDO0FBQ0g7QUFFQSxTQUFTK0QseUJBQXlCQSxDQUFDbkUsV0FBVyxFQUFFbkQsU0FBUyxFQUFFNkcsS0FBSyxFQUFFdEQsSUFBSSxFQUFFOEMsS0FBSyxFQUFFUyxRQUFRLEVBQUU7RUFDdkYsSUFBSUEsUUFBUSxLQUFLLFFBQVEsRUFBRTtJQUN6QjtFQUNGO0VBQ0EsTUFBTUMsVUFBVSxHQUFHMUYsY0FBTSxDQUFDMkYsa0JBQWtCLENBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTCxLQUFLLENBQUMsQ0FBQztFQUNuRXhGLGNBQU0sQ0FBQ3lGLFFBQVEsQ0FBQyxDQUNkLEdBQUczRCxXQUFXLGVBQWVuRCxTQUFTLGFBQWEyRyxZQUFZLENBQzdEcEQsSUFDRixDQUFDLGVBQWV3RCxVQUFVLGNBQWNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDYixLQUFLLENBQUMsRUFBRSxFQUMvRDtJQUNFckcsU0FBUztJQUNUbUQsV0FBVztJQUNYa0QsS0FBSztJQUNMZixJQUFJLEVBQUVxQixZQUFZLENBQUNwRCxJQUFJO0VBQ3pCLENBQ0YsQ0FBQztBQUNIO0FBRU8sU0FBU2dFLHdCQUF3QkEsQ0FDdENwRSxXQUFXLEVBQ1hJLElBQUksRUFDSmlFLGNBQWMsRUFDZEMsWUFBWSxFQUNaaEQsTUFBTSxFQUNOZ0IsS0FBSyxFQUNMZixPQUFPLEVBQ1BDLEtBQUssRUFDTDtFQUNBLE9BQU8sSUFBSStDLE9BQU8sQ0FBQyxDQUFDOUIsT0FBTyxFQUFFQyxNQUFNLEtBQUs7SUFDdEMsTUFBTXhDLE9BQU8sR0FBR0gsVUFBVSxDQUFDc0UsY0FBYyxFQUFFckUsV0FBVyxFQUFFc0IsTUFBTSxDQUFDaEUsYUFBYSxDQUFDO0lBRTdFLElBQUksQ0FBQzRDLE9BQU8sRUFBRTtNQUNaLElBQUlvRSxZQUFZLElBQUlBLFlBQVksQ0FBQ0UsTUFBTSxHQUFHLENBQUMsSUFBSUYsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZMUcsYUFBSyxDQUFDM0IsTUFBTSxFQUFFO1FBQ3RGLE9BQU93RyxPQUFPLENBQUM2QixZQUFZLENBQUN4QixHQUFHLENBQUMyQixHQUFHLElBQUlyRixpQkFBaUIsQ0FBQ3FGLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDakU7TUFDQSxPQUFPaEMsT0FBTyxDQUFDNkIsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUNwQztJQUVBLE1BQU1uRSxPQUFPLEdBQUdnQixnQkFBZ0IsQ0FBQ25CLFdBQVcsRUFBRUksSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUVrQixNQUFNLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxDQUFDO0lBQ3ZGO0lBQ0EsSUFBSWMsS0FBSyxZQUFZMUUsYUFBSyxDQUFDOEcsS0FBSyxFQUFFO01BQ2hDdkUsT0FBTyxDQUFDbUMsS0FBSyxHQUFHQSxLQUFLO0lBQ3ZCLENBQUMsTUFBTSxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLElBQUlBLEtBQUssS0FBSyxJQUFJLEVBQUU7TUFDdEQsTUFBTXFDLGtCQUFrQixHQUFHLElBQUkvRyxhQUFLLENBQUM4RyxLQUFLLENBQUNMLGNBQWMsQ0FBQztNQUMxRCxJQUFJL0IsS0FBSyxDQUFDc0MsS0FBSyxFQUFFO1FBQ2ZELGtCQUFrQixDQUFDRSxRQUFRLENBQUN2QyxLQUFLLENBQUM7TUFDcEM7TUFDQW5DLE9BQU8sQ0FBQ21DLEtBQUssR0FBR3FDLGtCQUFrQjtJQUNwQyxDQUFDLE1BQU07TUFDTHhFLE9BQU8sQ0FBQ21DLEtBQUssR0FBRyxJQUFJMUUsYUFBSyxDQUFDOEcsS0FBSyxDQUFDTCxjQUFjLENBQUM7SUFDakQ7SUFFQSxNQUFNO01BQUUxQixPQUFPO01BQUVPO0lBQU0sQ0FBQyxHQUFHVixpQkFBaUIsQ0FDMUNyQyxPQUFPLEVBQ1AyRSxvQkFBb0IsSUFBSTtNQUN0QnJDLE9BQU8sQ0FBQ3FDLG9CQUFvQixDQUFDO0lBQy9CLENBQUMsRUFDREMsU0FBUyxJQUFJO01BQ1hyQyxNQUFNLENBQUNxQyxTQUFTLENBQUM7SUFDbkIsQ0FDRixDQUFDO0lBQ0RmLDJCQUEyQixDQUN6QmhFLFdBQVcsRUFDWHFFLGNBQWMsRUFDZCxpQ0FBaUMsRUFDakNQLElBQUksQ0FBQ0MsU0FBUyxDQUNaTyxZQUFZLENBQUN4QixHQUFHLENBQUNrQyxDQUFDLElBQUtBLENBQUMsWUFBWXBILGFBQUssQ0FBQzNCLE1BQU0sR0FBRytJLENBQUMsQ0FBQy9CLEVBQUUsR0FBRyxHQUFHLEdBQUcrQixDQUFDLENBQUNuSSxTQUFTLEdBQUdtSSxDQUFFLENBQ2xGLENBQUMsRUFDRDVFLElBQUksRUFDSmtCLE1BQU0sQ0FBQzJELFNBQVMsQ0FBQ0Msb0JBQ25CLENBQUM7O0lBRUQ7SUFDQS9FLE9BQU8sQ0FBQzBDLE9BQU8sR0FBR3lCLFlBQVksQ0FBQ3hCLEdBQUcsQ0FBQ3FDLGFBQWEsSUFBSTtNQUNsRCxJQUFJQSxhQUFhLFlBQVl2SCxhQUFLLENBQUMzQixNQUFNLEVBQUU7UUFDekMsT0FBT2tKLGFBQWE7TUFDdEI7TUFDQTtNQUNBLE1BQU1DLGlCQUFpQixHQUFHRCxhQUFhLENBQUN0SSxTQUFTLElBQUl3SCxjQUFjO01BQ25FLE1BQU1nQix1QkFBdUIsR0FBRztRQUFFLEdBQUdGLGFBQWE7UUFBRXRJLFNBQVMsRUFBRXVJO01BQWtCLENBQUM7TUFDbEYsT0FBT3hILGFBQUssQ0FBQzNCLE1BQU0sQ0FBQ3FKLFFBQVEsQ0FBQ0QsdUJBQXVCLENBQUM7SUFDdkQsQ0FBQyxDQUFDO0lBQ0YsT0FBT2QsT0FBTyxDQUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FDckI4QyxJQUFJLENBQUMsTUFBTTtNQUNWLE9BQU9sRixpQkFBaUIsQ0FBQ0YsT0FBTyxFQUFFLEdBQUdILFdBQVcsSUFBSXFFLGNBQWMsRUFBRSxFQUFFakUsSUFBSSxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUNEbUYsSUFBSSxDQUFDLE1BQU07TUFDVixJQUFJcEYsT0FBTyxDQUFDRyxpQkFBaUIsRUFBRTtRQUM3QixPQUFPSCxPQUFPLENBQUMwQyxPQUFPO01BQ3hCO01BQ0EsTUFBTTJDLG1CQUFtQixHQUFHdEYsT0FBTyxDQUFDQyxPQUFPLENBQUM7TUFDNUMsSUFBSXFGLG1CQUFtQixJQUFJLE9BQU9BLG1CQUFtQixDQUFDRCxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQ3pFLE9BQU9DLG1CQUFtQixDQUFDRCxJQUFJLENBQUNFLE9BQU8sSUFBSTtVQUN6QyxPQUFPQSxPQUFPO1FBQ2hCLENBQUMsQ0FBQztNQUNKO01BQ0EsT0FBT0QsbUJBQW1CO0lBQzVCLENBQUMsQ0FBQyxDQUNERCxJQUFJLENBQUM1QyxPQUFPLEVBQUVPLEtBQUssQ0FBQztFQUN6QixDQUFDLENBQUMsQ0FBQ3FDLElBQUksQ0FBQ0csYUFBYSxJQUFJO0lBQ3ZCakMsbUJBQW1CLENBQ2pCekQsV0FBVyxFQUNYcUUsY0FBYyxFQUNkUCxJQUFJLENBQUNDLFNBQVMsQ0FBQzJCLGFBQWEsQ0FBQyxFQUM3QnRGLElBQUksRUFDSmtCLE1BQU0sQ0FBQzJELFNBQVMsQ0FBQ1UsWUFDbkIsQ0FBQztJQUNELE9BQU9ELGFBQWE7RUFDdEIsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxTQUFTRSxvQkFBb0JBLENBQ2xDNUYsV0FBVyxFQUNYbkQsU0FBUyxFQUNUZ0osU0FBUyxFQUNUQyxXQUFXLEVBQ1h4RSxNQUFNLEVBQ05sQixJQUFJLEVBQ0ptQixPQUFPLEVBQ1BDLEtBQUssRUFDTDtFQUNBLE1BQU10QixPQUFPLEdBQUdILFVBQVUsQ0FBQ2xELFNBQVMsRUFBRW1ELFdBQVcsRUFBRXNCLE1BQU0sQ0FBQ2hFLGFBQWEsQ0FBQztFQUN4RSxJQUFJLENBQUM0QyxPQUFPLEVBQUU7SUFDWixPQUFPcUUsT0FBTyxDQUFDOUIsT0FBTyxDQUFDO01BQ3JCb0QsU0FBUztNQUNUQztJQUNGLENBQUMsQ0FBQztFQUNKO0VBQ0EsTUFBTUMsSUFBSSxHQUFHOUosTUFBTSxDQUFDZ0csTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFNkQsV0FBVyxDQUFDO0VBQzNDQyxJQUFJLENBQUNuQixLQUFLLEdBQUdpQixTQUFTO0VBRXRCLE1BQU1HLFVBQVUsR0FBRyxJQUFJcEksYUFBSyxDQUFDOEcsS0FBSyxDQUFDN0gsU0FBUyxDQUFDO0VBQzdDbUosVUFBVSxDQUFDbkIsUUFBUSxDQUFDa0IsSUFBSSxDQUFDO0VBRXpCLElBQUl4RCxLQUFLLEdBQUcsS0FBSztFQUNqQixJQUFJdUQsV0FBVyxFQUFFO0lBQ2Z2RCxLQUFLLEdBQUcsQ0FBQyxDQUFDdUQsV0FBVyxDQUFDdkQsS0FBSztFQUM3QjtFQUNBLE1BQU0wRCxhQUFhLEdBQUc1RCxxQkFBcUIsQ0FDekNyQyxXQUFXLEVBQ1hJLElBQUksRUFDSjRGLFVBQVUsRUFDVnpELEtBQUssRUFDTGpCLE1BQU0sRUFDTkMsT0FBTyxFQUNQQyxLQUNGLENBQUM7RUFDRCxPQUFPK0MsT0FBTyxDQUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FDckI4QyxJQUFJLENBQUMsTUFBTTtJQUNWLE9BQU9sRixpQkFBaUIsQ0FBQzRGLGFBQWEsRUFBRSxHQUFHakcsV0FBVyxJQUFJbkQsU0FBUyxFQUFFLEVBQUV1RCxJQUFJLENBQUM7RUFDOUUsQ0FBQyxDQUFDLENBQ0RtRixJQUFJLENBQUMsTUFBTTtJQUNWLElBQUlVLGFBQWEsQ0FBQzNGLGlCQUFpQixFQUFFO01BQ25DLE9BQU8yRixhQUFhLENBQUMzRCxLQUFLO0lBQzVCO0lBQ0EsT0FBT3BDLE9BQU8sQ0FBQytGLGFBQWEsQ0FBQztFQUMvQixDQUFDLENBQUMsQ0FDRFYsSUFBSSxDQUNIdEIsTUFBTSxJQUFJO0lBQ1IsSUFBSWlDLFdBQVcsR0FBR0YsVUFBVTtJQUM1QixJQUFJL0IsTUFBTSxJQUFJQSxNQUFNLFlBQVlyRyxhQUFLLENBQUM4RyxLQUFLLEVBQUU7TUFDM0N3QixXQUFXLEdBQUdqQyxNQUFNO0lBQ3RCO0lBQ0EsTUFBTWtDLFNBQVMsR0FBR0QsV0FBVyxDQUFDNUcsTUFBTSxDQUFDLENBQUM7SUFDdEMsSUFBSTZHLFNBQVMsQ0FBQ3ZCLEtBQUssRUFBRTtNQUNuQmlCLFNBQVMsR0FBR00sU0FBUyxDQUFDdkIsS0FBSztJQUM3QjtJQUNBLElBQUl1QixTQUFTLENBQUNDLEtBQUssRUFBRTtNQUNuQk4sV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO01BQy9CQSxXQUFXLENBQUNNLEtBQUssR0FBR0QsU0FBUyxDQUFDQyxLQUFLO0lBQ3JDO0lBQ0EsSUFBSUQsU0FBUyxDQUFDRSxJQUFJLEVBQUU7TUFDbEJQLFdBQVcsR0FBR0EsV0FBVyxJQUFJLENBQUMsQ0FBQztNQUMvQkEsV0FBVyxDQUFDTyxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0UsSUFBSTtJQUNuQztJQUNBLElBQUlGLFNBQVMsQ0FBQ0csT0FBTyxFQUFFO01BQ3JCUixXQUFXLEdBQUdBLFdBQVcsSUFBSSxDQUFDLENBQUM7TUFDL0JBLFdBQVcsQ0FBQ1EsT0FBTyxHQUFHSCxTQUFTLENBQUNHLE9BQU87SUFDekM7SUFDQSxJQUFJSCxTQUFTLENBQUNJLFdBQVcsRUFBRTtNQUN6QlQsV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO01BQy9CQSxXQUFXLENBQUNTLFdBQVcsR0FBR0osU0FBUyxDQUFDSSxXQUFXO0lBQ2pEO0lBQ0EsSUFBSUosU0FBUyxDQUFDSyxPQUFPLEVBQUU7TUFDckJWLFdBQVcsR0FBR0EsV0FBVyxJQUFJLENBQUMsQ0FBQztNQUMvQkEsV0FBVyxDQUFDVSxPQUFPLEdBQUdMLFNBQVMsQ0FBQ0ssT0FBTztJQUN6QztJQUNBLElBQUlMLFNBQVMsQ0FBQ2pLLElBQUksRUFBRTtNQUNsQjRKLFdBQVcsR0FBR0EsV0FBVyxJQUFJLENBQUMsQ0FBQztNQUMvQkEsV0FBVyxDQUFDNUosSUFBSSxHQUFHaUssU0FBUyxDQUFDakssSUFBSTtJQUNuQztJQUNBLElBQUlpSyxTQUFTLENBQUNNLEtBQUssRUFBRTtNQUNuQlgsV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO01BQy9CQSxXQUFXLENBQUNXLEtBQUssR0FBR04sU0FBUyxDQUFDTSxLQUFLO0lBQ3JDO0lBQ0EsSUFBSU4sU0FBUyxDQUFDTyxJQUFJLEVBQUU7TUFDbEJaLFdBQVcsR0FBR0EsV0FBVyxJQUFJLENBQUMsQ0FBQztNQUMvQkEsV0FBVyxDQUFDWSxJQUFJLEdBQUdQLFNBQVMsQ0FBQ08sSUFBSTtJQUNuQztJQUNBLElBQUlQLFNBQVMsQ0FBQ1EsT0FBTyxFQUFFO01BQ3JCYixXQUFXLEdBQUdBLFdBQVcsSUFBSSxDQUFDLENBQUM7TUFDL0JBLFdBQVcsQ0FBQ2EsT0FBTyxHQUFHUixTQUFTLENBQUNRLE9BQU87SUFDekM7SUFDQSxJQUFJVixhQUFhLENBQUNXLGNBQWMsRUFBRTtNQUNoQ2QsV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO01BQy9CQSxXQUFXLENBQUNjLGNBQWMsR0FBR1gsYUFBYSxDQUFDVyxjQUFjO0lBQzNEO0lBQ0EsSUFBSVgsYUFBYSxDQUFDWSxxQkFBcUIsRUFBRTtNQUN2Q2YsV0FBVyxHQUFHQSxXQUFXLElBQUksQ0FBQyxDQUFDO01BQy9CQSxXQUFXLENBQUNlLHFCQUFxQixHQUFHWixhQUFhLENBQUNZLHFCQUFxQjtJQUN6RTtJQUNBLElBQUlaLGFBQWEsQ0FBQ2Esc0JBQXNCLEVBQUU7TUFDeENoQixXQUFXLEdBQUdBLFdBQVcsSUFBSSxDQUFDLENBQUM7TUFDL0JBLFdBQVcsQ0FBQ2dCLHNCQUFzQixHQUFHYixhQUFhLENBQUNhLHNCQUFzQjtJQUMzRTtJQUNBLElBQUlqRSxPQUFPLEdBQUdyQyxTQUFTO0lBQ3ZCLElBQUl5RCxNQUFNLFlBQVlyRyxhQUFLLENBQUMzQixNQUFNLEVBQUU7TUFDbEM0RyxPQUFPLEdBQUcsQ0FBQ29CLE1BQU0sQ0FBQztJQUNwQixDQUFDLE1BQU0sSUFDTDhDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDL0MsTUFBTSxDQUFDLEtBQ3BCLENBQUNBLE1BQU0sQ0FBQ08sTUFBTSxJQUFJUCxNQUFNLENBQUNnRCxLQUFLLENBQUN4QyxHQUFHLElBQUlBLEdBQUcsWUFBWTdHLGFBQUssQ0FBQzNCLE1BQU0sQ0FBQyxDQUFDLEVBQ3BFO01BQ0E0RyxPQUFPLEdBQUdvQixNQUFNO0lBQ2xCO0lBQ0EsT0FBTztNQUNMNEIsU0FBUztNQUNUQyxXQUFXO01BQ1hqRDtJQUNGLENBQUM7RUFDSCxDQUFDLEVBQ0RxRSxHQUFHLElBQUk7SUFDTCxNQUFNaEUsS0FBSyxHQUFHQyxZQUFZLENBQUMrRCxHQUFHLEVBQUU7TUFDOUI5RCxJQUFJLEVBQUV4RixhQUFLLENBQUN5RixLQUFLLENBQUNDLGFBQWE7TUFDL0JDLE9BQU8sRUFBRTtJQUNYLENBQUMsQ0FBQztJQUNGLE1BQU1MLEtBQUs7RUFDYixDQUNGLENBQUM7QUFDTDtBQUVPLFNBQVNDLFlBQVlBLENBQUNJLE9BQU8sRUFBRTRELFdBQVcsRUFBRTtFQUNqRCxJQUFJLENBQUNBLFdBQVcsRUFBRTtJQUNoQkEsV0FBVyxHQUFHLENBQUMsQ0FBQztFQUNsQjtFQUNBLElBQUksQ0FBQzVELE9BQU8sRUFBRTtJQUNaLE9BQU8sSUFBSTNGLGFBQUssQ0FBQ3lGLEtBQUssQ0FDcEI4RCxXQUFXLENBQUMvRCxJQUFJLElBQUl4RixhQUFLLENBQUN5RixLQUFLLENBQUNDLGFBQWEsRUFDN0M2RCxXQUFXLENBQUM1RCxPQUFPLElBQUksZ0JBQ3pCLENBQUM7RUFDSDtFQUNBLElBQUlBLE9BQU8sWUFBWTNGLGFBQUssQ0FBQ3lGLEtBQUssRUFBRTtJQUNsQyxPQUFPRSxPQUFPO0VBQ2hCO0VBRUEsTUFBTUgsSUFBSSxHQUFHK0QsV0FBVyxDQUFDL0QsSUFBSSxJQUFJeEYsYUFBSyxDQUFDeUYsS0FBSyxDQUFDQyxhQUFhO0VBQzFEO0VBQ0EsSUFBSSxPQUFPQyxPQUFPLEtBQUssUUFBUSxFQUFFO0lBQy9CLE9BQU8sSUFBSTNGLGFBQUssQ0FBQ3lGLEtBQUssQ0FBQ0QsSUFBSSxFQUFFRyxPQUFPLENBQUM7RUFDdkM7RUFDQSxNQUFNTCxLQUFLLEdBQUcsSUFBSXRGLGFBQUssQ0FBQ3lGLEtBQUssQ0FBQ0QsSUFBSSxFQUFFRyxPQUFPLENBQUNBLE9BQU8sSUFBSUEsT0FBTyxDQUFDO0VBQy9ELElBQUlBLE9BQU8sWUFBWUYsS0FBSyxFQUFFO0lBQzVCSCxLQUFLLENBQUNrRSxLQUFLLEdBQUc3RCxPQUFPLENBQUM2RCxLQUFLO0VBQzdCO0VBQ0EsT0FBT2xFLEtBQUs7QUFDZDtBQUNPLFNBQVM3QyxpQkFBaUJBLENBQUNGLE9BQU8sRUFBRTVCLFlBQVksRUFBRTZCLElBQUksRUFBRTtFQUM3RCxNQUFNaUgsWUFBWSxHQUFHbkcsWUFBWSxDQUFDM0MsWUFBWSxFQUFFWCxhQUFLLENBQUNOLGFBQWEsQ0FBQztFQUNwRSxJQUFJLENBQUMrSixZQUFZLEVBQUU7SUFDakI7RUFDRjtFQUNBLElBQUksT0FBT0EsWUFBWSxLQUFLLFFBQVEsSUFBSUEsWUFBWSxDQUFDL0csaUJBQWlCLElBQUlILE9BQU8sQ0FBQ3VCLE1BQU0sRUFBRTtJQUN4RnZCLE9BQU8sQ0FBQ0csaUJBQWlCLEdBQUcsSUFBSTtFQUNsQztFQUNBLE9BQU8sSUFBSWlFLE9BQU8sQ0FBQyxDQUFDOUIsT0FBTyxFQUFFQyxNQUFNLEtBQUs7SUFDdEMsT0FBTzZCLE9BQU8sQ0FBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQ3JCOEMsSUFBSSxDQUFDLE1BQU07TUFDVixPQUFPLE9BQU84QixZQUFZLEtBQUssUUFBUSxHQUNuQ0MsdUJBQXVCLENBQUNELFlBQVksRUFBRWxILE9BQU8sRUFBRUMsSUFBSSxDQUFDLEdBQ3BEaUgsWUFBWSxDQUFDbEgsT0FBTyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUNEb0YsSUFBSSxDQUFDLE1BQU07TUFDVjlDLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDLENBQ0Q4RSxLQUFLLENBQUMzTSxDQUFDLElBQUk7TUFDVixNQUFNc0ksS0FBSyxHQUFHQyxZQUFZLENBQUN2SSxDQUFDLEVBQUU7UUFDNUJ3SSxJQUFJLEVBQUV4RixhQUFLLENBQUN5RixLQUFLLENBQUNtRSxnQkFBZ0I7UUFDbENqRSxPQUFPLEVBQUU7TUFDWCxDQUFDLENBQUM7TUFDRmIsTUFBTSxDQUFDUSxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDSjtBQUNBLGVBQWVvRSx1QkFBdUJBLENBQUNHLE9BQU8sRUFBRXRILE9BQU8sRUFBRUMsSUFBSSxFQUFFO0VBQzdELElBQUlELE9BQU8sQ0FBQ3VCLE1BQU0sSUFBSSxDQUFDK0YsT0FBTyxDQUFDQyxpQkFBaUIsRUFBRTtJQUNoRDtFQUNGO0VBQ0EsSUFBSUMsT0FBTyxHQUFHeEgsT0FBTyxDQUFDZ0MsSUFBSTtFQUMxQixJQUNFLENBQUN3RixPQUFPLElBQ1J4SCxPQUFPLENBQUNkLE1BQU0sSUFDZGMsT0FBTyxDQUFDZCxNQUFNLENBQUN4QyxTQUFTLEtBQUssT0FBTyxJQUNwQyxDQUFDc0QsT0FBTyxDQUFDZCxNQUFNLENBQUN1SSxPQUFPLENBQUMsQ0FBQyxFQUN6QjtJQUNBRCxPQUFPLEdBQUd4SCxPQUFPLENBQUNkLE1BQU07RUFDMUI7RUFDQSxJQUNFLENBQUNvSSxPQUFPLENBQUNJLFdBQVcsSUFBSUosT0FBTyxDQUFDSyxtQkFBbUIsSUFBSUwsT0FBTyxDQUFDTSxtQkFBbUIsS0FDbEYsQ0FBQ0osT0FBTyxFQUNSO0lBQ0EsTUFBTSw4Q0FBOEM7RUFDdEQ7RUFDQSxJQUFJRixPQUFPLENBQUNPLGFBQWEsSUFBSSxDQUFDN0gsT0FBTyxDQUFDdUIsTUFBTSxFQUFFO0lBQzVDLE1BQU0scUVBQXFFO0VBQzdFO0VBQ0EsSUFBSXVHLE1BQU0sR0FBRzlILE9BQU8sQ0FBQzhILE1BQU0sSUFBSSxDQUFDLENBQUM7RUFDakMsSUFBSTlILE9BQU8sQ0FBQ2QsTUFBTSxFQUFFO0lBQ2xCNEksTUFBTSxHQUFHOUgsT0FBTyxDQUFDZCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDO0VBQ2xDO0VBQ0EsTUFBTTRJLGFBQWEsR0FBRzdMLEdBQUcsSUFBSTtJQUMzQixNQUFNeUUsS0FBSyxHQUFHbUgsTUFBTSxDQUFDNUwsR0FBRyxDQUFDO0lBQ3pCLElBQUl5RSxLQUFLLElBQUksSUFBSSxFQUFFO01BQ2pCLE1BQU0sOENBQThDekUsR0FBRyxHQUFHO0lBQzVEO0VBQ0YsQ0FBQztFQUVELE1BQU04TCxlQUFlLEdBQUcsTUFBQUEsQ0FBT0MsR0FBRyxFQUFFL0wsR0FBRyxFQUFFd0QsR0FBRyxLQUFLO0lBQy9DLElBQUl3SSxJQUFJLEdBQUdELEdBQUcsQ0FBQ1gsT0FBTztJQUN0QixJQUFJLE9BQU9ZLElBQUksS0FBSyxVQUFVLEVBQUU7TUFDOUIsSUFBSTtRQUNGLE1BQU1wRSxNQUFNLEdBQUcsTUFBTW9FLElBQUksQ0FBQ3hJLEdBQUcsQ0FBQztRQUM5QixJQUFJLENBQUNvRSxNQUFNLElBQUlBLE1BQU0sSUFBSSxJQUFJLEVBQUU7VUFDN0IsTUFBTW1FLEdBQUcsQ0FBQ2xGLEtBQUssSUFBSSx3Q0FBd0M3RyxHQUFHLEdBQUc7UUFDbkU7TUFDRixDQUFDLENBQUMsT0FBT3pCLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQ0EsQ0FBQyxFQUFFO1VBQ04sTUFBTXdOLEdBQUcsQ0FBQ2xGLEtBQUssSUFBSSx3Q0FBd0M3RyxHQUFHLEdBQUc7UUFDbkU7UUFFQSxNQUFNK0wsR0FBRyxDQUFDbEYsS0FBSyxJQUFJdEksQ0FBQyxDQUFDMkksT0FBTyxJQUFJM0ksQ0FBQztNQUNuQztNQUNBO0lBQ0Y7SUFDQSxJQUFJLENBQUNtTSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FCLElBQUksQ0FBQyxFQUFFO01BQ3hCQSxJQUFJLEdBQUcsQ0FBQ0QsR0FBRyxDQUFDWCxPQUFPLENBQUM7SUFDdEI7SUFFQSxJQUFJLENBQUNZLElBQUksQ0FBQ0MsUUFBUSxDQUFDekksR0FBRyxDQUFDLEVBQUU7TUFDdkIsTUFDRXVJLEdBQUcsQ0FBQ2xGLEtBQUssSUFBSSx5Q0FBeUM3RyxHQUFHLGVBQWVnTSxJQUFJLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtJQUU3RjtFQUNGLENBQUM7RUFFRCxNQUFNQyxPQUFPLEdBQUdDLEVBQUUsSUFBSTtJQUNwQixNQUFNQyxLQUFLLEdBQUdELEVBQUUsSUFBSUEsRUFBRSxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDRCxLQUFLLENBQUMsb0JBQW9CLENBQUM7SUFDN0QsT0FBTyxDQUFDQSxLQUFLLEdBQUdBLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUVFLFdBQVcsQ0FBQyxDQUFDO0VBQzlDLENBQUM7RUFDRCxJQUFJN0IsS0FBSyxDQUFDQyxPQUFPLENBQUNTLE9BQU8sQ0FBQ29CLE1BQU0sQ0FBQyxFQUFFO0lBQ2pDLEtBQUssTUFBTXhNLEdBQUcsSUFBSW9MLE9BQU8sQ0FBQ29CLE1BQU0sRUFBRTtNQUNoQ1gsYUFBYSxDQUFDN0wsR0FBRyxDQUFDO0lBQ3BCO0VBQ0YsQ0FBQyxNQUFNO0lBQ0wsTUFBTXlNLGNBQWMsR0FBRyxFQUFFO0lBQ3pCLEtBQUssTUFBTXpNLEdBQUcsSUFBSW9MLE9BQU8sQ0FBQ29CLE1BQU0sRUFBRTtNQUNoQyxNQUFNVCxHQUFHLEdBQUdYLE9BQU8sQ0FBQ29CLE1BQU0sQ0FBQ3hNLEdBQUcsQ0FBQztNQUMvQixJQUFJd0QsR0FBRyxHQUFHb0ksTUFBTSxDQUFDNUwsR0FBRyxDQUFDO01BQ3JCLElBQUksT0FBTytMLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDM0JGLGFBQWEsQ0FBQ0UsR0FBRyxDQUFDO01BQ3BCO01BQ0EsSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLElBQUlBLEdBQUcsQ0FBQ3ROLE9BQU8sSUFBSSxJQUFJLElBQUkrRSxHQUFHLElBQUksSUFBSSxFQUFFO1VBQ3RDQSxHQUFHLEdBQUd1SSxHQUFHLENBQUN0TixPQUFPO1VBQ2pCbU4sTUFBTSxDQUFDNUwsR0FBRyxDQUFDLEdBQUd3RCxHQUFHO1VBQ2pCLElBQUlNLE9BQU8sQ0FBQ2QsTUFBTSxFQUFFO1lBQ2xCYyxPQUFPLENBQUNkLE1BQU0sQ0FBQzBKLEdBQUcsQ0FBQzFNLEdBQUcsRUFBRXdELEdBQUcsQ0FBQztVQUM5QjtRQUNGO1FBQ0EsSUFBSXVJLEdBQUcsQ0FBQ1ksUUFBUSxJQUFJN0ksT0FBTyxDQUFDZCxNQUFNLEVBQUU7VUFDbEMsSUFBSWMsT0FBTyxDQUFDNkIsUUFBUSxFQUFFO1lBQ3BCN0IsT0FBTyxDQUFDZCxNQUFNLENBQUM0SixNQUFNLENBQUM1TSxHQUFHLENBQUM7VUFDNUIsQ0FBQyxNQUFNLElBQUkrTCxHQUFHLENBQUN0TixPQUFPLElBQUksSUFBSSxFQUFFO1lBQzlCcUYsT0FBTyxDQUFDZCxNQUFNLENBQUMwSixHQUFHLENBQUMxTSxHQUFHLEVBQUUrTCxHQUFHLENBQUN0TixPQUFPLENBQUM7VUFDdEM7UUFDRjtRQUNBLElBQUlzTixHQUFHLENBQUNjLFFBQVEsRUFBRTtVQUNoQmhCLGFBQWEsQ0FBQzdMLEdBQUcsQ0FBQztRQUNwQjtRQUNBLE1BQU04TSxRQUFRLEdBQUcsQ0FBQ2YsR0FBRyxDQUFDYyxRQUFRLElBQUlySixHQUFHLEtBQUtXLFNBQVM7UUFDbkQsSUFBSSxDQUFDMkksUUFBUSxFQUFFO1VBQ2IsSUFBSWYsR0FBRyxDQUFDbkwsSUFBSSxFQUFFO1lBQ1osTUFBTUEsSUFBSSxHQUFHdUwsT0FBTyxDQUFDSixHQUFHLENBQUNuTCxJQUFJLENBQUM7WUFDOUIsTUFBTW1NLE9BQU8sR0FBR3JDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbkgsR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLE9BQU9BLEdBQUc7WUFDekQsSUFBSXVKLE9BQU8sS0FBS25NLElBQUksRUFBRTtjQUNwQixNQUFNLHVDQUF1Q1osR0FBRyxlQUFlWSxJQUFJLEVBQUU7WUFDdkU7VUFDRjtVQUNBLElBQUltTCxHQUFHLENBQUNYLE9BQU8sRUFBRTtZQUNmcUIsY0FBYyxDQUFDaEssSUFBSSxDQUFDcUosZUFBZSxDQUFDQyxHQUFHLEVBQUUvTCxHQUFHLEVBQUV3RCxHQUFHLENBQUMsQ0FBQztVQUNyRDtRQUNGO01BQ0Y7SUFDRjtJQUNBLE1BQU0wRSxPQUFPLENBQUM4RSxHQUFHLENBQUNQLGNBQWMsQ0FBQztFQUNuQztFQUNBLElBQUlRLFNBQVMsR0FBRzdCLE9BQU8sQ0FBQ0ssbUJBQW1CO0VBQzNDLElBQUl5QixlQUFlLEdBQUc5QixPQUFPLENBQUNNLG1CQUFtQjtFQUNqRCxNQUFNeUIsUUFBUSxHQUFHLENBQUNqRixPQUFPLENBQUM5QixPQUFPLENBQUMsQ0FBQyxFQUFFOEIsT0FBTyxDQUFDOUIsT0FBTyxDQUFDLENBQUMsRUFBRThCLE9BQU8sQ0FBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFDMUUsSUFBSTZHLFNBQVMsSUFBSUMsZUFBZSxFQUFFO0lBQ2hDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUdwSixJQUFJLENBQUNxSixZQUFZLENBQUMsQ0FBQztFQUNuQztFQUNBLElBQUksT0FBT0gsU0FBUyxLQUFLLFVBQVUsRUFBRTtJQUNuQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHRixTQUFTLENBQUMsQ0FBQztFQUMzQjtFQUNBLElBQUksT0FBT0MsZUFBZSxLQUFLLFVBQVUsRUFBRTtJQUN6Q0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHRCxlQUFlLENBQUMsQ0FBQztFQUNqQztFQUNBLE1BQU0sQ0FBQ0csS0FBSyxFQUFFQyxpQkFBaUIsRUFBRUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNckYsT0FBTyxDQUFDOEUsR0FBRyxDQUFDRyxRQUFRLENBQUM7RUFDbEYsSUFBSUcsaUJBQWlCLElBQUk1QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzJDLGlCQUFpQixDQUFDLEVBQUU7SUFDekRMLFNBQVMsR0FBR0ssaUJBQWlCO0VBQy9CO0VBQ0EsSUFBSUMsa0JBQWtCLElBQUk3QyxLQUFLLENBQUNDLE9BQU8sQ0FBQzRDLGtCQUFrQixDQUFDLEVBQUU7SUFDM0RMLGVBQWUsR0FBR0ssa0JBQWtCO0VBQ3RDO0VBQ0EsSUFBSU4sU0FBUyxFQUFFO0lBQ2IsTUFBTU8sT0FBTyxHQUFHUCxTQUFTLENBQUNRLElBQUksQ0FBQ0MsWUFBWSxJQUFJTCxLQUFLLENBQUNwQixRQUFRLENBQUMsUUFBUXlCLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDdEYsSUFBSSxDQUFDRixPQUFPLEVBQUU7TUFDWixNQUFNLDREQUE0RDtJQUNwRTtFQUNGO0VBQ0EsSUFBSU4sZUFBZSxFQUFFO0lBQ25CLEtBQUssTUFBTVEsWUFBWSxJQUFJUixlQUFlLEVBQUU7TUFDMUMsSUFBSSxDQUFDRyxLQUFLLENBQUNwQixRQUFRLENBQUMsUUFBUXlCLFlBQVksRUFBRSxDQUFDLEVBQUU7UUFDM0MsTUFBTSxnRUFBZ0U7TUFDeEU7SUFDRjtFQUNGO0VBQ0EsTUFBTUMsUUFBUSxHQUFHdkMsT0FBTyxDQUFDd0MsZUFBZSxJQUFJLEVBQUU7RUFDOUMsSUFBSWxELEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ0QsUUFBUSxDQUFDLEVBQUU7SUFDM0IsS0FBSyxNQUFNM04sR0FBRyxJQUFJMk4sUUFBUSxFQUFFO01BQzFCLElBQUksQ0FBQ3JDLE9BQU8sRUFBRTtRQUNaLE1BQU0sb0NBQW9DO01BQzVDO01BRUEsSUFBSUEsT0FBTyxDQUFDdEosR0FBRyxDQUFDaEMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFO1FBQzVCLE1BQU0sMENBQTBDQSxHQUFHLG1CQUFtQjtNQUN4RTtJQUNGO0VBQ0YsQ0FBQyxNQUFNLElBQUksT0FBTzJOLFFBQVEsS0FBSyxRQUFRLEVBQUU7SUFDdkMsTUFBTWxCLGNBQWMsR0FBRyxFQUFFO0lBQ3pCLEtBQUssTUFBTXpNLEdBQUcsSUFBSW9MLE9BQU8sQ0FBQ3dDLGVBQWUsRUFBRTtNQUN6QyxNQUFNN0IsR0FBRyxHQUFHWCxPQUFPLENBQUN3QyxlQUFlLENBQUM1TixHQUFHLENBQUM7TUFDeEMsSUFBSStMLEdBQUcsQ0FBQ1gsT0FBTyxFQUFFO1FBQ2ZxQixjQUFjLENBQUNoSyxJQUFJLENBQUNxSixlQUFlLENBQUNDLEdBQUcsRUFBRS9MLEdBQUcsRUFBRXNMLE9BQU8sQ0FBQ3RKLEdBQUcsQ0FBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUM7TUFDbEU7SUFDRjtJQUNBLE1BQU1rSSxPQUFPLENBQUM4RSxHQUFHLENBQUNQLGNBQWMsQ0FBQztFQUNuQztBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTb0IsZUFBZUEsQ0FDN0JsSyxXQUFXLEVBQ1hJLElBQUksRUFDSmdCLFdBQVcsRUFDWEMsbUJBQW1CLEVBQ25CQyxNQUFNLEVBQ05DLE9BQU8sRUFDUDtFQUNBLElBQUksQ0FBQ0gsV0FBVyxFQUFFO0lBQ2hCLE9BQU9tRCxPQUFPLENBQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7RUFDQSxPQUFPLElBQUk4QixPQUFPLENBQUMsVUFBVTlCLE9BQU8sRUFBRUMsTUFBTSxFQUFFO0lBQzVDLElBQUl4QyxPQUFPLEdBQUdILFVBQVUsQ0FBQ3FCLFdBQVcsQ0FBQ3ZFLFNBQVMsRUFBRW1ELFdBQVcsRUFBRXNCLE1BQU0sQ0FBQ2hFLGFBQWEsQ0FBQztJQUNsRixJQUFJLENBQUM0QyxPQUFPLEVBQUU7TUFBRSxPQUFPdUMsT0FBTyxDQUFDLENBQUM7SUFBRTtJQUNsQyxJQUFJdEMsT0FBTyxHQUFHZ0IsZ0JBQWdCLENBQzVCbkIsV0FBVyxFQUNYSSxJQUFJLEVBQ0pnQixXQUFXLEVBQ1hDLG1CQUFtQixFQUNuQkMsTUFBTSxFQUNOQyxPQUNGLENBQUM7SUFDRCxJQUFJO01BQUVvQixPQUFPO01BQUVPO0lBQU0sQ0FBQyxHQUFHVixpQkFBaUIsQ0FDeENyQyxPQUFPLEVBQ1BkLE1BQU0sSUFBSTtNQUNSMkUsMkJBQTJCLENBQ3pCaEUsV0FBVyxFQUNYb0IsV0FBVyxDQUFDdkUsU0FBUyxFQUNyQnVFLFdBQVcsQ0FBQzlCLE1BQU0sQ0FBQyxDQUFDLEVBQ3BCRCxNQUFNLEVBQ05lLElBQUksRUFDSkosV0FBVyxDQUFDbUssVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUMzQjdJLE1BQU0sQ0FBQzJELFNBQVMsQ0FBQ1UsWUFBWSxHQUM3QnJFLE1BQU0sQ0FBQzJELFNBQVMsQ0FBQ0Msb0JBQ3ZCLENBQUM7TUFDRCxJQUNFbEYsV0FBVyxLQUFLakYsS0FBSyxDQUFDTSxVQUFVLElBQ2hDMkUsV0FBVyxLQUFLakYsS0FBSyxDQUFDTyxTQUFTLElBQy9CMEUsV0FBVyxLQUFLakYsS0FBSyxDQUFDUSxZQUFZLElBQ2xDeUUsV0FBVyxLQUFLakYsS0FBSyxDQUFDUyxXQUFXLEVBQ2pDO1FBQ0FTLE1BQU0sQ0FBQ2dHLE1BQU0sQ0FBQ1YsT0FBTyxFQUFFcEIsT0FBTyxDQUFDb0IsT0FBTyxDQUFDO01BQ3pDO01BQ0FrQixPQUFPLENBQUNwRCxNQUFNLENBQUM7SUFDakIsQ0FBQyxFQUNENkQsS0FBSyxJQUFJO01BQ1BpQix5QkFBeUIsQ0FDdkJuRSxXQUFXLEVBQ1hvQixXQUFXLENBQUN2RSxTQUFTLEVBQ3JCdUUsV0FBVyxDQUFDOUIsTUFBTSxDQUFDLENBQUMsRUFDcEJjLElBQUksRUFDSjhDLEtBQUssRUFDTDVCLE1BQU0sQ0FBQzJELFNBQVMsQ0FBQ21GLGtCQUNuQixDQUFDO01BQ0QxSCxNQUFNLENBQUNRLEtBQUssQ0FBQztJQUNmLENBQ0YsQ0FBQzs7SUFFRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0EsT0FBT3FCLE9BQU8sQ0FBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQ3JCOEMsSUFBSSxDQUFDLE1BQU07TUFDVixPQUFPbEYsaUJBQWlCLENBQUNGLE9BQU8sRUFBRSxHQUFHSCxXQUFXLElBQUlvQixXQUFXLENBQUN2RSxTQUFTLEVBQUUsRUFBRXVELElBQUksQ0FBQztJQUNwRixDQUFDLENBQUMsQ0FDRG1GLElBQUksQ0FBQyxNQUFNO01BQ1YsSUFBSXBGLE9BQU8sQ0FBQ0csaUJBQWlCLEVBQUU7UUFDN0IsT0FBT2lFLE9BQU8sQ0FBQzlCLE9BQU8sQ0FBQyxDQUFDO01BQzFCO01BQ0EsTUFBTTRILE9BQU8sR0FBR25LLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDO01BQ2hDLElBQ0VILFdBQVcsS0FBS2pGLEtBQUssQ0FBQ08sU0FBUyxJQUMvQjBFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ1MsV0FBVyxJQUNqQ3dFLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ0csVUFBVSxFQUNoQztRQUNBdUksbUJBQW1CLENBQ2pCekQsV0FBVyxFQUNYb0IsV0FBVyxDQUFDdkUsU0FBUyxFQUNyQnVFLFdBQVcsQ0FBQzlCLE1BQU0sQ0FBQyxDQUFDLEVBQ3BCYyxJQUFJLEVBQ0prQixNQUFNLENBQUMyRCxTQUFTLENBQUNVLFlBQ25CLENBQUM7TUFDSDtNQUNBO01BQ0EsSUFBSTNGLFdBQVcsS0FBS2pGLEtBQUssQ0FBQ00sVUFBVSxFQUFFO1FBQ3BDLElBQUlnUCxPQUFPLElBQUksT0FBT0EsT0FBTyxDQUFDOUUsSUFBSSxLQUFLLFVBQVUsRUFBRTtVQUNqRCxPQUFPOEUsT0FBTyxDQUFDOUUsSUFBSSxDQUFDM0MsUUFBUSxJQUFJO1lBQzlCO1lBQ0EsSUFBSUEsUUFBUSxJQUFJQSxRQUFRLENBQUN2RCxNQUFNLEVBQUU7Y0FDL0IsT0FBT3VELFFBQVE7WUFDakI7WUFDQSxPQUFPLElBQUk7VUFDYixDQUFDLENBQUM7UUFDSjtRQUNBLE9BQU8sSUFBSTtNQUNiO01BRUEsT0FBT3lILE9BQU87SUFDaEIsQ0FBQyxDQUFDLENBQ0Q5RSxJQUFJLENBQUM1QyxPQUFPLEVBQUVPLEtBQUssQ0FBQztFQUN6QixDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ08sU0FBU29ILE9BQU9BLENBQUNDLElBQUksRUFBRUMsVUFBVSxFQUFFO0VBQ3hDLElBQUlDLElBQUksR0FBRyxPQUFPRixJQUFJLElBQUksUUFBUSxHQUFHQSxJQUFJLEdBQUc7SUFBRTFOLFNBQVMsRUFBRTBOO0VBQUssQ0FBQztFQUMvRCxLQUFLLElBQUlsTyxHQUFHLElBQUltTyxVQUFVLEVBQUU7SUFDMUJDLElBQUksQ0FBQ3BPLEdBQUcsQ0FBQyxHQUFHbU8sVUFBVSxDQUFDbk8sR0FBRyxDQUFDO0VBQzdCO0VBQ0EsT0FBT3VCLGFBQUssQ0FBQzNCLE1BQU0sQ0FBQ3FKLFFBQVEsQ0FBQ21GLElBQUksQ0FBQztBQUNwQztBQUVPLFNBQVNDLHlCQUF5QkEsQ0FBQ0gsSUFBSSxFQUFFak4sYUFBYSxHQUFHTSxhQUFLLENBQUNOLGFBQWEsRUFBRTtFQUNuRixJQUFJLENBQUNKLGFBQWEsSUFBSSxDQUFDQSxhQUFhLENBQUNJLGFBQWEsQ0FBQyxJQUFJLENBQUNKLGFBQWEsQ0FBQ0ksYUFBYSxDQUFDLENBQUNkLFNBQVMsRUFBRTtJQUM5RjtFQUNGO0VBQ0FVLGFBQWEsQ0FBQ0ksYUFBYSxDQUFDLENBQUNkLFNBQVMsQ0FBQzBDLE9BQU8sQ0FBQ2xCLE9BQU8sSUFBSUEsT0FBTyxDQUFDdU0sSUFBSSxDQUFDLENBQUM7QUFDMUU7QUFFTyxTQUFTSSxvQkFBb0JBLENBQUMzSyxXQUFXLEVBQUVJLElBQUksRUFBRXdLLFVBQVUsRUFBRXRKLE1BQU0sRUFBRTtFQUMxRSxNQUFNbkIsT0FBTyxHQUFHO0lBQ2QsR0FBR3lLLFVBQVU7SUFDYm5KLFdBQVcsRUFBRXpCLFdBQVc7SUFDeEIwQixNQUFNLEVBQUUsS0FBSztJQUNiQyxVQUFVLEVBQUUsS0FBSztJQUNqQkMsR0FBRyxFQUFFTixNQUFNLENBQUNPLGdCQUFnQjtJQUM1QkMsT0FBTyxFQUFFUixNQUFNLENBQUNRLE9BQU87SUFDdkJDLEVBQUUsRUFBRVQsTUFBTSxDQUFDUyxFQUFFO0lBQ2JUO0VBQ0YsQ0FBQztFQUVELElBQUksQ0FBQ2xCLElBQUksRUFBRTtJQUNULE9BQU9ELE9BQU87RUFDaEI7RUFDQSxJQUFJQyxJQUFJLENBQUM4QixRQUFRLEVBQUU7SUFDakIvQixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSTtFQUMxQjtFQUNBLElBQUlDLElBQUksQ0FBQ3VCLFVBQVUsRUFBRTtJQUNuQnhCLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJO0VBQzlCO0VBQ0EsSUFBSUMsSUFBSSxDQUFDK0IsSUFBSSxFQUFFO0lBQ2JoQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUdDLElBQUksQ0FBQytCLElBQUk7RUFDN0I7RUFDQSxJQUFJL0IsSUFBSSxDQUFDZ0MsY0FBYyxFQUFFO0lBQ3ZCakMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUdDLElBQUksQ0FBQ2dDLGNBQWM7RUFDakQ7RUFDQSxPQUFPakMsT0FBTztBQUNoQjtBQUVPLGVBQWUwSyxtQkFBbUJBLENBQUM3SyxXQUFXLEVBQUU0SyxVQUFVLEVBQUV0SixNQUFNLEVBQUVsQixJQUFJLEVBQUU7RUFDL0UsTUFBTTBLLGFBQWEsR0FBR25PLFlBQVksQ0FBQ2lCLGFBQUssQ0FBQ21OLElBQUksQ0FBQztFQUM5QyxNQUFNQyxXQUFXLEdBQUdqTCxVQUFVLENBQUMrSyxhQUFhLEVBQUU5SyxXQUFXLEVBQUVzQixNQUFNLENBQUNoRSxhQUFhLENBQUM7RUFDaEYsSUFBSSxPQUFPME4sV0FBVyxLQUFLLFVBQVUsRUFBRTtJQUNyQyxJQUFJO01BQ0YsTUFBTTdLLE9BQU8sR0FBR3dLLG9CQUFvQixDQUFDM0ssV0FBVyxFQUFFSSxJQUFJLEVBQUV3SyxVQUFVLEVBQUV0SixNQUFNLENBQUM7TUFDM0UsTUFBTWpCLGlCQUFpQixDQUFDRixPQUFPLEVBQUUsR0FBR0gsV0FBVyxJQUFJOEssYUFBYSxFQUFFLEVBQUUxSyxJQUFJLENBQUM7TUFDekUsSUFBSUQsT0FBTyxDQUFDRyxpQkFBaUIsRUFBRTtRQUM3QixPQUFPc0ssVUFBVTtNQUNuQjtNQUNBLE1BQU0zRyxNQUFNLEdBQUcsTUFBTStHLFdBQVcsQ0FBQzdLLE9BQU8sQ0FBQztNQUN6QyxJQUFJQSxPQUFPLENBQUM4SyxhQUFhLEVBQUU7UUFDekJMLFVBQVUsQ0FBQ0ssYUFBYSxHQUFHLElBQUk7TUFDakM7TUFDQWpILDJCQUEyQixDQUN6QmhFLFdBQVcsRUFDWCxZQUFZLEVBQ1o7UUFBRSxHQUFHNEssVUFBVSxDQUFDTSxJQUFJLENBQUM1TCxNQUFNLENBQUMsQ0FBQztRQUFFNkwsUUFBUSxFQUFFUCxVQUFVLENBQUNPO01BQVMsQ0FBQyxFQUM5RGxILE1BQU0sRUFDTjdELElBQUksRUFDSmtCLE1BQU0sQ0FBQzJELFNBQVMsQ0FBQ0Msb0JBQ25CLENBQUM7TUFDRCxPQUFPakIsTUFBTSxJQUFJMkcsVUFBVTtJQUM3QixDQUFDLENBQUMsT0FBTzFILEtBQUssRUFBRTtNQUNkaUIseUJBQXlCLENBQ3ZCbkUsV0FBVyxFQUNYLFlBQVksRUFDWjtRQUFFLEdBQUc0SyxVQUFVLENBQUNNLElBQUksQ0FBQzVMLE1BQU0sQ0FBQyxDQUFDO1FBQUU2TCxRQUFRLEVBQUVQLFVBQVUsQ0FBQ087TUFBUyxDQUFDLEVBQzlEL0ssSUFBSSxFQUNKOEMsS0FBSyxFQUNMNUIsTUFBTSxDQUFDMkQsU0FBUyxDQUFDbUYsa0JBQ25CLENBQUM7TUFDRCxNQUFNbEgsS0FBSztJQUNiO0VBQ0Y7RUFDQSxPQUFPMEgsVUFBVTtBQUNuQjtBQUVPLGVBQWVRLDJCQUEyQkEsQ0FBQ3BMLFdBQVcsRUFBRUksSUFBSSxFQUFFaUwsWUFBWSxFQUFFQyxvQkFBb0IsRUFBRWhLLE1BQU0sRUFBRUMsT0FBTyxFQUFFO0VBQ3hILE1BQU1nSyxxQkFBcUIsR0FBRzVPLFlBQVksQ0FBQ2lCLGFBQUssQ0FBQzROLE1BQU0sQ0FBQztFQUN4RCxNQUFNQyxhQUFhLEdBQUcxTCxVQUFVLENBQUN3TCxxQkFBcUIsRUFBRXZMLFdBQVcsRUFBRXNCLE1BQU0sQ0FBQ2hFLGFBQWEsQ0FBQztFQUMxRixJQUFJLE9BQU9tTyxhQUFhLEtBQUssVUFBVSxFQUFFO0lBQ3ZDLElBQUk7TUFDRixNQUFNdEwsT0FBTyxHQUFHZ0IsZ0JBQWdCLENBQUNuQixXQUFXLEVBQUVJLElBQUksRUFBRWlMLFlBQVksRUFBRUMsb0JBQW9CLEVBQUVoSyxNQUFNLEVBQUVDLE9BQU8sQ0FBQztNQUN4RyxNQUFNbEIsaUJBQWlCLENBQUNGLE9BQU8sRUFBRSxHQUFHSCxXQUFXLElBQUl1TCxxQkFBcUIsRUFBRSxFQUFFbkwsSUFBSSxDQUFDO01BQ2pGLElBQUlELE9BQU8sQ0FBQ0csaUJBQWlCLEVBQUU7UUFDN0IsT0FBTytLLFlBQVk7TUFDckI7TUFDQSxNQUFNcEgsTUFBTSxHQUFHLE1BQU13SCxhQUFhLENBQUN0TCxPQUFPLENBQUM7TUFDM0M2RCwyQkFBMkIsQ0FDekJoRSxXQUFXLEVBQ1gsY0FBYyxFQUNkcUwsWUFBWSxFQUNacEgsTUFBTSxFQUNON0QsSUFBSSxFQUNKa0IsTUFBTSxDQUFDMkQsU0FBUyxDQUFDQyxvQkFDbkIsQ0FBQztNQUNELE9BQU9qQixNQUFNLElBQUlvSCxZQUFZO0lBQy9CLENBQUMsQ0FBQyxPQUFPbkksS0FBSyxFQUFFO01BQ2RpQix5QkFBeUIsQ0FDdkJuRSxXQUFXLEVBQ1gsY0FBYyxFQUNkcUwsWUFBWSxFQUNaakwsSUFBSSxFQUNKOEMsS0FBSyxFQUNMNUIsTUFBTSxDQUFDMkQsU0FBUyxDQUFDbUYsa0JBQ25CLENBQUM7TUFDRCxNQUFNbEgsS0FBSztJQUNiO0VBQ0Y7RUFDQSxPQUFPbUksWUFBWTtBQUNyQiIsImlnbm9yZUxpc3QiOltdfQ==
|
|
939
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlR5cGVzIiwiZXhwb3J0cyIsImJlZm9yZUxvZ2luIiwiYWZ0ZXJMb2dpbiIsImFmdGVyTG9nb3V0IiwiYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QiLCJiZWZvcmVTYXZlIiwiYWZ0ZXJTYXZlIiwiYmVmb3JlRGVsZXRlIiwiYWZ0ZXJEZWxldGUiLCJiZWZvcmVGaW5kIiwiYWZ0ZXJGaW5kIiwiYmVmb3JlQ29ubmVjdCIsImJlZm9yZVN1YnNjcmliZSIsImFmdGVyRXZlbnQiLCJDb25uZWN0Q2xhc3NOYW1lIiwiY3JlYXRlU3RvcmUiLCJPYmplY3QiLCJjcmVhdGUiLCJiYXNlU3RvcmUiLCJWYWxpZGF0b3JzIiwia2V5cyIsInJlZHVjZSIsImJhc2UiLCJrZXkiLCJGdW5jdGlvbnMiLCJKb2JzIiwiTGl2ZVF1ZXJ5IiwiVHJpZ2dlcnMiLCJmcmVlemUiLCJnZXRDbGFzc05hbWUiLCJwYXJzZUNsYXNzIiwiY2xhc3NOYW1lIiwibmFtZSIsInJlcGxhY2UiLCJ2YWxpZGF0ZUNsYXNzTmFtZUZvclRyaWdnZXJzIiwidHlwZSIsIl90cmlnZ2VyU3RvcmUiLCJDYXRlZ29yeSIsImdldFN0b3JlIiwiY2F0ZWdvcnkiLCJhcHBsaWNhdGlvbklkIiwiaW52YWxpZE5hbWVSZWdleCIsInRlc3QiLCJwYXRoIiwic3BsaXQiLCJzcGxpY2UiLCJQYXJzZSIsInN0b3JlIiwiY29tcG9uZW50IiwiYWRkIiwiaGFuZGxlciIsImxhc3RDb21wb25lbnQiLCJsb2dnZXIiLCJ3YXJuIiwicmVtb3ZlIiwiZ2V0IiwiYWRkRnVuY3Rpb24iLCJmdW5jdGlvbk5hbWUiLCJ2YWxpZGF0aW9uSGFuZGxlciIsImFkZEpvYiIsImpvYk5hbWUiLCJhZGRUcmlnZ2VyIiwiYWRkQ29ubmVjdFRyaWdnZXIiLCJhZGRMaXZlUXVlcnlFdmVudEhhbmRsZXIiLCJwdXNoIiwicmVtb3ZlRnVuY3Rpb24iLCJyZW1vdmVUcmlnZ2VyIiwiX3VucmVnaXN0ZXJBbGwiLCJmb3JFYWNoIiwiYXBwSWQiLCJ0b0pTT053aXRoT2JqZWN0cyIsIm9iamVjdCIsInRvSlNPTiIsInN0YXRlQ29udHJvbGxlciIsIkNvcmVNYW5hZ2VyIiwiZ2V0T2JqZWN0U3RhdGVDb250cm9sbGVyIiwicGVuZGluZyIsImdldFBlbmRpbmdPcHMiLCJfZ2V0U3RhdGVJZGVudGlmaWVyIiwidmFsIiwiX3RvRnVsbEpTT04iLCJnZXRUcmlnZ2VyIiwidHJpZ2dlclR5cGUiLCJydW5UcmlnZ2VyIiwidHJpZ2dlciIsInJlcXVlc3QiLCJhdXRoIiwibWF5YmVSdW5WYWxpZGF0b3IiLCJza2lwV2l0aE1hc3RlcktleSIsInRyaWdnZXJFeGlzdHMiLCJ1bmRlZmluZWQiLCJnZXRGdW5jdGlvbiIsImdldEZ1bmN0aW9uTmFtZXMiLCJmdW5jdGlvbk5hbWVzIiwiZXh0cmFjdEZ1bmN0aW9uTmFtZXMiLCJuYW1lc3BhY2UiLCJ2YWx1ZSIsImdldEpvYiIsImdldEpvYnMiLCJtYW5hZ2VyIiwiZ2V0VmFsaWRhdG9yIiwiZ2V0UmVxdWVzdE9iamVjdCIsInBhcnNlT2JqZWN0Iiwib3JpZ2luYWxQYXJzZU9iamVjdCIsImNvbmZpZyIsImNvbnRleHQiLCJpc0dldCIsInRyaWdnZXJOYW1lIiwibWFzdGVyIiwiaXNSZWFkT25seSIsImxvZyIsImxvZ2dlckNvbnRyb2xsZXIiLCJoZWFkZXJzIiwiaXAiLCJvcmlnaW5hbCIsImFzc2lnbiIsImlzTWFzdGVyIiwidXNlciIsImluc3RhbGxhdGlvbklkIiwiZ2V0UmVxdWVzdFF1ZXJ5T2JqZWN0IiwicXVlcnkiLCJjb3VudCIsImdldFJlc3BvbnNlT2JqZWN0IiwicmVzb2x2ZSIsInJlamVjdCIsInN1Y2Nlc3MiLCJyZXNwb25zZSIsIm9iamVjdHMiLCJtYXAiLCJlcXVhbHMiLCJfZ2V0U2F2ZUpTT04iLCJpZCIsImVycm9yIiwicmVzb2x2ZUVycm9yIiwiY29kZSIsIkVycm9yIiwiU0NSSVBUX0ZBSUxFRCIsIm1lc3NhZ2UiLCJ1c2VySWRGb3JMb2ciLCJsb2dUcmlnZ2VyQWZ0ZXJIb29rIiwiaW5wdXQiLCJsb2dMZXZlbCIsImNsZWFuSW5wdXQiLCJ0cnVuY2F0ZUxvZ01lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwibG9nVHJpZ2dlclN1Y2Nlc3NCZWZvcmVIb29rIiwicmVzdWx0IiwiY2xlYW5SZXN1bHQiLCJsb2dUcmlnZ2VyRXJyb3JCZWZvcmVIb29rIiwibWF5YmVSdW5BZnRlckZpbmRUcmlnZ2VyIiwiY2xhc3NOYW1lUXVlcnkiLCJvYmplY3RzSW5wdXQiLCJQcm9taXNlIiwibGVuZ3RoIiwib2JqIiwiUXVlcnkiLCJwYXJzZVF1ZXJ5SW5zdGFuY2UiLCJ3aGVyZSIsIndpdGhKU09OIiwicHJvY2Vzc2VkT2JqZWN0c0pTT04iLCJlcnJvckRhdGEiLCJvIiwibG9nTGV2ZWxzIiwidHJpZ2dlckJlZm9yZVN1Y2Nlc3MiLCJjdXJyZW50T2JqZWN0Iiwib3JpZ2luYWxDbGFzc05hbWUiLCJ0ZW1wT2JqZWN0V2l0aENsYXNzTmFtZSIsImZyb21KU09OIiwidGhlbiIsInJlc3BvbnNlRnJvbVRyaWdnZXIiLCJyZXN1bHRzIiwicmVzdWx0c0FzSlNPTiIsInRyaWdnZXJBZnRlciIsIm1heWJlUnVuUXVlcnlUcmlnZ2VyIiwicmVzdFdoZXJlIiwicmVzdE9wdGlvbnMiLCJqc29uIiwicGFyc2VRdWVyeSIsInJlcXVlc3RPYmplY3QiLCJxdWVyeVJlc3VsdCIsImpzb25RdWVyeSIsImxpbWl0Iiwic2tpcCIsImluY2x1ZGUiLCJleGNsdWRlS2V5cyIsImV4cGxhaW4iLCJvcmRlciIsImhpbnQiLCJjb21tZW50IiwicmVhZFByZWZlcmVuY2UiLCJpbmNsdWRlUmVhZFByZWZlcmVuY2UiLCJzdWJxdWVyeVJlYWRQcmVmZXJlbmNlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXZlcnkiLCJlcnIiLCJkZWZhdWx0T3B0cyIsInN0YWNrIiwidGhlVmFsaWRhdG9yIiwiYnVpbHRJblRyaWdnZXJWYWxpZGF0b3IiLCJjYXRjaCIsIlZBTElEQVRJT05fRVJST1IiLCJvcHRpb25zIiwidmFsaWRhdGVNYXN0ZXJLZXkiLCJyZXFVc2VyIiwiZXhpc3RlZCIsInJlcXVpcmVVc2VyIiwicmVxdWlyZUFueVVzZXJSb2xlcyIsInJlcXVpcmVBbGxVc2VyUm9sZXMiLCJyZXF1aXJlTWFzdGVyIiwicGFyYW1zIiwicmVxdWlyZWRQYXJhbSIsInZhbGlkYXRlT3B0aW9ucyIsIm9wdCIsIm9wdHMiLCJpbmNsdWRlcyIsImpvaW4iLCJnZXRUeXBlIiwiZm4iLCJtYXRjaCIsInRvU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJmaWVsZHMiLCJvcHRpb25Qcm9taXNlcyIsInNldCIsImNvbnN0YW50IiwicmV2ZXJ0IiwicmVxdWlyZWQiLCJvcHRpb25hbCIsInZhbFR5cGUiLCJhbGwiLCJ1c2VyUm9sZXMiLCJyZXF1aXJlQWxsUm9sZXMiLCJwcm9taXNlcyIsImdldFVzZXJSb2xlcyIsInJvbGVzIiwicmVzb2x2ZWRVc2VyUm9sZXMiLCJyZXNvbHZlZFJlcXVpcmVBbGwiLCJoYXNSb2xlIiwic29tZSIsInJlcXVpcmVkUm9sZSIsInVzZXJLZXlzIiwicmVxdWlyZVVzZXJLZXlzIiwibWF5YmVSdW5UcmlnZ2VyIiwic3RhcnRzV2l0aCIsInRyaWdnZXJCZWZvcmVFcnJvciIsInByb21pc2UiLCJpbmZsYXRlIiwiZGF0YSIsInJlc3RPYmplY3QiLCJjb3B5IiwicnVuTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVycyIsImdldFJlcXVlc3RGaWxlT2JqZWN0IiwiZmlsZU9iamVjdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJGaWxlQ2xhc3NOYW1lIiwiRmlsZSIsImZpbGVUcmlnZ2VyIiwiZm9yY2VEb3dubG9hZCIsImZpbGUiLCJmaWxlU2l6ZSIsIm1heWJlUnVuR2xvYmFsQ29uZmlnVHJpZ2dlciIsImNvbmZpZ09iamVjdCIsIm9yaWdpbmFsQ29uZmlnT2JqZWN0IiwiR2xvYmFsQ29uZmlnQ2xhc3NOYW1lIiwiQ29uZmlnIiwiY29uZmlnVHJpZ2dlciJdLCJzb3VyY2VzIjpbIi4uL3NyYy90cmlnZ2Vycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmlnZ2Vycy5qc1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5leHBvcnQgY29uc3QgVHlwZXMgPSB7XG4gIGJlZm9yZUxvZ2luOiAnYmVmb3JlTG9naW4nLFxuICBhZnRlckxvZ2luOiAnYWZ0ZXJMb2dpbicsXG4gIGFmdGVyTG9nb3V0OiAnYWZ0ZXJMb2dvdXQnLFxuICBiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdDogJ2JlZm9yZVBhc3N3b3JkUmVzZXRSZXF1ZXN0JyxcbiAgYmVmb3JlU2F2ZTogJ2JlZm9yZVNhdmUnLFxuICBhZnRlclNhdmU6ICdhZnRlclNhdmUnLFxuICBiZWZvcmVEZWxldGU6ICdiZWZvcmVEZWxldGUnLFxuICBhZnRlckRlbGV0ZTogJ2FmdGVyRGVsZXRlJyxcbiAgYmVmb3JlRmluZDogJ2JlZm9yZUZpbmQnLFxuICBhZnRlckZpbmQ6ICdhZnRlckZpbmQnLFxuICBiZWZvcmVDb25uZWN0OiAnYmVmb3JlQ29ubmVjdCcsXG4gIGJlZm9yZVN1YnNjcmliZTogJ2JlZm9yZVN1YnNjcmliZScsXG4gIGFmdGVyRXZlbnQ6ICdhZnRlckV2ZW50Jyxcbn07XG5cbmNvbnN0IENvbm5lY3RDbGFzc05hbWUgPSAnQENvbm5lY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwcm90b3R5cGUtZnJlZSBvYmplY3QgZm9yIHVzZSBhcyBhIGxvb2t1cCBzdG9yZS5cbiAqIFRoaXMgcHJldmVudHMgcHJvdG90eXBlIGNoYWluIHByb3BlcnRpZXMgKGUuZy4gYGNvbnN0cnVjdG9yYCwgYHRvU3RyaW5nYClcbiAqIGZyb20gYmVpbmcgcmVzb2x2ZWQgYXMgcmVnaXN0ZXJlZCBoYW5kbGVycyB3aGVuIHVzaW5nIGJyYWNrZXQgbm90YXRpb25cbiAqIGZvciBsb29rdXBzLiBBbHdheXMgdXNlIHRoaXMgaW5zdGVhZCBvZiBge31gIGZvciBoYW5kbGVyIHN0b3Jlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3RvcmUoKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG5jb25zdCBiYXNlU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IFZhbGlkYXRvcnMgPSBPYmplY3Qua2V5cyhUeXBlcykucmVkdWNlKGZ1bmN0aW9uIChiYXNlLCBrZXkpIHtcbiAgICBiYXNlW2tleV0gPSBjcmVhdGVTdG9yZSgpO1xuICAgIHJldHVybiBiYXNlO1xuICB9LCBjcmVhdGVTdG9yZSgpKTtcbiAgY29uc3QgRnVuY3Rpb25zID0gY3JlYXRlU3RvcmUoKTtcbiAgY29uc3QgSm9icyA9IGNyZWF0ZVN0b3JlKCk7XG4gIGNvbnN0IExpdmVRdWVyeSA9IFtdO1xuICBjb25zdCBUcmlnZ2VycyA9IE9iamVjdC5rZXlzKFR5cGVzKS5yZWR1Y2UoZnVuY3Rpb24gKGJhc2UsIGtleSkge1xuICAgIGJhc2Vba2V5XSA9IGNyZWF0ZVN0b3JlKCk7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH0sIGNyZWF0ZVN0b3JlKCkpO1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBGdW5jdGlvbnMsXG4gICAgSm9icyxcbiAgICBWYWxpZGF0b3JzLFxuICAgIFRyaWdnZXJzLFxuICAgIExpdmVRdWVyeSxcbiAgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHBhcnNlQ2xhc3MpIHtcbiAgaWYgKHBhcnNlQ2xhc3MgJiYgcGFyc2VDbGFzcy5jbGFzc05hbWUpIHtcbiAgICByZXR1cm4gcGFyc2VDbGFzcy5jbGFzc05hbWU7XG4gIH1cbiAgaWYgKHBhcnNlQ2xhc3MgJiYgcGFyc2VDbGFzcy5uYW1lKSB7XG4gICAgcmV0dXJuIHBhcnNlQ2xhc3MubmFtZS5yZXBsYWNlKCdQYXJzZScsICdAJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xhc3NOYW1lRm9yVHJpZ2dlcnMoY2xhc3NOYW1lLCB0eXBlKSB7XG4gIGlmICh0eXBlID09IFR5cGVzLmJlZm9yZVNhdmUgJiYgY2xhc3NOYW1lID09PSAnX1B1c2hTdGF0dXMnKSB7XG4gICAgLy8gX1B1c2hTdGF0dXMgdXNlcyB1bmRvY3VtZW50ZWQgbmVzdGVkIGtleSBpbmNyZW1lbnQgb3BzXG4gICAgLy8gYWxsb3dpbmcgYmVmb3JlU2F2ZSB3b3VsZCBtZXNzIHVwIHRoZSBvYmplY3RzIGJpZyB0aW1lXG4gICAgLy8gVE9ETzogQWxsb3cgcHJvcGVyIGRvY3VtZW50ZWQgd2F5IG9mIHVzaW5nIG5lc3RlZCBpbmNyZW1lbnQgb3BzXG4gICAgdGhyb3cgJ09ubHkgYWZ0ZXJTYXZlIGlzIGFsbG93ZWQgb24gX1B1c2hTdGF0dXMnO1xuICB9XG4gIGlmICgodHlwZSA9PT0gVHlwZXMuYmVmb3JlTG9naW4gfHwgdHlwZSA9PT0gVHlwZXMuYWZ0ZXJMb2dpbiB8fCB0eXBlID09PSBUeXBlcy5iZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCkgJiYgY2xhc3NOYW1lICE9PSAnX1VzZXInKSB7XG4gICAgLy8gVE9ETzogY2hlY2sgaWYgdXBzdHJlYW0gY29kZSB3aWxsIGhhbmRsZSBgRXJyb3JgIGluc3RhbmNlIHJhdGhlclxuICAgIC8vIHRoYW4gdGhpcyBhbnRpLXBhdHRlcm4gb2YgdGhyb3dpbmcgc3RyaW5nc1xuICAgIHRocm93ICdPbmx5IHRoZSBfVXNlciBjbGFzcyBpcyBhbGxvd2VkIGZvciB0aGUgYmVmb3JlTG9naW4sIGFmdGVyTG9naW4sIGFuZCBiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCB0cmlnZ2Vycyc7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFR5cGVzLmFmdGVyTG9nb3V0ICYmIGNsYXNzTmFtZSAhPT0gJ19TZXNzaW9uJykge1xuICAgIC8vIFRPRE86IGNoZWNrIGlmIHVwc3RyZWFtIGNvZGUgd2lsbCBoYW5kbGUgYEVycm9yYCBpbnN0YW5jZSByYXRoZXJcbiAgICAvLyB0aGFuIHRoaXMgYW50aS1wYXR0ZXJuIG9mIHRocm93aW5nIHN0cmluZ3NcbiAgICB0aHJvdyAnT25seSB0aGUgX1Nlc3Npb24gY2xhc3MgaXMgYWxsb3dlZCBmb3IgdGhlIGFmdGVyTG9nb3V0IHRyaWdnZXIuJztcbiAgfVxuICBpZiAoY2xhc3NOYW1lID09PSAnX1Nlc3Npb24nICYmIHR5cGUgIT09IFR5cGVzLmFmdGVyTG9nb3V0KSB7XG4gICAgLy8gVE9ETzogY2hlY2sgaWYgdXBzdHJlYW0gY29kZSB3aWxsIGhhbmRsZSBgRXJyb3JgIGluc3RhbmNlIHJhdGhlclxuICAgIC8vIHRoYW4gdGhpcyBhbnRpLXBhdHRlcm4gb2YgdGhyb3dpbmcgc3RyaW5nc1xuICAgIHRocm93ICdPbmx5IHRoZSBhZnRlckxvZ291dCB0cmlnZ2VyIGlzIGFsbG93ZWQgZm9yIHRoZSBfU2Vzc2lvbiBjbGFzcy4nO1xuICB9XG4gIHJldHVybiBjbGFzc05hbWU7XG59XG5cbmNvbnN0IF90cmlnZ2VyU3RvcmUgPSB7fTtcblxuY29uc3QgQ2F0ZWdvcnkgPSB7XG4gIEZ1bmN0aW9uczogJ0Z1bmN0aW9ucycsXG4gIFZhbGlkYXRvcnM6ICdWYWxpZGF0b3JzJyxcbiAgSm9iczogJ0pvYnMnLFxuICBUcmlnZ2VyczogJ1RyaWdnZXJzJyxcbn07XG5cbmZ1bmN0aW9uIGdldFN0b3JlKGNhdGVnb3J5LCBuYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIGNvbnN0IGludmFsaWROYW1lUmVnZXggPSAvWydcImBdLztcbiAgaWYgKGludmFsaWROYW1lUmVnZXgudGVzdChuYW1lKSkge1xuICAgIC8vIFByZXZlbnQgYSBtYWxpY2lvdXMgdXNlciBmcm9tIGluamVjdGluZyBwcm9wZXJ0aWVzIGludG8gdGhlIHN0b3JlXG4gICAgcmV0dXJuIGNyZWF0ZVN0b3JlKCk7XG4gIH1cblxuICBjb25zdCBwYXRoID0gbmFtZS5zcGxpdCgnLicpO1xuICBwYXRoLnNwbGljZSgtMSk7IC8vIHJlbW92ZSBsYXN0IGNvbXBvbmVudFxuICBhcHBsaWNhdGlvbklkID0gYXBwbGljYXRpb25JZCB8fCBQYXJzZS5hcHBsaWNhdGlvbklkO1xuICBfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdID0gX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXSB8fCBiYXNlU3RvcmUoKTtcbiAgbGV0IHN0b3JlID0gX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXVtjYXRlZ29yeV07XG4gIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHBhdGgpIHtcbiAgICBzdG9yZSA9IHN0b3JlW2NvbXBvbmVudF07XG4gICAgaWYgKCFzdG9yZSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdG9yZTtcbn1cblxuZnVuY3Rpb24gYWRkKGNhdGVnb3J5LCBuYW1lLCBoYW5kbGVyLCBhcHBsaWNhdGlvbklkKSB7XG4gIGNvbnN0IGxhc3RDb21wb25lbnQgPSBuYW1lLnNwbGl0KCcuJykuc3BsaWNlKC0xKTtcbiAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZShjYXRlZ29yeSwgbmFtZSwgYXBwbGljYXRpb25JZCk7XG4gIGlmIChzdG9yZVtsYXN0Q29tcG9uZW50XSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYFdhcm5pbmc6IER1cGxpY2F0ZSBjbG91ZCBmdW5jdGlvbnMgZXhpc3QgZm9yICR7bGFzdENvbXBvbmVudH0uIE9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCBhbmQgdGhlIG90aGVycyB3aWxsIGJlIGlnbm9yZWQuYFxuICAgICk7XG4gIH1cbiAgc3RvcmVbbGFzdENvbXBvbmVudF0gPSBoYW5kbGVyO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoY2F0ZWdvcnksIG5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgY29uc3QgbGFzdENvbXBvbmVudCA9IG5hbWUuc3BsaXQoJy4nKS5zcGxpY2UoLTEpO1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGNhdGVnb3J5LCBuYW1lLCBhcHBsaWNhdGlvbklkKTtcbiAgZGVsZXRlIHN0b3JlW2xhc3RDb21wb25lbnRdO1xufVxuXG5mdW5jdGlvbiBnZXQoY2F0ZWdvcnksIG5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgY29uc3QgbGFzdENvbXBvbmVudCA9IG5hbWUuc3BsaXQoJy4nKS5zcGxpY2UoLTEpO1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGNhdGVnb3J5LCBuYW1lLCBhcHBsaWNhdGlvbklkKTtcbiAgcmV0dXJuIHN0b3JlW2xhc3RDb21wb25lbnRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkRnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBoYW5kbGVyLCB2YWxpZGF0aW9uSGFuZGxlciwgYXBwbGljYXRpb25JZCkge1xuICBhZGQoQ2F0ZWdvcnkuRnVuY3Rpb25zLCBmdW5jdGlvbk5hbWUsIGhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xuICBhZGQoQ2F0ZWdvcnkuVmFsaWRhdG9ycywgZnVuY3Rpb25OYW1lLCB2YWxpZGF0aW9uSGFuZGxlciwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRKb2Ioam9iTmFtZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCkge1xuICBhZGQoQ2F0ZWdvcnkuSm9icywgam9iTmFtZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUcmlnZ2VyKHR5cGUsIGNsYXNzTmFtZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCwgdmFsaWRhdGlvbkhhbmRsZXIpIHtcbiAgdmFsaWRhdGVDbGFzc05hbWVGb3JUcmlnZ2VycyhjbGFzc05hbWUsIHR5cGUpO1xuICBhZGQoQ2F0ZWdvcnkuVHJpZ2dlcnMsIGAke3R5cGV9LiR7Y2xhc3NOYW1lfWAsIGhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xuICBhZGQoQ2F0ZWdvcnkuVmFsaWRhdG9ycywgYCR7dHlwZX0uJHtjbGFzc05hbWV9YCwgdmFsaWRhdGlvbkhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29ubmVjdFRyaWdnZXIodHlwZSwgaGFuZGxlciwgYXBwbGljYXRpb25JZCwgdmFsaWRhdGlvbkhhbmRsZXIpIHtcbiAgYWRkKENhdGVnb3J5LlRyaWdnZXJzLCBgJHt0eXBlfS4ke0Nvbm5lY3RDbGFzc05hbWV9YCwgaGFuZGxlciwgYXBwbGljYXRpb25JZCk7XG4gIGFkZChDYXRlZ29yeS5WYWxpZGF0b3JzLCBgJHt0eXBlfS4ke0Nvbm5lY3RDbGFzc05hbWV9YCwgdmFsaWRhdGlvbkhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkTGl2ZVF1ZXJ5RXZlbnRIYW5kbGVyKGhhbmRsZXIsIGFwcGxpY2F0aW9uSWQpIHtcbiAgYXBwbGljYXRpb25JZCA9IGFwcGxpY2F0aW9uSWQgfHwgUGFyc2UuYXBwbGljYXRpb25JZDtcbiAgX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXSA9IF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF0gfHwgYmFzZVN0b3JlKCk7XG4gIF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF0uTGl2ZVF1ZXJ5LnB1c2goaGFuZGxlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgcmVtb3ZlKENhdGVnb3J5LkZ1bmN0aW9ucywgZnVuY3Rpb25OYW1lLCBhcHBsaWNhdGlvbklkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyaWdnZXIodHlwZSwgY2xhc3NOYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIHJlbW92ZShDYXRlZ29yeS5UcmlnZ2VycywgYCR7dHlwZX0uJHtjbGFzc05hbWV9YCwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdW5yZWdpc3RlckFsbCgpIHtcbiAgT2JqZWN0LmtleXMoX3RyaWdnZXJTdG9yZSkuZm9yRWFjaChhcHBJZCA9PiBkZWxldGUgX3RyaWdnZXJTdG9yZVthcHBJZF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9KU09Od2l0aE9iamVjdHMob2JqZWN0LCBjbGFzc05hbWUpIHtcbiAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC50b0pTT04pIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3QgdG9KU09OID0gb2JqZWN0LnRvSlNPTigpO1xuICBjb25zdCBzdGF0ZUNvbnRyb2xsZXIgPSBQYXJzZS5Db3JlTWFuYWdlci5nZXRPYmplY3RTdGF0ZUNvbnRyb2xsZXIoKTtcbiAgY29uc3QgW3BlbmRpbmddID0gc3RhdGVDb250cm9sbGVyLmdldFBlbmRpbmdPcHMob2JqZWN0Ll9nZXRTdGF0ZUlkZW50aWZpZXIoKSk7XG4gIGZvciAoY29uc3Qga2V5IGluIHBlbmRpbmcpIHtcbiAgICBjb25zdCB2YWwgPSBvYmplY3QuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWwgfHwgIXZhbC5fdG9GdWxsSlNPTikge1xuICAgICAgdG9KU09OW2tleV0gPSB2YWw7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdG9KU09OW2tleV0gPSB2YWwuX3RvRnVsbEpTT04oKTtcbiAgfVxuICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBvYmplY3QncyBjbGFzc05hbWUgaWYgbm8gb3ZlcnJpZGUgY2xhc3NOYW1lIGlzIHByb3ZpZGVkXG4gIGlmIChjbGFzc05hbWUpIHtcbiAgICB0b0pTT04uY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICB9IGVsc2UgaWYgKG9iamVjdC5jbGFzc05hbWUgJiYgIXRvSlNPTi5jbGFzc05hbWUpIHtcbiAgICB0b0pTT04uY2xhc3NOYW1lID0gb2JqZWN0LmNsYXNzTmFtZTtcbiAgfVxuICByZXR1cm4gdG9KU09OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJpZ2dlcihjbGFzc05hbWUsIHRyaWdnZXJUeXBlLCBhcHBsaWNhdGlvbklkKSB7XG4gIGlmICghYXBwbGljYXRpb25JZCkge1xuICAgIHRocm93ICdNaXNzaW5nIEFwcGxpY2F0aW9uSUQnO1xuICB9XG4gIHJldHVybiBnZXQoQ2F0ZWdvcnkuVHJpZ2dlcnMsIGAke3RyaWdnZXJUeXBlfS4ke2NsYXNzTmFtZX1gLCBhcHBsaWNhdGlvbklkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRyaWdnZXIodHJpZ2dlciwgbmFtZSwgcmVxdWVzdCwgYXV0aCkge1xuICBpZiAoIXRyaWdnZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgbWF5YmVSdW5WYWxpZGF0b3IocmVxdWVzdCwgbmFtZSwgYXV0aCk7XG4gIGlmIChyZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBhd2FpdCB0cmlnZ2VyKHJlcXVlc3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckV4aXN0cyhjbGFzc05hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFRyaWdnZXIoY2xhc3NOYW1lLCB0eXBlLCBhcHBsaWNhdGlvbklkKSAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbihmdW5jdGlvbk5hbWUsIGFwcGxpY2F0aW9uSWQpIHtcbiAgcmV0dXJuIGdldChDYXRlZ29yeS5GdW5jdGlvbnMsIGZ1bmN0aW9uTmFtZSwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVzKGFwcGxpY2F0aW9uSWQpIHtcbiAgY29uc3Qgc3RvcmUgPVxuICAgIChfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdICYmIF90cmlnZ2VyU3RvcmVbYXBwbGljYXRpb25JZF1bQ2F0ZWdvcnkuRnVuY3Rpb25zXSkgfHwge307XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBbXTtcbiAgY29uc3QgZXh0cmFjdEZ1bmN0aW9uTmFtZXMgPSAobmFtZXNwYWNlLCBzdG9yZSkgPT4ge1xuICAgIE9iamVjdC5rZXlzKHN0b3JlKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBzdG9yZVtuYW1lXTtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgbmFtZSA9IGAke25hbWVzcGFjZX0uJHtuYW1lfWA7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZXMucHVzaChuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhY3RGdW5jdGlvbk5hbWVzKG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgZXh0cmFjdEZ1bmN0aW9uTmFtZXMobnVsbCwgc3RvcmUpO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpvYihqb2JOYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIHJldHVybiBnZXQoQ2F0ZWdvcnkuSm9icywgam9iTmFtZSwgYXBwbGljYXRpb25JZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2JzKGFwcGxpY2F0aW9uSWQpIHtcbiAgdmFyIG1hbmFnZXIgPSBfdHJpZ2dlclN0b3JlW2FwcGxpY2F0aW9uSWRdO1xuICBpZiAobWFuYWdlciAmJiBtYW5hZ2VyLkpvYnMpIHtcbiAgICByZXR1cm4gbWFuYWdlci5Kb2JzO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3IoZnVuY3Rpb25OYW1lLCBhcHBsaWNhdGlvbklkKSB7XG4gIHJldHVybiBnZXQoQ2F0ZWdvcnkuVmFsaWRhdG9ycywgZnVuY3Rpb25OYW1lLCBhcHBsaWNhdGlvbklkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVlc3RPYmplY3QoXG4gIHRyaWdnZXJUeXBlLFxuICBhdXRoLFxuICBwYXJzZU9iamVjdCxcbiAgb3JpZ2luYWxQYXJzZU9iamVjdCxcbiAgY29uZmlnLFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJUeXBlLFxuICAgIG9iamVjdDogcGFyc2VPYmplY3QsXG4gICAgbWFzdGVyOiBmYWxzZSxcbiAgICBpc1JlYWRPbmx5OiBmYWxzZSxcbiAgICBsb2c6IGNvbmZpZy5sb2dnZXJDb250cm9sbGVyLFxuICAgIGhlYWRlcnM6IGNvbmZpZy5oZWFkZXJzLFxuICAgIGlwOiBjb25maWcuaXAsXG4gICAgY29uZmlnLFxuICB9O1xuXG4gIGlmIChpc0dldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdC5pc0dldCA9ICEhaXNHZXQ7XG4gIH1cblxuICBpZiAob3JpZ2luYWxQYXJzZU9iamVjdCkge1xuICAgIHJlcXVlc3Qub3JpZ2luYWwgPSBvcmlnaW5hbFBhcnNlT2JqZWN0O1xuICB9XG4gIGlmIChcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlU2F2ZSB8fFxuICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlclNhdmUgfHxcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlRGVsZXRlIHx8XG4gICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyRGVsZXRlIHx8XG4gICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmJlZm9yZUxvZ2luIHx8XG4gICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyTG9naW4gfHxcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QgfHxcbiAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYWZ0ZXJGaW5kXG4gICkge1xuICAgIC8vIFNldCBhIGNvcHkgb2YgdGhlIGNvbnRleHQgb24gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgIHJlcXVlc3QuY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQpO1xuICB9XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbiAgaWYgKGF1dGguaXNNYXN0ZXIpIHtcbiAgICByZXF1ZXN0WydtYXN0ZXInXSA9IHRydWU7XG4gIH1cbiAgaWYgKGF1dGguaXNSZWFkT25seSkge1xuICAgIHJlcXVlc3RbJ2lzUmVhZE9ubHknXSA9IHRydWU7XG4gIH1cbiAgaWYgKGF1dGgudXNlcikge1xuICAgIHJlcXVlc3RbJ3VzZXInXSA9IGF1dGgudXNlcjtcbiAgfVxuICBpZiAoYXV0aC5pbnN0YWxsYXRpb25JZCkge1xuICAgIHJlcXVlc3RbJ2luc3RhbGxhdGlvbklkJ10gPSBhdXRoLmluc3RhbGxhdGlvbklkO1xuICB9XG4gIHJldHVybiByZXF1ZXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdFF1ZXJ5T2JqZWN0KHRyaWdnZXJUeXBlLCBhdXRoLCBxdWVyeSwgY291bnQsIGNvbmZpZywgY29udGV4dCwgaXNHZXQpIHtcbiAgaXNHZXQgPSAhIWlzR2V0O1xuXG4gIHZhciByZXF1ZXN0ID0ge1xuICAgIHRyaWdnZXJOYW1lOiB0cmlnZ2VyVHlwZSxcbiAgICBxdWVyeSxcbiAgICBtYXN0ZXI6IGZhbHNlLFxuICAgIGlzUmVhZE9ubHk6IGZhbHNlLFxuICAgIGNvdW50LFxuICAgIGxvZzogY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIsXG4gICAgaXNHZXQsXG4gICAgaGVhZGVyczogY29uZmlnLmhlYWRlcnMsXG4gICAgaXA6IGNvbmZpZy5pcCxcbiAgICBjb250ZXh0OiBjb250ZXh0IHx8IHt9LFxuICAgIGNvbmZpZyxcbiAgfTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBpZiAoYXV0aC5pc01hc3Rlcikge1xuICAgIHJlcXVlc3RbJ21hc3RlciddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgcmVxdWVzdFsnaXNSZWFkT25seSddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC51c2VyKSB7XG4gICAgcmVxdWVzdFsndXNlciddID0gYXV0aC51c2VyO1xuICB9XG4gIGlmIChhdXRoLmluc3RhbGxhdGlvbklkKSB7XG4gICAgcmVxdWVzdFsnaW5zdGFsbGF0aW9uSWQnXSA9IGF1dGguaW5zdGFsbGF0aW9uSWQ7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbi8vIENyZWF0ZXMgdGhlIHJlc3BvbnNlIG9iamVjdCwgYW5kIHVzZXMgdGhlIHJlcXVlc3Qgb2JqZWN0IHRvIHBhc3MgZGF0YVxuLy8gVGhlIEFQSSB3aWxsIGNhbGwgdGhpcyB3aXRoIFJFU1QgQVBJIGZvcm1hdHRlZCBvYmplY3RzLCB0aGlzIHdpbGxcbi8vIHRyYW5zZm9ybSB0aGVtIHRvIFBhcnNlLk9iamVjdCBpbnN0YW5jZXMgZXhwZWN0ZWQgYnkgQ2xvdWQgQ29kZS5cbi8vIEFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIG9iamVjdCBpbiBhIGJlZm9yZVNhdmUgd2lsbCBiZSBpbmNsdWRlZC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNwb25zZU9iamVjdChyZXF1ZXN0LCByZXNvbHZlLCByZWplY3QpIHtcbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmIChyZXF1ZXN0LnRyaWdnZXJOYW1lID09PSBUeXBlcy5hZnRlckZpbmQpIHtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdC5vYmplY3RzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UubWFwKG9iamVjdCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRvSlNPTndpdGhPYmplY3RzKG9iamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICAvLyBVc2UgdGhlIEpTT04gcmVzcG9uc2VcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UgJiZcbiAgICAgICAgdHlwZW9mIHJlc3BvbnNlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhcmVxdWVzdC5vYmplY3QuZXF1YWxzKHJlc3BvbnNlKSAmJlxuICAgICAgICByZXF1ZXN0LnRyaWdnZXJOYW1lID09PSBUeXBlcy5iZWZvcmVTYXZlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcgJiYgcmVxdWVzdC50cmlnZ2VyTmFtZSA9PT0gVHlwZXMuYWZ0ZXJTYXZlKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1ZXN0LnRyaWdnZXJOYW1lID09PSBUeXBlcy5hZnRlclNhdmUpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlID0ge307XG4gICAgICBpZiAocmVxdWVzdC50cmlnZ2VyTmFtZSA9PT0gVHlwZXMuYmVmb3JlU2F2ZSkge1xuICAgICAgICByZXNwb25zZVsnb2JqZWN0J10gPSByZXF1ZXN0Lm9iamVjdC5fZ2V0U2F2ZUpTT04oKTtcbiAgICAgICAgcmVzcG9uc2VbJ29iamVjdCddWydvYmplY3RJZCddID0gcmVxdWVzdC5vYmplY3QuaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBjb25zdCBlID0gcmVzb2x2ZUVycm9yKGVycm9yLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdTY3JpcHQgZmFpbGVkLiBVbmtub3duIGVycm9yLicsXG4gICAgICB9KTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VySWRGb3JMb2coYXV0aCkge1xuICByZXR1cm4gYXV0aCAmJiBhdXRoLnVzZXIgPyBhdXRoLnVzZXIuaWQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxvZ1RyaWdnZXJBZnRlckhvb2sodHJpZ2dlclR5cGUsIGNsYXNzTmFtZSwgaW5wdXQsIGF1dGgsIGxvZ0xldmVsKSB7XG4gIGlmIChsb2dMZXZlbCA9PT0gJ3NpbGVudCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xlYW5JbnB1dCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKTtcbiAgbG9nZ2VyW2xvZ0xldmVsXShcbiAgICBgJHt0cmlnZ2VyVHlwZX0gdHJpZ2dlcmVkIGZvciAke2NsYXNzTmFtZX0gZm9yIHVzZXIgJHt1c2VySWRGb3JMb2coXG4gICAgICBhdXRoXG4gICAgKX06XFxuICBJbnB1dDogJHtjbGVhbklucHV0fWAsXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICB1c2VyOiB1c2VySWRGb3JMb2coYXV0aCksXG4gICAgfVxuICApO1xufVxuXG5mdW5jdGlvbiBsb2dUcmlnZ2VyU3VjY2Vzc0JlZm9yZUhvb2sodHJpZ2dlclR5cGUsIGNsYXNzTmFtZSwgaW5wdXQsIHJlc3VsdCwgYXV0aCwgbG9nTGV2ZWwpIHtcbiAgaWYgKGxvZ0xldmVsID09PSAnc2lsZW50Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjbGVhbklucHV0ID0gbG9nZ2VyLnRydW5jYXRlTG9nTWVzc2FnZShKU09OLnN0cmluZ2lmeShpbnB1dCkpO1xuICBjb25zdCBjbGVhblJlc3VsdCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gIGxvZ2dlcltsb2dMZXZlbF0oXG4gICAgYCR7dHJpZ2dlclR5cGV9IHRyaWdnZXJlZCBmb3IgJHtjbGFzc05hbWV9IGZvciB1c2VyICR7dXNlcklkRm9yTG9nKFxuICAgICAgYXV0aFxuICAgICl9OlxcbiAgSW5wdXQ6ICR7Y2xlYW5JbnB1dH1cXG4gIFJlc3VsdDogJHtjbGVhblJlc3VsdH1gLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgdXNlcjogdXNlcklkRm9yTG9nKGF1dGgpLFxuICAgIH1cbiAgKTtcbn1cblxuZnVuY3Rpb24gbG9nVHJpZ2dlckVycm9yQmVmb3JlSG9vayh0cmlnZ2VyVHlwZSwgY2xhc3NOYW1lLCBpbnB1dCwgYXV0aCwgZXJyb3IsIGxvZ0xldmVsKSB7XG4gIGlmIChsb2dMZXZlbCA9PT0gJ3NpbGVudCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xlYW5JbnB1dCA9IGxvZ2dlci50cnVuY2F0ZUxvZ01lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKTtcbiAgbG9nZ2VyW2xvZ0xldmVsXShcbiAgICBgJHt0cmlnZ2VyVHlwZX0gZmFpbGVkIGZvciAke2NsYXNzTmFtZX0gZm9yIHVzZXIgJHt1c2VySWRGb3JMb2coXG4gICAgICBhdXRoXG4gICAgKX06XFxuICBJbnB1dDogJHtjbGVhbklucHV0fVxcbiAgRXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWAsXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICBlcnJvcixcbiAgICAgIHVzZXI6IHVzZXJJZEZvckxvZyhhdXRoKSxcbiAgICB9XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJ1bkFmdGVyRmluZFRyaWdnZXIoXG4gIHRyaWdnZXJUeXBlLFxuICBhdXRoLFxuICBjbGFzc05hbWVRdWVyeSxcbiAgb2JqZWN0c0lucHV0LFxuICBjb25maWcsXG4gIHF1ZXJ5LFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdHJpZ2dlciA9IGdldFRyaWdnZXIoY2xhc3NOYW1lUXVlcnksIHRyaWdnZXJUeXBlLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG5cbiAgICBpZiAoIXRyaWdnZXIpIHtcbiAgICAgIGlmIChvYmplY3RzSW5wdXQgJiYgb2JqZWN0c0lucHV0Lmxlbmd0aCA+IDAgJiYgb2JqZWN0c0lucHV0WzBdIGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKG9iamVjdHNJbnB1dC5tYXAob2JqID0+IHRvSlNPTndpdGhPYmplY3RzKG9iaikpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG9iamVjdHNJbnB1dCB8fCBbXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGdldFJlcXVlc3RPYmplY3QodHJpZ2dlclR5cGUsIGF1dGgsIG51bGwsIG51bGwsIGNvbmZpZywgY29udGV4dCwgaXNHZXQpO1xuICAgIC8vIENvbnZlcnQgcXVlcnkgcGFyYW1ldGVyIHRvIFBhcnNlLlF1ZXJ5IGluc3RhbmNlXG4gICAgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgUGFyc2UuUXVlcnkpIHtcbiAgICAgIHJlcXVlc3QucXVlcnkgPSBxdWVyeTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgcXVlcnkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlUXVlcnlJbnN0YW5jZSA9IG5ldyBQYXJzZS5RdWVyeShjbGFzc05hbWVRdWVyeSk7XG4gICAgICBpZiAocXVlcnkud2hlcmUpIHtcbiAgICAgICAgcGFyc2VRdWVyeUluc3RhbmNlLndpdGhKU09OKHF1ZXJ5KTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QucXVlcnkgPSBwYXJzZVF1ZXJ5SW5zdGFuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QucXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lUXVlcnkpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IGdldFJlc3BvbnNlT2JqZWN0KFxuICAgICAgcmVxdWVzdCxcbiAgICAgIHByb2Nlc3NlZE9iamVjdHNKU09OID0+IHtcbiAgICAgICAgcmVzb2x2ZShwcm9jZXNzZWRPYmplY3RzSlNPTik7XG4gICAgICB9LFxuICAgICAgZXJyb3JEYXRhID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yRGF0YSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBsb2dUcmlnZ2VyU3VjY2Vzc0JlZm9yZUhvb2soXG4gICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgIGNsYXNzTmFtZVF1ZXJ5LFxuICAgICAgJ0FmdGVyRmluZCBJbnB1dCAoUHJlLVRyYW5zZm9ybSknLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIG9iamVjdHNJbnB1dC5tYXAobyA9PiAobyBpbnN0YW5jZW9mIFBhcnNlLk9iamVjdCA/IG8uaWQgKyAnOicgKyBvLmNsYXNzTmFtZSA6IG8pKVxuICAgICAgKSxcbiAgICAgIGF1dGgsXG4gICAgICBjb25maWcubG9nTGV2ZWxzLnRyaWdnZXJCZWZvcmVTdWNjZXNzXG4gICAgKTtcblxuICAgIC8vIENvbnZlcnQgcGxhaW4gb2JqZWN0cyB0byBQYXJzZS5PYmplY3QgaW5zdGFuY2VzIGZvciB0cmlnZ2VyXG4gICAgcmVxdWVzdC5vYmplY3RzID0gb2JqZWN0c0lucHV0Lm1hcChjdXJyZW50T2JqZWN0ID0+IHtcbiAgICAgIGlmIChjdXJyZW50T2JqZWN0IGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50T2JqZWN0O1xuICAgICAgfVxuICAgICAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGNsYXNzTmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSB1c2UgdGhlIHF1ZXJ5IGNsYXNzTmFtZVxuICAgICAgY29uc3Qgb3JpZ2luYWxDbGFzc05hbWUgPSBjdXJyZW50T2JqZWN0LmNsYXNzTmFtZSB8fCBjbGFzc05hbWVRdWVyeTtcbiAgICAgIGNvbnN0IHRlbXBPYmplY3RXaXRoQ2xhc3NOYW1lID0geyAuLi5jdXJyZW50T2JqZWN0LCBjbGFzc05hbWU6IG9yaWdpbmFsQ2xhc3NOYW1lIH07XG4gICAgICByZXR1cm4gUGFyc2UuT2JqZWN0LmZyb21KU09OKHRlbXBPYmplY3RXaXRoQ2xhc3NOYW1lKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG1heWJlUnVuVmFsaWRhdG9yKHJlcXVlc3QsIGAke3RyaWdnZXJUeXBlfS4ke2NsYXNzTmFtZVF1ZXJ5fWAsIGF1dGgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3Quc2tpcFdpdGhNYXN0ZXJLZXkpIHtcbiAgICAgICAgICByZXR1cm4gcmVxdWVzdC5vYmplY3RzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRnJvbVRyaWdnZXIgPSB0cmlnZ2VyKHJlcXVlc3QpO1xuICAgICAgICBpZiAocmVzcG9uc2VGcm9tVHJpZ2dlciAmJiB0eXBlb2YgcmVzcG9uc2VGcm9tVHJpZ2dlci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlRnJvbVRyaWdnZXIudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZUZyb21UcmlnZ2VyO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHN1Y2Nlc3MsIGVycm9yKTtcbiAgfSkudGhlbihyZXN1bHRzQXNKU09OID0+IHtcbiAgICBsb2dUcmlnZ2VyQWZ0ZXJIb29rKFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICBjbGFzc05hbWVRdWVyeSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHJlc3VsdHNBc0pTT04pLFxuICAgICAgYXV0aCxcbiAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckFmdGVyXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0c0FzSlNPTjtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJ1blF1ZXJ5VHJpZ2dlcihcbiAgdHJpZ2dlclR5cGUsXG4gIGNsYXNzTmFtZSxcbiAgcmVzdFdoZXJlLFxuICByZXN0T3B0aW9ucyxcbiAgY29uZmlnLFxuICBhdXRoLFxuICBjb250ZXh0LFxuICBpc0dldFxuKSB7XG4gIGNvbnN0IHRyaWdnZXIgPSBnZXRUcmlnZ2VyKGNsYXNzTmFtZSwgdHJpZ2dlclR5cGUsIGNvbmZpZy5hcHBsaWNhdGlvbklkKTtcbiAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICByZXN0V2hlcmUsXG4gICAgICByZXN0T3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBqc29uID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpO1xuICBqc29uLndoZXJlID0gcmVzdFdoZXJlO1xuXG4gIGNvbnN0IHBhcnNlUXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoY2xhc3NOYW1lKTtcbiAgcGFyc2VRdWVyeS53aXRoSlNPTihqc29uKTtcblxuICBsZXQgY291bnQgPSBmYWxzZTtcbiAgaWYgKHJlc3RPcHRpb25zKSB7XG4gICAgY291bnQgPSAhIXJlc3RPcHRpb25zLmNvdW50O1xuICB9XG4gIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBnZXRSZXF1ZXN0UXVlcnlPYmplY3QoXG4gICAgdHJpZ2dlclR5cGUsXG4gICAgYXV0aCxcbiAgICBwYXJzZVF1ZXJ5LFxuICAgIGNvdW50LFxuICAgIGNvbmZpZyxcbiAgICBjb250ZXh0LFxuICAgIGlzR2V0XG4gICk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBtYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0T2JqZWN0LCBgJHt0cmlnZ2VyVHlwZX0uJHtjbGFzc05hbWV9YCwgYXV0aCk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdE9iamVjdC5za2lwV2l0aE1hc3RlcktleSkge1xuICAgICAgICByZXR1cm4gcmVxdWVzdE9iamVjdC5xdWVyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmlnZ2VyKHJlcXVlc3RPYmplY3QpO1xuICAgIH0pXG4gICAgLnRoZW4oXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBsZXQgcXVlcnlSZXN1bHQgPSBwYXJzZVF1ZXJ5O1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLlF1ZXJ5KSB7XG4gICAgICAgICAgcXVlcnlSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvblF1ZXJ5ID0gcXVlcnlSZXN1bHQudG9KU09OKCk7XG4gICAgICAgIGlmIChqc29uUXVlcnkud2hlcmUpIHtcbiAgICAgICAgICByZXN0V2hlcmUgPSBqc29uUXVlcnkud2hlcmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5saW1pdCkge1xuICAgICAgICAgIHJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgcmVzdE9wdGlvbnMubGltaXQgPSBqc29uUXVlcnkubGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5za2lwKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5za2lwID0ganNvblF1ZXJ5LnNraXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5pbmNsdWRlKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5pbmNsdWRlID0ganNvblF1ZXJ5LmluY2x1ZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5leGNsdWRlS2V5cykge1xuICAgICAgICAgIHJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgcmVzdE9wdGlvbnMuZXhjbHVkZUtleXMgPSBqc29uUXVlcnkuZXhjbHVkZUtleXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5leHBsYWluKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5leHBsYWluID0ganNvblF1ZXJ5LmV4cGxhaW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5rZXlzKSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5rZXlzID0ganNvblF1ZXJ5LmtleXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5vcmRlcikge1xuICAgICAgICAgIHJlc3RPcHRpb25zID0gcmVzdE9wdGlvbnMgfHwge307XG4gICAgICAgICAgcmVzdE9wdGlvbnMub3JkZXIgPSBqc29uUXVlcnkub3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5oaW50KSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5oaW50ID0ganNvblF1ZXJ5LmhpbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb25RdWVyeS5jb21tZW50KSB7XG4gICAgICAgICAgcmVzdE9wdGlvbnMgPSByZXN0T3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICByZXN0T3B0aW9ucy5jb21tZW50ID0ganNvblF1ZXJ5LmNvbW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3RPYmplY3QucmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXN0T3B0aW9ucyA9IHJlc3RPcHRpb25zIHx8IHt9O1xuICAgICAgICAgIHJlc3RPcHRpb25zLnJlYWRQcmVmZXJlbmNlID0gcmVxdWVzdE9iamVjdC5yZWFkUHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdE9iamVjdC5pbmNsdWRlUmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXN0T3B0aW9ucyA9IHJlc3RPcHRpb25zIHx8IHt9O1xuICAgICAgICAgIHJlc3RPcHRpb25zLmluY2x1ZGVSZWFkUHJlZmVyZW5jZSA9IHJlcXVlc3RPYmplY3QuaW5jbHVkZVJlYWRQcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXF1ZXN0T2JqZWN0LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UpIHtcbiAgICAgICAgICByZXN0T3B0aW9ucyA9IHJlc3RPcHRpb25zIHx8IHt9O1xuICAgICAgICAgIHJlc3RPcHRpb25zLnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2UgPSByZXF1ZXN0T2JqZWN0LnN1YnF1ZXJ5UmVhZFByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG9iamVjdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5PYmplY3QpIHtcbiAgICAgICAgICBvYmplY3RzID0gW3Jlc3VsdF07XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQpICYmXG4gICAgICAgICAgKCFyZXN1bHQubGVuZ3RoIHx8IHJlc3VsdC5ldmVyeShvYmogPT4gb2JqIGluc3RhbmNlb2YgUGFyc2UuT2JqZWN0KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqZWN0cyA9IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc3RXaGVyZSxcbiAgICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgICAgICBvYmplY3RzLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGVyciwge1xuICAgICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgICAgbWVzc2FnZTogJ1NjcmlwdCBmYWlsZWQuIFVua25vd24gZXJyb3IuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXJyb3IobWVzc2FnZSwgZGVmYXVsdE9wdHMpIHtcbiAgaWYgKCFkZWZhdWx0T3B0cykge1xuICAgIGRlZmF1bHRPcHRzID0ge307XG4gIH1cbiAgaWYgKCFtZXNzYWdlKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIGRlZmF1bHRPcHRzLmNvZGUgfHwgUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgIGRlZmF1bHRPcHRzLm1lc3NhZ2UgfHwgJ1NjcmlwdCBmYWlsZWQuJ1xuICAgICk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgY29uc3QgY29kZSA9IGRlZmF1bHRPcHRzLmNvZGUgfHwgUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRDtcbiAgLy8gSWYgaXQncyBhbiBlcnJvciwgbWFyayBpdCBhcyBhIHNjcmlwdCBmYWlsZWRcbiAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoY29kZSwgbWVzc2FnZSk7XG4gIH1cbiAgY29uc3QgZXJyb3IgPSBuZXcgUGFyc2UuRXJyb3IoY29kZSwgbWVzc2FnZS5tZXNzYWdlIHx8IG1lc3NhZ2UpO1xuICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgZXJyb3Iuc3RhY2sgPSBtZXNzYWdlLnN0YWNrO1xuICB9XG4gIHJldHVybiBlcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBmdW5jdGlvbk5hbWUsIGF1dGgpIHtcbiAgY29uc3QgdGhlVmFsaWRhdG9yID0gZ2V0VmFsaWRhdG9yKGZ1bmN0aW9uTmFtZSwgUGFyc2UuYXBwbGljYXRpb25JZCk7XG4gIGlmICghdGhlVmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0eXBlb2YgdGhlVmFsaWRhdG9yID09PSAnb2JqZWN0JyAmJiB0aGVWYWxpZGF0b3Iuc2tpcFdpdGhNYXN0ZXJLZXkgJiYgcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICByZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5ID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoZVZhbGlkYXRvciA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IGJ1aWx0SW5UcmlnZ2VyVmFsaWRhdG9yKHRoZVZhbGlkYXRvciwgcmVxdWVzdCwgYXV0aClcbiAgICAgICAgICA6IHRoZVZhbGlkYXRvcihyZXF1ZXN0KTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gcmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5WQUxJREFUSU9OX0VSUk9SLFxuICAgICAgICAgIG1lc3NhZ2U6ICdWYWxpZGF0aW9uIGZhaWxlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGJ1aWx0SW5UcmlnZ2VyVmFsaWRhdG9yKG9wdGlvbnMsIHJlcXVlc3QsIGF1dGgpIHtcbiAgaWYgKHJlcXVlc3QubWFzdGVyICYmICFvcHRpb25zLnZhbGlkYXRlTWFzdGVyS2V5KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCByZXFVc2VyID0gcmVxdWVzdC51c2VyO1xuICBpZiAoXG4gICAgIXJlcVVzZXIgJiZcbiAgICByZXF1ZXN0Lm9iamVjdCAmJlxuICAgIHJlcXVlc3Qub2JqZWN0LmNsYXNzTmFtZSA9PT0gJ19Vc2VyJyAmJlxuICAgICFyZXF1ZXN0Lm9iamVjdC5leGlzdGVkKClcbiAgKSB7XG4gICAgcmVxVXNlciA9IHJlcXVlc3Qub2JqZWN0O1xuICB9XG4gIGlmIChcbiAgICAob3B0aW9ucy5yZXF1aXJlVXNlciB8fCBvcHRpb25zLnJlcXVpcmVBbnlVc2VyUm9sZXMgfHwgb3B0aW9ucy5yZXF1aXJlQWxsVXNlclJvbGVzKSAmJlxuICAgICFyZXFVc2VyXG4gICkge1xuICAgIHRocm93ICdWYWxpZGF0aW9uIGZhaWxlZC4gUGxlYXNlIGxvZ2luIHRvIGNvbnRpbnVlLic7XG4gIH1cbiAgaWYgKG9wdGlvbnMucmVxdWlyZU1hc3RlciAmJiAhcmVxdWVzdC5tYXN0ZXIpIHtcbiAgICB0aHJvdyAnVmFsaWRhdGlvbiBmYWlsZWQuIE1hc3RlciBrZXkgaXMgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhpcyByZXF1ZXN0Lic7XG4gIH1cbiAgbGV0IHBhcmFtcyA9IHJlcXVlc3QucGFyYW1zIHx8IHt9O1xuICBpZiAocmVxdWVzdC5vYmplY3QpIHtcbiAgICBwYXJhbXMgPSByZXF1ZXN0Lm9iamVjdC50b0pTT04oKTtcbiAgfVxuICBjb25zdCByZXF1aXJlZFBhcmFtID0ga2V5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1trZXldO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBgVmFsaWRhdGlvbiBmYWlsZWQuIFBsZWFzZSBzcGVjaWZ5IGRhdGEgZm9yICR7a2V5fS5gO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB2YWxpZGF0ZU9wdGlvbnMgPSBhc3luYyAob3B0LCBrZXksIHZhbCkgPT4ge1xuICAgIGxldCBvcHRzID0gb3B0Lm9wdGlvbnM7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcHRzKHZhbCk7XG4gICAgICAgIGlmICghcmVzdWx0ICYmIHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgb3B0LmVycm9yIHx8IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCB2YWx1ZSBmb3IgJHtrZXl9LmA7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFlKSB7XG4gICAgICAgICAgdGhyb3cgb3B0LmVycm9yIHx8IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCB2YWx1ZSBmb3IgJHtrZXl9LmA7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBvcHQuZXJyb3IgfHwgZS5tZXNzYWdlIHx8IGU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzKSkge1xuICAgICAgb3B0cyA9IFtvcHQub3B0aW9uc107XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzLmluY2x1ZGVzKHZhbCkpIHtcbiAgICAgIHRocm93IChcbiAgICAgICAgb3B0LmVycm9yIHx8IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCBvcHRpb24gZm9yICR7a2V5fS4gRXhwZWN0ZWQ6ICR7b3B0cy5qb2luKCcsICcpfWBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFR5cGUgPSBmbiA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICAgIHJldHVybiAobWF0Y2ggPyBtYXRjaFsxXSA6ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9O1xuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmZpZWxkcykpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBvcHRpb25zLmZpZWxkcykge1xuICAgICAgcmVxdWlyZWRQYXJhbShrZXkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvcHRpb25Qcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBjb25zdCBvcHQgPSBvcHRpb25zLmZpZWxkc1trZXldO1xuICAgICAgbGV0IHZhbCA9IHBhcmFtc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlcXVpcmVkUGFyYW0ob3B0KTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAob3B0LmRlZmF1bHQgIT0gbnVsbCAmJiB2YWwgPT0gbnVsbCkge1xuICAgICAgICAgIHZhbCA9IG9wdC5kZWZhdWx0O1xuICAgICAgICAgIHBhcmFtc1trZXldID0gdmFsO1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm9iamVjdCkge1xuICAgICAgICAgICAgcmVxdWVzdC5vYmplY3Quc2V0KGtleSwgdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC5jb25zdGFudCAmJiByZXF1ZXN0Lm9iamVjdCkge1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXF1ZXN0Lm9iamVjdC5yZXZlcnQoa2V5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdC5kZWZhdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qub2JqZWN0LnNldChrZXksIG9wdC5kZWZhdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdC5yZXF1aXJlZCkge1xuICAgICAgICAgIHJlcXVpcmVkUGFyYW0oa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25hbCA9ICFvcHQucmVxdWlyZWQgJiYgdmFsID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghb3B0aW9uYWwpIHtcbiAgICAgICAgICBpZiAob3B0LnR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKG9wdC50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbFR5cGUgPSBBcnJheS5pc0FycmF5KHZhbCkgPyAnYXJyYXknIDogdHlwZW9mIHZhbDtcbiAgICAgICAgICAgIGlmICh2YWxUeXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICAgIHRocm93IGBWYWxpZGF0aW9uIGZhaWxlZC4gSW52YWxpZCB0eXBlIGZvciAke2tleX0uIEV4cGVjdGVkOiAke3R5cGV9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdC5vcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25Qcm9taXNlcy5wdXNoKHZhbGlkYXRlT3B0aW9ucyhvcHQsIGtleSwgdmFsKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IFByb21pc2UuYWxsKG9wdGlvblByb21pc2VzKTtcbiAgfVxuICBsZXQgdXNlclJvbGVzID0gb3B0aW9ucy5yZXF1aXJlQW55VXNlclJvbGVzO1xuICBsZXQgcmVxdWlyZUFsbFJvbGVzID0gb3B0aW9ucy5yZXF1aXJlQWxsVXNlclJvbGVzO1xuICBjb25zdCBwcm9taXNlcyA9IFtQcm9taXNlLnJlc29sdmUoKSwgUHJvbWlzZS5yZXNvbHZlKCksIFByb21pc2UucmVzb2x2ZSgpXTtcbiAgaWYgKHVzZXJSb2xlcyB8fCByZXF1aXJlQWxsUm9sZXMpIHtcbiAgICBwcm9taXNlc1swXSA9IGF1dGguZ2V0VXNlclJvbGVzKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB1c2VyUm9sZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm9taXNlc1sxXSA9IHVzZXJSb2xlcygpO1xuICB9XG4gIGlmICh0eXBlb2YgcmVxdWlyZUFsbFJvbGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvbWlzZXNbMl0gPSByZXF1aXJlQWxsUm9sZXMoKTtcbiAgfVxuICBjb25zdCBbcm9sZXMsIHJlc29sdmVkVXNlclJvbGVzLCByZXNvbHZlZFJlcXVpcmVBbGxdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICBpZiAocmVzb2x2ZWRVc2VyUm9sZXMgJiYgQXJyYXkuaXNBcnJheShyZXNvbHZlZFVzZXJSb2xlcykpIHtcbiAgICB1c2VyUm9sZXMgPSByZXNvbHZlZFVzZXJSb2xlcztcbiAgfVxuICBpZiAocmVzb2x2ZWRSZXF1aXJlQWxsICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRSZXF1aXJlQWxsKSkge1xuICAgIHJlcXVpcmVBbGxSb2xlcyA9IHJlc29sdmVkUmVxdWlyZUFsbDtcbiAgfVxuICBpZiAodXNlclJvbGVzKSB7XG4gICAgY29uc3QgaGFzUm9sZSA9IHVzZXJSb2xlcy5zb21lKHJlcXVpcmVkUm9sZSA9PiByb2xlcy5pbmNsdWRlcyhgcm9sZToke3JlcXVpcmVkUm9sZX1gKSk7XG4gICAgaWYgKCFoYXNSb2xlKSB7XG4gICAgICB0aHJvdyBgVmFsaWRhdGlvbiBmYWlsZWQuIFVzZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIHJvbGVzLmA7XG4gICAgfVxuICB9XG4gIGlmIChyZXF1aXJlQWxsUm9sZXMpIHtcbiAgICBmb3IgKGNvbnN0IHJlcXVpcmVkUm9sZSBvZiByZXF1aXJlQWxsUm9sZXMpIHtcbiAgICAgIGlmICghcm9sZXMuaW5jbHVkZXMoYHJvbGU6JHtyZXF1aXJlZFJvbGV9YCkpIHtcbiAgICAgICAgdGhyb3cgYFZhbGlkYXRpb24gZmFpbGVkLiBVc2VyIGRvZXMgbm90IG1hdGNoIGFsbCB0aGUgcmVxdWlyZWQgcm9sZXMuYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgdXNlcktleXMgPSBvcHRpb25zLnJlcXVpcmVVc2VyS2V5cyB8fCBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodXNlcktleXMpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdXNlcktleXMpIHtcbiAgICAgIGlmICghcmVxVXNlcikge1xuICAgICAgICB0aHJvdyAnUGxlYXNlIGxvZ2luIHRvIG1ha2UgdGhpcyByZXF1ZXN0Lic7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXFVc2VyLmdldChrZXkpID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgYFZhbGlkYXRpb24gZmFpbGVkLiBQbGVhc2Ugc2V0IGRhdGEgZm9yICR7a2V5fSBvbiB5b3VyIGFjY291bnQuYDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHVzZXJLZXlzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IG9wdGlvblByb21pc2VzID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5yZXF1aXJlVXNlcktleXMpIHtcbiAgICAgIGNvbnN0IG9wdCA9IG9wdGlvbnMucmVxdWlyZVVzZXJLZXlzW2tleV07XG4gICAgICBpZiAob3B0Lm9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9uUHJvbWlzZXMucHVzaCh2YWxpZGF0ZU9wdGlvbnMob3B0LCBrZXksIHJlcVVzZXIuZ2V0KGtleSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwob3B0aW9uUHJvbWlzZXMpO1xuICB9XG59XG5cbi8vIFRvIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcHJvbWlzZSBjaGFpbiB3aGVuIHNhdmluZy9kZWxldGluZyBhbiBvYmplY3Rcbi8vIFdpbGwgcmVzb2x2ZSBzdWNjZXNzZnVsbHkgaWYgbm8gdHJpZ2dlciBpcyBjb25maWd1cmVkXG4vLyBSZXNvbHZlcyB0byBhbiBvYmplY3QsIGVtcHR5IG9yIGNvbnRhaW5pbmcgYW4gb2JqZWN0IGtleS4gQSBiZWZvcmVTYXZlXG4vLyB0cmlnZ2VyIHdpbGwgc2V0IHRoZSBvYmplY3Qga2V5IHRvIHRoZSByZXN0IGZvcm1hdCBvYmplY3QgdG8gc2F2ZS5cbi8vIG9yaWdpbmFsUGFyc2VPYmplY3QgaXMgb3B0aW9uYWwsIHdlIG9ubHkgbmVlZCB0aGF0IGZvciBiZWZvcmUvYWZ0ZXJTYXZlIGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIG1heWJlUnVuVHJpZ2dlcihcbiAgdHJpZ2dlclR5cGUsXG4gIGF1dGgsXG4gIHBhcnNlT2JqZWN0LFxuICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICBjb25maWcsXG4gIGNvbnRleHRcbikge1xuICBpZiAoIXBhcnNlT2JqZWN0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgdHJpZ2dlciA9IGdldFRyaWdnZXIocGFyc2VPYmplY3QuY2xhc3NOYW1lLCB0cmlnZ2VyVHlwZSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICAgIGlmICghdHJpZ2dlcikgeyByZXR1cm4gcmVzb2x2ZSgpOyB9XG4gICAgdmFyIHJlcXVlc3QgPSBnZXRSZXF1ZXN0T2JqZWN0KFxuICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICBhdXRoLFxuICAgICAgcGFyc2VPYmplY3QsXG4gICAgICBvcmlnaW5hbFBhcnNlT2JqZWN0LFxuICAgICAgY29uZmlnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgdmFyIHsgc3VjY2VzcywgZXJyb3IgfSA9IGdldFJlc3BvbnNlT2JqZWN0KFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG9iamVjdCA9PiB7XG4gICAgICAgIGxvZ1RyaWdnZXJTdWNjZXNzQmVmb3JlSG9vayhcbiAgICAgICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgICAgICBwYXJzZU9iamVjdC5jbGFzc05hbWUsXG4gICAgICAgICAgcGFyc2VPYmplY3QudG9KU09OKCksXG4gICAgICAgICAgb2JqZWN0LFxuICAgICAgICAgIGF1dGgsXG4gICAgICAgICAgdHJpZ2dlclR5cGUuc3RhcnRzV2l0aCgnYWZ0ZXInKVxuICAgICAgICAgICAgPyBjb25maWcubG9nTGV2ZWxzLnRyaWdnZXJBZnRlclxuICAgICAgICAgICAgOiBjb25maWcubG9nTGV2ZWxzLnRyaWdnZXJCZWZvcmVTdWNjZXNzXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlU2F2ZSB8fFxuICAgICAgICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlclNhdmUgfHxcbiAgICAgICAgICB0cmlnZ2VyVHlwZSA9PT0gVHlwZXMuYmVmb3JlRGVsZXRlIHx8XG4gICAgICAgICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyRGVsZXRlXG4gICAgICAgICkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGV4dCwgcmVxdWVzdC5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKG9iamVjdCk7XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBsb2dUcmlnZ2VyRXJyb3JCZWZvcmVIb29rKFxuICAgICAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgICAgIHBhcnNlT2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgICBwYXJzZU9iamVjdC50b0pTT04oKSxcbiAgICAgICAgICBhdXRoLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckJlZm9yZUVycm9yXG4gICAgICAgICk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFmdGVyU2F2ZSBhbmQgYWZ0ZXJEZWxldGUgdHJpZ2dlcnMgY2FuIHJldHVybiBhIHByb21pc2UsIHdoaWNoIGlmIHRoZXlcbiAgICAvLyBkbywgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIHRoaXMgcHJvbWlzZSBpcyByZXNvbHZlZCxcbiAgICAvLyBzbyB0cmlnZ2VyIGV4ZWN1dGlvbiBpcyBzeW5jZWQgd2l0aCBSZXN0V3JpdGUuZXhlY3V0ZSgpIGNhbGwuXG4gICAgLy8gSWYgdHJpZ2dlcnMgZG8gbm90IHJldHVybiBhIHByb21pc2UsIHRoZXkgY2FuIHJ1biBhc3luYyBjb2RlIHBhcmFsbGVsXG4gICAgLy8gdG8gdGhlIFJlc3RXcml0ZS5leGVjdXRlKCkgY2FsbC5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG1heWJlUnVuVmFsaWRhdG9yKHJlcXVlc3QsIGAke3RyaWdnZXJUeXBlfS4ke3BhcnNlT2JqZWN0LmNsYXNzTmFtZX1gLCBhdXRoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSB0cmlnZ2VyKHJlcXVlc3QpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHJpZ2dlclR5cGUgPT09IFR5cGVzLmFmdGVyU2F2ZSB8fFxuICAgICAgICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlckRlbGV0ZSB8fFxuICAgICAgICAgIHRyaWdnZXJUeXBlID09PSBUeXBlcy5hZnRlckxvZ2luXG4gICAgICAgICkge1xuICAgICAgICAgIGxvZ1RyaWdnZXJBZnRlckhvb2soXG4gICAgICAgICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgICAgICAgIHBhcnNlT2JqZWN0LmNsYXNzTmFtZSxcbiAgICAgICAgICAgIHBhcnNlT2JqZWN0LnRvSlNPTigpLFxuICAgICAgICAgICAgYXV0aCxcbiAgICAgICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckFmdGVyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBiZWZvcmVTYXZlIGlzIGV4cGVjdGVkIHRvIHJldHVybiBudWxsIChub3RoaW5nKVxuICAgICAgICBpZiAodHJpZ2dlclR5cGUgPT09IFR5cGVzLmJlZm9yZVNhdmUpIHtcbiAgICAgICAgICBpZiAocHJvbWlzZSAmJiB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgLy8gcmVzcG9uc2Uub2JqZWN0IG1heSBjb21lIGZyb20gZXhwcmVzcyByb3V0aW5nIGJlZm9yZSBob29rXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5vYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgIH0pXG4gICAgICAudGhlbihzdWNjZXNzLCBlcnJvcik7XG4gIH0pO1xufVxuXG4vLyBDb252ZXJ0cyBhIFJFU1QtZm9ybWF0IG9iamVjdCB0byBhIFBhcnNlLk9iamVjdFxuLy8gZGF0YSBpcyBlaXRoZXIgY2xhc3NOYW1lIG9yIGFuIG9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIGluZmxhdGUoZGF0YSwgcmVzdE9iamVjdCkge1xuICB2YXIgY29weSA9IHR5cGVvZiBkYXRhID09ICdvYmplY3QnID8gZGF0YSA6IHsgY2xhc3NOYW1lOiBkYXRhIH07XG4gIGZvciAodmFyIGtleSBpbiByZXN0T2JqZWN0KSB7XG4gICAgY29weVtrZXldID0gcmVzdE9iamVjdFtrZXldO1xuICB9XG4gIHJldHVybiBQYXJzZS5PYmplY3QuZnJvbUpTT04oY29weSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5MaXZlUXVlcnlFdmVudEhhbmRsZXJzKGRhdGEsIGFwcGxpY2F0aW9uSWQgPSBQYXJzZS5hcHBsaWNhdGlvbklkKSB7XG4gIGlmICghX3RyaWdnZXJTdG9yZSB8fCAhX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXSB8fCAhX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXS5MaXZlUXVlcnkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX3RyaWdnZXJTdG9yZVthcHBsaWNhdGlvbklkXS5MaXZlUXVlcnkuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoZGF0YSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEZpbGVPYmplY3QodHJpZ2dlclR5cGUsIGF1dGgsIGZpbGVPYmplY3QsIGNvbmZpZykge1xuICBjb25zdCByZXF1ZXN0ID0ge1xuICAgIC4uLmZpbGVPYmplY3QsXG4gICAgdHJpZ2dlck5hbWU6IHRyaWdnZXJUeXBlLFxuICAgIG1hc3RlcjogZmFsc2UsXG4gICAgaXNSZWFkT25seTogZmFsc2UsXG4gICAgbG9nOiBjb25maWcubG9nZ2VyQ29udHJvbGxlcixcbiAgICBoZWFkZXJzOiBjb25maWcuaGVhZGVycyxcbiAgICBpcDogY29uZmlnLmlwLFxuICAgIGNvbmZpZyxcbiAgfTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuICBpZiAoYXV0aC5pc01hc3Rlcikge1xuICAgIHJlcXVlc3RbJ21hc3RlciddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgcmVxdWVzdFsnaXNSZWFkT25seSddID0gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aC51c2VyKSB7XG4gICAgcmVxdWVzdFsndXNlciddID0gYXV0aC51c2VyO1xuICB9XG4gIGlmIChhdXRoLmluc3RhbGxhdGlvbklkKSB7XG4gICAgcmVxdWVzdFsnaW5zdGFsbGF0aW9uSWQnXSA9IGF1dGguaW5zdGFsbGF0aW9uSWQ7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJUeXBlLCBmaWxlT2JqZWN0LCBjb25maWcsIGF1dGgpIHtcbiAgY29uc3QgRmlsZUNsYXNzTmFtZSA9IGdldENsYXNzTmFtZShQYXJzZS5GaWxlKTtcbiAgY29uc3QgZmlsZVRyaWdnZXIgPSBnZXRUcmlnZ2VyKEZpbGVDbGFzc05hbWUsIHRyaWdnZXJUeXBlLCBjb25maWcuYXBwbGljYXRpb25JZCk7XG4gIGlmICh0eXBlb2YgZmlsZVRyaWdnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGdldFJlcXVlc3RGaWxlT2JqZWN0KHRyaWdnZXJUeXBlLCBhdXRoLCBmaWxlT2JqZWN0LCBjb25maWcpO1xuICAgICAgYXdhaXQgbWF5YmVSdW5WYWxpZGF0b3IocmVxdWVzdCwgYCR7dHJpZ2dlclR5cGV9LiR7RmlsZUNsYXNzTmFtZX1gLCBhdXRoKTtcbiAgICAgIGlmIChyZXF1ZXN0LnNraXBXaXRoTWFzdGVyS2V5KSB7XG4gICAgICAgIHJldHVybiBmaWxlT2JqZWN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlsZVRyaWdnZXIocmVxdWVzdCk7XG4gICAgICBpZiAocmVxdWVzdC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZm9yY2VEb3dubG9hZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBsb2dUcmlnZ2VyU3VjY2Vzc0JlZm9yZUhvb2soXG4gICAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgICAnUGFyc2UuRmlsZScsXG4gICAgICAgIHsgLi4uZmlsZU9iamVjdC5maWxlLnRvSlNPTigpLCBmaWxlU2l6ZTogZmlsZU9iamVjdC5maWxlU2l6ZSB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIGF1dGgsXG4gICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckJlZm9yZVN1Y2Nlc3NcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzdWx0IHx8IGZpbGVPYmplY3Q7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ1RyaWdnZXJFcnJvckJlZm9yZUhvb2soXG4gICAgICAgIHRyaWdnZXJUeXBlLFxuICAgICAgICAnUGFyc2UuRmlsZScsXG4gICAgICAgIHsgLi4uZmlsZU9iamVjdC5maWxlLnRvSlNPTigpLCBmaWxlU2l6ZTogZmlsZU9iamVjdC5maWxlU2l6ZSB9LFxuICAgICAgICBhdXRoLFxuICAgICAgICBlcnJvcixcbiAgICAgICAgY29uZmlnLmxvZ0xldmVscy50cmlnZ2VyQmVmb3JlRXJyb3JcbiAgICAgICk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGVPYmplY3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYXliZVJ1bkdsb2JhbENvbmZpZ1RyaWdnZXIodHJpZ2dlclR5cGUsIGF1dGgsIGNvbmZpZ09iamVjdCwgb3JpZ2luYWxDb25maWdPYmplY3QsIGNvbmZpZywgY29udGV4dCkge1xuICBjb25zdCBHbG9iYWxDb25maWdDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUoUGFyc2UuQ29uZmlnKTtcbiAgY29uc3QgY29uZmlnVHJpZ2dlciA9IGdldFRyaWdnZXIoR2xvYmFsQ29uZmlnQ2xhc3NOYW1lLCB0cmlnZ2VyVHlwZSwgY29uZmlnLmFwcGxpY2F0aW9uSWQpO1xuICBpZiAodHlwZW9mIGNvbmZpZ1RyaWdnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGdldFJlcXVlc3RPYmplY3QodHJpZ2dlclR5cGUsIGF1dGgsIGNvbmZpZ09iamVjdCwgb3JpZ2luYWxDb25maWdPYmplY3QsIGNvbmZpZywgY29udGV4dCk7XG4gICAgICBhd2FpdCBtYXliZVJ1blZhbGlkYXRvcihyZXF1ZXN0LCBgJHt0cmlnZ2VyVHlwZX0uJHtHbG9iYWxDb25maWdDbGFzc05hbWV9YCwgYXV0aCk7XG4gICAgICBpZiAocmVxdWVzdC5za2lwV2l0aE1hc3RlcktleSkge1xuICAgICAgICByZXR1cm4gY29uZmlnT2JqZWN0O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29uZmlnVHJpZ2dlcihyZXF1ZXN0KTtcbiAgICAgIGxvZ1RyaWdnZXJTdWNjZXNzQmVmb3JlSG9vayhcbiAgICAgICAgdHJpZ2dlclR5cGUsXG4gICAgICAgICdQYXJzZS5Db25maWcnLFxuICAgICAgICBjb25maWdPYmplY3QsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgY29uZmlnLmxvZ0xldmVscy50cmlnZ2VyQmVmb3JlU3VjY2Vzc1xuICAgICAgKTtcbiAgICAgIHJldHVybiByZXN1bHQgfHwgY29uZmlnT2JqZWN0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dUcmlnZ2VyRXJyb3JCZWZvcmVIb29rKFxuICAgICAgICB0cmlnZ2VyVHlwZSxcbiAgICAgICAgJ1BhcnNlLkNvbmZpZycsXG4gICAgICAgIGNvbmZpZ09iamVjdCxcbiAgICAgICAgYXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGNvbmZpZy5sb2dMZXZlbHMudHJpZ2dlckJlZm9yZUVycm9yXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb25maWdPYmplY3Q7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFBa0MsU0FBQUQsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFGbEM7O0FBSU8sTUFBTUcsS0FBSyxHQUFBQyxPQUFBLENBQUFELEtBQUEsR0FBRztFQUNuQkUsV0FBVyxFQUFFLGFBQWE7RUFDMUJDLFVBQVUsRUFBRSxZQUFZO0VBQ3hCQyxXQUFXLEVBQUUsYUFBYTtFQUMxQkMsMEJBQTBCLEVBQUUs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
|