@datagrok-libraries/utils 1.9.1 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "1.9.1",
7
+ "version": "1.9.2",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "fast-sha256": "^1.3.0",
@@ -1 +1 @@
1
- {"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}
@@ -479,7 +479,7 @@ export class FunctionView extends DG.ViewBase {
479
479
  }), 'Add to favorites'),
480
480
  ui.iconFA('link', (ev) => __awaiter(this, void 0, void 0, function* () {
481
481
  ev.stopPropagation();
482
- yield navigator.clipboard.writeText(`${window.location.href}`);
482
+ yield navigator.clipboard.writeText(`${window.location.origin}${window.location.pathname}?id=${funcCall.id}`);
483
483
  }), 'Copy link to the run'),
484
484
  ui.iconFA('trash-alt', (ev) => __awaiter(this, void 0, void 0, function* () {
485
485
  ev.stopPropagation();
@@ -711,6 +711,10 @@ export class FunctionView extends DG.ViewBase {
711
711
  return __awaiter(this, void 0, void 0, function* () {
712
712
  yield this.onBeforeLoadRun();
713
713
  const pulledRun = yield grok.dapi.functions.calls.include('inputs, outputs').find(funcCallId);
714
+ // FIX ME: manually get script since pulledRun contains empty Func
715
+ const script = yield grok.dapi.functions.find(pulledRun.func.id);
716
+ //@ts-ignore
717
+ window.grok_FuncCall_Set_Func(pulledRun.dart, script.dart);
714
718
  pulledRun.options['isHistorical'] = true;
715
719
  const dfOutputs = wu(pulledRun.outputParams.values())
716
720
  .filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
@@ -1069,4 +1073,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
1069
1073
  ext: { width: canvas.width, height: canvas.height },
1070
1074
  });
1071
1075
  });
1072
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFekI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQzNDO2dCQUFDLE9BQU8sR0FBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sR0FBRyxDQUFDO2lCQUNYO1lBQ0gsQ0FBQztTQUFBLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUV0RCxNQUFNLE9BQU8sWUFBYSxTQUFRLEVB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QUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFcEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDckYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDMUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDekYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFFOUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQXVCLENBQUM7WUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQXVCLENBQUM7WUFFL0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMs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QUFXLENBQUMsSUFBbUIsRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XG5pbXBvcnQgaHRtbDJjYW52YXMgZnJvbSAnaHRtbDJjYW52YXMnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCAkIGZyb20gJ2Nhc2gtZG9tJztcblxuLyoqXG4gICAqIERlY29yYXRvciB0byBwYXNzIGFsbCB0aHJvd24gZXJyb3JzIHRvIGdyb2suc2hlbGwuZXJyb3JcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jY2FsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNvbnN0IHBhc3NFcnJvclRvU2hlbGwgPSAoKSA9PiB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIG1lbWJlck5hbWU6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBkZXNjcmlwdG9yLnZhbHVlO1xuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgb3JpZ2luYWwuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoKGVyciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IElOVEVSQUNUSVZFX0NTU19DTEFTUyA9ICdjdi1pbnRlcmFjdGl2ZSc7XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvblZpZXcgZXh0ZW5kcyBERy5WaWV3QmFzZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb250ZXh0OiBERy5Db250ZXh0O1xuICBwcm90ZWN0ZWQgX2Z1bmNDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfbGFzdENhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF90eXBlOiBzdHJpbmcgPSAnZnVuY3Rpb24nO1xuXG4gIGNvbnN0cnVjdG9yKGZ1bmNDYWxsPzogREcuRnVuY0NhbGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYm94ID0gdHJ1ZTtcbiAgICB0aGlzLmNvbnRleHQgPSBERy5Db250ZXh0LmNsb25lRGVmYXVsdCgpO1xuXG4gICAgaWYgKCFmdW5jQ2FsbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5iYXNlUGF0aCA9IGAvJHtmdW5jQ2FsbC5mdW5jLm5hbWV9YDtcbiAgICB0aGlzLmxpbmtGdW5jY2FsbChmdW5jQ2FsbCk7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5idWlsZCgpO1xuICAgIHRoaXMubmFtZSA9IGZ1bmNDYWxsLmZ1bmMuZnJpZW5kbHlOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgb2YgdGhlIHZpZXdcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jY2FsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IGZ1bmNDYWxsKCk6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY0NhbGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEZ1bmMgb2YgdGhlIHZpZXdcbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBmdW5jKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmNDYWxsPy5mdW5jO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkYXRhIG9mIGxhc3QgY2FsbCBvZiBhc3NvY2lhdGVkIGZ1bmN0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgbGFzdENhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkYXRhIG9mIGxhc3QgY2FsbCBvZiBhc3NvY2lhdGVkIGZ1bmN0aW9uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgc2V0IGxhc3RDYWxsKGxhc3RDYWxsOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2xhc3RDYWxsID0gbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogVmlldyB0eXBlXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICAvKiogRXhwb3J0IG9wdGlvbnMuIENvdWxkIGJlIG92ZXJyaWRlbiBwYXJ0aWFsbHksIHVzaW5nIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBvcHRpb24uXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAqL1xuICBleHBvcnRDb25maWc6IHtcbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZXhwb3J0IGxvZ2ljLlxuICAgICAgKlxuICAgICAgKiAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB7QGxpbmsgZGVmYXVsdEV4cG9ydH0gaGVhdmlseSByZWxpZXMgb24gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIGJ1aWxkSU99LlxuICAgICAgKiBAcmV0dXJucyBCbG9iIHdpdGggZGF0YSB0byBiZSBleHBvcnRlZCBpbnRvIHRoZSBmaWxlLlxuICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgZXhwb3J0OiAoKGZvcm1hdDogc3RyaW5nKSA9PiBQcm9taXNlPEJsb2I+KTtcblxuXG4gICAgLyoqIEZpbGVuYW1lIGZvciBleHBvcnRlZCBmaWxlcy4gT3ZlcnJpZGUgZm9yIGN1c3RvbSBmaWxlbmFtZXMuXG4gICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRFeHBvcnRGaWxlbmFtZX1cbiAgICAgICogQHBhcmFtIGZvcm1hdCBGb3JtYXQgbmFtZSB0byBiZSBleHBvcnRlZFxuICAgICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZpbGVuYW1lIHRvIGJlIHVzZWQgZm9yIHRoZSBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGZpbGVuYW1lOiAoKGZvcm1hdDogc3RyaW5nKSA9PiBzdHJpbmcpO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGxpc3Qgb2Ygc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzLlxuICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfVxuICAgICAqIFRoZXNlIGZvcm1hdHMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgXCJFeHBvcnRcIiBwb3B1cCBvbiB0aGUgcmliYm9uIHBhbmVsLlxuICAgICAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBmb3JtYXRzIGF2YWlsYWJsZSBmb3IgdGhlIGV4cG9ydC5cbiAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICovXG4gICAgc3VwcG9ydGVkRm9ybWF0czogc3RyaW5nW107XG5cbiAgICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZmlsZSBleHRlbnNpb25zIGZvciBleHBvcnRlZCBmb3JtYXRzLlxuICAgICAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyB7QGxpbmsgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnN9XG4gICAgICAgKiBUaGVzZSBleHRlbnNpb25zIGFyZSB1c2VkIGluIGZpbGVuYW1lcyB7QGxpbmsgZXhwb3J0RmlsZW5hbWV9LlxuICAgICAgICogQHJldHVybnMgVGhlIG1hcHBpbmcgYmV0d2VlbiBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMgYW5kIHRoZWlyIGV4dGVuc2lvbnMuXG4gICAgICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgICAqL1xuICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogTGluayBGdW5jQ2FsbCB0byB0aGUgdmlld1xuICAgKiBAcGFyYW0gZnVuY0NhbGwgVGhlIGFjdHVhbCBmdW5jY2FsbCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgbGlua0Z1bmNjYWxsKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGlzUHJldmlvdXNIaXN0b3JpY2FsID0gdGhpcy5fZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddO1xuICAgIHRoaXMuX2Z1bmNDYWxsID0gZnVuY0NhbGw7XG5cbiAgICBpZiAoZnVuY0NhbGwub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10pIHtcbiAgICAgIGlmICghaXNQcmV2aW91c0hpc3RvcmljYWwpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lfSDigJQgJHtmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/IG5ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pfWA7XG4gICAgICAgIHRoaXMuc2V0UnVuVmlld1JlYWRvbmx5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5hbWUgPSBgJHt0aGlzLm5hbWUuc3Vic3RyaW5nKDAsIHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpKX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVggTUU6IHZpZXcgbmFtZSBkb2VzIG5vdCBjaGFuZ2UgaW4gbW9kZWxzXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuZDQtcmliYm9uLW5hbWUnKT8ucmVwbGFjZUNoaWxkcmVuKHVpLnNwYW4oW3RoaXMubmFtZV0pKTtcbiAgICAgIHRoaXMucGF0aCA9IGA/aWQ9JHt0aGlzLl9mdW5jQ2FsbC5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFJ1blZpZXdFZGl0YWJsZSgpO1xuICAgICAgdGhpcy5wYXRoID0gYGA7XG5cbiAgICAgIGlmIChpc1ByZXZpb3VzSGlzdG9yaWNhbClcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSl9YDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFJpYmJvblBhbmVscygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBmb3IgY3VzdG9tIGxvZ2ljIHRoYXQgY291bGQgbm90IGJlIHBsYWNlZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAqIEFueSBhc3luYyBtZXRob2RzIGFuZCBtb3N0IG9mIHRoZSBsb2dpYyBzaG91bGQgYmUgcGxhY2VkIGhlcmUuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuZnVuY0NhbGwgJiYgdGhpcy5mdW5jKSB7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmF1eFsndmlldyddID0gdGhpcztcbiAgICAgIHRoaXMuZnVuY0NhbGwuY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgZm9yIChjb25zdCBpblBhcmFtIG9mIHd1KHRoaXMuZnVuY0NhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAuZmlsdGVyKChwOiBERy5GdW5jQ2FsbFBhcmFtKSA9PlxuICAgICAgICAgIHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnByb3BlcnR5Lm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluUGFyYW0ub25DaGFuZ2VkLnN1YnNjcmliZShhc3luYyAocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0pID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyUmVzdWx0cyhmYWxzZSk7XG4gICAgICAgICAgcGFyYW0ucHJvY2Vzc091dHB1dCgpO1xuXG4gICAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwYXJhbSwge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MDAsXG4gICAgICAgICAgICBjYXRlZ29yeTogJ0lucHV0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGZ1bGx5IGN1c3RvbSBVSSBpbmNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBidWlsZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZElPKCkpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlEaXYpO1xuXG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMuYnVpbGRSaWJib25NZW51KCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0LW91dHB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCB3aG9sZSBVSSBleGNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJTygpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5leHBvcnRDb25maWcgPSB7XG4gICAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zKCksXG4gICAgICBzdXBwb3J0ZWRGb3JtYXRzOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzKCksXG4gICAgICBleHBvcnQ6IHRoaXMuZGVmYXVsdEV4cG9ydCxcbiAgICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgaW5wdXRCbG9jayA9IHRoaXMuYnVpbGRJbnB1dEJsb2NrKCk7XG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcblxuICAgIHJldHVybiB1aS5zcGxpdEgoW2lucHV0QmxvY2ssIG91dHB1dEJsb2NrXSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG5cbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5mdW5jQ2FsbCldLCAndWktZGl2Jyk7XG4gICAgdWkuZW1wdHkodGhpcy5jb250cm9sc1Jvb3QpO1xuICAgIHRoaXMuY29udHJvbHNSb290LmFwcGVuZENoaWxkKGZ1bmNEaXYpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gb3V0cHV0IGJsb2NrLlxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRPdXRwdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgdWkuZW1wdHkodGhpcy5yZXN1bHRzUm9vdCk7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5hcHBlbmRDaGlsZCh0aGlzLnJlc3VsdHNEaXYpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgY29udHJvbC5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaGlzdG9yeSBibG9jayBVSVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZEhpc3RvcnlCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbWFpbkFjYyA9IHVpLmFjY29yZGlvbigpO1xuICAgIG1haW5BY2Mucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBtYWluQWNjLmFkZFRpdGxlKHVpLnNwYW4oWydIaXN0b3J5J10pKTtcblxuICAgIGNvbnN0IGJ1aWxkRmlsdGVyUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdEYXRlJywgJ0FueSB0aW1lJyk7XG4gICAgICBkYXRlSW5wdXQuYWRkUGF0dGVybk1lbnUoJ2RhdGV0aW1lJyk7XG4gICAgICBjb25zdCBmb3JtID11aS5kaXZWKFtcbiAgICAgICAgdWkuc3RyaW5nSW5wdXQoJ1NlYXJjaCcsICcnLCAoKSA9PiB7fSksXG4gICAgICAgIHVpLmNob2ljZUlucHV0KCdVc2VyJywgJ0N1cnJlbnQgdXNlcicsIFsnQ3VycmVudCB1c2VyJ10pLFxuICAgICAgICBkYXRlSW5wdXQsXG4gICAgICBdLCAndWktZm9ybS1jb25kZW5zZWQgdWktZm9ybScpO1xuICAgICAgZm9ybS5zdHlsZS5tYXJnaW5MZWZ0ID0gJzBweCc7XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH07XG4gICAgbGV0IGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSk7XG4gICAgY29uc3QgdXBkYXRlRmlsdGVyUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmaWx0ZXJQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGZpbHRlclBhbmUpO1xuICAgICAgZmlsdGVyUGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnRmlsdGVyJywgYnVpbGRGaWx0ZXJQYW5lLCBpc0V4cGFuZGVkLCBmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgICBsZXQgYW5ub3RhdGlvbiA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA/PyAnJztcbiAgICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgICB0aXRsZSA9IHM7XG4gICAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnQWRkIHRvIGZhdm9yaXRlcyd9KVxuICAgICAgICAuYWRkKHVpLmZvcm0oW1xuICAgICAgICAgIHRpdGxlSW5wdXQsXG4gICAgICAgICAgdWkuc3RyaW5nSW5wdXQoJ0Fubm90YXRpb24nLCBhbm5vdGF0aW9uLCAoczogc3RyaW5nKSA9PiB7IGFubm90YXRpb24gPSBzOyB9KSxcbiAgICAgICAgXSkpXG4gICAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAodGl0bGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUaXRsZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RlbGV0ZUZhdm9yaXRlc0RpYWxvZyA9IChmdW5jQ2FsbDogREcuRnVuY0NhbGwpID0+IHtcbiAgICAgIHVpLmRpYWxvZyh7dGl0bGU6ICdEZWxldGUgcnVuJ30pXG4gICAgICAgIC5hZGQodWkuZGl2VGV4dCgnVGhlIGRlbGV0ZWQgcnVuIGlzIGltcG9zc2libGUgdG8gcmVzdG9yZS4gQXJlIHlvdSBzdXJlPycpKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVSdW4oZnVuY0NhbGwpO1xuICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgICB9O1xuXG4gICAgbGV0IGhpc3RvcnlDYXJkcyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gICAgbGV0IGZhdm9yaXRlQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IHJlbmRlckZhdm9yaXRlQ2FyZHMgPSBhc3luYyAoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSA9PiB7XG4gICAgICBmYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHtcbiAgICAgICAgY29uc3Qgc29saWRTdGFyID0gdWkuaWNvbkZBKCdzdGFyJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICAgIHVwZGF0ZUZhdm9yaXRlc1BhbmUoKTtcbiAgICAgICAgfSwgJ1VuZmF2b3JpdGUgdGhlIHJ1bicpO1xuICAgICAgICBzb2xpZFN0YXIuY2xhc3NMaXN0LmFkZCgnZmFzJyk7XG5cbiAgICAgICAgY29uc3QgY2FyZCA9IHVpLmRpdkgoW1xuICAgICAgICAgIHVpLmRpdlYoW1xuICAgICAgICAgICAgdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICdEZWZhdWx0IHRpdGxlJywgJ3RpdGxlJyksXG4gICAgICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snYW5ub3RhdGlvbiddKSA/IFt1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSwgJ2Rlc2NyaXB0aW9uJyldOiBbXSxcbiAgICAgICAgICAgIHVpLmRpdkgoW3VpLnJlbmRlcihmdW5jQ2FsbC5hdXRob3IpLCB1aS5zcGFuKFtuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KV0sICdkYXRlJyldKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgIHVpLmljb25GQSgncGVuJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzaG93QWRkVG9GYXZvcml0ZXNEaWFsb2coZnVuY0NhbGwpO1xuICAgICAgICAgICAgfSwgJ0VkaXQgcnVuIG1ldGFkYXRhJyksXG4gICAgICAgICAgICBzb2xpZFN0YXJcbiAgICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZC1pY29ucycpXG4gICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxpbmtGdW5jY2FsbChhd2FpdCB0aGlzLmxvYWRSdW4oZnVuY0NhbGwuaWQpKTtcbiAgICAgICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYXJkO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID1bLi4uaGlzdG9yeUNhcmRzLCAuLi5mYXZvcml0ZUNhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGNhcmQpID0+IGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSkpKTtcblxuICAgICAgcmV0dXJuIHVpLmRpdlYoZmF2b3JpdGVDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlckhpc3RvcnlDYXJkcyA9IGFzeW5jIChmdW5jQ2FsbHM6IERHLkZ1bmNDYWxsW10pID0+IHtcbiAgICAgIGhpc3RvcnlDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWNvbi5zdHlsZS53aWR0aCA9ICcyNXB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5oZWlnaHQgPSAnMjVweCc7XG4gICAgICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgICAgIGljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnM3B4JztcbiAgICAgICAgaWNvbi5zdHlsZS5hbGlnblNlbGYgPSAnY2VudGVyJztcbiAgICAgICAgY29uc3QgdXNlckxhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwuYXV0aG9yLmZyaWVuZGx5TmFtZSwgJ2Q0LWxpbmstbGFiZWwnKTtcbiAgICAgICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIHVzZXJMYWJlbCk7XG5cbiAgICAgICAgY29uc3QgY2FyZCA9IHVpLmRpdkgoW1xuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgIHVpLmRpdlYoW1xuICAgICAgICAgICAgICB1c2VyTGFiZWwsXG4gICAgICAgICAgICAgIHVpLnNwYW4oW25ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pXSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgdWkuaWNvbkZBKCdzdGFyJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzaG93QWRkVG9GYXZvcml0ZXNEaWFsb2coZnVuY0NhbGwpO1xuICAgICAgICAgICAgfSwgJ0FkZCB0byBmYXZvcml0ZXMnKSxcbiAgICAgICAgICAgIHVpLmljb25GQSgnbGluaycsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoYCR7d2luZG93LmxvY2F0aW9uLmhyZWZ9YCk7XG4gICAgICAgICAgICB9LCAnQ29weSBsaW5rIHRvIHRoZSBydW4nKSxcbiAgICAgICAgICAgIHVpLmljb25GQSgndHJhc2gtYWx0JywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzaG93RGVsZXRlRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdEZWxldGUgdGhlIHJ1bicpLFxuICAgICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkLWljb25zJylcbiAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubGlua0Z1bmNjYWxsKGF3YWl0IHRoaXMubG9hZFJ1bihmdW5jQ2FsbC5pZCkpO1xuICAgICAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9Wy4uLmhpc3RvcnlDYXJkcywgLi4uZmF2b3JpdGVDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gYWxsQ2FyZHMuZm9yRWFjaCgoYykgPT4gYy5jbGFzc0xpc3QucmVtb3ZlKCdjbGlja2VkJykpKSk7XG5cbiAgICAgIHJldHVybiB1aS5kaXZWKGhpc3RvcnlDYXJkcyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkRmF2b3JpdGVzTGlzdCA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSBhd2FpdCB0aGlzLnB1bGxSdW5zKHRoaXMuZnVuYyEuaWQpO1xuICAgICAgY29uc3QgZmF2b3JpdGVSdW5zID0gaGlzdG9yaWNhbFJ1bnMuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gJiYgIXJ1bi5vcHRpb25zWydpc0ltcG9ydGVkJ10pO1xuICAgICAgaWYgKGZhdm9yaXRlUnVucy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gdWkud2FpdCgoKSA9PiByZW5kZXJGYXZvcml0ZUNhcmRzKGZhdm9yaXRlUnVucykpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIGZhdm9yaXRlcycsICdkZXNjcmlwdGlvbicpO1xuICAgIH0pO1xuICAgIGxldCBmYXZvcml0ZXNMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnRmF2b3JpdGVzJywgYnVpbGRGYXZvcml0ZXNMaXN0LCB0cnVlKTtcbiAgICBjb25zdCB1cGRhdGVGYXZvcml0ZXNQYW5lID0gKCkgPT4ge1xuICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IGZhdm9yaXRlc0xpc3RQYW5lLmV4cGFuZGVkO1xuICAgICAgbWFpbkFjYy5yZW1vdmVQYW5lKGZhdm9yaXRlc0xpc3RQYW5lKTtcbiAgICAgIGZhdm9yaXRlc0xpc3RQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGYXZvcml0ZXMnLCBidWlsZEZhdm9yaXRlc0xpc3QsIGlzRXhwYW5kZWQsIGhpc3RvcnlQYW5lKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRIaXN0b3J5UGFuZSA9ICgpID0+IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yaWNhbFJ1bnMgPSAoYXdhaXQgdGhpcy5wdWxsUnVucyh0aGlzLmZ1bmMhLmlkKSkuZmlsdGVyKChydW4pID0+ICFydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgICAgIGlmIChoaXN0b3JpY2FsUnVucy5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gdWkud2FpdCgoKSA9PiByZW5kZXJIaXN0b3J5Q2FyZHMoaGlzdG9yaWNhbFJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIGZvdW5kIGluIGhpc3RvcnknLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgaGlzdG9yeVBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0hpc3RvcnknLCBidWlsZEhpc3RvcnlQYW5lLCB0cnVlKTtcbiAgICBjb25zdCB1cGRhdGVIaXN0b3J5UGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBoaXN0b3J5UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShoaXN0b3J5UGFuZSk7XG4gICAgICBoaXN0b3J5UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnSGlzdG9yeScsIGJ1aWxkSGlzdG9yeVBhbmUsIGlzRXhwYW5kZWQpO1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdIaXN0b3J5QmxvY2sgPSBtYWluQWNjLnJvb3Q7XG4gICAgdWkuZW1wdHkodGhpcy5oaXN0b3J5Um9vdCk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnanVzdGlmeS1jb250ZW50Jyk7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLmhpc3RvcnlSb290LmFwcGVuZChuZXdIaXN0b3J5QmxvY2spO1xuICAgIHJldHVybiBuZXdIaXN0b3J5QmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogTG9va3MgZm9yIHtAbGluayBzdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfSBtZW1iZXJzIGFuZCBjcmVhdGVzIHJpYmJvbiBwYW5lbFxuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnRzIG9mIHJpYmJvblBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGJ1aWxkUmliYm9uUGFuZWxzKCk6IEhUTUxFbGVtZW50W11bXSB7XG4gICAgY29uc3QgbmV3UmliYm9uUGFuZWxzOiBIVE1MRWxlbWVudFtdW10gPSBbXG4gICAgICBbLi4uKHRoaXMuZXhwb3J0Q29uZmlnICYmIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMubGVuZ3RoID4gMCkgPyBbdWkuZGl2SChbXG4gICAgICAgIHVpLmNvbWJvUG9wdXAoXG4gICAgICAgICAgdWkuaWNvbkZBKCdhcnJvdy10by1ib3R0b20nKSxcbiAgICAgICAgICB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLFxuICAgICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRDb25maWchLmZpbGVuYW1lKGZvcm1hdCksIGF3YWl0IHRoaXMuZXhwb3J0Q29uZmlnIS5leHBvcnQoZm9ybWF0KSkpLFxuICAgICAgXSldOiBbXVxuICAgICAgXV07XG5cbiAgICBpZiAodGhpcy5mdW5jPy5pZCkge1xuICAgICAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzID0gIWdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcztcbiAgICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QudG9nZ2xlKCdkNC1jdXJyZW50Jyk7XG4gICAgICAgIGdyb2suc2hlbGwubyA9IHRoaXMuaGlzdG9yeVJvb3Q7XG4gICAgICB9KTtcblxuICAgICAgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC10b2dnbGUtYnV0dG9uJyk7XG4gICAgICBpZiAoZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzKSBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LWN1cnJlbnQnKTtcblxuICAgICAgY29uc3QgY2xvbmVSdW5CdG4gPSB1aS5idXR0b24oJ0Nsb25lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmNsb25lUnVuQXNDdXJyZW50KCk7XG4gICAgICB9LCAnQ2xvbmUgdGhlIHJ1bicpO1xuXG4gICAgICBuZXdSaWJib25QYW5lbHMucHVzaChbXG4gICAgICAgIGhpc3RvcnlCdXR0b24sXG4gICAgICAgIC4uLnRoaXMuZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddPyBbY2xvbmVSdW5CdG5dOiBbXSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UmliYm9uUGFuZWxzKG5ld1JpYmJvblBhbmVscyk7XG4gICAgcmV0dXJuIG5ld1JpYmJvblBhbmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gcmliYm9uIG1lbnUgb24gdGhlIHRvcC5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRSaWJib25NZW51KCkge1xuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZhdm9yaXRlQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgcnVuIGFzIHVzdWFsIHJ1blxuICAgKiBAcGFyYW0gY2FsbFRvVW5mYXZvcml0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gcmVtb3ZlIGZyb20gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ3RpdGxlJ10gPSBudWxsO1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1snYW5ub3RhdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIGNvbnN0IGZhdm9yaXRlU2F2ZSA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGZhdm9yaXRlU2F2ZSk7XG4gICAgcmV0dXJuIGZhdm9yaXRlU2F2ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb0FkZFRvRmF2b3JpdGVzOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJBZGRpbmdUb0Zhdm9yaXRlcyhmYXZvcml0ZUNhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJ1biBhcyBmYXZvcml0ZVxuICAgKiBAcGFyYW0gY2FsbFRvRmF2b3JpdGUgRnVuY0NhbGwgb2JqZWN0IHRvIGFkZCB0byBmYXZvcml0ZXNcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBhZGRSdW5Ub0Zhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvRmF2b3JpdGUub3B0aW9uc1snaXNGYXZvcml0ZSddID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQWRkaW5nVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGNvbnN0IHNhdmVkRmF2b3JpdGUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckFkZGluZ1RvRmF2b3JpdGVzKHNhdmVkRmF2b3JpdGUpO1xuICAgIHJldHVybiBzYXZlZEZhdm9yaXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgc2F2aW5nIHRoZSBGVW5jQ2FsbCByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVTYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gc2F2ZWRDYWxsIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9TYXZlIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcblxuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KGNhbGxUb1NhdmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gd3UoY2FsbFRvU2F2ZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBhd2FpdCBncm9rLmRhcGkudGFibGVzLnVwbG9hZERhdGFGcmFtZShjYWxsVG9TYXZlLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvU2F2ZSk7XG4gICAgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMucGF0aCA9IGA/aWQ9JHtzYXZlZENhbGwuaWR9YDtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbCk7XG4gICAgcmV0dXJuIHNhdmVkQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gYmUgZGVsZXRlZFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGRlbGV0aW5nIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGRlbGV0ZWRDYWxsIGRlbGV0ZWQgRnVuY0NhbGwgdmFsdWVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckRlbGV0ZVJ1bihkZWxldGVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIElEIG9mIGRlbGV0ZWQgaGlzdG9yaWNhbCBydW5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBkZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZGVsZXRlKGNhbGxUb0RlbGV0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyRGVsZXRlUnVuKGNhbGxUb0RlbGV0ZSk7XG4gICAgcmV0dXJuIGNhbGxUb0RlbGV0ZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVMb2FkUnVuKCkge31cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGZldGNoaW5nIHRoZSBoaXN0b3JpY2FsIHJ1biBkYXRhIGluIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsIEZ1bmNDYWxsIGZldGNoZWQgZnJvbSBzZXJ2ZXIgZHVyaW5nIHtAbGluayBsb2FkUnVufVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyTG9hZFJ1bihmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHt9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaGlzdG9yaWNhbCBydW4uIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIGZ1bmNDYWxsSWQgSUQgb2YgRnVuY0NhbGwgdG8gbG9vayBmb3IuIEdldCBpdCB1c2luZyB7QHNlZSBmdW5jQ2FsbC5pZH0gZmllbGRcbiAgICogQHJldHVybnMgRnVuY0NhbGwgYXVnZW1lbnRlZCB3aXRoIGlucHV0cycgYW5kIG91dHB1dHMnIHZhbHVlc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIGxvYWRSdW4oZnVuY0NhbGxJZDogc3RyaW5nKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVMb2FkUnVuKCk7XG4gICAgY29uc3QgcHVsbGVkUnVuID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5pbmNsdWRlKCdpbnB1dHMsIG91dHB1dHMnKS5maW5kKGZ1bmNDYWxsSWQpO1xuICAgIHB1bGxlZFJ1bi5vcHRpb25zWydpc0hpc3RvcmljYWwnXSA9IHRydWU7XG4gICAgY29uc3QgZGZPdXRwdXRzID0gd3UocHVsbGVkUnVuLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKVxuICAgICAgcHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0pO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB3dShwdWxsZWRSdW4uaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKVxuICAgICAgcHVsbGVkUnVuLmlucHV0c1tpbnB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLmlucHV0c1tpbnB1dC5uYW1lXSk7XG5cblxuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgIHJldHVybiBwdWxsZWRSdW47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKSB7IH1cblxuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBjbG9uZVJ1bkFzQ3VycmVudCgpIHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignQ3VycmVudCBGdW5jY2FsbCBpcyBub3Qgc2V0Jyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgICBjb25zdCBjbG9uZWRGdW5jY2FsbCA9IHRoaXMuZnVuY0NhbGwuY2xvbmUoKTtcbiAgICBjbG9uZWRGdW5jY2FsbC5uZXdJZCgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gZmFsc2U7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoY2xvbmVkRnVuY2NhbGwpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckNsb25lUnVuQXNDdXJyZW50KCk7XG4gIH1cblxuICBwcml2YXRlIG92ZXJsYXlEaXYgPSB1aS5kaXYoW10sIHtzdHlsZToge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyYXknLFxuICAgICdvcGFjaXR5JzogJzAuMDcnLFxuICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgJ2JvdHRvbSc6ICcwJyxcbiAgICAnbGVmdCc6ICcwJyxcbiAgICAncmlnaHQnOiAnMCcsXG4gICAgJ3RvcCc6ICcwJyxcbiAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAnY3Vyc29yJzogJ25vdC1hbGxvd2VkJyxcbiAgICAnei1pbmRleCc6ICcxJyxcbiAgfX0pO1xuXG4gIHByaXZhdGUgcm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgKGV2OiBNb3VzZUV2ZW50KT0+IHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgfSxcbiAgICAoKSA9PiB7XG4gICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0Nsb25lIHRoZSBydW4gdG8gZWRpdCBpdCcpO1xuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBpbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzID0gW1xuICAgICgpID0+dGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSksXG4gICAgKCkgPT50aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKVxuICBdO1xuXG4gIHByaXZhdGUgc2V0UnVuVmlld1JlYWRvbmx5KCk6IHZvaWQge1xuICAgIHRoaXMub3ZlcmxheURpdi5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzBdKTtcbiAgICB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTlRFUkFDVElWRV9DU1NfQ0xBU1N9YCkuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuekluZGV4ID0gJzInO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4gc2V0VGltZW91dCh0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMV0sIDEwMCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3RWRpdGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgIHRoaXMucm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lOVEVSQUNUSVZFX0NTU19DTEFTU31gKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnei1pbmRleCcpO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5pbnRlcmFjdGl2ZUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgZmllbGRzIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHBhcmFtIGZ1bmNJZCBJRCBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucyhmdW5jSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZmlsdGVyKGBmdW5jLmlkPVwiJHtmdW5jSWR9XCJgKS5pbmNsdWRlKCdzZXNzaW9uLnVzZXIsIG9wdGlvbnMnKTtcbiAgICBjb25zdCBsaXN0ID0gZmlsdGVyLmxpc3Qoe3BhZ2VTaXplOiAyMH0pO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgYWN0dWFsIGNvbXB1dGF0aW9ucyBhcmUgbWFkZSB7QGxpbmsgcnVufS5cbiAgICogQHBhcmFtIGZ1bmNUb0NhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIGJlIGNhbGxlZCB7QHNlZSBERy5GdW5jQ2FsbC5jYWxsKCl9XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJ1bihmdW5jVG9DYWxsOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICAqIENhbGxlZCBhZnRlciBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgICogQHBhcmFtIHJ1bkZ1bmMgRnVuY0NhbGwgb2JqZWN0IGFmdGVyIGNhbGwgbWV0aG9kIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCkge1xuICAgIHRoaXMub3V0cHV0UGFyYW1ldGVyc1RvVmlldyh0aGlzLmxhc3RDYWxsISk7XG4gIH1cblxuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZ1bmNDYWxsKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgICBjb25zdCBwaSA9IERHLlRhc2tCYXJQcm9ncmVzc0luZGljYXRvci5jcmVhdGUoJ0NhbGN1bGF0aW5nLi4uJyk7XG4gICAgdGhpcy5mdW5jQ2FsbC5uZXdJZCgpO1xuICAgIGF3YWl0IHRoaXMuZnVuY0NhbGwuY2FsbCgpOyAvLyBtdXRhdGVzIHRoZSBmdW5jQ2FsbCBmaWVsZFxuICAgIHBpLmNsb3NlKCk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUnVuKHRoaXMuZnVuY0NhbGwpO1xuXG4gICAgdGhpcy5sYXN0Q2FsbCA9IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0RmlsZW5hbWUgPSAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSAtICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygpfS4ke3RoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRFeHRlbnNpb25zW2Zvcm1hdF19YDtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdFeGNlbCc6ICd4bHN4J1xuICAgIH07XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzID0gKCkgPT4ge1xuICAgIHJldHVybiBbJ0V4Y2VsJ107XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnQgPSBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBsYXN0Q2FsbCA9IHRoaXMubGFzdENhbGw7XG4gICAgaWYgKCFsYXN0Q2FsbCkgdGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiB3YXMgbm90IGNhbGxlZGApO1xuXG4gICAgaWYgKCF0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB0aHJvdyBuZXcgRXJyb3IoYEZvcm1hdCBcIiR7Zm9ybWF0fVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG5cbiAgICBpZiAoIXRoaXMuZnVuYykgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGNvbnN0IEJMT0JfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICBjb25zdCBleHBvcnRXb3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XG5cbiAgICBjb25zdCBpc1NjYWxhclR5cGUgPSAodHlwZTogREcuVFlQRSkgPT4gKERHLlRZUEVTX1NDQUxBUi5oYXModHlwZSkpO1xuXG4gICAgY29uc3QgaXNEYXRhRnJhbWUgPSAodHlwZTogREcuVFlQRSkgPT4gKHR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNEYXRhRnJhbWUoaW5wdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFySW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc1NjYWxhclR5cGUoaW5wdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3QgZGZPdXRwdXRzID0gdGhpcy5mdW5jLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IGlzRGF0YUZyYW1lKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJPdXRwdXRzID0gdGhpcy5mdW5jLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IGlzU2NhbGFyVHlwZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG5cbiAgICBjb25zdCBpbnB1dFBhcmFtcyA9IFsuLi5sYXN0Q2FsbC5pbnB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuICAgIGNvbnN0IG91dHB1dFBhcmFtcyA9IFsuLi5sYXN0Q2FsbC5vdXRwdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcblxuICAgIGRmSW5wdXRzLmZvckVhY2goKGRmSW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmSW5wdXQub3B0aW9ucy5jYXB0aW9uIHx8IGRmSW5wdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuICAgIGlmIChzY2FsYXJJbnB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbnB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnSW5wdXQgc2NhbGFycycpO1xuICAgICAgc2NhbGFyc1RvU2hlZXQoaW5wdXRTY2FsYXJzU2hlZXQsIHNjYWxhcklucHV0cy5tYXAoKHNjYWxhcklucHV0KSA9PiAoe1xuICAgICAgICBjYXB0aW9uOiBzY2FsYXJJbnB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFySW5wdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLmlucHV0c1tzY2FsYXJJbnB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhcklucHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGRmT3V0cHV0cy5mb3JFYWNoKChkZk91dHB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZPdXRwdXQub3B0aW9ucy5jYXB0aW9uIHx8IGRmT3V0cHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uT1VUUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5vdXRwdXRzW2RmT3V0cHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cblxuICAgIGlmIChzY2FsYXJPdXRwdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3V0cHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdPdXRwdXQgc2NhbGFycycpO1xuICAgICAgc2NhbGFyc1RvU2hlZXQob3V0cHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJPdXRwdXRzLm1hcCgoc2NhbGFyT3V0cHV0KSA9PiAoe1xuICAgICAgICBjYXB0aW9uOiBzY2FsYXJPdXRwdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhck91dHB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwub3V0cHV0c1tzY2FsYXJPdXRwdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJPdXRwdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGFiQ29udHJvbCA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2w7XG4gICAgaWYgKHRhYkNvbnRyb2wpIHtcbiAgICAgIGZvciAoY29uc3QgdGFiTGFiZWwgb2YgdGhpcy50YWJzTGFiZWxzKSB7XG4gICAgICAgIHRhYkNvbnRyb2wuY3VycmVudFBhbmUgPSB0YWJDb250cm9sLmdldFBhbmUodGFiTGFiZWwpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDApKTtcbiAgICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpbnB1dFBhcmFtIG9mIGlucHV0UGFyYW1zLmZpbHRlcigoaW5wdXRQYXJhbSkgPT4gaW5wdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vbkdyaWRWaWV3ZXJzID0gKGlucHV0UGFyYW0uYXV4Wyd2aWV3ZXJzJ10gYXMgREcuVmlld2VyW10pLmZpbHRlcigodmlld2VyKSA9PiB2aWV3ZXIudHlwZSAhPT0gREcuVklFV0VSLkdSSUQpO1xuXG4gICAgICAgICAgICBjb25zdCBkZklucHV0ID0gZGZJbnB1dHMuZmluZCgoaW5wdXQpID0+IGlucHV0Lm5hbWUgPT09IGlucHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0IS5vcHRpb25zLmNhcHRpb24gfHwgaW5wdXRQYXJhbS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0IS5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdlci5yb290LnBhcmVudEVsZW1lbnQ/LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuZ2V0KGlucHV0UGFyYW0ubmFtZSk/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF3YWl0IHBsb3RUb1NoZWV0KFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLmdldFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0UGFyYW0gb2Ygb3V0cHV0UGFyYW1zLmZpbHRlcigob3V0cHV0UGFyYW0pID0+IG91dHB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIG91dHB1dFBhcmFtLnByb3BlcnR5LmNhdGVnb3J5ID09PSB0YWJMYWJlbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vbkdyaWRWaWV3ZXJzID0gKG91dHB1dFBhcmFtLmF1eFsndmlld2VycyddIGFzIERHLlZpZXdlcltdKS5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKTtcblxuICAgICAgICAgICAgY29uc3QgZGZPdXRwdXQgPSBkZk91dHB1dHMuZmluZCgoaW5wdXQpID0+IGlucHV0Lm5hbWUgPT09IG91dHB1dFBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZPdXRwdXQhLm9wdGlvbnMuY2FwdGlvbiB8fCBvdXRwdXRQYXJhbS5uYW1lO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBpZiAodmlld2VyLnJvb3QucGFyZW50RWxlbWVudD8uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5nZXQob3V0cHV0UGFyYW0ubmFtZSk/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTApKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGF3YWl0IHBsb3RUb1NoZWV0KFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLmdldFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uT1VUUFVUKSksXG4gICAgICAgICAgICAgICAgdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZXhwb3J0V29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xuXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtidWZmZXJdLCB7dHlwZTogQkxPQl9UWVBFfSk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGdldCBpc0lucHV0UGFuZWxSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jPy5pbnB1dHMuc29tZSgocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkgfHwgZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IG91dFBhcmFtQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4ubmV3IFNldCh0aGlzLmZ1bmMhLm91dHB1dHMubWFwKChwKSA9PiBwLmNhdGVnb3J5KSkgLy8gZ2V0IGFsbCBvdXRwdXQgcGFyYW1zJyBjYXRlZ29yaWVzXG4gICAgXTsgLy8ga2VlcCBvbmx5IHVuaXF1ZSBvZiB0aGVtXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IG91dHB1dFRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMub3V0UGFyYW1DYXRlZ29yaWVzLFxuICAgICAgLi4udGhpcy5vdXRQYXJhbUNhdGVnb3JpZXMuZmluZCgodmFsKSA9PiB2YWwgPT09ICdNaXNjJykgPyBbJ091dHB1dCddIDogW10sIC8vIGlmIG5vIGNhdGVnb3JpZXMgYXJlIHN0YXRlZCwgdGhlIGRlZmF1bHQgY2F0ZWdvcnkgaXMgYWRkZWRcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtVG9DYXRlZ29yeU1hcCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHBhcmFtVG9DYXRlZ29yeU1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG4gICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQpXG4gICAgICB0aGlzLmZ1bmMhLmlucHV0cy5mb3JFYWNoKChwKSA9PiBtYXBbJ0lucHV0J10gPyBtYXBbJ0lucHV0J10ucHVzaChwLm5hbWUpOiBtYXBbJ0lucHV0J10gPSBbcC5uYW1lXSk7XG5cbiAgICB0aGlzLmZ1bmMhLm91dHB1dHMuZm9yRWFjaCgocCkgPT4gbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XSA/IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0ucHVzaChwLm5hbWUpIDogbWFwW3AuY2F0ZWdvcnkgPT09ICdNaXNjJyA/ICdPdXRwdXQnOiBwLmNhdGVnb3J5XSA9IFtwLm5hbWVdKTtcblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuXG4gIHByb3RlY3RlZCByZW5kZXJSdW5TZWN0aW9uKGNhbGw6IERHLkZ1bmNDYWxsKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJ1bkJ1dHRvbiA9IHVpLmJpZ0J1dHRvbignUnVuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjYWxsLmF1eFsndmlldyddID0gdGhpcy5kYXJ0O1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bigpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGl0b3IgPSB1aS5kaXYoKTtcbiAgICAgIGNvbnN0IGlucHV0czogREcuSW5wdXRCYXNlW10gPSBhd2FpdCBjYWxsLmJ1aWxkRWRpdG9yKGVkaXRvciwge2NvbmRlbnNlZDogdHJ1ZX0pO1xuICAgICAgZWRpdG9yLmNsYXNzTGlzdC5hZGQoJ3VpLWZvcm0nKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSB1aS5kaXZIKFtydW5CdXR0b25dLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nfX0pO1xuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJSZXN1bHRzKHN3aXRjaFRvT3V0cHV0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSB0aGlzLnRhYnNMYWJlbHM7XG5cbiAgICBpZiAoKGNhdGVnb3JpZXMubGVuZ3RoID4gMSB8fCAoY2F0ZWdvcmllcy5sZW5ndGggPT0gMSAmJiBjYXRlZ29yaWVzWzBdICE9ICdNaXNjJykpKSB7XG4gICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sID0gREcuVGFiQ29udHJvbC5jcmVhdGUoKTtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRUYWJzLmhhcyhjKSlcbiAgICAgICAgICB0aGlzLnJlc3VsdFRhYnMuc2V0KGMsIHVpLmRpdihbXSwgJ3VpLXBhbmVsLCBncm9rLWZ1bmMtcmVzdWx0cywgdWktYm94JykpO1xuICAgICAgICBsZXQgbmFtZSA9IGM7XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkICYmIGNhdGVnb3JpZXMubGVuZ3RoID09IDIgJiYgYyA9PSAnTWlzYycpXG4gICAgICAgICAgbmFtZSA9ICdPVVRQVVQnO1xuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmFkZFBhbmUobmFtZSwgKCkgPT4gdGhpcy5yZXN1bHRUYWJzLmdldChjKSA/PyB1aS5kaXYoKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAxICYmIHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgc3dpdGNoVG9PdXRwdXQpXG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuY3VycmVudFBhbmUgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnBhbmVzWzFdO1xuICAgICAgdGhpcy5yZXN1bHRzRGl2ID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5yb290O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3V0cHV0UGFyYW1ldGVyc1RvVmlldyhjYWxsOiBERy5GdW5jQ2FsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJSZXN1bHRzKHRydWUpO1xuICAgIGZvciAoY29uc3QgcCBvZiBjYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pIHtcbiAgICAgIHAucHJvY2Vzc091dHB1dCgpO1xuICAgICAgaWYgKHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnZhbHVlICE9IG51bGwpXG4gICAgICAgIHRoaXMuYXBwZW5kT3V0cHV0RGYocCwge2NhcHRpb246IHAucHJvcGVydHkubmFtZSwgY2F0ZWdvcnk6IHAucHJvcGVydHkuY2F0ZWdvcnl9KTtcbiAgICAgIGVsc2UgdGhpcy5hcHBlbmRSZXN1bHRTY2FsYXIocCwge2NhcHRpb246IHAucHJvcGVydHkubmFtZSwgY2F0ZWdvcnk6IHAucHJvcGVydHkuY2F0ZWdvcnl9KTtcbiAgICB9XG4gICAgdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG4gIH1cblxuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGUgc3dpdGNoY2VzIG9mIHRoZWlyIHZpZXdlcnMvZ3JpZHNcbiAgcHJpdmF0ZSBwYXJhbUdyaWRTd2l0Y2hlczogTWFwPHN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGVpciB2aWV3ZXJzIHBsYWNlZCBvbiBET01cbiAgcHJpdmF0ZSBleGlzdGluZ1BhcmFtVmlld2VyczogTWFwPHN0cmluZywgREcuVmlld2VyW10+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGVpciBodG1sIGVsZW1lbnRzXG4gIHByaXZhdGUgcGFyYW1TcGFuczogTWFwPHN0cmluZywgSFRNTEVsZW1lbnQ+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiB0YWIgbmFtZXMgdG8gdGhlaXIgY29udGVudFxuICBwcml2YXRlIHJlc3VsdFRhYnM6IE1hcDxTdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZXN1bHRzVGFiQ29udHJvbDogREcuVGFiQ29udHJvbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZXN1bHRzRGl2OiBIVE1MRWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMnKTtcblxuICBwcm90ZWN0ZWQgY29udHJvbHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmJveChudWxsLCB7c3R5bGU6IHttYXhXaWR0aDogJzM3MHB4J319KTtcbiAgcHJvdGVjdGVkIHJlc3VsdHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmJveCgpO1xuICBwcm90ZWN0ZWQgaGlzdG9yeVJvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuZGl2VihbXSwge3N0eWxlOiB7J2p1c3RpZnktY29udGVudCc6ICdjZW50ZXInfX0pO1xuICBwcm90ZWN0ZWQgaW5wdXRzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKTtcblxuICBwcml2YXRlIGFwcGVuZE91dHB1dERmKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtLCBvcHRpb25zPzogeyBjYXB0aW9uPzogc3RyaW5nLCBjYXRlZ29yeT86IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBwYXJhbURmID0gcGFyYW0udmFsdWUgYXMgREcuRGF0YUZyYW1lO1xuICAgIGNvbnN0IGhlaWdodCA9IG9wdGlvbnM/LmhlaWdodCA/PyA0MDA7XG4gICAgY29uc3QgcGFyYW1WaWV3ZXJzOiBERy5WaWV3ZXJbXSA9IHBhcmFtLmF1eFsndmlld2VycyddID8/IFtdOyAvLyBzdG9yaW5nIHRoZSB2aWV3ZXJzIG9mIERmXG4gICAgY29uc3QgcGFyYW1DYXB0aW9uID0gb3B0aW9ucz8uY2FwdGlvbiA/PyBwYXJhbS5hdXhbJ3ZpZXdlclRpdGxlJ10gPz8gcGFyYW0ucHJvcGVydHkuY2FwdGlvbiA/PyAnJztcbiAgICBsZXQgZXhpc3RpbmdWaWV3ZXJzID0gdGhpcy5leGlzdGluZ1BhcmFtVmlld2Vycy5nZXQocGFyYW0ubmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nVmlld2VycyAhPSBudWxsKSB7XG4gICAgICBmb3IgKGNvbnN0IHYgb2YgZXhpc3RpbmdWaWV3ZXJzKVxuICAgICAgICB2LmRhdGFGcmFtZSA9IHBhcmFtRGY7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdWaWV3ZXJzID8/PSBbXTtcbiAgICB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLnNldChwYXJhbS5uYW1lLCBleGlzdGluZ1ZpZXdlcnMpO1xuICAgIGlmIChwYXJhbVZpZXdlcnMubGVuZ3RoID09IDApXG4gICAgICBwYXJhbVZpZXdlcnMucHVzaChwYXJhbURmLnBsb3QuZ3JpZCgpKTtcblxuICAgIGNvbnN0IHZpZXdlcnNUb0hpZGU6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgYmxvY2tzOiBudW1iZXIgPSAwO1xuICAgIGxldCBibG9ja1dpZHRoOiBudW1iZXIgPSAwO1xuICAgIGNvbnN0IGdyaWRXcmFwcGVyID0gdWkuYm94KG51bGwsIHtzdHlsZToge2hlaWdodDogJzEwMCUnfX0pO1xuXG4gICAgY29uc3QgaXNHcmlkU3dpdGNoYWJsZSA9IHd1KHBhcmFtVmlld2VycykuZXZlcnkoKHY6IERHLlZpZXdlcikgPT4gdi50eXBlICE9PSAnR3JpZCcpO1xuICAgICQoZ3JpZFdyYXBwZXIpLmhpZGUoKTtcblxuICAgIGNvbnN0IGdldEhlYWRlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsID0gcGFyYW1DYXB0aW9uID8/IHBhcmFtRGYubmFtZSA/PyAnJztcbiAgICAgIGNvbnN0IGhlYWRlciA9IHVpLmRpdihbXSwgJ2dyb2stZnVuYy1yZXN1bHRzLWhlYWRlcicpO1xuICAgICAgaWYgKGhlYWRlckxhYmVsICE9ICcnKSB7XG4gICAgICAgIGNvbnN0IGggPSB1aS5oMShoZWFkZXJMYWJlbCk7XG4gICAgICAgIHVpLlRvb2x0aXAuYmluZChoLCAoKSA9PiBoZWFkZXJMYWJlbCk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0dyaWRTd2l0Y2hhYmxlKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB1aS5pY29uU3ZnKCd0YWJsZScsIChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5QWxsKHZpZXdlcnNUb0hpZGUsIHZpZXdlcnNUb0hpZGUuc29tZSgodmlld2VyKSA9PiB2aWV3ZXIuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheShncmlkV3JhcHBlciwgZ3JpZFdyYXBwZXIuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKTtcbiAgICAgICAgfSwgJ1Nob3cgZ3JpZCcpO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaWNvbik7XG4gICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuc2V0KHBhcmFtLm5hbWUsIGljb24pO1xuICAgICAgfVxuICAgICAgaWYgKCFncm9rLnNoZWxsLnRhYmxlcy5pbmNsdWRlcyhwYXJhbURmKSkge1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgdWkuaWNvbnMuYWRkKChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCB2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcocGFyYW1EZik7XG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXdlciBvZiBwYXJhbVZpZXdlcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlld2VyLnR5cGUgIT0gJ0dyaWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXdWaWV3ZXIgPSBhd2FpdCBwYXJhbURmLnBsb3QuZnJvbVR5cGUodmlld2VyLnR5cGUpIGFzIERHLlZpZXdlcjtcbiAgICAgICAgICAgICAgICAgIG5ld1ZpZXdlci5zZXRPcHRpb25zKHZpZXdlci5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgICAgICAgICAgdi5hZGRWaWV3ZXIobmV3Vmlld2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAnQWRkIHRvIHdvcmtzcGFjZSdcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgfTtcblxuICAgIGlmIChpc0dyaWRTd2l0Y2hhYmxlKSB7XG4gICAgICBjb25zdCBncmlkID0gcGFyYW1EZi5wbG90LmdyaWQoKTtcbiAgICAgIGdyaWRXcmFwcGVyLmFwcGVuZENoaWxkKGdyaWQucm9vdCk7XG4gICAgICBleGlzdGluZ1ZpZXdlcnMucHVzaChncmlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXIgPSBnZXRIZWFkZXIoKTtcbiAgICBjb25zdCB3cmFwcGVyID0gdWkuZGl2SChbXSwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG4gICAgcGFyYW1WaWV3ZXJzLmZvckVhY2goKHZpZXdlcikgPT4ge1xuICAgICAgaWYgKHZpZXdlcj8udGFncyA9PSBudWxsKVxuICAgICAgICByZXR1cm47XG4gICAgICBleGlzdGluZ1ZpZXdlcnMhLnB1c2godmlld2VyKTtcbiAgICAgIGNvbnN0IHZpZXdlclNpemUgPSB2aWV3ZXIudGFnc1snLmJsb2NrLXNpemUnXSA/PyAxMDA7IC8vIGdldHRpbmcgYChibG9jazogMjUpYCB2YWx1ZTsgaWYgbm90IGRlZmluZWQsIGl0IGlzIDEwMFxuXG4gICAgICB2aWV3ZXIucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICB2aWV3ZXIucm9vdC5jbGFzc0xpc3QuYWRkKGB1aS1ibG9jay0ke3ZpZXdlclNpemV9YCk7XG4gICAgICBpZiAoYmxvY2tzICsgdmlld2VyU2l6ZSA8PSAxMDApIHtcbiAgICAgICAgdmlld2Vyc1RvSGlkZS5wdXNoKHdyYXBwZXIpO1xuICAgICAgICBibG9ja1dpZHRoICs9IHZpZXdlclNpemU7XG4gICAgICB9XG4gICAgICBibG9ja3MgKz0gdmlld2VyU2l6ZTtcbiAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQodmlld2VyLnJvb3QpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYmxvY2sgPSB1aS5kaXZWKFtoZWFkZXIsIHdyYXBwZXIsIGdyaWRXcmFwcGVyXSwge3N0eWxlOiB7aGVpZ2h0OiBgJHtoZWlnaHR9cHhgLCB3aWR0aDogYCR7YmxvY2tXaWR0aH0lYH19KTtcbiAgICBibG9jay5jbGFzc0xpc3QuYWRkKCd1aS1ib3gnKTtcbiAgICB0aGlzLmFwcGVuZFJlc3VsdEVsZW1lbnQoYmxvY2ssIG9wdGlvbnM/LmNhdGVnb3J5KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwZW5kUmVzdWx0U2NhbGFyKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtLCBvcHRpb25zOiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGhlaWdodD86IG51bWJlciB9KSB7XG4gICAgY29uc3Qgc3BhbiA9IHVpLnNwYW4oW2Ake29wdGlvbnMuY2FwdGlvbiA/PyBwYXJhbS5uYW1lfTogYCwgYCR7cGFyYW0udmFsdWV9YF0pO1xuICAgIGlmICghdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKSkge1xuICAgICAgaWYgKHRoaXMucmVzdWx0c1RhYkNvbnRyb2wpXG4gICAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQob3B0aW9ucy5jYXRlZ29yeSkhLmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1TcGFucy5nZXQocGFyYW0ubmFtZSk/LnJlcGxhY2VXaXRoKHNwYW4pO1xuICAgIH1cbiAgICB0aGlzLnBhcmFtU3BhbnMuc2V0KHBhcmFtLm5hbWUsIHNwYW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRFbGVtZW50KGQ6IEhUTUxFbGVtZW50LCBjYXRlZ29yeT86IHN0cmluZykge1xuICAgIGlmIChjYXRlZ29yeSAhPSBudWxsICYmIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgIT0gdW5kZWZpbmVkICYmIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpICE9IG51bGwpXG4gICAgICB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoZCk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5yZXN1bHRzRGl2LmFwcGVuZENoaWxkKGQpO1xuICB9XG59XG5cbmNvbnN0IGdldFNoZWV0TmFtZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogRElSRUNUSU9OKSA9PiB7XG4gIGNvbnN0IGlkZWFsTmFtZSA9IGAke2RpcmVjdGlvbn0gLSAke25hbWV9YDtcbiAgcmV0dXJuIChpZGVhbE5hbWUubGVuZ3RoID4gMzEpID8gbmFtZS5zdWJzdHJpbmcoMCwgMzIpIDogaWRlYWxOYW1lO1xufTtcblxuZW51bSBESVJFQ1RJT04ge1xuICBJTlBVVCA9ICdJbnB1dCcsXG4gIE9VVFBVVCA9ICdPdXRwdXQnXG59XG5cbmNvbnN0IHNjYWxhcnNUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgc2NhbGFyczogeyBjYXB0aW9uOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHVuaXRzOiBzdHJpbmcgfVtdKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhbJ1BhcmFtZXRlcicsICdWYWx1ZScsICdVbml0cyddKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBzY2FsYXJzLmZvckVhY2goKHNjYWxhcikgPT4ge1xuICAgIHNoZWV0LmFkZFJvdyhbc2NhbGFyLmNhcHRpb24sIHNjYWxhci52YWx1ZSwgc2NhbGFyLnVuaXRzXSk7XG4gIH0pO1xuXG4gIHNoZWV0LmdldENvbHVtbigxKS53aWR0aCA9IE1hdGgubWF4KFxuICAgIC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci5jYXB0aW9uLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1BhcmFtZXRlcicubGVuZ3RoXG4gICkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigyKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci52YWx1ZS50b1N0cmluZygpLmxlbmd0aCksICdWYWx1ZScubGVuZ3RoKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDMpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnVuaXRzLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1VuaXRzJy5sZW5ndGgpICogMS4yO1xufTtcblxuY29uc3QgZGZUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgZGY6IERHLkRhdGFGcmFtZSkgPT4ge1xuICBzaGVldC5hZGRSb3coZGYuY29sdW1ucy5uYW1lcygpKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLnJvd0NvdW50OyBpKyspXG4gICAgc2hlZXQuYWRkUm93KFsuLi5kZi5yb3coaSkuY2VsbHNdLm1hcCgoY2VsbDogREcuQ2VsbCkgPT4gY2VsbC52YWx1ZSkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGYuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgIHNoZWV0LmdldENvbHVtbihpICsgMSkud2lkdGggPVxuICAgICAgTWF0aC5tYXgoXG4gICAgICAgIC4uLmRmLmNvbHVtbnMuYnlJbmRleChpKS5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LnRvU3RyaW5nKCkubGVuZ3RoKSxcbiAgICAgICAgZGYuY29sdW1ucy5ieUluZGV4KGkpLm5hbWUubGVuZ3RoXG4gICAgICApICogMS4yO1xuICB9XG59O1xuXG5jb25zdCBwbG90VG9TaGVldCA9IGFzeW5jIChleHBvcnRXYjogRXhjZWxKUy5Xb3JrYm9vaywgc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBwbG90OiBIVE1MRWxlbWVudCwgY29sdW1uRm9ySW1hZ2U6IG51bWJlciwgcm93Rm9ySW1hZ2U6IG51bWJlciA9IDApID0+IHtcbiAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMocGxvdCBhcyBIVE1MRWxlbWVudCwge2xvZ2dpbmc6IGZhbHNlfSk7XG4gIGNvbnN0IGRhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblxuICBjb25zdCBpbWFnZUlkID0gZXhwb3J0V2IuYWRkSW1hZ2Uoe1xuICAgIGJhc2U2NDogZGF0YVVybCxcbiAgICBleHRlbnNpb246ICdwbmcnLFxuICB9KTtcbiAgc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xuICAgIHRsOiB7Y29sOiBjb2x1bW5Gb3JJbWFnZSwgcm93OiByb3dGb3JJbWFnZX0sXG4gICAgZXh0OiB7d2lkdGg6IGNhbnZhcy53aWR0aCwgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0fSxcbiAgfSk7XG59O1xuIl19
1076
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFekI7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtJQUNuQyxPQUFPLENBQUMsTUFBVyxFQUFFLFVBQWtCLEVBQUUsVUFBOEIsRUFBRSxFQUFFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFlLEdBQUcsSUFBVzs7Z0JBQzlDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQzNDO2dCQUFDLE9BQU8sR0FBUSxFQUFFO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBRSxHQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sR0FBRyxDQUFDO2lCQUNYO1lBQ0gsQ0FBQztTQUFBLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUV0RCxNQUFNLE9BQU8sWUFBYSxTQUFRLEVB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QUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFcEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDckYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDMUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDekYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFFOUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQXVCLENBQUM7WUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQXVCLENBQUM7WUFFL0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMs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QVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUNqRixFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNsQyxHQUFHLEdBQUcsQ0FBQztLQUNYO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBTyxRQUEwQixFQUFFLEtBQXdCLEVBQUUsSUFBaUIsRUFBRSxjQUFzQixFQUFFLGNBQXNCLENBQUMsRUFBRSxFQUFFO0lBQ3JKLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLElBQW1CLEVBQUUsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxFQUFFLE9BQU87UUFDZixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUM7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUN0QixFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7UUFDM0MsR0FBRyxFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUM7S0FDbEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5cbi8qKlxuICAgKiBEZWNvcmF0b3IgdG8gcGFzcyBhbGwgdGhyb3duIGVycm9ycyB0byBncm9rLnNoZWxsLmVycm9yXG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBwYXNzRXJyb3JUb1NoZWxsID0gKCkgPT4ge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBtZW1iZXJOYW1lOiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci52YWx1ZTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBncm9rLnNoZWxsLmVycm9yKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBJTlRFUkFDVElWRV9DU1NfQ0xBU1MgPSAnY3YtaW50ZXJhY3RpdmUnO1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHJvdGVjdGVkIF9mdW5jQ2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX2xhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfdHlwZTogc3RyaW5nID0gJ2Z1bmN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihmdW5jQ2FsbD86IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgdGhpcy5jb250ZXh0ID0gREcuQ29udGV4dC5jbG9uZURlZmF1bHQoKTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgLyR7ZnVuY0NhbGwuZnVuYy5uYW1lfWA7XG4gICAgdGhpcy5saW5rRnVuY2NhbGwoZnVuY0NhbGwpO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuYnVpbGQoKTtcbiAgICB0aGlzLm5hbWUgPSBmdW5jQ2FsbC5mdW5jLmZyaWVuZGx5TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmdW5jdGlvbiBjYWxsIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCBmdW5jQ2FsbCgpOiBERy5GdW5jQ2FsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBGdW5jIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuYyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBnZXQgZnVuYygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jQ2FsbD8uZnVuYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGxhc3RDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YSBvZiBsYXN0IGNhbGwgb2YgYXNzb2NpYXRlZCBmdW5jdGlvblxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHNldCBsYXN0Q2FsbChsYXN0Q2FsbDogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sYXN0Q2FsbCA9IGxhc3RDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXcgdHlwZVxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqIEV4cG9ydCBvcHRpb25zLiBDb3VsZCBiZSBvdmVycmlkZW4gcGFydGlhbGx5LCB1c2luZyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb3B0aW9uLlxuICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgKi9cbiAgZXhwb3J0Q29uZmlnOiB7XG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGV4cG9ydCBsb2dpYy5cbiAgICAgICpcbiAgICAgICogIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICBjb25zdCBpc1ByZXZpb3VzSGlzdG9yaWNhbCA9IHRoaXMuX2Z1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXTtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuXG4gICAgaWYgKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddKSB7XG4gICAgICBpZiAoIWlzUHJldmlvdXNIaXN0b3JpY2FsKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0g4oCUICR7ZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KX1gO1xuICAgICAgICB0aGlzLnNldFJ1blZpZXdSZWFkb25seSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSl9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YDtcbiAgICAgIH1cblxuICAgICAgLy8gRklYIE1FOiB2aWV3IG5hbWUgZG9lcyBub3QgY2hhbmdlIGluIG1vZGVsc1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2LmQ0LXJpYmJvbi1uYW1lJyk/LnJlcGxhY2VDaGlsZHJlbih1aS5zcGFuKFt0aGlzLm5hbWVdKSk7XG4gICAgICB0aGlzLnBhdGggPSBgP2lkPSR7dGhpcy5fZnVuY0NhbGwuaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRSdW5WaWV3RWRpdGFibGUoKTtcbiAgICAgIHRoaXMucGF0aCA9IGBgO1xuXG4gICAgICBpZiAoaXNQcmV2aW91c0hpc3RvcmljYWwpXG4gICAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgdGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykpfWA7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGN1c3RvbSBsb2dpYyB0aGF0IGNvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgKiBBbnkgYXN5bmMgbWV0aG9kcyBhbmQgbW9zdCBvZiB0aGUgbG9naWMgc2hvdWxkIGJlIHBsYWNlZCBoZXJlLlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBpbml0KCkge1xuICAgIGlmICh0aGlzLmZ1bmNDYWxsICYmIHRoaXMuZnVuYykge1xuICAgICAgdGhpcy5mdW5jQ2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXM7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAgIGZvciAoY29uc3QgaW5QYXJhbSBvZiB3dSh0aGlzLmZ1bmNDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgLmZpbHRlcigocDogREcuRnVuY0NhbGxQYXJhbSkgPT5cbiAgICAgICAgICBwLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5wcm9wZXJ0eS5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSkge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpblBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhclJlc3VsdHMoZmFsc2UpO1xuICAgICAgICAgIHBhcmFtLnByb2Nlc3NPdXRwdXQoKTtcblxuICAgICAgICAgIHRoaXMuYXBwZW5kT3V0cHV0RGYocGFyYW0sIHtcbiAgICAgICAgICAgIGhlaWdodDogNDAwLFxuICAgICAgICAgICAgY2F0ZWdvcnk6ICdJbnB1dCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBmdWxseSBjdXN0b20gVUkgaW5jbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRJTygpKTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5vdmVybGF5RGl2KTtcblxuICAgIHRoaXMuYnVpbGRIaXN0b3J5QmxvY2soKTtcbiAgICB0aGlzLmJ1aWxkUmliYm9uTWVudSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dC1vdXRwdXQgYmxvY2tcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggd2hvbGUgVUkgZXhjbHVkaW5nIHJpYmJvbiBtZW51cyBhbmQgcGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMuZXhwb3J0Q29uZmlnID0ge1xuICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgICAgc3VwcG9ydGVkRm9ybWF0czogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpLFxuICAgICAgZXhwb3J0OiB0aGlzLmRlZmF1bHRFeHBvcnQsXG4gICAgICBmaWxlbmFtZTogdGhpcy5kZWZhdWx0RXhwb3J0RmlsZW5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuICAgIGNvbnN0IG91dHB1dEJsb2NrID0gdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG5cbiAgICByZXR1cm4gdWkuc3BsaXRIKFtpbnB1dEJsb2NrLCBvdXRwdXRCbG9ja10pO1xuICB9XG5cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIGlucHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGlucHV0IGJsb2NrIFVJIG9uIHRoZSBsZWZ0IHNpZGUgYnkgZGVmYXVsdFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZElucHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgcmV0dXJuIHRoaXMuY29udHJvbHNSb290O1xuXG4gICAgY29uc3QgZnVuY0RpdiA9IHVpLmRpdihbdGhpcy5yZW5kZXJSdW5TZWN0aW9uKHRoaXMuZnVuY0NhbGwpXSwgJ3VpLWRpdicpO1xuICAgIHVpLmVtcHR5KHRoaXMuY29udHJvbHNSb290KTtcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdW5jRGl2KTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIG91dHB1dCBibG9jay5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkT3V0cHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHVpLmVtcHR5KHRoaXMucmVzdWx0c1Jvb3QpO1xuICAgIHRoaXMucmVzdWx0c1Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5yZXN1bHRzRGl2KTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzUm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaGlzdG9yaWNhbCBydW5zIGNvbnRyb2wuXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGhpc3RvcnkgYmxvY2sgVUlcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRIaXN0b3J5QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IG1haW5BY2MgPSB1aS5hY2NvcmRpb24oKTtcbiAgICBtYWluQWNjLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgbWFpbkFjYy5hZGRUaXRsZSh1aS5zcGFuKFsnSGlzdG9yeSddKSk7XG5cbiAgICBjb25zdCBidWlsZEZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnRGF0ZScsICdBbnkgdGltZScpO1xuICAgICAgZGF0ZUlucHV0LmFkZFBhdHRlcm5NZW51KCdkYXRldGltZScpO1xuICAgICAgY29uc3QgZm9ybSA9dWkuZGl2VihbXG4gICAgICAgIHVpLnN0cmluZ0lucHV0KCdTZWFyY2gnLCAnJywgKCkgPT4ge30pLFxuICAgICAgICB1aS5jaG9pY2VJbnB1dCgnVXNlcicsICdDdXJyZW50IHVzZXInLCBbJ0N1cnJlbnQgdXNlciddKSxcbiAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgXSwgJ3VpLWZvcm0tY29uZGVuc2VkIHVpLWZvcm0nKTtcbiAgICAgIGZvcm0uc3R5bGUubWFyZ2luTGVmdCA9ICcwcHgnO1xuXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9O1xuICAgIGxldCBmaWx0ZXJQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdGaWx0ZXInLCBidWlsZEZpbHRlclBhbmUpO1xuICAgIGNvbnN0IHVwZGF0ZUZpbHRlclBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gZmlsdGVyUGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmaWx0ZXJQYW5lKTtcbiAgICAgIGZpbHRlclBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0ZpbHRlcicsIGJ1aWxkRmlsdGVyUGFuZSwgaXNFeHBhbmRlZCwgZmF2b3JpdGVzTGlzdFBhbmUpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaG93QWRkVG9GYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBsZXQgdGl0bGUgPSBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/ICcnO1xuICAgICAgbGV0IGFubm90YXRpb24gPSBmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10gPz8gJyc7XG4gICAgICBjb25zdCB0aXRsZUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RpdGxlJywgdGl0bGUsIChzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGl0bGUgPSBzO1xuICAgICAgICBpZiAocy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJ1RpdGxlIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdWkuZGlhbG9nKHt0aXRsZTogJ0FkZCB0byBmYXZvcml0ZXMnfSlcbiAgICAgICAgLmFkZCh1aS5mb3JtKFtcbiAgICAgICAgICB0aXRsZUlucHV0LFxuICAgICAgICAgIHVpLnN0cmluZ0lucHV0KCdBbm5vdGF0aW9uJywgYW5ub3RhdGlvbiwgKHM6IHN0cmluZykgPT4geyBhbm5vdGF0aW9uID0gczsgfSksXG4gICAgICAgIF0pKVxuICAgICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IGFubm90YXRpb247XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvRmF2b3JpdGVzKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlQYW5lKCk7XG4gICAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dEZWxldGVGYXZvcml0ZXNEaWFsb2cgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ1RoZSBkZWxldGVkIHJ1biBpcyBpbXBvc3NpYmxlIHRvIHJlc3RvcmUuIEFyZSB5b3Ugc3VyZT8nKSlcbiAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlUnVuKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1cGRhdGVIaXN0b3J5UGFuZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gICAgfTtcblxuICAgIGxldCBoaXN0b3J5Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGxldCBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBjb25zdCByZW5kZXJGYXZvcml0ZUNhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgZmF2b3JpdGVDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvbGlkU3RhciA9IHVpLmljb25GQSgnc3RhcicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmdW5jQ2FsbCk7XG4gICAgICAgICAgdXBkYXRlSGlzdG9yeVBhbmUoKTtcbiAgICAgICAgICB1cGRhdGVGYXZvcml0ZXNQYW5lKCk7XG4gICAgICAgIH0sICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICAgICAgc29saWRTdGFyLmNsYXNzTGlzdC5hZGQoJ2ZhcycpO1xuXG4gICAgICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICAgIHVpLmRpdlRleHQoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnRGVmYXVsdCB0aXRsZScsICd0aXRsZScpLFxuICAgICAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Fubm90YXRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydhbm5vdGF0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgICAgICB1aS5kaXZIKFt1aS5yZW5kZXIoZnVuY0NhbGwuYXV0aG9yKSwgdWkuc3BhbihbbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSldLCAnZGF0ZScpXSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICB1aS5pY29uRkEoJ3BlbicsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0FkZFRvRmF2b3JpdGVzRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICAgICAgICAgIH0sICdFZGl0IHJ1biBtZXRhZGF0YScpLFxuICAgICAgICAgICAgc29saWRTdGFyXG4gICAgICAgICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQtaWNvbnMnKVxuICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGZ1bmNDYWxsLmlkKSk7XG4gICAgICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FyZDtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi5oaXN0b3J5Q2FyZHMsIC4uLmZhdm9yaXRlQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKSkpO1xuXG4gICAgICByZXR1cm4gdWkuZGl2VihmYXZvcml0ZUNhcmRzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVySGlzdG9yeUNhcmRzID0gYXN5bmMgKGZ1bmNDYWxsczogREcuRnVuY0NhbGxbXSkgPT4ge1xuICAgICAgaGlzdG9yeUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IGZ1bmNDYWxsLmF1dGhvci5waWN0dXJlIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpY29uLnN0eWxlLndpZHRoID0gJzI1cHgnO1xuICAgICAgICBpY29uLnN0eWxlLmhlaWdodCA9ICcyNXB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5mb250U2l6ZSA9ICcyMHB4JztcbiAgICAgICAgaWNvbi5zdHlsZS5tYXJnaW5SaWdodCA9ICczcHgnO1xuICAgICAgICBpY29uLnN0eWxlLmFsaWduU2VsZiA9ICdjZW50ZXInO1xuICAgICAgICBjb25zdCB1c2VyTGFiZWwgPSB1aS5sYWJlbChmdW5jQ2FsbC5hdXRob3IuZnJpZW5kbHlOYW1lLCAnZDQtbGluay1sYWJlbCcpO1xuICAgICAgICB1aS5iaW5kKGZ1bmNDYWxsLmF1dGhvciwgdXNlckxhYmVsKTtcblxuICAgICAgICBjb25zdCBjYXJkID0gdWkuZGl2SChbXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgdWkuZGl2VihbXG4gICAgICAgICAgICAgIHVzZXJMYWJlbCxcbiAgICAgICAgICAgICAgdWkuc3BhbihbbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSldKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdWkuZGl2SChbXG4gICAgICAgICAgICB1aS5pY29uRkEoJ3N0YXInLCBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNob3dBZGRUb0Zhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnQWRkIHRvIGZhdm9yaXRlcycpLFxuICAgICAgICAgICAgdWkuaWNvbkZBKCdsaW5rJywgYXN5bmMgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9pZD0ke2Z1bmNDYWxsLmlkfWApO1xuICAgICAgICAgICAgfSwgJ0NvcHkgbGluayB0byB0aGUgcnVuJyksXG4gICAgICAgICAgICB1aS5pY29uRkEoJ3RyYXNoLWFsdCcsIGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2hvd0RlbGV0ZUZhdm9yaXRlc0RpYWxvZyhmdW5jQ2FsbCk7XG4gICAgICAgICAgICB9LCAnRGVsZXRlIHRoZSBydW4nKSxcbiAgICAgICAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZC1pY29ucycpXG4gICAgICAgIF0sICdjdi1mdW5jY2FsbC1jYXJkJyk7XG5cbiAgICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxpbmtGdW5jY2FsbChhd2FpdCB0aGlzLmxvYWRSdW4oZnVuY0NhbGwuaWQpKTtcbiAgICAgICAgICBjYXJkLmNsYXNzTGlzdC5hZGQoJ2NsaWNrZWQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNhcmQ7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWxsQ2FyZHMgPVsuLi5oaXN0b3J5Q2FyZHMsIC4uLmZhdm9yaXRlQ2FyZHNdO1xuICAgICAgYWxsQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKSkpO1xuXG4gICAgICByZXR1cm4gdWkuZGl2VihoaXN0b3J5Q2FyZHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZEZhdm9yaXRlc0xpc3QgPSAoKSA9PiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhpc3RvcmljYWxSdW5zID0gYXdhaXQgdGhpcy5wdWxsUnVucyh0aGlzLmZ1bmMhLmlkKTtcbiAgICAgIGNvbnN0IGZhdm9yaXRlUnVucyA9IGhpc3RvcmljYWxSdW5zLmZpbHRlcigocnVuKSA9PiBydW4ub3B0aW9uc1snaXNGYXZvcml0ZSddICYmICFydW4ub3B0aW9uc1snaXNJbXBvcnRlZCddKTtcbiAgICAgIGlmIChmYXZvcml0ZVJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHVpLmRpdlRleHQoJ05vIHJ1bnMgYXJlIG1hcmtlZCBhcyBmYXZvcml0ZXMnLCAnZGVzY3JpcHRpb24nKTtcbiAgICB9KTtcbiAgICBsZXQgZmF2b3JpdGVzTGlzdFBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0Zhdm9yaXRlcycsIGJ1aWxkRmF2b3JpdGVzTGlzdCwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlRmF2b3JpdGVzUGFuZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBmYXZvcml0ZXNMaXN0UGFuZS5leHBhbmRlZDtcbiAgICAgIG1haW5BY2MucmVtb3ZlUGFuZShmYXZvcml0ZXNMaXN0UGFuZSk7XG4gICAgICBmYXZvcml0ZXNMaXN0UGFuZSA9IG1haW5BY2MuYWRkUGFuZSgnRmF2b3JpdGVzJywgYnVpbGRGYXZvcml0ZXNMaXN0LCBpc0V4cGFuZGVkLCBoaXN0b3J5UGFuZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkSGlzdG9yeVBhbmUgPSAoKSA9PiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhpc3RvcmljYWxSdW5zID0gKGF3YWl0IHRoaXMucHVsbFJ1bnModGhpcy5mdW5jIS5pZCkpLmZpbHRlcigocnVuKSA9PiAhcnVuLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSAmJiAhcnVuLm9wdGlvbnNbJ2lzSW1wb3J0ZWQnXSk7XG4gICAgICBpZiAoaGlzdG9yaWNhbFJ1bnMubGVuZ3RoID4gMClcbiAgICAgICAgcmV0dXJuIHVpLndhaXQoKCkgPT4gcmVuZGVySGlzdG9yeUNhcmRzKGhpc3RvcmljYWxSdW5zKSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBmb3VuZCBpbiBoaXN0b3J5JywgJ2Rlc2NyaXB0aW9uJyk7XG4gICAgfSk7XG4gICAgbGV0IGhpc3RvcnlQYW5lID0gbWFpbkFjYy5hZGRQYW5lKCdIaXN0b3J5JywgYnVpbGRIaXN0b3J5UGFuZSwgdHJ1ZSk7XG4gICAgY29uc3QgdXBkYXRlSGlzdG9yeVBhbmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpc0V4cGFuZGVkID0gaGlzdG9yeVBhbmUuZXhwYW5kZWQ7XG4gICAgICBtYWluQWNjLnJlbW92ZVBhbmUoaGlzdG9yeVBhbmUpO1xuICAgICAgaGlzdG9yeVBhbmUgPSBtYWluQWNjLmFkZFBhbmUoJ0hpc3RvcnknLCBidWlsZEhpc3RvcnlQYW5lLCBpc0V4cGFuZGVkKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3SGlzdG9yeUJsb2NrID0gbWFpbkFjYy5yb290O1xuICAgIHVpLmVtcHR5KHRoaXMuaGlzdG9yeVJvb3QpO1xuICAgIHRoaXMuaGlzdG9yeVJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2p1c3RpZnktY29udGVudCcpO1xuICAgIHRoaXMuaGlzdG9yeVJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5hcHBlbmQobmV3SGlzdG9yeUJsb2NrKTtcbiAgICByZXR1cm4gbmV3SGlzdG9yeUJsb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2tzIGZvciB7QGxpbmsgc3VwcG9ydGVkRXhwb3J0Rm9ybWF0c30gbWVtYmVycyBhbmQgY3JlYXRlcyByaWJib24gcGFuZWxcbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50cyBvZiByaWJib25QYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBidWlsZFJpYmJvblBhbmVscygpOiBIVE1MRWxlbWVudFtdW10ge1xuICAgIGNvbnN0IG5ld1JpYmJvblBhbmVsczogSFRNTEVsZW1lbnRbXVtdID0gW1xuICAgICAgWy4uLih0aGlzLmV4cG9ydENvbmZpZyAmJiB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLmxlbmd0aCA+IDApID8gW3VpLmRpdkgoW1xuICAgICAgICB1aS5jb21ib1BvcHVwKFxuICAgICAgICAgIHVpLmljb25GQSgnYXJyb3ctdG8tYm90dG9tJyksXG4gICAgICAgICAgdGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cyxcbiAgICAgICAgICBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IERHLlV0aWxzLmRvd25sb2FkKHRoaXMuZXhwb3J0Q29uZmlnIS5maWxlbmFtZShmb3JtYXQpLCBhd2FpdCB0aGlzLmV4cG9ydENvbmZpZyEuZXhwb3J0KGZvcm1hdCkpKSxcbiAgICAgIF0pXTogW11cbiAgICAgIF1dO1xuXG4gICAgaWYgKHRoaXMuZnVuYz8uaWQpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnlCdXR0b24gPSB1aS5pY29uRkEoJ2hpc3RvcnknLCAoKSA9PiB7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcyA9ICFncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXM7XG4gICAgICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnZDQtY3VycmVudCcpO1xuICAgICAgICBncm9rLnNoZWxsLm8gPSB0aGlzLmhpc3RvcnlSb290O1xuICAgICAgfSk7XG5cbiAgICAgIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtdG9nZ2xlLWJ1dHRvbicpO1xuICAgICAgaWYgKGdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcykgaGlzdG9yeUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkNC1jdXJyZW50Jyk7XG5cbiAgICAgIGNvbnN0IGNsb25lUnVuQnRuID0gdWkuYnV0dG9uKCdDbG9uZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jbG9uZVJ1bkFzQ3VycmVudCgpO1xuICAgICAgfSwgJ0Nsb25lIHRoZSBydW4nKTtcblxuICAgICAgbmV3UmliYm9uUGFuZWxzLnB1c2goW1xuICAgICAgICBoaXN0b3J5QnV0dG9uLFxuICAgICAgICAuLi50aGlzLmZ1bmNDYWxsPy5vcHRpb25zWydpc0hpc3RvcmljYWwnXT8gW2Nsb25lUnVuQnRuXTogW10sXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9GYXZvcml0ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZUNhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIHJ1biBhcyB1c3VhbCBydW5cbiAgICogQHBhcmFtIGNhbGxUb1VuZmF2b3JpdGUgRnVuY0NhbGwgb2JqZWN0IHRvIHJlbW92ZSBmcm9tIGZhdm9yaXRlc1xuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIHJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoY2FsbFRvVW5mYXZvcml0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2Fubm90YXRpb24nXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPSBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhjYWxsVG9VbmZhdm9yaXRlKTtcbiAgICBjb25zdCBmYXZvcml0ZVNhdmUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyUmVtb3ZlUnVuRnJvbUZhdm9yaXRlcyhmYXZvcml0ZVNhdmUpO1xuICAgIHJldHVybiBmYXZvcml0ZVNhdmU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVBZGRpbmdUb0Zhdm9yaXRlcyhjYWxsVG9BZGRUb0Zhdm9yaXRlczogREcuRnVuY0NhbGwpIHsgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyQWRkaW5nVG9GYXZvcml0ZXMoZmF2b3JpdGVDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBydW4gYXMgZmF2b3JpdGVcbiAgICogQHBhcmFtIGNhbGxUb0Zhdm9yaXRlIEZ1bmNDYWxsIG9iamVjdCB0byBhZGQgdG8gZmF2b3JpdGVzXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUFkZGluZ1RvRmF2b3JpdGVzKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBjb25zdCBzYXZlZEZhdm9yaXRlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb0Zhdm9yaXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJBZGRpbmdUb0Zhdm9yaXRlcyhzYXZlZEZhdm9yaXRlKTtcbiAgICByZXR1cm4gc2F2ZWRGYXZvcml0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIHNhdmluZyB0aGUgRlVuY0NhbGwgcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9TYXZlIEZ1bmNDYWxsIG9iamVjdCB0byBzYXZlXG4gICAqIEByZXR1cm5zIFNhdmVkIEZ1bmNDYWxsXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHBhcmFtIHNhdmVkQ2FsbCBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyU2F2ZVJ1bihzYXZlZENhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIGNvbXB1dGF0aW9uIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvU2F2ZSBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIHNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZSk7XG5cbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShjYWxsVG9TYXZlLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgZGZPdXRwdXRzKVxuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy51cGxvYWREYXRhRnJhbWUoY2FsbFRvU2F2ZS5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KGNhbGxUb1NhdmUuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigoaW5wdXQpID0+IGlucHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKVxuICAgICAgYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy51cGxvYWREYXRhRnJhbWUoY2FsbFRvU2F2ZS5pbnB1dHNbaW5wdXQubmFtZV0pO1xuXG4gICAgY29uc3Qgc2F2ZWRDYWxsID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5zYXZlKGNhbGxUb1NhdmUpO1xuICAgIHRoaXMuYnVpbGRIaXN0b3J5QmxvY2soKTtcbiAgICB0aGlzLnBhdGggPSBgP2lkPSR7c2F2ZWRDYWxsLmlkfWA7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyU2F2ZVJ1bihzYXZlZENhbGwpO1xuICAgIHJldHVybiBzYXZlZENhbGw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyBmcm9tIGhpc3RvcnksIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9EZWxldGUgRnVuY0NhbGwgb2JqZWN0IHRvIGJlIGRlbGV0ZWRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25CZWZvcmVEZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBkZWxldGluZyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyBmcm9tIGhpc3RvcnksIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBkZWxldGVkQ2FsbCBkZWxldGVkIEZ1bmNDYWxsIHZhbHVlXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJEZWxldGVSdW4oZGVsZXRlZENhbGw6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyBmcm9tIGhpc3RvcnksIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBjYWxsVG9EZWxldGUgRnVuY0NhbGwgb2JqZWN0IHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBJRCBvZiBkZWxldGVkIGhpc3RvcmljYWwgcnVuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgQHBhc3NFcnJvclRvU2hlbGwoKVxuICBwdWJsaWMgYXN5bmMgZGVsZXRlUnVuKGNhbGxUb0RlbGV0ZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMub25CZWZvcmVEZWxldGVSdW4oY2FsbFRvRGVsZXRlKTtcbiAgICBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmRlbGV0ZShjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckRlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIHJldHVybiBjYWxsVG9EZWxldGUuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlTG9hZFJ1bigpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBmZXRjaGluZyB0aGUgaGlzdG9yaWNhbCBydW4gZGF0YSBpbiB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbCBGdW5jQ2FsbCBmZXRjaGVkIGZyb20gc2VydmVyIGR1cmluZyB7QGxpbmsgbG9hZFJ1bn1cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4oZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcnVuLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIElEIG9mIEZ1bmNDYWxsIHRvIGxvb2sgZm9yLiBHZXQgaXQgdXNpbmcge0BzZWUgZnVuY0NhbGwuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIEZ1bmNDYWxsIGF1Z2VtZW50ZWQgd2l0aCBpbnB1dHMnIGFuZCBvdXRwdXRzJyB2YWx1ZXNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBAcGFzc0Vycm9yVG9TaGVsbCgpXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgICAvLyBGSVggTUU6IG1hbnVhbGx5IGdldCBzY3JpcHQgc2luY2UgcHVsbGVkUnVuIGNvbnRhaW5zIGVtcHR5IEZ1bmNcbiAgICBjb25zdCBzY3JpcHQgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmZpbmQocHVsbGVkUnVuLmZ1bmMuaWQpO1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHdpbmRvdy5ncm9rX0Z1bmNDYWxsX1NldF9GdW5jKHB1bGxlZFJ1bi5kYXJ0LCBzY3JpcHQuZGFydCk7XG4gICAgcHVsbGVkUnVuLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddID0gdHJ1ZTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB3dShwdWxsZWRSdW4ub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICBwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHd1KHB1bGxlZFJ1bi5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpXG4gICAgICBwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4uaW5wdXRzW2lucHV0Lm5hbWVdKTtcblxuXG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyTG9hZFJ1bihwdWxsZWRSdW4pO1xuICAgIHRoaXMuc2V0UnVuVmlld1JlYWRvbmx5KCk7XG4gICAgcmV0dXJuIHB1bGxlZFJ1bjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUNsb25lUnVuQXNDdXJyZW50KCkgeyB9XG5cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJDbG9uZVJ1bkFzQ3VycmVudCgpIHsgfVxuXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIGNsb25lUnVuQXNDdXJyZW50KCkge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdDdXJyZW50IEZ1bmNjYWxsIGlzIG5vdCBzZXQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVDbG9uZVJ1bkFzQ3VycmVudCgpO1xuICAgIGNvbnN0IGNsb25lZEZ1bmNjYWxsID0gdGhpcy5mdW5jQ2FsbC5jbG9uZSgpO1xuICAgIGNsb25lZEZ1bmNjYWxsLm5ld0lkKCk7XG4gICAgY2xvbmVkRnVuY2NhbGwub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSBmYWxzZTtcbiAgICB0aGlzLmxpbmtGdW5jY2FsbChjbG9uZWRGdW5jY2FsbCk7XG4gICAgYXdhaXQgdGhpcy5vbkFmdGVyQ2xvbmVSdW5Bc0N1cnJlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3ZlcmxheURpdiA9IHVpLmRpdihbXSwge3N0eWxlOiB7XG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnZ3JheScsXG4gICAgJ29wYWNpdHknOiAnMC4wNycsXG4gICAgJ3Bvc2l0aW9uJzogJ2Fic29sdXRlJyxcbiAgICAnYm90dG9tJzogJzAnLFxuICAgICdsZWZ0JzogJzAnLFxuICAgICdyaWdodCc6ICcwJyxcbiAgICAndG9wJzogJzAnLFxuICAgICdkaXNwbGF5JzogJ25vbmUnLFxuICAgICdjdXJzb3InOiAnbm90LWFsbG93ZWQnLFxuICAgICd6LWluZGV4JzogJzEnLFxuICB9fSk7XG5cbiAgcHJpdmF0ZSByb290UmVhZG9ubHlFdmVudExpc3RlbmVycyA9IFtcbiAgICAoZXY6IE1vdXNlRXZlbnQpPT4ge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgfSxcbiAgICAoKSA9PiB7XG4gICAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICB9LFxuICAgICgpID0+IHtcbiAgICAgIGdyb2suc2hlbGwud2FybmluZygnQ2xvbmUgdGhlIHJ1biB0byBlZGl0IGl0Jyk7XG4gICAgfSxcbiAgXTtcblxuICBwcml2YXRlIGludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgKCkgPT50aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKSxcbiAgICAoKSA9PnRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMl0pXG4gIF07XG5cbiAgcHJpdmF0ZSBzZXRSdW5WaWV3UmVhZG9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5vdmVybGF5RGl2LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1syXSk7XG4gICAgdGhpcy5yb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMucm9vdFJlYWRvbmx5RXZlbnRMaXN0ZW5lcnNbMF0pO1xuICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1sxXSk7XG4gICAgdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lOVEVSQUNUSVZFX0NTU19DTEFTU31gKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS56SW5kZXggPSAnMic7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1swXSk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoKSA9PiBzZXRUaW1lb3V0KHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1sxXSwgMTAwKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFJ1blZpZXdFZGl0YWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm92ZXJsYXlEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzJdKTtcbiAgICB0aGlzLnJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5yb290UmVhZG9ubHlFdmVudExpc3RlbmVyc1swXSk7XG4gICAgdGhpcy5yb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLnJvb3RSZWFkb25seUV2ZW50TGlzdGVuZXJzWzFdKTtcbiAgICB0aGlzLnJvb3QucXVlcnlTZWxlY3RvckFsbChgLiR7SU5URVJBQ1RJVkVfQ1NTX0NMQVNTfWApLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnJlbW92ZVByb3BlcnR5KCd6LWluZGV4Jyk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaW50ZXJhY3RpdmVFdmVudExpc3RlbmVyc1swXSk7XG4gICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmludGVyYWN0aXZlRXZlbnRMaXN0ZW5lcnNbMV0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgKiBEZXNpZ25lZCB0byBwdWxsIGhzdG9yaWNhbCBydW5zIGluIGZhc3QgbWFubmVyIGFuZCB0aGUgY2FsbCB7QGxpbmsgbG9hZFJ1bn0gd2l0aCBzcGVjaWZpZWQgcnVuIElELlxuICAgKiBXQVJOSU5HOiBGdW5jQ2FsbCBpbnB1dHMvb3V0cHV0cyBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAcGFyYW0gZnVuY0lkIElEIG9mIEZ1bmMgd2hpY2ggY2FsbHMgd2UgYXJlIGxvb2tpbmcgZm9yLiBHZXQgaXQgdXNpbmcge0BsaW5rIGZ1bmMuaWR9IGZpZWxkXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb24gYXJyYXkgb2YgRnVuY0NhbGxzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhc3NlZCBGdW5jIElEXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIHB1bGxSdW5zKGZ1bmNJZDogc3RyaW5nKTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5maWx0ZXIoYGZ1bmMuaWQ9XCIke2Z1bmNJZH1cImApLmluY2x1ZGUoJ3Nlc3Npb24udXNlciwgb3B0aW9ucycpO1xuICAgIGNvbnN0IGxpc3QgPSBmaWx0ZXIubGlzdCh7cGFnZVNpemU6IDIwfSk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgKiBAcGFyYW0gZnVuY1RvQ2FsbCBGdW5jQ2FsbCBvYmplY3QgdG8gYmUgY2FsbGVkIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgKi9cbiAgcHVibGljIGFzeW5jIG9uQmVmb3JlUnVuKGZ1bmNUb0NhbGw6IERHLkZ1bmNDYWxsKSB7fVxuXG4gIC8qKlxuICAgICogQ2FsbGVkIGFmdGVyIGFjdHVhbCBjb21wdXRhdGlvbnMgYXJlIG1hZGUge0BsaW5rIHJ1bn0uXG4gICAgKiBAcGFyYW0gcnVuRnVuYyBGdW5jQ2FsbCBvYmplY3QgYWZ0ZXIgY2FsbCBtZXRob2Qge0BzZWUgREcuRnVuY0NhbGwuY2FsbCgpfVxuICAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyUnVuKHJ1bkZ1bmM6IERHLkZ1bmNDYWxsKSB7XG4gICAgdGhpcy5vdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KHRoaXMubGFzdENhbGwhKTtcbiAgfVxuXG4gIEBwYXNzRXJyb3JUb1NoZWxsKClcbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSdW4odGhpcy5mdW5jQ2FsbCk7XG5cbiAgICB0aGlzLmxhc3RDYWxsID0gYXdhaXQgdGhpcy5zYXZlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRFeHBvcnRGaWxlbmFtZSA9IChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IC0gJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCl9LiR7dGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEV4dGVuc2lvbnNbZm9ybWF0XX1gO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucyA9ICgpID0+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+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhkZi5jb2x1bW5zLm5hbWVzKCkpLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGYucm93Q291bnQ7IGkrKylcbiAgICBzaGVldC5hZGRSb3coWy4uLmRmLnJvdyhpKS5jZWxsc10ubWFwKChjZWxsOiBERy5DZWxsKSA9PiBjZWxsLnZhbHVlKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgc2hlZXQuZ2V0Q29sdW1uKGkgKyAxKS53aWR0aCA9XG4gICAgICBNYXRoLm1heChcbiAgICAgICAgLi4uZGYuY29sdW1ucy5ieUluZGV4KGkpLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkudG9TdHJpbmcoKS5sZW5ndGgpLFxuICAgICAgICBkZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZS5sZW5ndGhcbiAgICAgICkgKiAxLjI7XG4gIH1cbn07XG5cbmNvbnN0IHBsb3RUb1NoZWV0ID0gYXN5bmMgKGV4cG9ydFdiOiBFeGNlbEpTLldvcmtib29rLCBzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIHBsb3Q6IEhUTUxFbGVtZW50LCBjb2x1bW5Gb3JJbWFnZTogbnVtYmVyLCByb3dGb3JJbWFnZTogbnVtYmVyID0gMCkgPT4ge1xuICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhwbG90IGFzIEhUTUxFbGVtZW50LCB7bG9nZ2luZzogZmFsc2V9KTtcbiAgY29uc3QgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuXG4gIGNvbnN0IGltYWdlSWQgPSBleHBvcnRXYi5hZGRJbWFnZSh7XG4gICAgYmFzZTY0OiBkYXRhVXJsLFxuICAgIGV4dGVuc2lvbjogJ3BuZycsXG4gIH0pO1xuICBzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XG4gICAgdGw6IHtjb2w6IGNvbHVtbkZvckltYWdlLCByb3c6IHJvd0ZvckltYWdlfSxcbiAgICBleHQ6IHt3aWR0aDogY2FudmFzLndpZHRoLCBoZWlnaHQ6IGNhbnZhcy5oZWlnaHR9LFxuICB9KTtcbn07XG4iXX0=