@datagrok-libraries/utils 1.7.3 → 1.7.4

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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "1.7.3",
7
+ "version": "1.7.4",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "fast-sha256": "^1.3.0",
@@ -36,7 +36,7 @@ export const passErrorToShell = () => {
36
36
  descriptor.value = function (...args) {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
38
  try {
39
- yield original.call(this, ...args);
39
+ return yield original.call(this, ...args);
40
40
  }
41
41
  catch (err) {
42
42
  grok.shell.error(err.message);
@@ -990,4 +990,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
990
990
  ext: { width: canvas.width, height: canvas.height },
991
991
  });
992
992
  });
993
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFekI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2lCQUNwQztnQkFBQyxPQUFPLEdBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUUsR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxNQUFNLEtBQUssQ0FBQztpQkFDYjtZQUNILENBQUM7U0FBQSxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLFlBQWEsU0FBUSxFQUFFLENBQUMsUUFBUTtJQU0zQyxZQUFZLFFBQXNCO1FBQ2hDLEtBQUssRUFBRSxDQUFD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QUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxFQUFFLE9BQU87UUFDZixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7UUFDM0MsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUM7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5cbi8qKlxuICAgKiBEZWNvcmF0b3IgdG8gcGFzcyBhbGwgdGhyb3duIGVycm9ycyB0byBncm9rLnNoZWxsLmVycm9yXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBwYXNzRXJyb3JUb1NoZWxsID0gKCkgPT4ge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBtZW1iZXJOYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICAgIHRocm93IEVycm9yO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHJvdGVjdGVkIF9mdW5jQ2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX2xhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfdHlwZTogc3RyaW5nID0gJ2Z1bmN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihmdW5jQ2FsbD86IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgdGhpcy5jb250ZXh0ID0gREcuQ29udGV4dC5jbG9uZURlZmF1bHQoKTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgLyR7ZnVuY0NhbGwuZnVuYy5uYW1lfWA7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoZnVuY0NhbGwpO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuYnVpbGQoKTtcbiAgICB0aGlzLm5hbWUgPSBmdW5jQ2FsbC5mdW5jLmZyaWVuZGx5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmdW5jdGlvbiBjYWxsIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCBmdW5jQ2FsbCgpOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBGdW5jIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgZnVuYygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jQ2FsbD8uZnVuYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGxhc3RDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHNldCBsYXN0Q2FsbChsYXN0Q2FsbDogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sYXN0Q2FsbCA9IGxhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXcgdHlwZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqIEV4cG9ydCBvcHRpb25zLiBDb3VsZCBiZSBvdmVycmlkZW4gcGFydGlhbGx5LCB1c2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb3B0aW9uLlxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgZXhwb3J0Q29uZmlnOiB7XG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGV4cG9ydCBsb2dpYy5cbiAgICAgICpcbiAgICAgICogIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBpc1ByZXZpb3VzSGlzdG9yaWNhbCA9IHRoaXMuX2Z1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXTtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuXG4gICAgaWYgKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddKSB7XG4gICAgICBpZiAoIWlzUHJldmlvdXNIaXN0b3JpY2FsKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuICAgICAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSl9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgIH1cblxuICAgICAgLy8gRklYIE1FOiB2aWV3IG5hbWUgZG9lcyBub3QgY2hhbmdlIGluIG1vZGVsc1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2LmQ0LXJpYmJvbi1uYW1lJyk/LnJlcGxhY2VDaGlsZHJlbih1aS5zcGFuKFt0aGlzLm5hbWVdKSk7XG4gICAgICB0aGlzLnBhdGggPSBgP2lkPSR7dGhpcy5fZnVuY0NhbGwuaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRSdW5WaWV3RWRpdGFibGUoKTtcbiAgICAgIHRoaXMucGF0aCA9IGBgO1xuXG4gICAgICBpZiAoaXNQcmV2aW91c0hpc3RvcmljYWwpXG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfWA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGN1c3RvbSBsb2dpYyB0aGF0IGNvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBBbnkgYXN5bmMgbWV0aG9kcyBhbmQgbW9zdCBvZiB0aGUgbG9naWMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBpbml0KCkge1xuICAgIGlmICh0aGlzLmZ1bmNDYWxsICYmIHRoaXMuZnVuYykge1xuICAgICAgdGhpcy5mdW5jQ2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXM7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgIGZvciAoY29uc3QgaW5QYXJhbSBvZiB3dSh0aGlzLmZ1bmNDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigocDogREcuRnVuY0NhbGxQYXJhbSkgPT5cbiAgICAgICAgICBwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5wcm9wZXJ0eS5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSkge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpblBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhclJlc3VsdHMoZmFsc2UpO1xuICAgICAgICAgIHBhcmFtLnByb2Nlc3NPdXRwdXQoKTtcblxuICAgICAgICAgIHRoaXMuYXBwZW5kT3V0cHV0RGYocGFyYW0sIHtcbiAgICAgICAgICAgIGhlaWdodDogNDAwLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdJbnB1dCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBmdWxseSBjdXN0b20gVUkgaW5jbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRJTygpKTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5vdmVybGF5RGl2KTtcblxuICAgIHRoaXMuYnVpbGRIaXN0b3J5QmxvY2soKTtcbiAgICB0aGlzLmJ1aWxkUmliYm9uTWVudSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dC1vdXRwdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggd2hvbGUgVUkgZXhjbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgICAgc3VwcG9ydGVkRm9ybWF0czogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpLFxuICAgICAgZXhwb3J0OiB0aGlzLmRlZmF1bHRFeHBvcnQsXG4gICAgICBmaWxlbmFtZTogdGhpcy5kZWZhdWx0RXhwb3J0RmlsZW5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuICAgIGNvbnN0IG91dHB1dEJsb2NrID0gdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG5cbiAgICByZXR1cm4gdWkuc3BsaXRIKFtpbnB1dEJsb2NrLCBvdXRwdXRCbG9ja10pO1xuICB9XG5cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGlucHV0IGJsb2NrIFVJIG9uIHRoZSBsZWZ0IHNpZGUgYnkgZGVmYXVsdFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZElucHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgcmV0dXJuIHRoaXMuY29udHJvbHNSb290O1xuXG4gICAgY29uc3QgZnVuY0RpdiA9IHVpLmRpdihbdGhpcy5yZW5kZXJSdW5TZWN0aW9uKHRoaXMuZnVuY0NhbGwpXSwgJ3VpLWRpdicpO1xuICAgIHVpLmVtcHR5KHRoaXMuY29udHJvbHNSb290KTtcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdW5jRGl2KTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIG91dHB1dCBibG9jay5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkT3V0cHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHVpLmVtcHR5KHRoaXMucmVzdWx0c1Jvb3QpO1xuICAgIHRoaXMucmVzdWx0c1Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5yZXN1bHRzRGl2KTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaGlzdG9yaWNhbCBydW5zIGNvbnRyb2wuXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGhpc3RvcnkgYmxvY2sgVUlcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBwdWJsaWMgYnVpbGRIaXN0b3J5QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IG1haW5BY2MgPSB1aS5hY2NvcmRpb24oKTtcbiAgICBtYWluQWNjLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgbWFpbkFjYy5hZGRUaXRsZSh1aS5zcGFuKFsnSGlzdG9yeSddKSk7XG5cbiAgICBjb25zdCBidWlsZEZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnRGF0ZScsICdBbnkgdGltZScpO1xuICAgICAgZGF0ZUlucHV0LmFkZFBhdHRlcm5NZW51KCdkYXRldGltZScpO1xuICAgICAgY29uc3QgZm9ybSA9dWkuZGl2VihbXG4gICAgICAgIHVpLnN0cmluZ0lucHV0KCdTZWFyY2gnLCAnJywgKCkgPT4ge30pLFxuICAgICAgICB1aS5jaG9pY2VJbnB1dCgnVXNlcicsICdDdXJyZW50IHVzZXInLCBbJ0N1cnJlbnQgdXNlciddKSxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgXSwgJ3VpLWZvcm0tY29uZGVuc2VkIHVpLWZvcm0nKTtcbiAgICAgIGZvcm0uc3R5bGUubWFyZ2luTGVmdCA9ICcwcHgnO1xuXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9O1xuICAgIGxldCBmaWx0ZXJQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGaWx0ZXInLCBidWlsZEZpbHRlclBhbmUpO1xuICAgIGNvbnN0IHVwZGF0ZUZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gZmlsdGVyUGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmaWx0ZXJQYW5lKTtcbiAgICAgIGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSwgaXNFeHBhbmRlZCwgZmF2b3JpdGVzTGlzdFBhbmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93QWRkVG9GYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBsZXQgdGl0bGUgPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICcnO1xuICAgICAgbGV0IGFubm90YXRpb24gPSBmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10gPz8gJyc7XG4gICAgICBjb25zdCB0aXRsZUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RpdGxlJywgdGl0bGUsIChzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGl0bGUgPSBzO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJ1RpdGxlIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdWkuZGlhbG9nKHt0aXRsZTogJ0FkZCB0byBmYXZvcml0ZXMnfSlcbiAgICAgICAgLmFkZCh1aS5mb3JtKFtcbiAgICAgICAgICB0aXRsZUlucHV0LFxuICAgICAgICAgIHVpLnN0cmluZ0lucHV0KCdBbm5vdGF0aW9uJywgYW5ub3RhdGlvbiwgKHM6IHN0cmluZykgPT4geyBhbm5vdGF0aW9uID0gczsgfSksXG4gICAgICAgIF0pKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEZWxldGVGYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ1RoZSBkZWxldGVkIHJ1biBpcyBpbXBvc3NpYmxlIHRvIHJlc3RvcmUuIEFyZSB5b3Ugc3VyZT8nKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlUnVuKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGxldCBoaXN0b3J5Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCByZW5kZXJGYXZvcml0ZUNhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgZmF2b3JpdGVDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvbGlkU3RhciA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgc29saWRTdGFyLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgIHVpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnRGVmYXVsdCB0aXRsZScsICd0aXRsZScpLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgICAgICB1aS5kaXZIKFt1aS5yZW5kZXIoZnVuY0NhbGwuYXV0aG9yKSwgdWkuc3BhbihbbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSldLCAnZGF0ZScpXSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgc29saWRTdGFyXG4gICAgICAgICAgXSwgJ2Z1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9Wy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKGZhdm9yaXRlQ2FyZHMpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJIaXN0b3J5Q2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBoaXN0b3J5Q2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4ge1xuICAgICAgICBjb25zdCBpY29uID0gZnVuY0NhbGwuYXV0aG9yLnBpY3R1cmUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGljb24uc3R5bGUud2lkdGggPSAnMjVweCc7XG4gICAgICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gJzI1cHgnO1xuICAgICAgICBpY29uLnN0eWxlLmZvbnRTaXplID0gJzIwcHgnO1xuICAgICAgICBpY29uLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzNweCc7XG4gICAgICAgIGljb24uc3R5bGUuYWxpZ25TZWxmID0gJ2NlbnRlcic7XG4gICAgICAgIGNvbnN0IHVzZXJMYWJlbCA9IHVpLmxhYmVsKGZ1bmNDYWxsLmF1dGhvci5mcmllbmRseU5hbWUsICdkNC1saW5rLWxhYmVsJyk7XG4gICAgICAgIHVpLmJpbmQoZnVuY0NhbGwuYXV0aG9yLCB1c2VyTGFiZWwpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgICAgdXNlckxhYmVsLFxuICAgICAgICAgICAgICB1aS5zcGFuKFtuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KV0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdQaW4gdGhlIHJ1bicpLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCdsaW5rJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHt3aW5kb3cubG9jYXRpb24uaHJlZn1gKTtcbiAgICAgICAgICAgIH0sICdDb3B5IGxpbmsgdG8gdGhlIHJ1bicpLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCd0cmFzaC1hbHQnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dEZWxldGVGYXZvcml0ZXNEaWFsb2coZnVuY0NhbGwpO1xuICAgICAgICAgICAgfSwgJ0RlbGV0ZSB0aGUgcnVuJyksXG4gICAgICAgICAgXSwgJ2Z1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID1bLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoaGlzdG9yeUNhcmRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRGYXZvcml0ZXNMaXN0ID0gKCkgPT4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3JpY2FsUnVucyA9IGF3YWl0IHRoaXMucHVsbFJ1bnModGhpcy5mdW5jIS5pZCk7XG4gICAgICBjb25zdCBwaW5uZWRSdW5zID0gaGlzdG9yaWNhbFJ1bnMuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10pO1xuICAgICAgaWYgKHBpbm5lZFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyRmF2b3JpdGVDYXJkcyhwaW5uZWRSdW5zKSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgZmF2b3JpdGVzJywgJ2Rlc2NyaXB0aW9uJyk7XG4gICAgfSk7XG4gICAgbGV0IGZhdm9yaXRlc0xpc3RQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGYXZvcml0ZXMnLCBidWlsZEZhdm9yaXRlc0xpc3QsIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZUZhdm9yaXRlc1BhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gZmF2b3JpdGVzTGlzdFBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoZmF2b3JpdGVzTGlzdFBhbmUpO1xuICAgICAgZmF2b3JpdGVzTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0Zhdm9yaXRlcycsIGJ1aWxkRmF2b3JpdGVzTGlzdCwgaXNFeHBhbmRlZCwgaGlzdG9yeVBhbmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZEhpc3RvcnlQYW5lID0gKCkgPT4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3JpY2FsUnVucyA9IChhd2FpdCB0aGlzLnB1bGxSdW5zKHRoaXMuZnVuYyEuaWQpKS5maWx0ZXIoKHJ1bikgPT4gIXJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10pO1xuICAgICAgaWYgKGhpc3RvcmljYWxSdW5zLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiB1aS53YWl0KCgpID0+IHJlbmRlckhpc3RvcnlDYXJkcyhoaXN0b3JpY2FsUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgZm91bmQgaW4gaGlzdG9yeScsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBoaXN0b3J5UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnSGlzdG9yeScsIGJ1aWxkSGlzdG9yeVBhbmUsIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZUhpc3RvcnlQYW5lID0gKCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IGhpc3RvcnlQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGhpc3RvcnlQYW5lKTtcbiAgICAgIGhpc3RvcnlQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdIaXN0b3J5JywgYnVpbGRIaXN0b3J5UGFuZSwgaXNFeHBhbmRlZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld0hpc3RvcnlCbG9jayA9IG1haW5BY2Mucm9vdDtcbiAgICB1aS5lbXB0eSh0aGlzLmhpc3RvcnlSb290KTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdqdXN0aWZ5LWNvbnRlbnQnKTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuYXBwZW5kKG5ld0hpc3RvcnlCbG9jayk7XG4gICAgcmV0dXJuIG5ld0hpc3RvcnlCbG9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyBmb3Ige0BsaW5rIHN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9IG1lbWJlcnMgYW5kIGNyZWF0ZXMgcmliYm9uIHBhbmVsXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudHMgb2YgcmliYm9uUGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgYnVpbGRSaWJib25QYW5lbHMoKTogSFRNTEVsZW1lbnRbXVtdIHtcbiAgICBjb25zdCBoaXN0b3J5QnV0dG9uID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnZDQtY3VycmVudCcpO1xuICAgICAgZ3Jvay5zaGVsbC5vID0gdGhpcy5oaXN0b3J5Um9vdDtcbiAgICB9KTtcblxuICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtdG9nZ2xlLWJ1dHRvbicpO1xuICAgIGlmIChncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXMpIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtY3VycmVudCcpO1xuXG4gICAgY29uc3QgY2xvbmVSdW5CdG4gPSB1aS5idXR0b24oJ0Nsb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5jbG9uZVJ1bkFzQ3VycmVudCgpO1xuICAgIH0sICdDbG9uZSB0aGUgcnVuJyk7XG5cbiAgICBjb25zdCBuZXdSaWJib25QYW5lbHMgPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXSxcbiAgICAgIGhpc3RvcnlCdXR0b24sXG4gICAgICAuLi50aGlzLmZ1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXT8gW2Nsb25lUnVuQnRuXTogW10sXG4gICAgICBdXG4gICAgXTtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9QaW46IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclJlbW92ZVJ1bkZyb21GYXZvcml0ZXMocGlubmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHVzdWFsIHJ1blxuICAgKiBAcGFyYW0gY2FsbFRvVW5mYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1snYW5ub3RhdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIGNvbnN0IHBpbm5lZFNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhwaW5uZWRTYXZlKTtcbiAgICByZXR1cm4gcGlubmVkU2F2ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb1BpbjogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMocGlubmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIGZhdm9yaXRlXG4gICAqIEBwYXJhbSBjYWxsVG9GYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gYWRkIHRvIGZhdm9yaXRlc1xuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIGFkZFJ1blRvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9GYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZSk7XG4gICAgY29uc3Qgc2F2ZWRGYXZvcml0ZSA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9GYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoc2F2ZWRGYXZvcml0ZSk7XG4gICAgcmV0dXJuIHNhdmVkRmF2b3JpdGU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVTYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9TYXZlIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2F2ZSk7XG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMucGF0aCA9IGA/aWQ9JHtzYXZlZENhbGwuaWR9YDtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbCk7XG4gICAgcmV0dXJuIHNhdmVkQ2FsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckRlbGV0ZVJ1bihkZWxldGVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIElEIG9mIGRlbGV0ZWQgaGlzdG9yaWNhbCBydW5cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBkZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZGVsZXRlKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgcmV0dXJuIGNhbGxUb0RlbGV0ZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVMb2FkUnVuKCkge31cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsIEZ1bmNDYWxsIGZldGNoZWQgZnJvbSBzZXJ2ZXIgZHVyaW5nIHtAbGluayBsb2FkUnVufVxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyTG9hZFJ1bihmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHt9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaGlzdG9yaWNhbCBydW4uIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsSWQgSUQgb2YgRnVuY0NhbGwgdG8gbG9vayBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgICBwdWxsZWRSdW4ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBjbG9uZVJ1bkFzQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBGdW5jY2FsbCBpcyBub3Qgc2V0Jyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgICBjb25zdCBjbG9uZWRGdW5jY2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5uZXdJZCgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoY2xvbmVkRnVuY2NhbGwpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckNsb25lUnVuQXNDdXJyZW50KCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJsYXlEaXYgPSB1aS5kaXYoW10sIHtzdHlsZToge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyYXknLFxuICAgICdvcGFjaXR5JzogJzAuMDcnLFxuICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgJ2JvdHRvbSc6ICcwJyxcbiAgICAnbGVmdCc6ICcwJyxcbiAgICAncmlnaHQnOiAnMCcsXG4gICAgJ3RvcCc6ICcwJyxcbiAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJ1xuICB9fSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seUV2ZW50TGlzdGVuZXJzID0gW1xuICAgIChldjogTW91c2VFdmVudCk9PiB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdDbG9uZSB0aGUgcnVuIHRvIGVkaXQgaXQnKTtcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3UmVhZG9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucmVhZG9ubHlFdmVudExpc3RlbmVyc1swXSk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gIH1cblxuICBwcml2YXRlIHNldFJ1blZpZXdFZGl0YWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5yZWFkb25seUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucyhmdW5jSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZmlsdGVyKGBmdW5jLmlkPVwiJHtmdW5jSWR9XCJgKS5pbmNsdWRlKCdzZXNzaW9uLnVzZXIsIG9wdGlvbnMnKTtcbiAgICBjb25zdCBsaXN0ID0gZmlsdGVyLmxpc3Qoe3BhZ2VTaXplOiAyMH0pO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICAgIHRoaXMubGFzdENhbGwubmV3SWQoKTtcbiAgICAgIGF3YWl0IHRoaXMubGFzdENhbGwuY2FsbCh0cnVlLCB1bmRlZmluZWQsIHtwcm9jZXNzZWQ6IHRydWV9KTsgLy8gbXV0YXRlcyB0aGUgbGFzdENhbGwgZmllbGRcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmxhc3RDYWxsKTtcbiAgICB9IGNhdGNoIChlKSB7XG5cbiAgICB9XG5cbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnRGaWxlbmFtZSA9IChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IC0gJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9LiR7dGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEV4dGVuc2lvbnNbZm9ybWF0XX1gO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0V4Y2VsJzogJ3hsc3gnXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFsnRXhjZWwnXTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydCA9IGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGxhc3RDYWxsID0gdGhpcy5sYXN0Q2FsbDtcbiAgICBpZiAoIWxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkYCk7XG5cbiAgICBpZiAoIXRoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHRocm93IG5ldyBFcnJvcihgRm9ybWF0IFwiJHtmb3JtYXR9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcblxuICAgIGlmICghdGhpcy5mdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgY29uc3QgQkxPQl9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGV4cG9ydFdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcblxuICAgIGNvbnN0IGlzU2NhbGFyVHlwZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAoREcuVFlQRVNfU0NBTEFSLmhhcyh0eXBlKSk7XG5cbiAgICBjb25zdCBpc0RhdGFGcmFtZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAodHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc0RhdGFGcmFtZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzU2NhbGFyVHlwZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNEYXRhRnJhbWUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhck91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNTY2FsYXJUeXBlKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcblxuICAgIGNvbnN0IGlucHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG4gICAgY29uc3Qgb3V0cHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuXG4gICAgZGZJbnB1dHMuZm9yRWFjaCgoZGZJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZJbnB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhcklucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlucHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdJbnB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChpbnB1dFNjYWxhcnNTaGVldCwgc2NhbGFySW5wdXRzLm1hcCgoc2NhbGFySW5wdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhcklucHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJJbnB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwuaW5wdXRzW3NjYWxhcklucHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFySW5wdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgZGZPdXRwdXRzLmZvckVhY2goKGRmT3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZPdXRwdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuXG4gICAgaWYgKHNjYWxhck91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ091dHB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChvdXRwdXRTY2FsYXJzU2hlZXQsIHNjYWxhck91dHB1dHMubWFwKChzY2FsYXJPdXRwdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhck91dHB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFyT3V0cHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5vdXRwdXRzW3NjYWxhck91dHB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhck91dHB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJDb250cm9sID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbDtcbiAgICBpZiAodGFiQ29udHJvbCkge1xuICAgICAgZm9yIChjb25zdCB0YWJMYWJlbCBvZiB0aGlzLnRhYnNMYWJlbHMpIHtcbiAgICAgICAgdGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRhYkNvbnRyb2wuZ2V0UGFuZSh0YWJMYWJlbCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgICBpZiAodGFiTGFiZWwgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0UGFyYW0gb2YgaW5wdXRQYXJhbXMuZmlsdGVyKChpbnB1dFBhcmFtKSA9PiBpbnB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSAoaW5wdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmSW5wdXQgPSBkZklucHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gaW5wdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmSW5wdXQhLm9wdGlvbnMuY2FwdGlvbiB8fCBpbnB1dFBhcmFtLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnJvb3QucGFyZW50RWxlbWVudD8uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5nZXQoaW5wdXRQYXJhbS5uYW1lKT8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBvdXRwdXRQYXJhbSBvZiBvdXRwdXRQYXJhbXMuZmlsdGVyKChvdXRwdXRQYXJhbSkgPT4gb3V0cHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgb3V0cHV0UGFyYW0ucHJvcGVydHkuY2F0ZWdvcnkgPT09IHRhYkxhYmVsKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSAob3V0cHV0UGFyYW0uYXV4Wyd2aWV3ZXJzJ10gYXMgREcuVmlld2VyW10pLmZpbHRlcigodmlld2VyKSA9PiB2aWV3ZXIudHlwZSAhPT0gREcuVklFV0VSLkdSSUQpO1xuXG4gICAgICAgICAgICBjb25zdCBkZk91dHB1dCA9IGRmT3V0cHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gb3V0cHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IG91dHB1dFBhcmFtLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChvdXRwdXRQYXJhbS5uYW1lKT8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBleHBvcnRXb3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBCTE9CX1RZUEV9KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0IGlzSW5wdXRQYW5lbFJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmM/LmlucHV0cy5zb21lKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0UGFyYW1DYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5uZXcgU2V0KHRoaXMuZnVuYyEub3V0cHV0cy5tYXAoKHApID0+IHAuY2F0ZWdvcnkpKSAvLyBnZXQgYWxsIG91dHB1dCBwYXJhbXMnIGNhdGVnb3JpZXNcbiAgICBdOyAvLyBrZWVwIG9ubHkgdW5pcXVlIG9mIHRoZW1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0cHV0VGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5vdXRQYXJhbUNhdGVnb3JpZXMsXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcy5maW5kKCh2YWwpID0+IHZhbCA9PT0gJ01pc2MnKSA/IFsnT3V0cHV0J10gOiBbXSwgLy8gaWYgbm8gY2F0ZWdvcmllcyBhcmUgc3RhdGVkLCB0aGUgZGVmYXVsdCBjYXRlZ29yeSBpcyBhZGRlZFxuICAgIF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1Ub0NhdGVnb3J5TWFwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcGFyYW1Ub0NhdGVnb3J5TWFwKCkge1xuICAgIGNvbnN0IG1hcCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICBpZiAodGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZClcbiAgICAgIHRoaXMuZnVuYyEuaW5wdXRzLmZvckVhY2goKHApID0+IG1hcFsnSW5wdXQnXSA/IG1hcFsnSW5wdXQnXS5wdXNoKHAubmFtZSk6IG1hcFsnSW5wdXQnXSA9IFtwLm5hbWVdKTtcblxuICAgIHRoaXMuZnVuYyEub3V0cHV0cy5mb3JFYWNoKChwKSA9PiBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldID8gbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XS5wdXNoKHAubmFtZSkgOiBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldID0gW3AubmFtZV0pO1xuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIHJlbmRlclJ1blNlY3Rpb24oY2FsbDogREcuRnVuY0NhbGwpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuQnV0dG9uID0gdWkuYmlnQnV0dG9uKCdSdW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNhbGwuYXV4Wyd2aWV3J10gPSB0aGlzLmRhcnQ7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuY2xhc3NMaXN0LmFkZCgndWktZm9ybScpO1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHVpLmRpdkgoW3J1bkJ1dHRvbl0sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2Vlbid9fSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlc3VsdHMoc3dpdGNoVG9PdXRwdXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMudGFic0xhYmVscztcblxuICAgIGlmICgoY2F0ZWdvcmllcy5sZW5ndGggPiAxIHx8IChjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXNbMF0gIT0gJ01pc2MnKSkpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgPSBERy5UYWJDb250cm9sLmNyZWF0ZSgpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFRhYnMuaGFzKGMpKVxuICAgICAgICAgIHRoaXMucmVzdWx0VGFicy5zZXQoYywgdWkuZGl2KFtdLCAndWktcGFuZWwsIGdyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKSk7XG4gICAgICAgIGxldCBuYW1lID0gYztcbiAgICAgICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgY2F0ZWdvcmllcy5sZW5ndGggPT0gMiAmJiBjID09ICdNaXNjJylcbiAgICAgICAgICBuYW1lID0gJ09VVFBVVCc7XG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuYWRkUGFuZShuYW1lLCAoKSA9PiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGMpID8/IHVpLmRpdigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgJiYgdGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBzd2l0Y2hUb091dHB1dClcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucGFuZXNbMV07XG4gICAgICB0aGlzLnJlc3VsdHNEaXYgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnJvb3Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHModHJ1ZSk7XG4gICAgZm9yIChjb25zdCBwIG9mIGNhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkge1xuICAgICAgcC5wcm9jZXNzT3V0cHV0KCk7XG4gICAgICBpZiAocC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAudmFsdWUgIT0gbnVsbClcbiAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgICAgZWxzZSB0aGlzLmFwcGVuZFJlc3VsdFNjYWxhcihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgfVxuXG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZSBzd2l0Y2hjZXMgb2YgdGhlaXIgdmlld2Vycy9ncmlkc1xuICBwcml2YXRlIHBhcmFtR3JpZFN3aXRjaGVzOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZWlyIHZpZXdlcnMgcGxhY2VkIG9uIERPTVxuICBwcml2YXRlIGV4aXN0aW5nUGFyYW1WaWV3ZXJzOiBNYXA8c3RyaW5nLCBERy5WaWV3ZXJbXT4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZWlyIGh0bWwgZWxlbWVudHNcbiAgcHJpdmF0ZSBwYXJhbVNwYW5zOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHRhYiBuYW1lcyB0byB0aGVpciBjb250ZW50XG4gIHByaXZhdGUgcmVzdWx0VGFiczogTWFwPFN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlc3VsdHNUYWJDb250cm9sOiBERy5UYWJDb250cm9sIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIHByb3RlY3RlZCBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KG51bGwsIHtzdHlsZToge21heFdpZHRoOiAnMzcwcHgnfX0pO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG4gIHByb3RlY3RlZCBpbnB1dHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpO1xuXG4gIHByaXZhdGUgYXBwZW5kT3V0cHV0RGYocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHBhcmFtRGYgPSBwYXJhbS52YWx1ZSBhcyBERy5EYXRhRnJhbWU7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucz8uaGVpZ2h0ID8/IDQwMDtcbiAgICBjb25zdCBwYXJhbVZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107IC8vIHN0b3JpbmcgdGhlIHZpZXdlcnMgb2YgRGZcbiAgICBjb25zdCBwYXJhbUNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uID8/IHBhcmFtLmF1eFsndmlld2VyVGl0bGUnXSA/PyBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uID8/ICcnO1xuICAgIGxldCBleGlzdGluZ1ZpZXdlcnMgPSB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gcGFyYW1EZjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ1ZpZXdlcnMgPz89IFtdO1xuICAgIHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHBhcmFtVmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHBhcmFtVmlld2Vycy5wdXNoKHBhcmFtRGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3Qgdmlld2Vyc1RvSGlkZTogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrV2lkdGg6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG5cbiAgICBjb25zdCBpc0dyaWRTd2l0Y2hhYmxlID0gd3UocGFyYW1WaWV3ZXJzKS5ldmVyeSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWwgPSBwYXJhbUNhcHRpb24gPz8gcGFyYW1EZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAoaGVhZGVyTGFiZWwgIT0gJycpIHtcbiAgICAgICAgY29uc3QgaCA9IHVpLmgxKGhlYWRlckxhYmVsKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IGhlYWRlckxhYmVsKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwodmlld2Vyc1RvSGlkZSwgdmlld2Vyc1RvSGlkZS5zb21lKCh2aWV3ZXIpID0+IHZpZXdlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBncmlkV3JhcHBlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpO1xuICAgICAgICB9LCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5zZXQocGFyYW0ubmFtZSwgaWNvbik7XG4gICAgICB9XG4gICAgICBpZiAoIWdyb2suc2hlbGwudGFibGVzLmluY2x1ZGVzKHBhcmFtRGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhwYXJhbURmKTtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgdmlld2VyIG9mIHBhcmFtVmlld2Vycykge1xuICAgICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IHBhcmFtRGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgICB2LmFkZFZpZXdlcihuZXdWaWV3ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdBZGQgdG8gd29ya3NwYWNlJ1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgIGNvbnN0IGdyaWQgPSBwYXJhbURmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ3JpZC5yb290KTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKGdyaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcigpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5kaXZIKFtdLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcbiAgICBwYXJhbVZpZXdlcnMuZm9yRWFjaCgodmlld2VyKSA9PiB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV4aXN0aW5nVmlld2VycyEucHVzaCh2aWV3ZXIpO1xuICAgICAgY29uc3Qgdmlld2VyU2l6ZSA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDsgLy8gZ2V0dGluZyBgKGJsb2NrOiAyNSlgIHZhbHVlOyBpZiBub3QgZGVmaW5lZCwgaXQgaXMgMTAwXG5cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHZpZXdlci5yb290LmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7dmlld2VyU2l6ZX1gKTtcbiAgICAgIGlmIChibG9ja3MgKyB2aWV3ZXJTaXplIDw9IDEwMCkge1xuICAgICAgICB2aWV3ZXJzVG9IaWRlLnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrV2lkdGggKz0gdmlld2VyU2l6ZTtcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSB2aWV3ZXJTaXplO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBibG9jayA9IHVpLmRpdlYoW2hlYWRlciwgd3JhcHBlciwgZ3JpZFdyYXBwZXJdLCB7c3R5bGU6IHtoZWlnaHQ6IGAke2hlaWdodH1weGAsIHdpZHRoOiBgJHtibG9ja1dpZHRofSVgfX0pO1xuICAgIGJsb2NrLmNsYXNzTGlzdC5hZGQoJ3VpLWJveCcpO1xuICAgIHRoaXMuYXBwZW5kUmVzdWx0RWxlbWVudChibG9jaywgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRTY2FsYXIocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM6IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBzcGFuID0gdWkuc3BhbihbYCR7b3B0aW9ucy5jYXB0aW9uID8/IHBhcmFtLm5hbWV9OiBgLCBgJHtwYXJhbS52YWx1ZX1gXSk7XG4gICAgaWYgKCF0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzVGFiQ29udHJvbClcbiAgICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChvcHRpb25zLmNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKT8ucmVwbGFjZVdpdGgoc3Bhbik7XG4gICAgfVxuICAgIHRoaXMucGFyYW1TcGFucy5zZXQocGFyYW0ubmFtZSwgc3Bhbik7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdEVsZW1lbnQoZDogSFRNTEVsZW1lbnQsIGNhdGVnb3J5Pzogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ICE9IG51bGwgJiYgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkgIT0gbnVsbClcbiAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChkKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoZCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIGNvbnNvbGUubG9nKGRmKTtcbiAgc2hlZXQuYWRkUm93KGRmLmNvbHVtbnMubmFtZXMoKSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5yb3dDb3VudDsgaSsrKVxuICAgIHNoZWV0LmFkZFJvdyhbLi4uZGYucm93KGkpLmNlbGxzXS5tYXAoKGNlbGw6IERHLkNlbGwpID0+IGNlbGwudmFsdWUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID1cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIGRmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lLmxlbmd0aFxuICAgICAgKSAqIDEuMjtcbiAgfVxufTtcblxuY29uc3QgcGxvdFRvU2hlZXQgPSBhc3luYyAoZXhwb3J0V2I6IEV4Y2VsSlMuV29ya2Jvb2ssIHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgcGxvdDogSFRNTEVsZW1lbnQsIGNvbHVtbkZvckltYWdlOiBudW1iZXIsIHJvd0ZvckltYWdlOiBudW1iZXIgPSAwKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKHBsb3QgYXMgSFRNTEVsZW1lbnQsIHtsb2dnaW5nOiBmYWxzZX0pO1xuICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG5cbiAgY29uc3QgaW1hZ2VJZCA9IGV4cG9ydFdiLmFkZEltYWdlKHtcbiAgICBiYXNlNjQ6IGRhdGFVcmwsXG4gICAgZXh0ZW5zaW9uOiAncG5nJyxcbiAgfSk7XG4gIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcbiAgICB0bDoge2NvbDogY29sdW1uRm9ySW1hZ2UsIHJvdzogcm93Rm9ySW1hZ2V9LFxuICAgIGV4dDoge3dpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodH0sXG4gIH0pO1xufTtcbiJdfQ==
993
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFekI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQzNDO2dCQUFDLE9BQU8sR0FBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sS0FBSyxDQUFDO2lCQUNiO1lBQ0gsQ0FBQztTQUFBLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxRQUFRO0lBTTNDLFlBQVksUUFBc0I7UUFDaEMsS0FBSyxFQUFF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QUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XG5pbXBvcnQgaHRtbDJjYW52YXMgZnJvbSAnaHRtbDJjYW52YXMnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCAkIGZyb20gJ2Nhc2gtZG9tJztcblxuLyoqXG4gICAqIERlY29yYXRvciB0byBwYXNzIGFsbCB0aHJvd24gZXJyb3JzIHRvIGdyb2suc2hlbGwuZXJyb3JcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jY2FsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNvbnN0IHBhc3NFcnJvclRvU2hlbGwgPSAoKSA9PiB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIG1lbWJlck5hbWU6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBkZXNjcmlwdG9yLnZhbHVlO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICAgIHRocm93IEVycm9yO1xuICAgICAgfVxuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHJvdGVjdGVkIF9mdW5jQ2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX2xhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfdHlwZTogc3RyaW5nID0gJ2Z1bmN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihmdW5jQ2FsbD86IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgdGhpcy5jb250ZXh0ID0gREcuQ29udGV4dC5jbG9uZURlZmF1bHQoKTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgLyR7ZnVuY0NhbGwuZnVuYy5uYW1lfWA7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoZnVuY0NhbGwpO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuYnVpbGQoKTtcbiAgICB0aGlzLm5hbWUgPSBmdW5jQ2FsbC5mdW5jLmZyaWVuZGx5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmdW5jdGlvbiBjYWxsIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCBmdW5jQ2FsbCgpOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBGdW5jIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgZnVuYygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jQ2FsbD8uZnVuYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGxhc3RDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHNldCBsYXN0Q2FsbChsYXN0Q2FsbDogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sYXN0Q2FsbCA9IGxhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXcgdHlwZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqIEV4cG9ydCBvcHRpb25zLiBDb3VsZCBiZSBvdmVycmlkZW4gcGFydGlhbGx5LCB1c2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb3B0aW9uLlxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgZXhwb3J0Q29uZmlnOiB7XG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGV4cG9ydCBsb2dpYy5cbiAgICAgICpcbiAgICAgICogIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBpc1ByZXZpb3VzSGlzdG9yaWNhbCA9IHRoaXMuX2Z1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXTtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuXG4gICAgaWYgKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddKSB7XG4gICAgICBpZiAoIWlzUHJldmlvdXNIaXN0b3JpY2FsKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuICAgICAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSl9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgIH1cblxuICAgICAgLy8gRklYIE1FOiB2aWV3IG5hbWUgZG9lcyBub3QgY2hhbmdlIGluIG1vZGVsc1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2LmQ0LXJpYmJvbi1uYW1lJyk/LnJlcGxhY2VDaGlsZHJlbih1aS5zcGFuKFt0aGlzLm5hbWVdKSk7XG4gICAgICB0aGlzLnBhdGggPSBgP2lkPSR7dGhpcy5fZnVuY0NhbGwuaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRSdW5WaWV3RWRpdGFibGUoKTtcbiAgICAgIHRoaXMucGF0aCA9IGBgO1xuXG4gICAgICBpZiAoaXNQcmV2aW91c0hpc3RvcmljYWwpXG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfWA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGN1c3RvbSBsb2dpYyB0aGF0IGNvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBBbnkgYXN5bmMgbWV0aG9kcyBhbmQgbW9zdCBvZiB0aGUgbG9naWMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBpbml0KCkge1xuICAgIGlmICh0aGlzLmZ1bmNDYWxsICYmIHRoaXMuZnVuYykge1xuICAgICAgdGhpcy5mdW5jQ2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXM7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgIGZvciAoY29uc3QgaW5QYXJhbSBvZiB3dSh0aGlzLmZ1bmNDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigocDogREcuRnVuY0NhbGxQYXJhbSkgPT5cbiAgICAgICAgICBwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5wcm9wZXJ0eS5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSkge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpblBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhclJlc3VsdHMoZmFsc2UpO1xuICAgICAgICAgIHBhcmFtLnByb2Nlc3NPdXRwdXQoKTtcblxuICAgICAgICAgIHRoaXMuYXBwZW5kT3V0cHV0RGYocGFyYW0sIHtcbiAgICAgICAgICAgIGhlaWdodDogNDAwLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdJbnB1dCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBmdWxseSBjdXN0b20gVUkgaW5jbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRJTygpKTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5vdmVybGF5RGl2KTtcblxuICAgIHRoaXMuYnVpbGRIaXN0b3J5QmxvY2soKTtcbiAgICB0aGlzLmJ1aWxkUmliYm9uTWVudSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dC1vdXRwdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggd2hvbGUgVUkgZXhjbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgICAgc3VwcG9ydGVkRm9ybWF0czogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpLFxuICAgICAgZXhwb3J0OiB0aGlzLmRlZmF1bHRFeHBvcnQsXG4gICAgICBmaWxlbmFtZTogdGhpcy5kZWZhdWx0RXhwb3J0RmlsZW5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuICAgIGNvbnN0IG91dHB1dEJsb2NrID0gdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG5cbiAgICByZXR1cm4gdWkuc3BsaXRIKFtpbnB1dEJsb2NrLCBvdXRwdXRCbG9ja10pO1xuICB9XG5cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGlucHV0IGJsb2NrIFVJIG9uIHRoZSBsZWZ0IHNpZGUgYnkgZGVmYXVsdFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZElucHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgcmV0dXJuIHRoaXMuY29udHJvbHNSb290O1xuXG4gICAgY29uc3QgZnVuY0RpdiA9IHVpLmRpdihbdGhpcy5yZW5kZXJSdW5TZWN0aW9uKHRoaXMuZnVuY0NhbGwpXSwgJ3VpLWRpdicpO1xuICAgIHVpLmVtcHR5KHRoaXMuY29udHJvbHNSb290KTtcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdW5jRGl2KTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIG91dHB1dCBibG9jay5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkT3V0cHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHVpLmVtcHR5KHRoaXMucmVzdWx0c1Jvb3QpO1xuICAgIHRoaXMucmVzdWx0c1Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5yZXN1bHRzRGl2KTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaGlzdG9yaWNhbCBydW5zIGNvbnRyb2wuXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGhpc3RvcnkgYmxvY2sgVUlcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBwdWJsaWMgYnVpbGRIaXN0b3J5QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IG1haW5BY2MgPSB1aS5hY2NvcmRpb24oKTtcbiAgICBtYWluQWNjLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgbWFpbkFjYy5hZGRUaXRsZSh1aS5zcGFuKFsnSGlzdG9yeSddKSk7XG5cbiAgICBjb25zdCBidWlsZEZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnRGF0ZScsICdBbnkgdGltZScpO1xuICAgICAgZGF0ZUlucHV0LmFkZFBhdHRlcm5NZW51KCdkYXRldGltZScpO1xuICAgICAgY29uc3QgZm9ybSA9dWkuZGl2VihbXG4gICAgICAgIHVpLnN0cmluZ0lucHV0KCdTZWFyY2gnLCAnJywgKCkgPT4ge30pLFxuICAgICAgICB1aS5jaG9pY2VJbnB1dCgnVXNlcicsICdDdXJyZW50IHVzZXInLCBbJ0N1cnJlbnQgdXNlciddKSxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgXSwgJ3VpLWZvcm0tY29uZGVuc2VkIHVpLWZvcm0nKTtcbiAgICAgIGZvcm0uc3R5bGUubWFyZ2luTGVmdCA9ICcwcHgnO1xuXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9O1xuICAgIGxldCBmaWx0ZXJQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGaWx0ZXInLCBidWlsZEZpbHRlclBhbmUpO1xuICAgIGNvbnN0IHVwZGF0ZUZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gZmlsdGVyUGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmaWx0ZXJQYW5lKTtcbiAgICAgIGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSwgaXNFeHBhbmRlZCwgZmF2b3JpdGVzTGlzdFBhbmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93QWRkVG9GYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBsZXQgdGl0bGUgPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICcnO1xuICAgICAgbGV0IGFubm90YXRpb24gPSBmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10gPz8gJyc7XG4gICAgICBjb25zdCB0aXRsZUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RpdGxlJywgdGl0bGUsIChzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGl0bGUgPSBzO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJ1RpdGxlIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdWkuZGlhbG9nKHt0aXRsZTogJ0FkZCB0byBmYXZvcml0ZXMnfSlcbiAgICAgICAgLmFkZCh1aS5mb3JtKFtcbiAgICAgICAgICB0aXRsZUlucHV0LFxuICAgICAgICAgIHVpLnN0cmluZ0lucHV0KCdBbm5vdGF0aW9uJywgYW5ub3RhdGlvbiwgKHM6IHN0cmluZykgPT4geyBhbm5vdGF0aW9uID0gczsgfSksXG4gICAgICAgIF0pKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEZWxldGVGYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ1RoZSBkZWxldGVkIHJ1biBpcyBpbXBvc3NpYmxlIHRvIHJlc3RvcmUuIEFyZSB5b3Ugc3VyZT8nKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlUnVuKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGxldCBoaXN0b3J5Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCByZW5kZXJGYXZvcml0ZUNhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgZmF2b3JpdGVDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvbGlkU3RhciA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgc29saWRTdGFyLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgIHVpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnRGVmYXVsdCB0aXRsZScsICd0aXRsZScpLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgICAgICB1aS5kaXZIKFt1aS5yZW5kZXIoZnVuY0NhbGwuYXV0aG9yKSwgdWkuc3BhbihbbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSldLCAnZGF0ZScpXSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgc29saWRTdGFyXG4gICAgICAgICAgXSwgJ2Z1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9Wy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKGZhdm9yaXRlQ2FyZHMpO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJIaXN0b3J5Q2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBoaXN0b3J5Q2FyZHMgPSBmdW5jQ2FsbHMubWFwKChmdW5jQ2FsbCkgPT4ge1xuICAgICAgICBjb25zdCBpY29uID0gZnVuY0NhbGwuYXV0aG9yLnBpY3R1cmUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGljb24uc3R5bGUud2lkdGggPSAnMjVweCc7XG4gICAgICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gJzI1cHgnO1xuICAgICAgICBpY29uLnN0eWxlLmZvbnRTaXplID0gJzIwcHgnO1xuICAgICAgICBpY29uLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzNweCc7XG4gICAgICAgIGljb24uc3R5bGUuYWxpZ25TZWxmID0gJ2NlbnRlcic7XG4gICAgICAgIGNvbnN0IHVzZXJMYWJlbCA9IHVpLmxhYmVsKGZ1bmNDYWxsLmF1dGhvci5mcmllbmRseU5hbWUsICdkNC1saW5rLWxhYmVsJyk7XG4gICAgICAgIHVpLmJpbmQoZnVuY0NhbGwuYXV0aG9yLCB1c2VyTGFiZWwpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgICAgdXNlckxhYmVsLFxuICAgICAgICAgICAgICB1aS5zcGFuKFtuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KV0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdQaW4gdGhlIHJ1bicpLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCdsaW5rJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHt3aW5kb3cubG9jYXRpb24uaHJlZn1gKTtcbiAgICAgICAgICAgIH0sICdDb3B5IGxpbmsgdG8gdGhlIHJ1bicpLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCd0cmFzaC1hbHQnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dEZWxldGVGYXZvcml0ZXNEaWFsb2coZnVuY0NhbGwpO1xuICAgICAgICAgICAgfSwgJ0RlbGV0ZSB0aGUgcnVuJyksXG4gICAgICAgICAgXSwgJ2Z1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID1bLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoaGlzdG9yeUNhcmRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRGYXZvcml0ZXNMaXN0ID0gKCkgPT4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3JpY2FsUnVucyA9IGF3YWl0IHRoaXMucHVsbFJ1bnModGhpcy5mdW5jIS5pZCk7XG4gICAgICBjb25zdCBwaW5uZWRSdW5zID0gaGlzdG9yaWNhbFJ1bnMuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10pO1xuICAgICAgaWYgKHBpbm5lZFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyRmF2b3JpdGVDYXJkcyhwaW5uZWRSdW5zKSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgZmF2b3JpdGVzJywgJ2Rlc2NyaXB0aW9uJyk7XG4gICAgfSk7XG4gICAgbGV0IGZhdm9yaXRlc0xpc3RQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGYXZvcml0ZXMnLCBidWlsZEZhdm9yaXRlc0xpc3QsIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZUZhdm9yaXRlc1BhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gZmF2b3JpdGVzTGlzdFBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoZmF2b3JpdGVzTGlzdFBhbmUpO1xuICAgICAgZmF2b3JpdGVzTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0Zhdm9yaXRlcycsIGJ1aWxkRmF2b3JpdGVzTGlzdCwgaXNFeHBhbmRlZCwgaGlzdG9yeVBhbmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZEhpc3RvcnlQYW5lID0gKCkgPT4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3JpY2FsUnVucyA9IChhd2FpdCB0aGlzLnB1bGxSdW5zKHRoaXMuZnVuYyEuaWQpKS5maWx0ZXIoKHJ1bikgPT4gIXJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10pO1xuICAgICAgaWYgKGhpc3RvcmljYWxSdW5zLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiB1aS53YWl0KCgpID0+IHJlbmRlckhpc3RvcnlDYXJkcyhoaXN0b3JpY2FsUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgZm91bmQgaW4gaGlzdG9yeScsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBoaXN0b3J5UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnSGlzdG9yeScsIGJ1aWxkSGlzdG9yeVBhbmUsIHRydWUpO1xuICAgIGNvbnN0IHVwZGF0ZUhpc3RvcnlQYW5lID0gKCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IGhpc3RvcnlQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGhpc3RvcnlQYW5lKTtcbiAgICAgIGhpc3RvcnlQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdIaXN0b3J5JywgYnVpbGRIaXN0b3J5UGFuZSwgaXNFeHBhbmRlZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5ld0hpc3RvcnlCbG9jayA9IG1haW5BY2Mucm9vdDtcbiAgICB1aS5lbXB0eSh0aGlzLmhpc3RvcnlSb290KTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdqdXN0aWZ5LWNvbnRlbnQnKTtcbiAgICB0aGlzLmhpc3RvcnlSb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuYXBwZW5kKG5ld0hpc3RvcnlCbG9jayk7XG4gICAgcmV0dXJuIG5ld0hpc3RvcnlCbG9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyBmb3Ige0BsaW5rIHN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9IG1lbWJlcnMgYW5kIGNyZWF0ZXMgcmliYm9uIHBhbmVsXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudHMgb2YgcmliYm9uUGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgYnVpbGRSaWJib25QYW5lbHMoKTogSFRNTEVsZW1lbnRbXVtdIHtcbiAgICBjb25zdCBoaXN0b3J5QnV0dG9uID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnZDQtY3VycmVudCcpO1xuICAgICAgZ3Jvay5zaGVsbC5vID0gdGhpcy5oaXN0b3J5Um9vdDtcbiAgICB9KTtcblxuICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtdG9nZ2xlLWJ1dHRvbicpO1xuICAgIGlmIChncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXMpIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtY3VycmVudCcpO1xuXG4gICAgY29uc3QgY2xvbmVSdW5CdG4gPSB1aS5idXR0b24oJ0Nsb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5jbG9uZVJ1bkFzQ3VycmVudCgpO1xuICAgIH0sICdDbG9uZSB0aGUgcnVuJyk7XG5cbiAgICBjb25zdCBuZXdSaWJib25QYW5lbHMgPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXSxcbiAgICAgIGhpc3RvcnlCdXR0b24sXG4gICAgICAuLi50aGlzLmZ1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXT8gW2Nsb25lUnVuQnRuXTogW10sXG4gICAgICBdXG4gICAgXTtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9QaW46IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclJlbW92ZVJ1bkZyb21GYXZvcml0ZXMocGlubmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHVzdWFsIHJ1blxuICAgKiBAcGFyYW0gY2FsbFRvVW5mYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1snYW5ub3RhdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIGNvbnN0IHBpbm5lZFNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhwaW5uZWRTYXZlKTtcbiAgICByZXR1cm4gcGlubmVkU2F2ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb1BpbjogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMocGlubmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIGZhdm9yaXRlXG4gICAqIEBwYXJhbSBjYWxsVG9GYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gYWRkIHRvIGZhdm9yaXRlc1xuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIGFkZFJ1blRvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9GYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZSk7XG4gICAgY29uc3Qgc2F2ZWRGYXZvcml0ZSA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9GYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoc2F2ZWRGYXZvcml0ZSk7XG4gICAgcmV0dXJuIHNhdmVkRmF2b3JpdGU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVTYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9TYXZlIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2F2ZSk7XG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMucGF0aCA9IGA/aWQ9JHtzYXZlZENhbGwuaWR9YDtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbCk7XG4gICAgcmV0dXJuIHNhdmVkQ2FsbDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckRlbGV0ZVJ1bihkZWxldGVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIElEIG9mIGRlbGV0ZWQgaGlzdG9yaWNhbCBydW5cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBkZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZGVsZXRlKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgcmV0dXJuIGNhbGxUb0RlbGV0ZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVMb2FkUnVuKCkge31cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsIEZ1bmNDYWxsIGZldGNoZWQgZnJvbSBzZXJ2ZXIgZHVyaW5nIHtAbGluayBsb2FkUnVufVxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyTG9hZFJ1bihmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHt9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaGlzdG9yaWNhbCBydW4uIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsSWQgSUQgb2YgRnVuY0NhbGwgdG8gbG9vayBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgICBwdWxsZWRSdW4ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBjbG9uZVJ1bkFzQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBGdW5jY2FsbCBpcyBub3Qgc2V0Jyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgICBjb25zdCBjbG9uZWRGdW5jY2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5uZXdJZCgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoY2xvbmVkRnVuY2NhbGwpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckNsb25lUnVuQXNDdXJyZW50KCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJsYXlEaXYgPSB1aS5kaXYoW10sIHtzdHlsZToge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyYXknLFxuICAgICdvcGFjaXR5JzogJzAuMDcnLFxuICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgJ2JvdHRvbSc6ICcwJyxcbiAgICAnbGVmdCc6ICcwJyxcbiAgICAncmlnaHQnOiAnMCcsXG4gICAgJ3RvcCc6ICcwJyxcbiAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJ1xuICB9fSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seUV2ZW50TGlzdGVuZXJzID0gW1xuICAgIChldjogTW91c2VFdmVudCk9PiB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdDbG9uZSB0aGUgcnVuIHRvIGVkaXQgaXQnKTtcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3UmVhZG9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucmVhZG9ubHlFdmVudExpc3RlbmVyc1swXSk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gIH1cblxuICBwcml2YXRlIHNldFJ1blZpZXdFZGl0YWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5yZWFkb25seUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucyhmdW5jSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZmlsdGVyKGBmdW5jLmlkPVwiJHtmdW5jSWR9XCJgKS5pbmNsdWRlKCdzZXNzaW9uLnVzZXIsIG9wdGlvbnMnKTtcbiAgICBjb25zdCBsaXN0ID0gZmlsdGVyLmxpc3Qoe3BhZ2VTaXplOiAyMH0pO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICAgIHRoaXMubGFzdENhbGwubmV3SWQoKTtcbiAgICAgIGF3YWl0IHRoaXMubGFzdENhbGwuY2FsbCh0cnVlLCB1bmRlZmluZWQsIHtwcm9jZXNzZWQ6IHRydWV9KTsgLy8gbXV0YXRlcyB0aGUgbGFzdENhbGwgZmllbGRcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmxhc3RDYWxsKTtcbiAgICB9IGNhdGNoIChlKSB7XG5cbiAgICB9XG5cbiAgICB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnRGaWxlbmFtZSA9IChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IC0gJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9LiR7dGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEV4dGVuc2lvbnNbZm9ybWF0XX1gO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0V4Y2VsJzogJ3hsc3gnXG4gICAgfTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIFsnRXhjZWwnXTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydCA9IGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGxhc3RDYWxsID0gdGhpcy5sYXN0Q2FsbDtcbiAgICBpZiAoIWxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkYCk7XG5cbiAgICBpZiAoIXRoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHRocm93IG5ldyBFcnJvcihgRm9ybWF0IFwiJHtmb3JtYXR9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcblxuICAgIGlmICghdGhpcy5mdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgY29uc3QgQkxPQl9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGV4cG9ydFdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcblxuICAgIGNvbnN0IGlzU2NhbGFyVHlwZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAoREcuVFlQRVNfU0NBTEFSLmhhcyh0eXBlKSk7XG5cbiAgICBjb25zdCBpc0RhdGFGcmFtZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAodHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc0RhdGFGcmFtZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzU2NhbGFyVHlwZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNEYXRhRnJhbWUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhck91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNTY2FsYXJUeXBlKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcblxuICAgIGNvbnN0IGlucHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG4gICAgY29uc3Qgb3V0cHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuXG4gICAgZGZJbnB1dHMuZm9yRWFjaCgoZGZJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZJbnB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhcklucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlucHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdJbnB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChpbnB1dFNjYWxhcnNTaGVldCwgc2NhbGFySW5wdXRzLm1hcCgoc2NhbGFySW5wdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhcklucHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJJbnB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwuaW5wdXRzW3NjYWxhcklucHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFySW5wdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgZGZPdXRwdXRzLmZvckVhY2goKGRmT3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZPdXRwdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuXG4gICAgaWYgKHNjYWxhck91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ091dHB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChvdXRwdXRTY2FsYXJzU2hlZXQsIHNjYWxhck91dHB1dHMubWFwKChzY2FsYXJPdXRwdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhck91dHB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFyT3V0cHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5vdXRwdXRzW3NjYWxhck91dHB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhck91dHB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJDb250cm9sID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbDtcbiAgICBpZiAodGFiQ29udHJvbCkge1xuICAgICAgZm9yIChjb25zdCB0YWJMYWJlbCBvZiB0aGlzLnRhYnNMYWJlbHMpIHtcbiAgICAgICAgdGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRhYkNvbnRyb2wuZ2V0UGFuZSh0YWJMYWJlbCk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgICBpZiAodGFiTGFiZWwgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0UGFyYW0gb2YgaW5wdXRQYXJhbXMuZmlsdGVyKChpbnB1dFBhcmFtKSA9PiBpbnB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSAoaW5wdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmSW5wdXQgPSBkZklucHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gaW5wdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmSW5wdXQhLm9wdGlvbnMuY2FwdGlvbiB8fCBpbnB1dFBhcmFtLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnJvb3QucGFyZW50RWxlbWVudD8uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5nZXQoaW5wdXRQYXJhbS5uYW1lKT8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBvdXRwdXRQYXJhbSBvZiBvdXRwdXRQYXJhbXMuZmlsdGVyKChvdXRwdXRQYXJhbSkgPT4gb3V0cHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgb3V0cHV0UGFyYW0ucHJvcGVydHkuY2F0ZWdvcnkgPT09IHRhYkxhYmVsKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSAob3V0cHV0UGFyYW0uYXV4Wyd2aWV3ZXJzJ10gYXMgREcuVmlld2VyW10pLmZpbHRlcigodmlld2VyKSA9PiB2aWV3ZXIudHlwZSAhPT0gREcuVklFV0VSLkdSSUQpO1xuXG4gICAgICAgICAgICBjb25zdCBkZk91dHB1dCA9IGRmT3V0cHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gb3V0cHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IG91dHB1dFBhcmFtLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChvdXRwdXRQYXJhbS5uYW1lKT8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCA1MCkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBleHBvcnRXb3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBCTE9CX1RZUEV9KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0IGlzSW5wdXRQYW5lbFJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmM/LmlucHV0cy5zb21lKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0UGFyYW1DYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5uZXcgU2V0KHRoaXMuZnVuYyEub3V0cHV0cy5tYXAoKHApID0+IHAuY2F0ZWdvcnkpKSAvLyBnZXQgYWxsIG91dHB1dCBwYXJhbXMnIGNhdGVnb3JpZXNcbiAgICBdOyAvLyBrZWVwIG9ubHkgdW5pcXVlIG9mIHRoZW1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0cHV0VGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5vdXRQYXJhbUNhdGVnb3JpZXMsXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcy5maW5kKCh2YWwpID0+IHZhbCA9PT0gJ01pc2MnKSA/IFsnT3V0cHV0J10gOiBbXSwgLy8gaWYgbm8gY2F0ZWdvcmllcyBhcmUgc3RhdGVkLCB0aGUgZGVmYXVsdCBjYXRlZ29yeSBpcyBhZGRlZFxuICAgIF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1Ub0NhdGVnb3J5TWFwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcGFyYW1Ub0NhdGVnb3J5TWFwKCkge1xuICAgIGNvbnN0IG1hcCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICBpZiAodGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZClcbiAgICAgIHRoaXMuZnVuYyEuaW5wdXRzLmZvckVhY2goKHApID0+IG1hcFsnSW5wdXQnXSA/IG1hcFsnSW5wdXQnXS5wdXNoKHAubmFtZSk6IG1hcFsnSW5wdXQnXSA9IFtwLm5hbWVdKTtcblxuICAgIHRoaXMuZnVuYyEub3V0cHV0cy5mb3JFYWNoKChwKSA9PiBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldID8gbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XS5wdXNoKHAubmFtZSkgOiBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldID0gW3AubmFtZV0pO1xuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIHJlbmRlclJ1blNlY3Rpb24oY2FsbDogREcuRnVuY0NhbGwpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcnVuQnV0dG9uID0gdWkuYmlnQnV0dG9uKCdSdW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNhbGwuYXV4Wyd2aWV3J10gPSB0aGlzLmRhcnQ7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuY2xhc3NMaXN0LmFkZCgndWktZm9ybScpO1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHVpLmRpdkgoW3J1bkJ1dHRvbl0sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2Vlbid9fSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlc3VsdHMoc3dpdGNoVG9PdXRwdXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMudGFic0xhYmVscztcblxuICAgIGlmICgoY2F0ZWdvcmllcy5sZW5ndGggPiAxIHx8IChjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXNbMF0gIT0gJ01pc2MnKSkpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgPSBERy5UYWJDb250cm9sLmNyZWF0ZSgpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFRhYnMuaGFzKGMpKVxuICAgICAgICAgIHRoaXMucmVzdWx0VGFicy5zZXQoYywgdWkuZGl2KFtdLCAndWktcGFuZWwsIGdyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKSk7XG4gICAgICAgIGxldCBuYW1lID0gYztcbiAgICAgICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgY2F0ZWdvcmllcy5sZW5ndGggPT0gMiAmJiBjID09ICdNaXNjJylcbiAgICAgICAgICBuYW1lID0gJ09VVFBVVCc7XG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuYWRkUGFuZShuYW1lLCAoKSA9PiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGMpID8/IHVpLmRpdigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgJiYgdGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBzd2l0Y2hUb091dHB1dClcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucGFuZXNbMV07XG4gICAgICB0aGlzLnJlc3VsdHNEaXYgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnJvb3Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHModHJ1ZSk7XG4gICAgZm9yIChjb25zdCBwIG9mIGNhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkge1xuICAgICAgcC5wcm9jZXNzT3V0cHV0KCk7XG4gICAgICBpZiAocC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAudmFsdWUgIT0gbnVsbClcbiAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgICAgZWxzZSB0aGlzLmFwcGVuZFJlc3VsdFNjYWxhcihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgfVxuXG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZSBzd2l0Y2hjZXMgb2YgdGhlaXIgdmlld2Vycy9ncmlkc1xuICBwcml2YXRlIHBhcmFtR3JpZFN3aXRjaGVzOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZWlyIHZpZXdlcnMgcGxhY2VkIG9uIERPTVxuICBwcml2YXRlIGV4aXN0aW5nUGFyYW1WaWV3ZXJzOiBNYXA8c3RyaW5nLCBERy5WaWV3ZXJbXT4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZWlyIGh0bWwgZWxlbWVudHNcbiAgcHJpdmF0ZSBwYXJhbVNwYW5zOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHRhYiBuYW1lcyB0byB0aGVpciBjb250ZW50XG4gIHByaXZhdGUgcmVzdWx0VGFiczogTWFwPFN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlc3VsdHNUYWJDb250cm9sOiBERy5UYWJDb250cm9sIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIHByb3RlY3RlZCBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KG51bGwsIHtzdHlsZToge21heFdpZHRoOiAnMzcwcHgnfX0pO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG4gIHByb3RlY3RlZCBpbnB1dHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpO1xuXG4gIHByaXZhdGUgYXBwZW5kT3V0cHV0RGYocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHBhcmFtRGYgPSBwYXJhbS52YWx1ZSBhcyBERy5EYXRhRnJhbWU7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucz8uaGVpZ2h0ID8/IDQwMDtcbiAgICBjb25zdCBwYXJhbVZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107IC8vIHN0b3JpbmcgdGhlIHZpZXdlcnMgb2YgRGZcbiAgICBjb25zdCBwYXJhbUNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uID8/IHBhcmFtLmF1eFsndmlld2VyVGl0bGUnXSA/PyBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uID8/ICcnO1xuICAgIGxldCBleGlzdGluZ1ZpZXdlcnMgPSB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gcGFyYW1EZjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ1ZpZXdlcnMgPz89IFtdO1xuICAgIHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHBhcmFtVmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHBhcmFtVmlld2Vycy5wdXNoKHBhcmFtRGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3Qgdmlld2Vyc1RvSGlkZTogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrV2lkdGg6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG5cbiAgICBjb25zdCBpc0dyaWRTd2l0Y2hhYmxlID0gd3UocGFyYW1WaWV3ZXJzKS5ldmVyeSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWwgPSBwYXJhbUNhcHRpb24gPz8gcGFyYW1EZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAoaGVhZGVyTGFiZWwgIT0gJycpIHtcbiAgICAgICAgY29uc3QgaCA9IHVpLmgxKGhlYWRlckxhYmVsKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IGhlYWRlckxhYmVsKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwodmlld2Vyc1RvSGlkZSwgdmlld2Vyc1RvSGlkZS5zb21lKCh2aWV3ZXIpID0+IHZpZXdlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBncmlkV3JhcHBlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpO1xuICAgICAgICB9LCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5zZXQocGFyYW0ubmFtZSwgaWNvbik7XG4gICAgICB9XG4gICAgICBpZiAoIWdyb2suc2hlbGwudGFibGVzLmluY2x1ZGVzKHBhcmFtRGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhwYXJhbURmKTtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgdmlld2VyIG9mIHBhcmFtVmlld2Vycykge1xuICAgICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IHBhcmFtRGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgICB2LmFkZFZpZXdlcihuZXdWaWV3ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdBZGQgdG8gd29ya3NwYWNlJ1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgIGNvbnN0IGdyaWQgPSBwYXJhbURmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ3JpZC5yb290KTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKGdyaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcigpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5kaXZIKFtdLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcbiAgICBwYXJhbVZpZXdlcnMuZm9yRWFjaCgodmlld2VyKSA9PiB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV4aXN0aW5nVmlld2VycyEucHVzaCh2aWV3ZXIpO1xuICAgICAgY29uc3Qgdmlld2VyU2l6ZSA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDsgLy8gZ2V0dGluZyBgKGJsb2NrOiAyNSlgIHZhbHVlOyBpZiBub3QgZGVmaW5lZCwgaXQgaXMgMTAwXG5cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHZpZXdlci5yb290LmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7dmlld2VyU2l6ZX1gKTtcbiAgICAgIGlmIChibG9ja3MgKyB2aWV3ZXJTaXplIDw9IDEwMCkge1xuICAgICAgICB2aWV3ZXJzVG9IaWRlLnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrV2lkdGggKz0gdmlld2VyU2l6ZTtcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSB2aWV3ZXJTaXplO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBibG9jayA9IHVpLmRpdlYoW2hlYWRlciwgd3JhcHBlciwgZ3JpZFdyYXBwZXJdLCB7c3R5bGU6IHtoZWlnaHQ6IGAke2hlaWdodH1weGAsIHdpZHRoOiBgJHtibG9ja1dpZHRofSVgfX0pO1xuICAgIGJsb2NrLmNsYXNzTGlzdC5hZGQoJ3VpLWJveCcpO1xuICAgIHRoaXMuYXBwZW5kUmVzdWx0RWxlbWVudChibG9jaywgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRTY2FsYXIocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM6IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBzcGFuID0gdWkuc3BhbihbYCR7b3B0aW9ucy5jYXB0aW9uID8/IHBhcmFtLm5hbWV9OiBgLCBgJHtwYXJhbS52YWx1ZX1gXSk7XG4gICAgaWYgKCF0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzVGFiQ29udHJvbClcbiAgICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChvcHRpb25zLmNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKT8ucmVwbGFjZVdpdGgoc3Bhbik7XG4gICAgfVxuICAgIHRoaXMucGFyYW1TcGFucy5zZXQocGFyYW0ubmFtZSwgc3Bhbik7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdEVsZW1lbnQoZDogSFRNTEVsZW1lbnQsIGNhdGVnb3J5Pzogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ICE9IG51bGwgJiYgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkgIT0gbnVsbClcbiAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChkKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoZCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIGNvbnNvbGUubG9nKGRmKTtcbiAgc2hlZXQuYWRkUm93KGRmLmNvbHVtbnMubmFtZXMoKSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5yb3dDb3VudDsgaSsrKVxuICAgIHNoZWV0LmFkZFJvdyhbLi4uZGYucm93KGkpLmNlbGxzXS5tYXAoKGNlbGw6IERHLkNlbGwpID0+IGNlbGwudmFsdWUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID1cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIGRmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lLmxlbmd0aFxuICAgICAgKSAqIDEuMjtcbiAgfVxufTtcblxuY29uc3QgcGxvdFRvU2hlZXQgPSBhc3luYyAoZXhwb3J0V2I6IEV4Y2VsSlMuV29ya2Jvb2ssIHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgcGxvdDogSFRNTEVsZW1lbnQsIGNvbHVtbkZvckltYWdlOiBudW1iZXIsIHJvd0ZvckltYWdlOiBudW1iZXIgPSAwKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKHBsb3QgYXMgSFRNTEVsZW1lbnQsIHtsb2dnaW5nOiBmYWxzZX0pO1xuICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG5cbiAgY29uc3QgaW1hZ2VJZCA9IGV4cG9ydFdiLmFkZEltYWdlKHtcbiAgICBiYXNlNjQ6IGRhdGFVcmwsXG4gICAgZXh0ZW5zaW9uOiAncG5nJyxcbiAgfSk7XG4gIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcbiAgICB0bDoge2NvbDogY29sdW1uRm9ySW1hZ2UsIHJvdzogcm93Rm9ySW1hZ2V9LFxuICAgIGV4dDoge3dpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodH0sXG4gIH0pO1xufTtcbiJdfQ==