@datagrok-libraries/utils 0.7.0 → 0.7.1
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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtC,qBAAa,YAAa,SAAQ,EAAE,CAAC,QAAQ;IAC3C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACvC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IAClC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IAClC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAc;gBAEzB,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtC,qBAAa,YAAa,SAAQ,EAAE,CAAC,QAAQ;IAC3C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACvC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IAClC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC;IAClC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAc;gBAEzB,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ;IAgBlC;;;;KAIC;IACD,IAAW,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,SAAS,CAE7C;IAED;;;;KAIC;IACD,IAAI,IAAI,wBAEP;IAED;;;;KAIC;IACD,IAAI,QAAQ,IAQW,EAAE,CAAC,QAAQ,GAAG,SAAS,CAN7C;IAED;;;KAGC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,SAAS,EAE7C;IAED;;;KAGC;IACD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;MAEE;IACF,YAAY,EAAE;QACZ;;;;UAIE;QACF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAG5C;;;;;UAKE;QACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;QAEvC;;;;;UAKE;QACF,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAE3B;;;;;WAKG;QACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C,GAAG,IAAI,CAAQ;IAEhB;;;;KAIC;IACM,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IAIzC;;;;KAIC;IACY,IAAI;IAqBjB;;;KAGC;IACM,KAAK,IAAI,IAAI;IAQpB;;;;KAIC;IACM,OAAO,IAAI,WAAW;IAe7B;;;;KAIC;IACM,eAAe,IAAI,WAAW;IASrC;;;;KAIC;IACM,gBAAgB,IAAI,WAAW;IAMtC;;;;KAIC;IACM,iBAAiB,IAAI,WAAW;IAkBvC;;;;KAIC;IACD,iBAAiB,IAAI,WAAW,EAAE,EAAE;IAcpC;;;KAGC;IACM,eAAe;IAItB;;;KAGC;IACY,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;IAK5C;;;KAGC;IACY,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;IAI9D;;;;;KAKC;IACY,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IAKlC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC,SAAS,CAAC,qBAAqB,WAAY,MAAM,YAE/C;IAEF,SAAS,CAAC,gCAAgC;;MAIxC;IAEF,SAAS,CAAC,6BAA6B,iBAErC;IAEF,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAmH7C;IAEF,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,kBAAkB,aAI/B;IAED,SAAS,KAAK,gBAAgB,aAK7B;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,6BAQ/B;IAGD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,WAAW;IAgB1D,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,sBAAsB;IAY9B,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IAElE,SAAS,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAa;IAErE,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IAE3D,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAa;IAC3D,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC;IACvD,SAAS,CAAC,UAAU,EAAE,WAAW,CAAqC;IAEtE,SAAS,CAAC,YAAY,EAAE,cAAc,CAA8C;IACpF,SAAS,CAAC,WAAW,EAAE,cAAc,CAAY;IACjD,SAAS,CAAC,WAAW,EAAE,cAAc,CAAuD;IAC5F,SAAS,CAAC,UAAU,EAAE,cAAc,CAA6C;IAEjF,OAAO,CAAC,cAAc;IA4FtB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,mBAAmB;CAM5B"}
|
package/src/function-view.js
CHANGED
|
@@ -140,6 +140,8 @@ export class FunctionView extends DG.ViewBase {
|
|
|
140
140
|
this.inputsRoot = ui.panel([], 'grok-func-results, ui-box');
|
|
141
141
|
this.box = true;
|
|
142
142
|
this.context = DG.Context.cloneDefault();
|
|
143
|
+
this.parentCall = grok.functions.getCurrentCall();
|
|
144
|
+
this.parentView = grok.functions.getCurrentCall().parentCall.aux['view'];
|
|
143
145
|
if (!funcCall)
|
|
144
146
|
return;
|
|
145
147
|
this.linkFunccall(funcCall);
|
|
@@ -566,4 +568,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
|
|
|
566
568
|
ext: { width: canvas.width, height: canvas.height },
|
|
567
569
|
});
|
|
568
570
|
});
|
|
569
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFekIsTUFBTSxPQUFPLFlBQWEsU0FBUSxFQUFFLENBQUMsUUFBUTtJQU0zQyxZQUFZLFFBQXNCO1FBQ2hDLEtBQUssRUFBRSxDQUFDO1FBSEEsVUFBSyxHQUFXLFVBQVUsQ0FBQztRQTBEckM7O1VBRUU7UUFDRixpQkFBWSxHQWdDRCxJQUFJLENBQUM7UUF3TE4sMEJBQXFCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNuRCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFhLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzRyxDQUFDLENBQUM7UUFFUSxxQ0FBZ0MsR0FBRyxHQUFHLEVBQUU7WUFDaEQsT0FBTztnQkFDTCxPQUFPLEVBQUUsTUFBTTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRVEsa0NBQTZCLEdBQUcsR0FBRyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFUSxrQkFBYSxHQUFHLENBQU8sTUFBYyxFQUFFLEVBQUU7O1lB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RSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDbEMsR0FBRyxHQUFHLENBQUM7S0FDWDtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQU8sUUFBMEIsRUFBRSxLQUF3QixFQUFFLElBQWlCLEVBQUUsY0FBc0IsRUFBRSxjQUFzQixDQUFDLEVBQUUsRUFBRTtJQUNySixNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxJQUFtQixFQUFFLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFDeEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxPQUFPO1FBQ2YsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDdEIsRUFBRSxFQUFFLEVBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFDO1FBQzNDLEdBQUcsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFDO0tBQ2xELENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICQgZnJvbSAnY2FzaC1kb20nO1xuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogREcuQ29udGV4dDtcbiAgcHJvdGVjdGVkIF9mdW5jQ2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX2xhc3RDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfdHlwZTogc3RyaW5nID0gJ2Z1bmN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihmdW5jQ2FsbD86IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmJveCA9IHRydWU7XG4gICAgdGhpcy5jb250ZXh0ID0gREcuQ29udGV4dC5jbG9uZURlZmF1bHQoKTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcblxuICAgIHRoaXMubGlua0Z1bmNjYWxsKGZ1bmNDYWxsKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gICAgdGhpcy5uYW1lID0gZnVuY0NhbGwuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZnVuY3Rpb24gY2FsbCBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmNjYWxsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgZnVuY0NhbGwoKTogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdW5jQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRnVuYyBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY0NhbGw/LmZ1bmM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBsYXN0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBzZXQgbGFzdENhbGwobGFzdENhbGw6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFzdENhbGwgPSBsYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IHR5cGVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKiBFeHBvcnQgb3B0aW9ucy4gQ291bGQgYmUgb3ZlcnJpZGVuIHBhcnRpYWxseSwgdXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9wdGlvbi5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGV4cG9ydENvbmZpZzoge1xuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBleHBvcnQgbG9naWMuXG4gICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBmb3IgY3VzdG9tIGxvZ2ljIHRoYXQgY291bGQgbm90IGJlIHBsYWNlZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAqIEFueSBhc3luYyBtZXRob2RzIGFuZCBtb3N0IG9mIHRoZSBsb2dpYyBzaG91bGQgYmUgcGxhY2VkIGhlcmUuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuZnVuY0NhbGwgJiYgdGhpcy5mdW5jKSB7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmF1eFsndmlldyddID0gdGhpcztcbiAgICAgIHRoaXMuZnVuY0NhbGwuY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgZm9yIChjb25zdCBpblBhcmFtIG9mIHd1KHRoaXMuZnVuY0NhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAuZmlsdGVyKChwOiBERy5GdW5jQ2FsbFBhcmFtKSA9PlxuICAgICAgICAgIHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnByb3BlcnR5Lm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluUGFyYW0ub25DaGFuZ2VkLnN1YnNjcmliZShhc3luYyAocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0pID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyUmVzdWx0cyhmYWxzZSk7XG4gICAgICAgICAgcGFyYW0ucHJvY2Vzc091dHB1dCgpO1xuXG4gICAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwYXJhbSwge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MDAsXG4gICAgICAgICAgICBjYXRlZ29yeTogJ0lucHV0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGZ1bGx5IGN1c3RvbSBVSSBpbmNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRJTygpKTtcblxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5idWlsZFJpYmJvbk1lbnUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQtb3V0cHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIHdob2xlIFVJIGV4Y2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZElPKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZyA9IHtcbiAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMoKSxcbiAgICAgIHN1cHBvcnRlZEZvcm1hdHM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKSxcbiAgICAgIGV4cG9ydDogdGhpcy5kZWZhdWx0RXhwb3J0LFxuICAgICAgZmlsZW5hbWU6IHRoaXMuZGVmYXVsdEV4cG9ydEZpbGVuYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dEJsb2NrID0gdGhpcy5idWlsZElucHV0QmxvY2soKTtcbiAgICBjb25zdCBvdXRwdXRCbG9jayA9IHRoaXMuYnVpbGRPdXRwdXRCbG9jaygpO1xuXG4gICAgcmV0dXJuIHVpLnNwbGl0SChbaW5wdXRCbG9jaywgb3V0cHV0QmxvY2tdKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJbnB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcblxuICAgIGNvbnN0IGZ1bmNEaXYgPSB1aS5kaXYoW3RoaXMucmVuZGVyUnVuU2VjdGlvbih0aGlzLmZ1bmNDYWxsKV0sICd1aS1kaXYnKTtcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdW5jRGl2KTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIG91dHB1dCBibG9jay5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkT3V0cHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMucmVzdWx0c1Jvb3QuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5hcHBlbmRDaGlsZCh0aGlzLnJlc3VsdHNEaXYpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgY29udHJvbC5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaGlzdG9yeSBibG9jayBVSVxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBidWlsZEhpc3RvcnlCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbmV3SGlzdG9yeUJsb2NrID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgdGhpcy5wdWxsUnVucygpLnRoZW4oYXN5bmMgKGhpc3RvcmljYWxSdW5zKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBERy5NZW51LnBvcHVwKCk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBydW4gb2YgaGlzdG9yaWNhbFJ1bnMpIHtcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBtZW51Lml0ZW0oYCR7cnVuLmZ1bmMuZnJpZW5kbHlOYW1lfSDigJQgJHtpfWAsIGFzeW5jICgpID0+IHRoaXMuaGlzdG9yaWNhbFJ1blNlcnZpY2UubG9hZFJ1bihydW4uaWQpKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgbWVudS5zaG93KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmhpc3RvcnlSb290LmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuYXBwZW5kKG5ld0hpc3RvcnlCbG9jayk7XG4gICAgcmV0dXJuIG5ld0hpc3RvcnlCbG9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyBmb3Ige0BsaW5rIHN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9IG1lbWJlcnMgYW5kIGNyZWF0ZXMgcmliYm9uIHBhbmVsXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudHMgb2YgcmliYm9uUGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgYnVpbGRSaWJib25QYW5lbHMoKTogSFRNTEVsZW1lbnRbXVtdIHtcbiAgICBjb25zdCBuZXdSaWJib25QYW5lbHMgPSBbXG4gICAgICAuLi50aGlzLmdldFJpYmJvblBhbmVscygpLFxuICAgICAgWy4uLih0aGlzLmV4cG9ydENvbmZpZyAmJiB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLmxlbmd0aCA+IDApID8gW3VpLmRpdkgoW1xuICAgICAgICB1aS5jb21ib1BvcHVwKFxuICAgICAgICAgIHVpLmljb25GQSgnYXJyb3ctdG8tYm90dG9tJyksXG4gICAgICAgICAgdGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cyxcbiAgICAgICAgICBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IERHLlV0aWxzLmRvd25sb2FkKHRoaXMuZXhwb3J0Q29uZmlnIS5maWxlbmFtZShmb3JtYXQpLCBhd2FpdCB0aGlzLmV4cG9ydENvbmZpZyEuZXhwb3J0KGZvcm1hdCkpKSxcbiAgICAgIF0pXTogW11dXG4gICAgXTtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgcHVibGljIGFzeW5jIHNhdmVSdW4oKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHJldHVybiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUodGhpcy5sYXN0Q2FsbCEpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaGlzdG9yaWNhbCBydW4uIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgcmV0dXJuIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucygpOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBjb25zdCBsaXN0ID0gZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5maWx0ZXIoYGZ1bmMuaWQ9XCIke3RoaXMuZnVuYz8uaWR9XCJgKS5saXN0KCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxhc3RDYWxsID0gYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKHRydWUsIHVuZGVmaW5lZCwge3Byb2Nlc3NlZDogdHJ1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgIH1cblxuICAgIHRoaXMub3V0cHV0UGFyYW1ldGVyc1RvVmlldyh0aGlzLmxhc3RDYWxsISk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydEZpbGVuYW1lID0gKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gLSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKX0uJHt0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAnRXhjZWwnOiAneGxzeCdcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cyA9ICgpID0+IHtcbiAgICByZXR1cm4gWydFeGNlbCddO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuXG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoc2NhbGFyT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnT3V0cHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KG91dHB1dFNjYWxhcnNTaGVldCwgc2NhbGFyT3V0cHV0cy5tYXAoKHNjYWxhck91dHB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJPdXRwdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLm91dHB1dHNbc2NhbGFyT3V0cHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sO1xuICAgIGlmICh0YWJDb250cm9sKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhYkxhYmVsIG9mIHRoaXMudGFic0xhYmVscykge1xuICAgICAgICB0YWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGFiQ29udHJvbC5nZXRQYW5lKHRhYkxhYmVsKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwKSk7XG4gICAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0lucHV0Jykge1xuICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRQYXJhbSBvZiBpbnB1dFBhcmFtcy5maWx0ZXIoKGlucHV0UGFyYW0pID0+IGlucHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChpbnB1dFBhcmFtLmF1eFsndmlld2VycyddIGFzIERHLlZpZXdlcltdKS5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKTtcblxuICAgICAgICAgICAgY29uc3QgZGZJbnB1dCA9IGRmSW5wdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBpbnB1dFBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IGlucHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChpbnB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSksXG4gICAgICAgICAgICAgICAgdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dFBhcmFtIG9mIG91dHB1dFBhcmFtcy5maWx0ZXIoKG91dHB1dFBhcmFtKSA9PiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gdGFiTGFiZWwpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChvdXRwdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmT3V0cHV0ID0gZGZPdXRwdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBvdXRwdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0IS5vcHRpb25zLmNhcHRpb24gfHwgb3V0cHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5vdXRwdXRzW2RmT3V0cHV0IS5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdlci5yb290LnBhcmVudEVsZW1lbnQ/LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuZ2V0KG91dHB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGV4cG9ydFdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcblxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge3R5cGU6IEJMT0JfVFlQRX0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXQgaXNJbnB1dFBhbmVsUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYz8uaW5wdXRzLnNvbWUoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRQYXJhbUNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQodGhpcy5mdW5jIS5vdXRwdXRzLm1hcCgocCkgPT4gcC5jYXRlZ29yeSkpIC8vIGdldCBhbGwgb3V0cHV0IHBhcmFtcycgY2F0ZWdvcmllc1xuICAgIF07IC8vIGtlZXAgb25seSB1bmlxdWUgb2YgdGhlbVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRwdXRUYWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcyxcbiAgICAgIC4uLnRoaXMub3V0UGFyYW1DYXRlZ29yaWVzLmZpbmQoKHZhbCkgPT4gdmFsID09PSAnTWlzYycpID8gWydPdXRwdXQnXSA6IFtdLCAvLyBpZiBubyBjYXRlZ29yaWVzIGFyZSBzdGF0ZWQsIHRoZSBkZWZhdWx0IGNhdGVnb3J5IGlzIGFkZGVkXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbVRvQ2F0ZWdvcnlNYXApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwYXJhbVRvQ2F0ZWdvcnlNYXAoKSB7XG4gICAgY29uc3QgbWFwID0ge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkKVxuICAgICAgdGhpcy5mdW5jIS5pbnB1dHMuZm9yRWFjaCgocCkgPT4gbWFwWydJbnB1dCddID8gbWFwWydJbnB1dCddLnB1c2gocC5uYW1lKTogbWFwWydJbnB1dCddID0gW3AubmFtZV0pO1xuXG4gICAgdGhpcy5mdW5jIS5vdXRwdXRzLmZvckVhY2goKHApID0+IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPyBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldLnB1c2gocC5uYW1lKSA6IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPSBbcC5uYW1lXSk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgcmVuZGVyUnVuU2VjdGlvbihjYWxsOiBERy5GdW5jQ2FsbCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW5CdXR0b24gPSB1aS5iaWdCdXR0b24oJ1J1bicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXMuZGFydDtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW4oKTtcbiAgICAgICAgLy8gdGhpcy5zYXZlUnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuY2xhc3NMaXN0LmFkZCgndWktZm9ybScpO1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHVpLmRpdkgoW3RoaXMuaGlzdG9yeVJvb3QsIHJ1bkJ1dHRvbl0sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2Vlbid9fSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlc3VsdHMoc3dpdGNoVG9PdXRwdXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMudGFic0xhYmVscztcblxuICAgIGlmICgoY2F0ZWdvcmllcy5sZW5ndGggPiAxIHx8IChjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXNbMF0gIT0gJ01pc2MnKSkpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgPSBERy5UYWJDb250cm9sLmNyZWF0ZSgpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFRhYnMuaGFzKGMpKVxuICAgICAgICAgIHRoaXMucmVzdWx0VGFicy5zZXQoYywgdWkuZGl2KFtdLCAndWktcGFuZWwsIGdyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKSk7XG4gICAgICAgIGxldCBuYW1lID0gYztcbiAgICAgICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgY2F0ZWdvcmllcy5sZW5ndGggPT0gMiAmJiBjID09ICdNaXNjJylcbiAgICAgICAgICBuYW1lID0gJ09VVFBVVCc7XG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuYWRkUGFuZShuYW1lLCAoKSA9PiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGMpID8/IHVpLmRpdigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgJiYgdGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBzd2l0Y2hUb091dHB1dClcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucGFuZXNbMV07XG4gICAgICB0aGlzLnJlc3VsdHNEaXYgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnJvb3Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHModHJ1ZSk7XG4gICAgZm9yIChjb25zdCBwIG9mIGNhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkge1xuICAgICAgcC5wcm9jZXNzT3V0cHV0KCk7XG4gICAgICBpZiAocC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAudmFsdWUgIT0gbnVsbClcbiAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgICAgZWxzZSB0aGlzLmFwcGVuZFJlc3VsdFNjYWxhcihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgfVxuXG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZSBzd2l0Y2hjZXMgb2YgdGhlaXIgdmlld2Vycy9ncmlkc1xuICBwcm90ZWN0ZWQgcGFyYW1HcmlkU3dpdGNoZXM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlaXIgdmlld2VycyBwbGFjZWQgb24gRE9NXG4gIHByb3RlY3RlZCBleGlzdGluZ1BhcmFtVmlld2VyczogTWFwPHN0cmluZywgREcuVmlld2VyW10+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGVpciBodG1sIGVsZW1lbnRzXG4gIHByb3RlY3RlZCBwYXJhbVNwYW5zOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHRhYiBuYW1lcyB0byB0aGVpciBjb250ZW50XG4gIHByb3RlY3RlZCByZXN1bHRUYWJzOiBNYXA8U3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHByb3RlY3RlZCByZXN1bHRzVGFiQ29udHJvbDogREcuVGFiQ29udHJvbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIHByb3RlY3RlZCBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KG51bGwsIHtzdHlsZToge21heFdpZHRoOiAnMzcwcHgnfX0pO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG4gIHByb3RlY3RlZCBpbnB1dHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpO1xuXG4gIHByaXZhdGUgYXBwZW5kT3V0cHV0RGYocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHBhcmFtRGYgPSBwYXJhbS52YWx1ZSBhcyBERy5EYXRhRnJhbWU7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucz8uaGVpZ2h0ID8/IDQwMDtcbiAgICBjb25zdCBwYXJhbVZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107IC8vIHN0b3JpbmcgdGhlIHZpZXdlcnMgb2YgRGZcbiAgICBjb25zdCBwYXJhbUNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uID8/IHBhcmFtLmF1eFsndmlld2VyVGl0bGUnXSA/PyBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uID8/ICcnO1xuICAgIGxldCBleGlzdGluZ1ZpZXdlcnMgPSB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gcGFyYW1EZjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ1ZpZXdlcnMgPz89IFtdO1xuICAgIHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHBhcmFtVmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHBhcmFtVmlld2Vycy5wdXNoKHBhcmFtRGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3Qgdmlld2Vyc1RvSGlkZTogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrV2lkdGg6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG5cbiAgICBjb25zdCBpc0dyaWRTd2l0Y2hhYmxlID0gd3UocGFyYW1WaWV3ZXJzKS5ldmVyeSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWwgPSBwYXJhbUNhcHRpb24gPz8gcGFyYW1EZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAoaGVhZGVyTGFiZWwgIT0gJycpIHtcbiAgICAgICAgY29uc3QgaCA9IHVpLmgxKGhlYWRlckxhYmVsKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IGhlYWRlckxhYmVsKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwodmlld2Vyc1RvSGlkZSwgdmlld2Vyc1RvSGlkZS5zb21lKCh2aWV3ZXIpID0+IHZpZXdlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBncmlkV3JhcHBlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpO1xuICAgICAgICB9LCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5zZXQocGFyYW0ubmFtZSwgaWNvbik7XG4gICAgICB9XG4gICAgICBpZiAoIWdyb2suc2hlbGwudGFibGVzLmluY2x1ZGVzKHBhcmFtRGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhwYXJhbURmKTtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgdmlld2VyIG9mIHBhcmFtVmlld2Vycykge1xuICAgICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IHBhcmFtRGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgICB2LmFkZFZpZXdlcihuZXdWaWV3ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdBZGQgdG8gd29ya3NwYWNlJ1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgIGNvbnN0IGdyaWQgPSBwYXJhbURmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ3JpZC5yb290KTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKGdyaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcigpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5kaXZIKFtdLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcbiAgICBwYXJhbVZpZXdlcnMuZm9yRWFjaCgodmlld2VyKSA9PiB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV4aXN0aW5nVmlld2VycyEucHVzaCh2aWV3ZXIpO1xuICAgICAgY29uc3Qgdmlld2VyU2l6ZSA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDsgLy8gZ2V0dGluZyBgKGJsb2NrOiAyNSlgIHZhbHVlOyBpZiBub3QgZGVmaW5lZCwgaXQgaXMgMTAwXG5cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHZpZXdlci5yb290LmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7dmlld2VyU2l6ZX1gKTtcbiAgICAgIGlmIChibG9ja3MgKyB2aWV3ZXJTaXplIDw9IDEwMCkge1xuICAgICAgICB2aWV3ZXJzVG9IaWRlLnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrV2lkdGggKz0gdmlld2VyU2l6ZTtcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSB2aWV3ZXJTaXplO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBibG9jayA9IHVpLmRpdlYoW2hlYWRlciwgd3JhcHBlciwgZ3JpZFdyYXBwZXJdLCB7c3R5bGU6IHtoZWlnaHQ6IGAke2hlaWdodH1weGAsIHdpZHRoOiBgJHtibG9ja1dpZHRofSVgfX0pO1xuICAgIGJsb2NrLmNsYXNzTGlzdC5hZGQoJ3VpLWJveCcpO1xuICAgIHRoaXMuYXBwZW5kUmVzdWx0RWxlbWVudChibG9jaywgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRTY2FsYXIocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM6IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBzcGFuID0gdWkuc3BhbihbYCR7b3B0aW9ucy5jYXB0aW9uID8/IHBhcmFtLm5hbWV9OiBgLCBgJHtwYXJhbS52YWx1ZX1gXSk7XG4gICAgaWYgKCF0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzVGFiQ29udHJvbClcbiAgICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChvcHRpb25zLmNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKT8ucmVwbGFjZVdpdGgoc3Bhbik7XG4gICAgfVxuICAgIHRoaXMucGFyYW1TcGFucy5zZXQocGFyYW0ubmFtZSwgc3Bhbik7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdEVsZW1lbnQoZDogSFRNTEVsZW1lbnQsIGNhdGVnb3J5Pzogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ICE9IG51bGwgJiYgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkgIT0gbnVsbClcbiAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChkKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoZCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIGNvbnNvbGUubG9nKGRmKTtcbiAgc2hlZXQuYWRkUm93KGRmLmNvbHVtbnMubmFtZXMoKSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5yb3dDb3VudDsgaSsrKVxuICAgIHNoZWV0LmFkZFJvdyhbLi4uZGYucm93KGkpLmNlbGxzXS5tYXAoKGNlbGw6IERHLkNlbGwpID0+IGNlbGwudmFsdWUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID1cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIGRmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lLmxlbmd0aFxuICAgICAgKSAqIDEuMjtcbiAgfVxufTtcblxuY29uc3QgcGxvdFRvU2hlZXQgPSBhc3luYyAoZXhwb3J0V2I6IEV4Y2VsSlMuV29ya2Jvb2ssIHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgcGxvdDogSFRNTEVsZW1lbnQsIGNvbHVtbkZvckltYWdlOiBudW1iZXIsIHJvd0ZvckltYWdlOiBudW1iZXIgPSAwKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKHBsb3QgYXMgSFRNTEVsZW1lbnQsIHtsb2dnaW5nOiBmYWxzZX0pO1xuICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG5cbiAgY29uc3QgaW1hZ2VJZCA9IGV4cG9ydFdiLmFkZEltYWdlKHtcbiAgICBiYXNlNjQ6IGRhdGFVcmwsXG4gICAgZXh0ZW5zaW9uOiAncG5nJyxcbiAgfSk7XG4gIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcbiAgICB0bDoge2NvbDogY29sdW1uRm9ySW1hZ2UsIHJvdzogcm93Rm9ySW1hZ2V9LFxuICAgIGV4dDoge3dpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodH0sXG4gIH0pO1xufTtcbiJdfQ==
|
|
571
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFekIsTUFBTSxPQUFPLFlBQWEsU0FBUSxFQUFFLENBQUMsUUFBUTtJQU0zQyxZQUFZLFFBQXNCO1FBQ2hDLEtBQUssRUFBRSxDQUFDO1FBSEEsVUFBSyxHQUFXLFVBQVUsQ0FBQztRQTZEckM7O1VBRUU7UUFDRixpQkFBWSxHQWdDRCxJQUFJLENBQUM7UUF3TE4sMEJBQXFCLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNuRCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFhLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzRyxDQUFDLENBQUM7UUFFUSxxQ0FBZ0MsR0FBRyxHQUFHLEVBQUU7WUFDaEQsT0FBTztnQkFDTCxPQUFPLEVBQUUsTUFBTTthQUNoQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRVEsa0NBQTZCLEdBQUcsR0FBRyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFUSxrQkFBYSxHQUFHLENBQU8sTUFBYyxFQUFFLEVBQUU7O1lB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QUksQ0FBQyxHQUFHLENBQ04sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQ2pGLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ2xDLEdBQUcsR0FBRyxDQUFDO0tBQ1g7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFPLFFBQTBCLEVBQUUsS0FBd0IsRUFBRSxJQUFpQixFQUFFLGNBQXNCLEVBQUUsY0FBc0IsQ0FBQyxFQUFFLEVBQUU7SUFDckosTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBbUIsRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XG5pbXBvcnQgaHRtbDJjYW52YXMgZnJvbSAnaHRtbDJjYW52YXMnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCAkIGZyb20gJ2Nhc2gtZG9tJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IERHLkNvbnRleHQ7XG4gIHByb3RlY3RlZCBfZnVuY0NhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF9sYXN0Q2FsbD86IERHLkZ1bmNDYWxsO1xuICBwcm90ZWN0ZWQgX3R5cGU6IHN0cmluZyA9ICdmdW5jdGlvbic7XG5cbiAgY29uc3RydWN0b3IoZnVuY0NhbGw/OiBERy5GdW5jQ2FsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ib3ggPSB0cnVlO1xuICAgIHRoaXMuY29udGV4dCA9IERHLkNvbnRleHQuY2xvbmVEZWZhdWx0KCk7XG5cbiAgICB0aGlzLnBhcmVudENhbGwgPSBncm9rLmZ1bmN0aW9ucy5nZXRDdXJyZW50Q2FsbCgpO1xuICAgIHRoaXMucGFyZW50VmlldyA9IGdyb2suZnVuY3Rpb25zLmdldEN1cnJlbnRDYWxsKCkucGFyZW50Q2FsbC5hdXhbJ3ZpZXcnXTtcblxuICAgIGlmICghZnVuY0NhbGwpIHJldHVybjtcblxuICAgIHRoaXMubGlua0Z1bmNjYWxsKGZ1bmNDYWxsKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmJ1aWxkKCk7XG4gICAgdGhpcy5uYW1lID0gZnVuY0NhbGwuZnVuYy5mcmllbmRseU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZnVuY3Rpb24gY2FsbCBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmNjYWxsIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBnZXQgZnVuY0NhbGwoKTogREcuRnVuY0NhbGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mdW5jQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRnVuYyBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY0NhbGw/LmZ1bmM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBsYXN0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBzZXQgbGFzdENhbGwobGFzdENhbGw6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFzdENhbGwgPSBsYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IHR5cGVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKiBFeHBvcnQgb3B0aW9ucy4gQ291bGQgYmUgb3ZlcnJpZGVuIHBhcnRpYWxseSwgdXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9wdGlvbi5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGV4cG9ydENvbmZpZzoge1xuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBleHBvcnQgbG9naWMuXG4gICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24ge0BsaW5rIGRlZmF1bHRFeHBvcnR9IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBidWlsZElPfS5cbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmsgRnVuY0NhbGwgdG8gdGhlIHZpZXdcbiAgICogQHBhcmFtIGZ1bmNDYWxsIFRoZSBhY3R1YWwgZnVuY2NhbGwgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGxpbmtGdW5jY2FsbChmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICB0aGlzLl9mdW5jQ2FsbCA9IGZ1bmNDYWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCBmb3IgY3VzdG9tIGxvZ2ljIHRoYXQgY291bGQgbm90IGJlIHBsYWNlZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAqIEFueSBhc3luYyBtZXRob2RzIGFuZCBtb3N0IG9mIHRoZSBsb2dpYyBzaG91bGQgYmUgcGxhY2VkIGhlcmUuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuZnVuY0NhbGwgJiYgdGhpcy5mdW5jKSB7XG4gICAgICB0aGlzLmZ1bmNDYWxsLmF1eFsndmlldyddID0gdGhpcztcbiAgICAgIHRoaXMuZnVuY0NhbGwuY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgZm9yIChjb25zdCBpblBhcmFtIG9mIHd1KHRoaXMuZnVuY0NhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAuZmlsdGVyKChwOiBERy5GdW5jQ2FsbFBhcmFtKSA9PlxuICAgICAgICAgIHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnByb3BlcnR5Lm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluUGFyYW0ub25DaGFuZ2VkLnN1YnNjcmliZShhc3luYyAocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0pID0+IHtcbiAgICAgICAgICB0aGlzLmNsZWFyUmVzdWx0cyhmYWxzZSk7XG4gICAgICAgICAgcGFyYW0ucHJvY2Vzc091dHB1dCgpO1xuXG4gICAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwYXJhbSwge1xuICAgICAgICAgICAgaGVpZ2h0OiA0MDAsXG4gICAgICAgICAgICBjYXRlZ29yeTogJ0lucHV0J1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGZ1bGx5IGN1c3RvbSBVSSBpbmNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuYnVpbGRJTygpKTtcblxuICAgIHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgICB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG4gICAgdGhpcy5idWlsZFJpYmJvbk1lbnUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQtb3V0cHV0IGJsb2NrXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIHdob2xlIFVJIGV4Y2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBidWlsZElPKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLmV4cG9ydENvbmZpZyA9IHtcbiAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMoKSxcbiAgICAgIHN1cHBvcnRlZEZvcm1hdHM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKSxcbiAgICAgIGV4cG9ydDogdGhpcy5kZWZhdWx0RXhwb3J0LFxuICAgICAgZmlsZW5hbWU6IHRoaXMuZGVmYXVsdEV4cG9ydEZpbGVuYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCBpbnB1dEJsb2NrID0gdGhpcy5idWlsZElucHV0QmxvY2soKTtcbiAgICBjb25zdCBvdXRwdXRCbG9jayA9IHRoaXMuYnVpbGRPdXRwdXRCbG9jaygpO1xuXG4gICAgcmV0dXJuIHVpLnNwbGl0SChbaW5wdXRCbG9jaywgb3V0cHV0QmxvY2tdKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dCBibG9ja1xuICAgKiBAcmV0dXJucyBUaGUgSFRNTEVsZW1lbnQgd2l0aCBpbnB1dCBibG9jayBVSSBvbiB0aGUgbGVmdCBzaWRlIGJ5IGRlZmF1bHRcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRJbnB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHJldHVybiB0aGlzLmNvbnRyb2xzUm9vdDtcblxuICAgIGNvbnN0IGZ1bmNEaXYgPSB1aS5kaXYoW3RoaXMucmVuZGVyUnVuU2VjdGlvbih0aGlzLmZ1bmNDYWxsKV0sICd1aS1kaXYnKTtcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdW5jRGl2KTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIG91dHB1dCBibG9jay5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaW5wdXQgYmxvY2sgVUkgb24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkT3V0cHV0QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMucmVzdWx0c1Jvb3QuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5yZXN1bHRzUm9vdC5hcHBlbmRDaGlsZCh0aGlzLnJlc3VsdHNEaXYpO1xuICAgIHJldHVybiB0aGlzLnJlc3VsdHNSb290O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgY29udHJvbC5cbiAgICogQHJldHVybnMgVGhlIEhUTUxFbGVtZW50IHdpdGggaGlzdG9yeSBibG9jayBVSVxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBidWlsZEhpc3RvcnlCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbmV3SGlzdG9yeUJsb2NrID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgdGhpcy5wdWxsUnVucygpLnRoZW4oYXN5bmMgKGhpc3RvcmljYWxSdW5zKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBERy5NZW51LnBvcHVwKCk7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBydW4gb2YgaGlzdG9yaWNhbFJ1bnMpIHtcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBtZW51Lml0ZW0oYCR7cnVuLmZ1bmMuZnJpZW5kbHlOYW1lfSDigJQgJHtpfWAsIGFzeW5jICgpID0+IHRoaXMuaGlzdG9yaWNhbFJ1blNlcnZpY2UubG9hZFJ1bihydW4uaWQpKTtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgbWVudS5zaG93KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmhpc3RvcnlSb290LmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuYXBwZW5kKG5ld0hpc3RvcnlCbG9jayk7XG4gICAgcmV0dXJuIG5ld0hpc3RvcnlCbG9jaztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyBmb3Ige0BsaW5rIHN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9IG1lbWJlcnMgYW5kIGNyZWF0ZXMgcmliYm9uIHBhbmVsXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudHMgb2YgcmliYm9uUGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgYnVpbGRSaWJib25QYW5lbHMoKTogSFRNTEVsZW1lbnRbXVtdIHtcbiAgICBjb25zdCBuZXdSaWJib25QYW5lbHMgPSBbXG4gICAgICAuLi50aGlzLmdldFJpYmJvblBhbmVscygpLFxuICAgICAgWy4uLih0aGlzLmV4cG9ydENvbmZpZyAmJiB0aGlzLmV4cG9ydENvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzLmxlbmd0aCA+IDApID8gW3VpLmRpdkgoW1xuICAgICAgICB1aS5jb21ib1BvcHVwKFxuICAgICAgICAgIHVpLmljb25GQSgnYXJyb3ctdG8tYm90dG9tJyksXG4gICAgICAgICAgdGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cyxcbiAgICAgICAgICBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IERHLlV0aWxzLmRvd25sb2FkKHRoaXMuZXhwb3J0Q29uZmlnIS5maWxlbmFtZShmb3JtYXQpLCBhd2FpdCB0aGlzLmV4cG9ydENvbmZpZyEuZXhwb3J0KGZvcm1hdCkpKSxcbiAgICAgIF0pXTogW11dXG4gICAgXTtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdG8gY3JlYXRlIGEgY3VzdG9tIHJpYmJvbiBtZW51IG9uIHRoZSB0b3AuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGJ1aWxkUmliYm9uTWVudSgpIHtcblxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uXG4gICAqIEBzdGFiaWxpdHkgRXhwZXJpbWVudGFsXG4gKi9cbiAgcHVibGljIGFzeW5jIHNhdmVSdW4oKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHJldHVybiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUodGhpcy5sYXN0Q2FsbCEpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaGlzdG9yaWNhbCBydW4uIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS5cbiAgICogQHN0YWJpbGl0eSBFeHBlcmltZW50YWxcbiAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgcmV0dXJuIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuaW5jbHVkZSgnaW5wdXRzLCBvdXRwdXRzJykuZmluZChmdW5jQ2FsbElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICogRGVzaWduZWQgdG8gcHVsbCBoc3RvcmljYWwgcnVucyBpbiBmYXN0IG1hbm5lciBhbmQgdGhlIGNhbGwge0BsaW5rIGxvYWRSdW59IHdpdGggc3BlY2lmaWVkIHJ1biBJRC5cbiAgICogV0FSTklORzogRnVuY0NhbGwgaW5wdXRzL291dHB1dHMgYXJlIG5vdCBpbmNsdWRlZFxuICAgKiBAc3RhYmlsaXR5IEV4cGVyaW1lbnRhbFxuICovXG4gIHB1YmxpYyBhc3luYyBwdWxsUnVucygpOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICBjb25zdCBsaXN0ID0gZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5maWx0ZXIoYGZ1bmMuaWQ9XCIke3RoaXMuZnVuYz8uaWR9XCJgKS5saXN0KCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxhc3RDYWxsID0gYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKHRydWUsIHVuZGVmaW5lZCwge3Byb2Nlc3NlZDogdHJ1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgIH1cblxuICAgIHRoaXMub3V0cHV0UGFyYW1ldGVyc1RvVmlldyh0aGlzLmxhc3RDYWxsISk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydEZpbGVuYW1lID0gKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gLSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKX0uJHt0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAnRXhjZWwnOiAneGxzeCdcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cyA9ICgpID0+IHtcbiAgICByZXR1cm4gWydFeGNlbCddO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuXG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoc2NhbGFyT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnT3V0cHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KG91dHB1dFNjYWxhcnNTaGVldCwgc2NhbGFyT3V0cHV0cy5tYXAoKHNjYWxhck91dHB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJPdXRwdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLm91dHB1dHNbc2NhbGFyT3V0cHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sO1xuICAgIGlmICh0YWJDb250cm9sKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhYkxhYmVsIG9mIHRoaXMudGFic0xhYmVscykge1xuICAgICAgICB0YWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGFiQ29udHJvbC5nZXRQYW5lKHRhYkxhYmVsKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwKSk7XG4gICAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0lucHV0Jykge1xuICAgICAgICAgIGZvciAoY29uc3QgaW5wdXRQYXJhbSBvZiBpbnB1dFBhcmFtcy5maWx0ZXIoKGlucHV0UGFyYW0pID0+IGlucHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChpbnB1dFBhcmFtLmF1eFsndmlld2VycyddIGFzIERHLlZpZXdlcltdKS5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKTtcblxuICAgICAgICAgICAgY29uc3QgZGZJbnB1dCA9IGRmSW5wdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBpbnB1dFBhcmFtLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IGlucHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIucm9vdC5wYXJlbnRFbGVtZW50Py5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtR3JpZFN3aXRjaGVzLmdldChpbnB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSksXG4gICAgICAgICAgICAgICAgdmlld2VyLnJvb3QsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dFBhcmFtIG9mIG91dHB1dFBhcmFtcy5maWx0ZXIoKG91dHB1dFBhcmFtKSA9PiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gdGFiTGFiZWwpKSB7XG4gICAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IChvdXRwdXRQYXJhbS5hdXhbJ3ZpZXdlcnMnXSBhcyBERy5WaWV3ZXJbXSkuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRmT3V0cHV0ID0gZGZPdXRwdXRzLmZpbmQoKGlucHV0KSA9PiBpbnB1dC5uYW1lID09PSBvdXRwdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0IS5vcHRpb25zLmNhcHRpb24gfHwgb3V0cHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5vdXRwdXRzW2RmT3V0cHV0IS5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgaWYgKHZpZXdlci5yb290LnBhcmVudEVsZW1lbnQ/LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1HcmlkU3dpdGNoZXMuZ2V0KG91dHB1dFBhcmFtLm5hbWUpPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGV4cG9ydFdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcblxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge3R5cGU6IEJMT0JfVFlQRX0pO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXQgaXNJbnB1dFBhbmVsUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYz8uaW5wdXRzLnNvbWUoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRQYXJhbUNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQodGhpcy5mdW5jIS5vdXRwdXRzLm1hcCgocCkgPT4gcC5jYXRlZ29yeSkpIC8vIGdldCBhbGwgb3V0cHV0IHBhcmFtcycgY2F0ZWdvcmllc1xuICAgIF07IC8vIGtlZXAgb25seSB1bmlxdWUgb2YgdGhlbVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRwdXRUYWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLm91dFBhcmFtQ2F0ZWdvcmllcyxcbiAgICAgIC4uLnRoaXMub3V0UGFyYW1DYXRlZ29yaWVzLmZpbmQoKHZhbCkgPT4gdmFsID09PSAnTWlzYycpID8gWydPdXRwdXQnXSA6IFtdLCAvLyBpZiBubyBjYXRlZ29yaWVzIGFyZSBzdGF0ZWQsIHRoZSBkZWZhdWx0IGNhdGVnb3J5IGlzIGFkZGVkXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbVRvQ2F0ZWdvcnlNYXApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwYXJhbVRvQ2F0ZWdvcnlNYXAoKSB7XG4gICAgY29uc3QgbWFwID0ge30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkKVxuICAgICAgdGhpcy5mdW5jIS5pbnB1dHMuZm9yRWFjaCgocCkgPT4gbWFwWydJbnB1dCddID8gbWFwWydJbnB1dCddLnB1c2gocC5uYW1lKTogbWFwWydJbnB1dCddID0gW3AubmFtZV0pO1xuXG4gICAgdGhpcy5mdW5jIS5vdXRwdXRzLmZvckVhY2goKHApID0+IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPyBtYXBbcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnldLnB1c2gocC5uYW1lKSA6IG1hcFtwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeV0gPSBbcC5uYW1lXSk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgcmVuZGVyUnVuU2VjdGlvbihjYWxsOiBERy5GdW5jQ2FsbCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdWkud2FpdChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBydW5CdXR0b24gPSB1aS5iaWdCdXR0b24oJ1J1bicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY2FsbC5hdXhbJ3ZpZXcnXSA9IHRoaXMuZGFydDtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW4oKTtcbiAgICAgICAgLy8gdGhpcy5zYXZlUnVuKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IHVpLmRpdigpO1xuICAgICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2VbXSA9IGF3YWl0IGNhbGwuYnVpbGRFZGl0b3IoZWRpdG9yLCB7Y29uZGVuc2VkOiB0cnVlfSk7XG4gICAgICBlZGl0b3IuY2xhc3NMaXN0LmFkZCgndWktZm9ybScpO1xuICAgICAgY29uc3QgYnV0dG9ucyA9IHVpLmRpdkgoW3RoaXMuaGlzdG9yeVJvb3QsIHJ1bkJ1dHRvbl0sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnc3BhY2UtYmV0d2Vlbid9fSk7XG4gICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlc3VsdHMoc3dpdGNoVG9PdXRwdXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMudGFic0xhYmVscztcblxuICAgIGlmICgoY2F0ZWdvcmllcy5sZW5ndGggPiAxIHx8IChjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXNbMF0gIT0gJ01pc2MnKSkpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgPSBERy5UYWJDb250cm9sLmNyZWF0ZSgpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFRhYnMuaGFzKGMpKVxuICAgICAgICAgIHRoaXMucmVzdWx0VGFicy5zZXQoYywgdWkuZGl2KFtdLCAndWktcGFuZWwsIGdyb2stZnVuYy1yZXN1bHRzLCB1aS1ib3gnKSk7XG4gICAgICAgIGxldCBuYW1lID0gYztcbiAgICAgICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQgJiYgY2F0ZWdvcmllcy5sZW5ndGggPT0gMiAmJiBjID09ICdNaXNjJylcbiAgICAgICAgICBuYW1lID0gJ09VVFBVVCc7XG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuYWRkUGFuZShuYW1lLCAoKSA9PiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGMpID8/IHVpLmRpdigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgJiYgdGhpcy5pc0lucHV0UGFuZWxSZXF1aXJlZCAmJiBzd2l0Y2hUb091dHB1dClcbiAgICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucGFuZXNbMV07XG4gICAgICB0aGlzLnJlc3VsdHNEaXYgPSB0aGlzLnJlc3VsdHNUYWJDb250cm9sLnJvb3Q7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHModHJ1ZSk7XG4gICAgZm9yIChjb25zdCBwIG9mIGNhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkge1xuICAgICAgcC5wcm9jZXNzT3V0cHV0KCk7XG4gICAgICBpZiAocC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAudmFsdWUgIT0gbnVsbClcbiAgICAgICAgdGhpcy5hcHBlbmRPdXRwdXREZihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgICAgZWxzZSB0aGlzLmFwcGVuZFJlc3VsdFNjYWxhcihwLCB7Y2FwdGlvbjogcC5wcm9wZXJ0eS5uYW1lLCBjYXRlZ29yeTogcC5wcm9wZXJ0eS5jYXRlZ29yeX0pO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgfVxuXG4gIC8vIG1hcHBwaW5nIG9mIHBhcmFtIHRvIHRoZSBzd2l0Y2hjZXMgb2YgdGhlaXIgdmlld2Vycy9ncmlkc1xuICBwcm90ZWN0ZWQgcGFyYW1HcmlkU3dpdGNoZXM6IE1hcDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgLy8gbWFwcHBpbmcgb2YgcGFyYW0gdG8gdGhlaXIgdmlld2VycyBwbGFjZWQgb24gRE9NXG4gIHByb3RlY3RlZCBleGlzdGluZ1BhcmFtVmlld2VyczogTWFwPHN0cmluZywgREcuVmlld2VyW10+ID0gbmV3IE1hcCgpO1xuICAvLyBtYXBwcGluZyBvZiBwYXJhbSB0byB0aGVpciBodG1sIGVsZW1lbnRzXG4gIHByb3RlY3RlZCBwYXJhbVNwYW5zOiBNYXA8c3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIC8vIG1hcHBwaW5nIG9mIHRhYiBuYW1lcyB0byB0aGVpciBjb250ZW50XG4gIHByb3RlY3RlZCByZXN1bHRUYWJzOiBNYXA8U3RyaW5nLCBIVE1MRWxlbWVudD4gPSBuZXcgTWFwKCk7XG4gIHByb3RlY3RlZCByZXN1bHRzVGFiQ29udHJvbDogREcuVGFiQ29udHJvbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJlc3VsdHNEaXY6IEhUTUxFbGVtZW50ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuXG4gIHByb3RlY3RlZCBjb250cm9sc1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KG51bGwsIHtzdHlsZToge21heFdpZHRoOiAnMzcwcHgnfX0pO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG4gIHByb3RlY3RlZCBpbnB1dHNSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMsIHVpLWJveCcpO1xuXG4gIHByaXZhdGUgYXBwZW5kT3V0cHV0RGYocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHBhcmFtRGYgPSBwYXJhbS52YWx1ZSBhcyBERy5EYXRhRnJhbWU7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucz8uaGVpZ2h0ID8/IDQwMDtcbiAgICBjb25zdCBwYXJhbVZpZXdlcnM6IERHLlZpZXdlcltdID0gcGFyYW0uYXV4Wyd2aWV3ZXJzJ10gPz8gW107IC8vIHN0b3JpbmcgdGhlIHZpZXdlcnMgb2YgRGZcbiAgICBjb25zdCBwYXJhbUNhcHRpb24gPSBvcHRpb25zPy5jYXB0aW9uID8/IHBhcmFtLmF1eFsndmlld2VyVGl0bGUnXSA/PyBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uID8/ICcnO1xuICAgIGxldCBleGlzdGluZ1ZpZXdlcnMgPSB0aGlzLmV4aXN0aW5nUGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gcGFyYW1EZjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ1ZpZXdlcnMgPz89IFtdO1xuICAgIHRoaXMuZXhpc3RpbmdQYXJhbVZpZXdlcnMuc2V0KHBhcmFtLm5hbWUsIGV4aXN0aW5nVmlld2Vycyk7XG4gICAgaWYgKHBhcmFtVmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHBhcmFtVmlld2Vycy5wdXNoKHBhcmFtRGYucGxvdC5ncmlkKCkpO1xuXG4gICAgY29uc3Qgdmlld2Vyc1RvSGlkZTogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrV2lkdGg6IG51bWJlciA9IDA7XG4gICAgY29uc3QgZ3JpZFdyYXBwZXIgPSB1aS5ib3gobnVsbCwge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG5cbiAgICBjb25zdCBpc0dyaWRTd2l0Y2hhYmxlID0gd3UocGFyYW1WaWV3ZXJzKS5ldmVyeSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgIT09ICdHcmlkJyk7XG4gICAgJChncmlkV3JhcHBlcikuaGlkZSgpO1xuXG4gICAgY29uc3QgZ2V0SGVhZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyTGFiZWwgPSBwYXJhbUNhcHRpb24gPz8gcGFyYW1EZi5uYW1lID8/ICcnO1xuICAgICAgY29uc3QgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICBpZiAoaGVhZGVyTGFiZWwgIT0gJycpIHtcbiAgICAgICAgY29uc3QgaCA9IHVpLmgxKGhlYWRlckxhYmVsKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IGhlYWRlckxhYmVsKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHVpLmljb25TdmcoJ3RhYmxlJywgKGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVpLnNldERpc3BsYXlBbGwodmlld2Vyc1RvSGlkZSwgdmlld2Vyc1RvSGlkZS5zb21lKCh2aWV3ZXIpID0+IHZpZXdlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpKTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBncmlkV3JhcHBlci5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpO1xuICAgICAgICB9LCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChpY29uKTtcbiAgICAgICAgdGhpcy5wYXJhbUdyaWRTd2l0Y2hlcy5zZXQocGFyYW0ubmFtZSwgaWNvbik7XG4gICAgICB9XG4gICAgICBpZiAoIWdyb2suc2hlbGwudGFibGVzLmluY2x1ZGVzKHBhcmFtRGYpKSB7XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChcbiAgICAgICAgICB1aS5pY29ucy5hZGQoKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBncm9rLnNoZWxsLmFkZFRhYmxlVmlldyhwYXJhbURmKTtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgdmlld2VyIG9mIHBhcmFtVmlld2Vycykge1xuICAgICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IHBhcmFtRGYucGxvdC5mcm9tVHlwZSh2aWV3ZXIudHlwZSkgYXMgREcuVmlld2VyO1xuICAgICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgICB2LmFkZFZpZXdlcihuZXdWaWV3ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdBZGQgdG8gd29ya3NwYWNlJ1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlcjtcbiAgICB9O1xuXG4gICAgaWYgKGlzR3JpZFN3aXRjaGFibGUpIHtcbiAgICAgIGNvbnN0IGdyaWQgPSBwYXJhbURmLnBsb3QuZ3JpZCgpO1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ3JpZC5yb290KTtcbiAgICAgIGV4aXN0aW5nVmlld2Vycy5wdXNoKGdyaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlciA9IGdldEhlYWRlcigpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSB1aS5kaXZIKFtdLCB7c3R5bGU6IHtoZWlnaHQ6ICcxMDAlJ319KTtcbiAgICBwYXJhbVZpZXdlcnMuZm9yRWFjaCgodmlld2VyKSA9PiB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV4aXN0aW5nVmlld2VycyEucHVzaCh2aWV3ZXIpO1xuICAgICAgY29uc3Qgdmlld2VyU2l6ZSA9IHZpZXdlci50YWdzWycuYmxvY2stc2l6ZSddID8/IDEwMDsgLy8gZ2V0dGluZyBgKGJsb2NrOiAyNSlgIHZhbHVlOyBpZiBub3QgZGVmaW5lZCwgaXQgaXMgMTAwXG5cbiAgICAgIHZpZXdlci5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHZpZXdlci5yb290LmNsYXNzTGlzdC5hZGQoYHVpLWJsb2NrLSR7dmlld2VyU2l6ZX1gKTtcbiAgICAgIGlmIChibG9ja3MgKyB2aWV3ZXJTaXplIDw9IDEwMCkge1xuICAgICAgICB2aWV3ZXJzVG9IaWRlLnB1c2god3JhcHBlcik7XG4gICAgICAgIGJsb2NrV2lkdGggKz0gdmlld2VyU2l6ZTtcbiAgICAgIH1cbiAgICAgIGJsb2NrcyArPSB2aWV3ZXJTaXplO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh2aWV3ZXIucm9vdCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBibG9jayA9IHVpLmRpdlYoW2hlYWRlciwgd3JhcHBlciwgZ3JpZFdyYXBwZXJdLCB7c3R5bGU6IHtoZWlnaHQ6IGAke2hlaWdodH1weGAsIHdpZHRoOiBgJHtibG9ja1dpZHRofSVgfX0pO1xuICAgIGJsb2NrLmNsYXNzTGlzdC5hZGQoJ3VpLWJveCcpO1xuICAgIHRoaXMuYXBwZW5kUmVzdWx0RWxlbWVudChibG9jaywgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBlbmRSZXN1bHRTY2FsYXIocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM6IHsgY2FwdGlvbj86IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgaGVpZ2h0PzogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBzcGFuID0gdWkuc3BhbihbYCR7b3B0aW9ucy5jYXB0aW9uID8/IHBhcmFtLm5hbWV9OiBgLCBgJHtwYXJhbS52YWx1ZX1gXSk7XG4gICAgaWYgKCF0aGlzLnBhcmFtU3BhbnMuZ2V0KHBhcmFtLm5hbWUpKSB7XG4gICAgICBpZiAodGhpcy5yZXN1bHRzVGFiQ29udHJvbClcbiAgICAgICAgdGhpcy5yZXN1bHRUYWJzLmdldChvcHRpb25zLmNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucmVzdWx0c0Rpdi5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbVNwYW5zLmdldChwYXJhbS5uYW1lKT8ucmVwbGFjZVdpdGgoc3Bhbik7XG4gICAgfVxuICAgIHRoaXMucGFyYW1TcGFucy5zZXQocGFyYW0ubmFtZSwgc3Bhbik7XG4gIH1cblxuICBwcml2YXRlIGFwcGVuZFJlc3VsdEVsZW1lbnQoZDogSFRNTEVsZW1lbnQsIGNhdGVnb3J5Pzogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ICE9IG51bGwgJiYgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkgIT0gbnVsbClcbiAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChkKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoZCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIGNvbnNvbGUubG9nKGRmKTtcbiAgc2hlZXQuYWRkUm93KGRmLmNvbHVtbnMubmFtZXMoKSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5yb3dDb3VudDsgaSsrKVxuICAgIHNoZWV0LmFkZFJvdyhbLi4uZGYucm93KGkpLmNlbGxzXS5tYXAoKGNlbGw6IERHLkNlbGwpID0+IGNlbGwudmFsdWUpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSArIDEpLndpZHRoID1cbiAgICAgIE1hdGgubWF4KFxuICAgICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIGRmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lLmxlbmd0aFxuICAgICAgKSAqIDEuMjtcbiAgfVxufTtcblxuY29uc3QgcGxvdFRvU2hlZXQgPSBhc3luYyAoZXhwb3J0V2I6IEV4Y2VsSlMuV29ya2Jvb2ssIHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgcGxvdDogSFRNTEVsZW1lbnQsIGNvbHVtbkZvckltYWdlOiBudW1iZXIsIHJvd0ZvckltYWdlOiBudW1iZXIgPSAwKSA9PiB7XG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IGh0bWwyY2FudmFzKHBsb3QgYXMgSFRNTEVsZW1lbnQsIHtsb2dnaW5nOiBmYWxzZX0pO1xuICBjb25zdCBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG5cbiAgY29uc3QgaW1hZ2VJZCA9IGV4cG9ydFdiLmFkZEltYWdlKHtcbiAgICBiYXNlNjQ6IGRhdGFVcmwsXG4gICAgZXh0ZW5zaW9uOiAncG5nJyxcbiAgfSk7XG4gIHNoZWV0LmFkZEltYWdlKGltYWdlSWQsIHtcbiAgICB0bDoge2NvbDogY29sdW1uRm9ySW1hZ2UsIHJvdzogcm93Rm9ySW1hZ2V9LFxuICAgIGV4dDoge3dpZHRoOiBjYW52YXMud2lkdGgsIGhlaWdodDogY2FudmFzLmhlaWdodH0sXG4gIH0pO1xufTtcbiJdfQ==
|