@qbs-origin/origin-form 0.8.0 → 0.8.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.
@@ -29,6 +29,22 @@ export class ActionStepHandler {
29
29
  }
30
30
  return visibleSteps;
31
31
  }
32
+ /**
33
+ * Gets action steps that appear before the first visible step in the flux.
34
+ * These need to be executed on form initialization.
35
+ */
36
+ getActionStepsBeforeFirstVisibleStep(allSteps) {
37
+ const actionSteps = [];
38
+ for (const step of allSteps) {
39
+ if (this.isActionStep(step)) {
40
+ actionSteps.push(step);
41
+ }
42
+ else {
43
+ break;
44
+ }
45
+ }
46
+ return actionSteps;
47
+ }
32
48
  /**
33
49
  * Gets action steps that should be executed when moving to the next step
34
50
  */
@@ -160,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
160
176
  providedIn: 'root',
161
177
  }]
162
178
  }], ctorParameters: () => [{ type: i1.ApplicationDataService }, { type: i2.DialogService }] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXN0ZXAtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvYWN0aW9uLXN0ZXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWNoRCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCLFlBQW9CLHNCQUE4QyxFQUFVLE1BQXFCO1FBQTdFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBTnpGLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO1FBRXRELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDMUMscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRW9DLENBQUM7SUFFdEc7O09BRUc7SUFDSCxZQUFZLENBQUMsSUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxVQUFvQixFQUFFO1FBQzFELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksT0FBTyxFQUFFLE1BQU0s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QU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUMzQixJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQzNDLFdBQVcsRUFDWCxJQUFJLENBQUMsVUFBVSxFQUNmLFdBQVcsQ0FDWixDQUNGLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkMsQ0FBQzsrR0FwTVUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYWtlQWN0aW9uUmVxdWVzdCB9IGZyb20gJy4vbW9kZWxzL2FwcGxpY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7IEZsdXhUeXBlIH0gZnJvbSAnLi9tb2RlbHMvZm9ybXMubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EYXRhU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBwbGljYXRpb25EYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RlcERhdGEgfSBmcm9tICcuL21vZGVscy9mbHV4Lm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25TdGVwUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZGF0YT86IGFueTtcbiAgZXJyb3I/OiBhbnk7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25TdGVwSGFuZGxlciB7XG4gIHByaXZhdGUgaXNFeGVjdXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBleGVjdXRpb25Db21wbGV0ZWQgPSBuZXcgU3ViamVjdDxBY3Rpb25TdGVwUmVzdWx0PigpO1xuXG4gIHB1YmxpYyBhY3Rpb25FeGVjdXRpbmckID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGFjdGlvbkNvbXBsZXRlZCQgPSB0aGlzLmV4ZWN1dGlvbkNvbXBsZXRlZC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcGxpY2F0aW9uRGF0YVNlcnZpY2U6IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UsIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlKSB7IH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc3RlcCBpcyBhbiBhY3Rpb24gc3RlcCB0aGF0IHNob3VsZCBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHlcbiAgICovXG4gIGlzQWN0aW9uU3RlcChzdGVwOiBTdGVwRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGVwLnR5cGUgPT09IEZsdXhUeXBlLlN0YXR1cyB8fCBzdGVwLnR5cGUgPT09IEZsdXhUeXBlLkFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIG91dCBhY3Rpb24gc3RlcHMgZnJvbSB0aGUgdmlzaWJsZSBzdGVwcyBhcnJheVxuICAgKi9cbiAgZmlsdGVyVmlzaWJsZVN0ZXBzKHN0ZXBzOiBTdGVwRGF0YVtdLCBzdGVwSWRzOiBzdHJpbmdbXSA9IFtdKTogU3RlcERhdGFbXSB7XG4gICAgdmFyIHZpc2libGVTdGVwcyA9IHN0ZXBzLmZpbHRlcigoc3RlcCkgPT4gIXRoaXMuaXNBY3Rpb25TdGVwKHN0ZXApKTtcbiAgICBpZiAoc3RlcElkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdmlzaWJsZVN0ZXBzID0gdmlzaWJsZVN0ZXBzLmZpbHRlcigocykgPT4gc3RlcElkcy5pbmNsdWRlcyhzLmlkZW50aWZpZXIpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVTdGVwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFjdGlvbiBzdGVwcyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCB3aGVuIG1vdmluZyB0byB0aGUgbmV4dCBzdGVwXG4gICAqL1xuICBnZXRBY3Rpb25TdGVwc0F0SW5kZXgoXG4gICAgYWxsU3RlcHM6IFN0ZXBEYXRhW10sXG4gICAgY3VycmVudFZpc2libGVTdGVwSW5kZXg6IG51bWJlclxuICApOiBTdGVwRGF0YVtdIHtcbiAgICBjb25zdCB2aXNpYmxlU3RlcHMgPSB0aGlzLmZpbHRlclZpc2libGVTdGVwcyhhbGxTdGVwcyk7XG4gICAgY29uc3QgYWN0aW9uU3RlcHM6IFN0ZXBEYXRhW10gPSBbXTtcblxuICAgIC8vIEZpbmQgdGhlIGN1cnJlbnQgdmlzaWJsZSBzdGVwIGluIHRoZSBvcmlnaW5hbCBmbHV4XG4gICAgaWYgKGN1cnJlbnRWaXNpYmxlU3RlcEluZGV4IDwgdmlzaWJsZVN0ZXBzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY3VycmVudFZpc2libGVTdGVwID0gdmlzaWJsZVN0ZXBzW2N1cnJlbnRWaXNpYmxlU3RlcEluZGV4XTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWaXNpYmxlU3RlcEluZGV4SW5GbHV4ID0gYWxsU3RlcHMuZmluZEluZGV4KFxuICAgICAgICAoc3RlcCkgPT4gc3RlcC5pZGVudGlmaWVyID09PSBjdXJyZW50VmlzaWJsZVN0ZXAuaWRlbnRpZmllclxuICAgICAgKTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGFjdGlvbiBzdGVwcyBpbW1lZGlhdGVseSBhZnRlciBjdXJyZW50IHN0ZXAgaW4gdGhlIG9yaWdpbmFsIGZsdXhcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCBpID0gY3VycmVudFZpc2libGVTdGVwSW5kZXhJbkZsdXggKyAxO1xuICAgICAgICBpIDwgYWxsU3RlcHMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzdGVwID0gYWxsU3RlcHNbaV07XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aW9uU3RlcChzdGVwKSkge1xuICAgICAgICAgIGFjdGlvblN0ZXBzLnB1c2goc3RlcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RvcCBhdCBmaXJzdCBub24tYWN0aW9uIHN0ZXAgKG5leHQgdmlzaWJsZSBzdGVwKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvblN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGFjdGlvbiBzdGVwcyBhdXRvbWF0aWNhbGx5XG4gICAqL1xuICBhc3luYyBleGVjdXRlQWN0aW9uU3RlcHMoXG4gICAgYWN0aW9uU3RlcHM6IFN0ZXBEYXRhW10sXG4gICAgYXBwRGF0YVV1aWQ6IHN0cmluZyxcbiAgICBvblN0ZXBTdGFydD86IChzdGVwOiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxBY3Rpb25TdGVwUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNFeGVjdXRpbmcgfHwgYWN0aW9uU3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhpcy5pc0V4ZWN1dGluZyA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25FeGVjdXRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3Rpb25TdGVwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzdGVwID0gYWN0aW9uU3RlcHNbaV07XG4gICAgICAgIGNvbnN0IGlzTGFzdFN0ZXAgPSBpID09PSBhY3Rpb25TdGVwcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBzaG91bGRTZXROZXh0U3RlcCA9ICFpc0xhc3RTdGVwO1xuICAgICAgICBpZiAob25TdGVwU3RhcnQpIHtcbiAgICAgICAgICBvblN0ZXBTdGFydChzdGVwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGDwn46sIEV4ZWN1dGluZyBhY3Rpb24gc3RlcCAke2kgKyAxfS8ke2FjdGlvblN0ZXBzLmxlbmd0aH06ICR7c3RlcC5pZGVudGlmaWVyXG4gICAgICAgICAgfSwgc2V0TmV4dFN0ZXA6ICR7c2hvdWxkU2V0TmV4dFN0ZXB9YFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFjdGlvblN0ZXAoXG4gICAgICAgICAgc3RlcCxcbiAgICAgICAgICBhcHBEYXRhVXVpZCxcbiAgICAgICAgICBzaG91bGRTZXROZXh0U3RlcFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGDinYwgQWN0aW9uIHN0ZXAgJHtzdGVwLmlkZW50aWZpZXJ9IGZhaWxlZDpgLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIGxldCBlcnJvckNvbnRlbnQgPSAndW5rbm93bic7XG4gICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgZXJyb3JDb250ZW50ID0gcmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuZGF0YS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVycm9yQ29udGVudCA9IHJlc3VsdC5kYXRhLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kaWFsb2cucG9wRXJyb3IoJ2ZsdXguY29tcG9uZW50cy5hY3Rpb24uZmFpbGVkVG9FeGVjdXRlV2l0aFBhcmFtcycsIGVycm9yQ29udGVudCk7XG4gICAgICAgICAgdGhpcy5pc0V4ZWN1dGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0aW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmV4ZWN1dGlvbkNvbXBsZXRlZC5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGDinIUgQWN0aW9uIHN0ZXAgJHtzdGVwLmlkZW50aWZpZXJ9IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlgKTtcblxuICAgICAgICAvLyBBZGQgYSBzbWFsbCBkZWxheSBiZXR3ZWVuIGFjdGlvbiBzdGVwcyB0byBwcmV2ZW50IGNoYW5nZSBkZXRlY3Rpb24gY29uZmxpY3RzXG4gICAgICAgIGlmICghaXNMYXN0U3RlcCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VjY2Vzc1Jlc3VsdDogQWN0aW9uU3RlcFJlc3VsdCA9IHsgc3VjY2VzczogdHJ1ZSB9O1xuXG4gICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgdGhlIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uIGhhcHBlbnMgb3V0c2lkZSB0aGUgY3VycmVudCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc0V4ZWN1dGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ29tcGxldGVkLm5leHQoc3VjY2Vzc1Jlc3VsdCk7XG4gICAgICB9LCAwKTtcblxuICAgICAgcmV0dXJuIHN1Y2Nlc3NSZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yUmVzdWx0OiBBY3Rpb25TdGVwUmVzdWx0ID0geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3IgfTtcblxuICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIHRoZSBlcnJvciBub3RpZmljYXRpb24gaGFwcGVucyBvdXRzaWRlIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhlY3V0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0aW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Db21wbGV0ZWQubmV4dChlcnJvclJlc3VsdCk7XG4gICAgICB9LCAwKTtcblxuICAgICAgcmV0dXJuIGVycm9yUmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHNpbmdsZSBhY3Rpb24gc3RlcFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQWN0aW9uU3RlcChcbiAgICBzdGVwOiBTdGVwRGF0YSxcbiAgICBhcHBEYXRhVXVpZDogc3RyaW5nLFxuICAgIHNldE5leHRTdGVwOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxBY3Rpb25TdGVwUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICAgIGlmIChzdGVwLnR5cGUgPT09IEZsdXhUeXBlLkFjdGlvbikge1xuICAgICAgICBjb25zdCBhY3Rpb25SZXF1ZXN0OiBNYWtlQWN0aW9uUmVxdWVzdCA9IHtcbiAgICAgICAgICBhcHBEYXRhSWQ6IGFwcERhdGFVdWlkLFxuICAgICAgICAgIHN0ZXBJZDogc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICAgIHNldE5leHRTdGVwOiBzZXROZXh0U3RlcCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UubWFrZUFjdGlvbkFwaUNhbGwoYWN0aW9uUmVxdWVzdClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogcmVzdWx0LnN1Y2Nlc3MsIGRhdGE6IHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIGlmIChzdGVwLnR5cGUgPT09IEZsdXhUeXBlLlN0YXR1cykge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UubWFrZVN0YXR1c0FwaUNhbGwoXG4gICAgICAgICAgICBhcHBEYXRhVXVpZCxcbiAgICAgICAgICAgIHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgICAgIHNldE5leHRTdGVwLFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdCB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBleGVjdXRpbmcgYWN0aW9uIHN0ZXAgJHtzdGVwLmlkZW50aWZpZXJ9OmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvciB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgY3VycmVudGx5IGV4ZWN1dGluZyBhY3Rpb25zXG4gICAqL1xuICBnZXQgaXNFeGVjdXRpbmdBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRXhlY3V0aW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIHJlc291cmNlc1xuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4ZWN1dGlvbkNvbXBsZXRlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuYWN0aW9uRXhlY3V0aW5nJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXN0ZXAtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvYWN0aW9uLXN0ZXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWNoRCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCLFlBQW9CLHNCQUE4QyxFQUFVLE1BQXFCO1FBQTdFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBTnpGLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO1FBRXRELHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDMUMscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRW9DLENBQUM7SUFFdEc7O09BRUc7SUFDSCxZQUFZLENBQUMsSUFBYztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxVQUFvQixFQUFFO1FBQzFELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksT0FBTyxFQUFFLE1BQU0s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QkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1ha2VBY3Rpb25SZXF1ZXN0IH0gZnJvbSAnLi9tb2RlbHMvYXBwbGljYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRmx1eFR5cGUgfSBmcm9tICcuL21vZGVscy9mb3Jtcy5tb2RlbCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbkRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBTdGVwRGF0YSB9IGZyb20gJy4vbW9kZWxzL2ZsdXgubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblN0ZXBSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogYW55O1xuICBlcnJvcj86IGFueTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvblN0ZXBIYW5kbGVyIHtcbiAgcHJpdmF0ZSBpc0V4ZWN1dGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGV4ZWN1dGlvbkNvbXBsZXRlZCA9IG5ldyBTdWJqZWN0PEFjdGlvblN0ZXBSZXN1bHQ+KCk7XG5cbiAgcHVibGljIGFjdGlvbkV4ZWN1dGluZyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgYWN0aW9uQ29tcGxldGVkJCA9IHRoaXMuZXhlY3V0aW9uQ29tcGxldGVkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwbGljYXRpb25EYXRhU2VydmljZTogQXBwbGljYXRpb25EYXRhU2VydmljZSwgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2UpIHsgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBzdGVwIGlzIGFuIGFjdGlvbiBzdGVwIHRoYXQgc2hvdWxkIGJlIGhhbmRsZWQgYXV0b21hdGljYWxseVxuICAgKi9cbiAgaXNBY3Rpb25TdGVwKHN0ZXA6IFN0ZXBEYXRhKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ZXAudHlwZSA9PT0gRmx1eFR5cGUuU3RhdHVzIHx8IHN0ZXAudHlwZSA9PT0gRmx1eFR5cGUuQWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgb3V0IGFjdGlvbiBzdGVwcyBmcm9tIHRoZSB2aXNpYmxlIHN0ZXBzIGFycmF5XG4gICAqL1xuICBmaWx0ZXJWaXNpYmxlU3RlcHMoc3RlcHM6IFN0ZXBEYXRhW10sIHN0ZXBJZHM6IHN0cmluZ1tdID0gW10pOiBTdGVwRGF0YVtdIHtcbiAgICB2YXIgdmlzaWJsZVN0ZXBzID0gc3RlcHMuZmlsdGVyKChzdGVwKSA9PiAhdGhpcy5pc0FjdGlvblN0ZXAoc3RlcCkpO1xuICAgIGlmIChzdGVwSWRzPy5sZW5ndGggPiAwKSB7XG4gICAgICB2aXNpYmxlU3RlcHMgPSB2aXNpYmxlU3RlcHMuZmlsdGVyKChzKSA9PiBzdGVwSWRzLmluY2x1ZGVzKHMuaWRlbnRpZmllcikpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZVN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWN0aW9uIHN0ZXBzIHRoYXQgYXBwZWFyIGJlZm9yZSB0aGUgZmlyc3QgdmlzaWJsZSBzdGVwIGluIHRoZSBmbHV4LlxuICAgKiBUaGVzZSBuZWVkIHRvIGJlIGV4ZWN1dGVkIG9uIGZvcm0gaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBnZXRBY3Rpb25TdGVwc0JlZm9yZUZpcnN0VmlzaWJsZVN0ZXAoYWxsU3RlcHM6IFN0ZXBEYXRhW10pOiBTdGVwRGF0YVtdIHtcbiAgICBjb25zdCBhY3Rpb25TdGVwczogU3RlcERhdGFbXSA9IFtdO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBhbGxTdGVwcykge1xuICAgICAgaWYgKHRoaXMuaXNBY3Rpb25TdGVwKHN0ZXApKSB7XG4gICAgICAgIGFjdGlvblN0ZXBzLnB1c2goc3RlcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvblN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWN0aW9uIHN0ZXBzIHRoYXQgc2hvdWxkIGJlIGV4ZWN1dGVkIHdoZW4gbW92aW5nIHRvIHRoZSBuZXh0IHN0ZXBcbiAgICovXG4gIGdldEFjdGlvblN0ZXBzQXRJbmRleChcbiAgICBhbGxTdGVwczogU3RlcERhdGFbXSxcbiAgICBjdXJyZW50VmlzaWJsZVN0ZXBJbmRleDogbnVtYmVyXG4gICk6IFN0ZXBEYXRhW10ge1xuICAgIGNvbnN0IHZpc2libGVTdGVwcyA9IHRoaXMuZmlsdGVyVmlzaWJsZVN0ZXBzKGFsbFN0ZXBzKTtcbiAgICBjb25zdCBhY3Rpb25TdGVwczogU3RlcERhdGFbXSA9IFtdO1xuXG4gICAgLy8gRmluZCB0aGUgY3VycmVudCB2aXNpYmxlIHN0ZXAgaW4gdGhlIG9yaWdpbmFsIGZsdXhcbiAgICBpZiAoY3VycmVudFZpc2libGVTdGVwSW5kZXggPCB2aXNpYmxlU3RlcHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmlzaWJsZVN0ZXAgPSB2aXNpYmxlU3RlcHNbY3VycmVudFZpc2libGVTdGVwSW5kZXhdO1xuICAgICAgY29uc3QgY3VycmVudFZpc2libGVTdGVwSW5kZXhJbkZsdXggPSBhbGxTdGVwcy5maW5kSW5kZXgoXG4gICAgICAgIChzdGVwKSA9PiBzdGVwLmlkZW50aWZpZXIgPT09IGN1cnJlbnRWaXNpYmxlU3RlcC5pZGVudGlmaWVyXG4gICAgICApO1xuXG4gICAgICAvLyBDaGVjayBmb3IgYWN0aW9uIHN0ZXBzIGltbWVkaWF0ZWx5IGFmdGVyIGN1cnJlbnQgc3RlcCBpbiB0aGUgb3JpZ2luYWwgZmx1eFxuICAgICAgZm9yIChcbiAgICAgICAgbGV0IGkgPSBjdXJyZW50VmlzaWJsZVN0ZXBJbmRleEluRmx1eCArIDE7XG4gICAgICAgIGkgPCBhbGxTdGVwcy5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBhbGxTdGVwc1tpXTtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3Rpb25TdGVwKHN0ZXApKSB7XG4gICAgICAgICAgYWN0aW9uU3RlcHMucHVzaChzdGVwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTdG9wIGF0IGZpcnN0IG5vbi1hY3Rpb24gc3RlcCAobmV4dCB2aXNpYmxlIHN0ZXApXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uU3RlcHM7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYWN0aW9uIHN0ZXBzIGF1dG9tYXRpY2FsbHlcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb25TdGVwcyhcbiAgICBhY3Rpb25TdGVwczogU3RlcERhdGFbXSxcbiAgICBhcHBEYXRhVXVpZDogc3RyaW5nLFxuICAgIG9uU3RlcFN0YXJ0PzogKHN0ZXA6IGFueSkgPT4gdm9pZFxuICApOiBQcm9taXNlPEFjdGlvblN0ZXBSZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5pc0V4ZWN1dGluZyB8fCBhY3Rpb25TdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICB9XG5cbiAgICB0aGlzLmlzRXhlY3V0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGlvbkV4ZWN1dGluZyQubmV4dCh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvblN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBhY3Rpb25TdGVwc1tpXTtcbiAgICAgICAgY29uc3QgaXNMYXN0U3RlcCA9IGkgPT09IGFjdGlvblN0ZXBzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IHNob3VsZFNldE5leHRTdGVwID0gIWlzTGFzdFN0ZXA7XG4gICAgICAgIGlmIChvblN0ZXBTdGFydCkge1xuICAgICAgICAgIG9uU3RlcFN0YXJ0KHN0ZXApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYPCfjqwgRXhlY3V0aW5nIGFjdGlvbiBzdGVwICR7aSArIDF9LyR7YWN0aW9uU3RlcHMubGVuZ3RofTogJHtzdGVwLmlkZW50aWZpZXJcbiAgICAgICAgICB9LCBzZXROZXh0U3RlcDogJHtzaG91bGRTZXROZXh0U3RlcH1gXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlQWN0aW9uU3RlcChcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIGFwcERhdGFVdWlkLFxuICAgICAgICAgIHNob3VsZFNldE5leHRTdGVwXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYOKdjCBBY3Rpb24gc3RlcCAke3N0ZXAuaWRlbnRpZmllcn0gZmFpbGVkOmAsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgICAgbGV0IGVycm9yQ29udGVudCA9ICd1bmtub3duJztcbiAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICBlcnJvckNvbnRlbnQgPSByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5kYXRhLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgZXJyb3JDb250ZW50ID0gcmVzdWx0LmRhdGEuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRpYWxvZy5wb3BFcnJvcignZmx1eC5jb21wb25lbnRzLmFjdGlvbi5mYWlsZWRUb0V4ZWN1dGVXaXRoUGFyYW1zJywgZXJyb3JDb250ZW50KTtcbiAgICAgICAgICB0aGlzLmlzRXhlY3V0aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ29tcGxldGVkLm5leHQocmVzdWx0KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coYOKchSBBY3Rpb24gc3RlcCAke3N0ZXAuaWRlbnRpZmllcn0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseWApO1xuXG4gICAgICAgIC8vIEFkZCBhIHNtYWxsIGRlbGF5IGJldHdlZW4gYWN0aW9uIHN0ZXBzIHRvIHByZXZlbnQgY2hhbmdlIGRldGVjdGlvbiBjb25mbGljdHNcbiAgICAgICAgaWYgKCFpc0xhc3RTdGVwKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWNjZXNzUmVzdWx0OiBBY3Rpb25TdGVwUmVzdWx0ID0geyBzdWNjZXNzOiB0cnVlIH07XG5cbiAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSB0aGUgY29tcGxldGlvbiBub3RpZmljYXRpb24gaGFwcGVucyBvdXRzaWRlIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhlY3V0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0aW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5leGVjdXRpb25Db21wbGV0ZWQubmV4dChzdWNjZXNzUmVzdWx0KTtcbiAgICAgIH0sIDApO1xuXG4gICAgICByZXR1cm4gc3VjY2Vzc1Jlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JSZXN1bHQ6IEFjdGlvblN0ZXBSZXN1bHQgPSB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvciB9O1xuXG4gICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgdGhlIGVycm9yIG5vdGlmaWNhdGlvbiBoYXBwZW5zIG91dHNpZGUgdGhlIGN1cnJlbnQgY2hhbmdlIGRldGVjdGlvbiBjeWNsZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNFeGVjdXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3Rpb25FeGVjdXRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNvbXBsZXRlZC5uZXh0KGVycm9yUmVzdWx0KTtcbiAgICAgIH0sIDApO1xuXG4gICAgICByZXR1cm4gZXJyb3JSZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgc2luZ2xlIGFjdGlvbiBzdGVwXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVBY3Rpb25TdGVwKFxuICAgIHN0ZXA6IFN0ZXBEYXRhLFxuICAgIGFwcERhdGFVdWlkOiBzdHJpbmcsXG4gICAgc2V0TmV4dFN0ZXA6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEFjdGlvblN0ZXBSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHJlc3VsdDogYW55O1xuICAgICAgaWYgKHN0ZXAudHlwZSA9PT0gRmx1eFR5cGUuQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvblJlcXVlc3Q6IE1ha2VBY3Rpb25SZXF1ZXN0ID0ge1xuICAgICAgICAgIGFwcERhdGFJZDogYXBwRGF0YVV1aWQsXG4gICAgICAgICAgc3RlcElkOiBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgICAgc2V0TmV4dFN0ZXA6IHNldE5leHRTdGVwLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5tYWtlQWN0aW9uQXBpQ2FsbChhY3Rpb25SZXF1ZXN0KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiByZXN1bHQuc3VjY2VzcywgZGF0YTogcmVzdWx0IH07XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAudHlwZSA9PT0gRmx1eFR5cGUuU3RhdHVzKSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5tYWtlU3RhdHVzQXBpQ2FsbChcbiAgICAgICAgICAgIGFwcERhdGFVdWlkLFxuICAgICAgICAgICAgc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICAgICAgc2V0TmV4dFN0ZXAsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0IH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGV4ZWN1dGluZyBhY3Rpb24gc3RlcCAke3N0ZXAuaWRlbnRpZmllcn06YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBjdXJyZW50bHkgZXhlY3V0aW5nIGFjdGlvbnNcbiAgICovXG4gIGdldCBpc0V4ZWN1dGluZ0FjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFeGVjdXRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4gdXAgcmVzb3VyY2VzXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY3V0aW9uQ29tcGxldGVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5hY3Rpb25FeGVjdXRpbmckLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -556,7 +556,7 @@ export class FormlyFieldStepperComponent extends FieldType {
556
556
  callback: () => this.checkIfFlowIsFinished(),
557
557
  });
558
558
  console.log('hasActionSteps', hasActionSteps);
559
- if (hasActionSteps) {
559
+ if (hasActionSteps && !this.isFlowFinished) {
560
560
  await this.updateAppData(true);
561
561
  }
562
562
  if (!this.isFlowFinished) {
@@ -626,12 +626,14 @@ export class FormlyFieldStepperComponent extends FieldType {
626
626
  current: currentIdx,
627
627
  callback: () => this.checkIfFlowIsFinished(),
628
628
  });
629
- if (hasActionSteps) {
629
+ if (hasActionSteps && !this.isFlowFinished) {
630
630
  await this.updateAppData(true);
631
631
  }
632
- this.stepper.next();
633
- this.currentStepIndex = this.stepper.selectedIndex;
634
- this.field?.props?.['onSelectedPageChanged'](this.stepper.selectedIndex);
632
+ if (!this.isFlowFinished) {
633
+ this.stepper.next();
634
+ this.currentStepIndex = this.stepper.selectedIndex;
635
+ this.field?.props?.['onSelectedPageChanged'](this.stepper.selectedIndex);
636
+ }
635
637
  this.cdr.detectChanges();
636
638
  }
637
639
  checkIfFlowIsFinished() {
@@ -773,4 +775,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
773
775
  type: ViewChild,
774
776
  args: [MatStepper]
775
777
  }] } });
776
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWZpZWxkLXN0ZXBwZXIvZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWZpZWxkLXN0ZXBwZXIvZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUVMLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFnQixLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGVBQWUsR0FFaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7OztBQWdCaEYsTUFBTSxPQUFPLDJCQUNYLFNBQVEsU0FBUztJQStCakIsWUFDVSxzQkFBOEMsRUFDOUMsYUFBcUMsRUFDckMsR0FBc0IsRUFDdEIsb0JBQTBDO1FBRWxELEtBQUssRUFBRSxDQUFDO1FBTEEsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxrQkFBYSxHQUFi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LEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUU7eUJBQ2pEO3dCQUNELHNCQUFzQjtxQkFDdkI7bU1BS3NCLE9BQU87c0JBQTdCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNURVBQRVJfR0xPQkFMX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFN0ZXBwZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgdGltZXIsIGZpcnN0VmFsdWVGcm9tLCBjYXRjaEVycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQXBwRGF0YSxcbiAgRmx1eFR5cGUsXG4gIEFwcERhdGFTdGVwLFxuICBBcHBEYXRhU2VjdGlvbixcbiAgQXBwRGF0YUNvbnRyb2wsXG4gIEFwcERhdGFGaWxsLFxuICBTdGVwQ29udHJvbFR5cGUsXG4gIERpY3Rpb25hcnlDb250cm9sRGF0YSxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbkRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xsZWN0b3JGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vb3JpZ2luLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNjcm9sbFRvRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Nyb2xsLXRvLWVycm9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9ybWx5LWZpZWxkLXN0ZXBwZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtbHktZmllbGQtc3RlcHBlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBTVEVQUEVSX0dMT0JBTF9PUFRJT05TLFxuICAgICAgdXNlVmFsdWU6IHsgZGlzcGxheURlZmF1bHRJbmRpY2F0b3JUeXBlOiBmYWxzZSB9LFxuICAgIH0sXG4gICAgQXBwbGljYXRpb25EYXRhU2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RmllbGRTdGVwcGVyQ29tcG9uZW50XG4gIGV4dGVuZHMgRmllbGRUeXBlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKE1hdFN0ZXBwZXIpIHN0ZXBwZXIhOiBNYXRTdGVwcGVyO1xuICBidXR0b25zR3JvdXBzOiBhbnlbXVtdID0gW107XG4gIHNob3dTdGVwczogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dTdGVwc0xhYmVsczogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dTdGVwc0NvdW50ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93QnV0dG9uc09uVG9wOiBib29sZWFuO1xuICBzaG93UHJvZ3Jlc3NCYXI6IGJvb2xlYW47XG4gIHNob3dGaW5hbFN0ZXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGbG93RmluaXNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXBwRGF0YTogQXBwRGF0YTtcbiAgaXNEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0RlYnVnOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTmF2aWdhdGlvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudFN0ZXBJbmRleDogbnVtYmVyID0gMDtcbiAgbG9hZGVkU3RlcHM6IGJvb2xlYW5bXSA9IFtdO1xuICBwcml2YXRlIGNvbmZpZ1VwZGF0ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHZpc2libGVGaWVsZHNVcGRhdGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdXBkYXRlQW5kR29OZXh0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZ29OZXh0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGNvbmNhdGVuYXRlZEZvcm1TdHlsZTogYW55ID0ge307XG4gIGJ1dHRvbnNWZXJ0aWNhbFBvc2l0aW9uOiBzdHJpbmcgPSAnYm90dG9tJztcblxuICBpc05hdmlnYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmaW5hbFN0ZXBGaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWc7XG4gIGZpbHRlcmVkVmlzaWJsZVN0ZXBzOiBhbnlbXSA9IFtdO1xuICBwcm9ncmVzc0JhclN0eWxlczogYW55ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbkRhdGFTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29sbGVjdG9yRm9ybTogQ29sbGVjdG9yRm9ybUNvbXBvbmVudCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0Vycm9yU2VydmljZTogU2Nyb2xsVG9FcnJvclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJvcHNbJ2NvbXBvbmVudCddID0gdGhpcztcbiAgICB0aGlzLmFwcGx5UHJvZ3Jlc3NCYXJTdHlsZXMoKTtcbiAgICB0aGlzLmNvbmZpZ1VwZGF0ZVN1YnNjcmlwdGlvbiA9XG4gICAgICB0aGlzLmNvbGxlY3RvckZvcm0uZm9ybWx5Q29uZmlnVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgICB0aGlzLmZpZWxkLmZpZWxkR3JvdXAgPSB0aGlzLmV4dHJhY3RGaW5hbFN0ZXBJZk5lY2Vzc2FyeShcbiAgICAgICAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwQnV0dG9ucygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVGaWVsZHNVcGRhdGVkU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS52aXNpYmxlRmllbGRzVXBkYXRlZC5zdWJzY3JpYmUoKHZpc2libGVGaWVsZHMpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFZpc2libGVTdGVwcyA9IHZpc2libGVGaWVsZHM7XG4gICAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlQW5kR29OZXh0U3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS5mb3JtbHlVcGRhdGVBbmRHb05leHQuc3Vic2NyaWJlKGFzeW5jIChlKSA9PiB7XG4gICAgICAgIGlmIChlICYmIGUuc2VsZWN0ZWRPZmZlcklkICYmIHRoaXMuYXBwRGF0YT8uZmlsbERhdGEpIHtcbiAgICAgICAgICB0aGlzLmFwcERhdGEuZmlsbERhdGEubWV0YWRhdGEub2ZmZXJJZCA9IGUuc2VsZWN0ZWRPZmZlcklkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmZpZWxkLmZpZWxkR3JvdXAhW3RoaXMuY3VycmVudFN0ZXBJbmRleF07XG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVBc3luYygnbmV4dCcsIHN0ZXApO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmdvTmV4dFN1YnNjcmlwdGlvbiA9IHRoaXMuY29sbGVjdG9yRm9ybS5mb3JtbHlHb05leHQuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLmdvTmV4dCgpO1xuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuaW5pdFN0ZXAoKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjaGFuZ2VzLmZpZWxkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcERhdGEoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUFwcERhdGEodGhpcy5maWVsZC5wcm9wcyk7XG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA+PSB0aGlzLnRvdGFsU3RlcHNDb3VudCkge1xuICAgICAgdGhpcy5zaG93RmluYWxTdGVwID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd1N0ZXBzID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dTdGVwc0NvdW50ZXIgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcHBlcikge1xuICAgICAgdGhpcy5zdGVwcGVyLmxpbmVhciA9IGZhbHNlO1xuICAgICAgdGhpcy5zdGVwcGVyLnNlbGVjdGVkSW5kZXggPSB0aGlzLmN1cnJlbnRTdGVwSW5kZXg7XG4gICAgICBjb25zdCBzdGVwcyA9IHRoaXMuc3RlcHBlci5fc3RlcHMudG9BcnJheSgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRTdGVwSW5kZXg7IGkrKykge1xuICAgICAgICBzdGVwc1tpXS5jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RlcHBlci5saW5lYXIgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXAgJiYgdGhpcy5maWVsZC5maWVsZEdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGVkU3RlcHMgPSBBcnJheSh0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoKS5maWxsKGZhbHNlKTtcbiAgICAgIHRoaXMubG9hZGVkU3RlcHNbdGhpcy5jdXJyZW50U3RlcEluZGV4XSA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zaG93U3RlcHMgfHwgdGhpcy5jdXJyZW50U3RlcEluZGV4ID09IDApIHtcbiAgICAgIHRoaXMudHJpZ2dlck9uUGFnZVNlbGVjdGVkRm9ySW5kZXgodGhpcy5jdXJyZW50U3RlcEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWdVcGRhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnVXBkYXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVwZGF0ZUFuZEdvTmV4dFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy51cGRhdGVBbmRHb05leHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ29OZXh0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmdvTmV4dFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy52aXNpYmxlRmllbGRzVXBkYXRlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy52aXNpYmxlRmllbGRzVXBkYXRlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRTdGVwKCkge1xuICAgIGlmICh0aGlzLmZpZWxkKSB7XG4gICAgICBpZiAodGhpcy5maWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cCA9IHRoaXMuZXh0cmFjdEZpbmFsU3RlcElmTmVjZXNzYXJ5KFxuICAgICAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvYWRlZFN0ZXBzID0gQXJyYXkodGhpcy5maWVsZC5maWVsZEdyb3VwLmxlbmd0aCkuZmlsbChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZGVkU3RlcHNbdGhpcy5jdXJyZW50U3RlcEluZGV4XSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWVsZC5wcm9wcykge1xuICAgICAgICB0aGlzLmZpbHRlcmVkVmlzaWJsZVN0ZXBzID0gdGhpcy5maWVsZC5wcm9wc1snZmlsdGVyZWRGbHV4J107XG4gICAgICAgIHRoaXMuaXNEZWJ1ZyA9IHRoaXMuZmllbGQucHJvcHNbJ2lzRGVidWcnXTtcbiAgICAgICAgY29uc3Qgc3RlcFNldHRpbmdzID0gdGhpcy5maWVsZC5wcm9wc1snc3RlcHNTZXR0aW5ncyddO1xuICAgICAgICBpZiAoc3RlcFNldHRpbmdzKSB7XG4gICAgICAgICAgdGhpcy5zaG93U3RlcHMgPSBzdGVwU2V0dGluZ3Muc2hvd0FsbFN0ZXBzO1xuICAgICAgICAgIHRoaXMuc2hvd1N0ZXBzQ291bnRlciA9IHN0ZXBTZXR0aW5ncy5zaG93Q291bnRlcjtcbiAgICAgICAgICB0aGlzLnNob3dTdGVwc0xhYmVscyA9IHN0ZXBTZXR0aW5ncy5zaG93TGFiZWxzO1xuICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzQmFyID0gc3RlcFNldHRpbmdzLnNob3dQcm9ncmVzc0JhcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXNpZ25Db25maWcgPSB0aGlzLmZpZWxkLnByb3BzWydkZXNpZ25Db25maWcnXTtcbiAgICAgICAgaWYgKGRlc2lnbkNvbmZpZykge1xuICAgICAgICAgIHRoaXMuc2hvd0J1dHRvbnNPblRvcCA9XG4gICAgICAgICAgICBkZXNpZ25Db25maWcuYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT09ICd0b3AnO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5maWVsZC5wcm9wc1snZGVzaWduJ10pXG4gICAgICAgICAgLmZpbHRlcigoaSkgPT4gaVswXS5zdGFydHNXaXRoKCcuZm9ybScpKVxuICAgICAgICAgIC5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wOiBhbnkgPSBpWzFdO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcCkuZm9yRWFjaCgoaikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNvbmNhdGVuYXRlZEZvcm1TdHlsZVtqXSA9IHByb3Bbal07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNWZXJ0aWNhbFBvc2l0aW9uID1cbiAgICAgICAgICB0aGlzLmZpZWxkLnByb3BzWydkZXNpZ24nXVsnLmJ1dHRvbnMtY29udGFpbmVyJ11bJ2FsaWduLWl0ZW1zJ10gPT1cbiAgICAgICAgICAgICdmbGV4LXN0YXJ0J1xuICAgICAgICAgICAgPyAndG9wJ1xuICAgICAgICAgICAgOiAnYm90dG9tJztcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cEJ1dHRvbnMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG90YWxTdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZmllbGQ/LmZpZWxkR3JvdXA/LmZpbHRlcihcbiAgICAgICAgKHN0ZXApID0+IHN0ZXAucHJvcHM/LlsnZmx1eFR5cGUnXSAhPT0gRmx1eFR5cGUuRmluYWxcbiAgICAgICkubGVuZ3RoID8/IDBcbiAgICApO1xuICB9XG5cbiAgZXh0cmFjdEZpbmFsU3RlcElmTmVjZXNzYXJ5KFxuICAgIGZpZWxkQ29uZmlnczogRm9ybWx5RmllbGRDb25maWdbXVxuICApOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcbiAgICBsZXQgZmlsdGVyZWRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICB0aGlzLmZpZWxkLmZpZWxkR3JvdXA/LmZvckVhY2goKGYpID0+IHtcbiAgICAgIGlmIChmLnByb3BzICYmIGYucHJvcHNbJ2ZsdXhUeXBlJ10gPT0gRmx1eFR5cGUuRmluYWwpIHtcbiAgICAgICAgdGhpcy5maW5hbFN0ZXBGaWVsZENvbmZpZyA9IGY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJlZENvbmZpZy5wdXNoKGYpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZENvbmZpZztcbiAgfVxuXG4gIGNyZWF0ZUZpZWxkR3JvdXBCdXR0b25zKCkge1xuICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgIHRoaXMuYnV0dG9uc0dyb3VwcyA9IFtdO1xuICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwLmZvckVhY2goKGZnLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IHRoaXMuZmllbGQuZmllbGRHcm91cCEubGVuZ3RoIC0gMTtcblxuICAgICAgICBsZXQgYnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZnLnByb3BzKSB7XG4gICAgICAgICAgY29uc3QgZmx1eFR5cGUgPSBmZy5wcm9wc1snZmx1eFR5cGUnXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuS3ljIHx8XG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuR2VuZXJhdGVEb2N1bWVudCB8fFxuICAgICAgICAgICAgZmx1eFR5cGUgPT09IEZsdXhUeXBlLlNpZ24gfHxcbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5FbWFpbCB8fFxuICAgICAgICAgICAgZmx1eFR5cGUgPT09IEZsdXhUeXBlLlBob25lIHx8XG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuT3BlbkJhbmtpbmdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc0dyb3Vwcy5wdXNoKFtdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidG5EaXNhYmxlZCA9XG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuS3ljIHx8XG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuUGhvbmUgfHxcbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5FbWFpbDtcbiAgICAgICAgICBmZy5wcm9wc1snYnV0dG9uc0Rpc2FibGVkJ10gPT09IHRydWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGZsdXhUeXBlID09PSBGbHV4VHlwZS5LeWMgfHxcbiAgICAgICAgICAgICAgZmx1eFR5cGUgPT09IEZsdXhUeXBlLlBob25lIHx8XG4gICAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5FbWFpbCkgJiZcbiAgICAgICAgICAgIGZnLnByb3BzWydidXR0b25zRGlzYWJsZWQnXSA9PT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50c1dpdGhEZWZhdWx0TGFiZWxzID1cbiAgICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50c1dpdGhEZWZhdWx0TGFiZWxzKCk7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudHNXaXRoRGVmYXVsdExhYmVsc1tmbHV4VHlwZV0pIHtcbiAgICAgICAgICAgIGZnLnByb3BzWydsYWJlbCddID0gY29tcG9uZW50c1dpdGhEZWZhdWx0TGFiZWxzW2ZsdXhUeXBlXTtcbiAgICAgICAgICAgIGZnLnByb3BzWydkZXNjcmlwdGlvbiddID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZnLnByb3BzPy5bJ2ZsdXhUeXBlJ10gPT09IEZsdXhUeXBlLlZpZXdPZmZlciB8fFxuICAgICAgICAgIGZnLnByb3BzPy5bJ2ZsdXhUeXBlJ10gPT09IEZsdXhUeXBlLlBhdXNlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vMTI9bGlzdCBvZmZlcnNcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNHcm91cHMucHVzaChbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnRucyA9IHRoaXMuY3JlYXRlQnV0dG9ucyhmZywgaSwgaXNMYXN0LCBidG5EaXNhYmxlZCk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHNbJ2RlbW9Nb2RlJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgIGJ0bnMuZm9yRWFjaCgoYjogeyB0eXBlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYi50eXBlID09PSAnc3VibWl0Jykge1xuICAgICAgICAgICAgICAgIGJ0bnMuc3BsaWNlKGJ0bnMuaW5kZXhPZihiKSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wc1snbm9CdXR0b25zSW5WaWV3J10gPT09IHRydWUpIHtcbiAgICAgICAgICAgIGJ0bnMuc3BsaWNlKDAsIGJ0bnMubGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5idXR0b25zR3JvdXBzLnB1c2goYnRucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcERhdGEocHJvcHM6IGFueSkge1xuICAgIGNvbnN0IGFwcERhdGFJZCA9IHByb3BzWydhcHBEYXRhSWQnXTtcbiAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gcHJvcHNbJ2FwcGxpY2F0aW9uSWQnXSB8fCAwO1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwSWQgPVxuICAgICAgcHJvcHMubWV0YURhdGE/LmN1cnJlbnRTdGVwSWQgfHwgcHJvcHMuZmx1eFswXT8uaWRlbnRpZmllcjtcblxuICAgIGlmIChwcm9wc1snaGFzRGljdGlvbmFyeURlcGVuZGVudFN0ZXBzJ10pIHtcbiAgICAgIGF3YWl0IHRpbWVyKDE1MCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcEluZGV4ID1cbiAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cD8uZmluZEluZGV4KFxuICAgICAgICAocykgPT4gcy5wcm9wcz8uWydzdGVwSWQnXSA9PT0gY3VycmVudFN0ZXBJZFxuICAgICAgKSB8fCAwO1xuICAgIHRoaXMuaXNEaXNwbGF5TW9kZSA9IHByb3BzWydpc0Rpc3BsYXlNb2RlJ10gfHwgZmFsc2U7XG5cbiAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPVxuICAgICAgc3RlcEluZGV4ID49IDAgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZSA/IHN0ZXBJbmRleCA6IDA7XG5cbiAgICBjb25zdCBzdGF0dXNJZCA9IHByb3BzWydzdGF0dXNJZCddIHx8ICcnO1xuICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHByb3BzWydkZWZhdWx0TGFuZ3VhZ2UnXTtcblxuICAgIGNvbnN0IGZsdXggPSAocHJvcHNbJ2ZsdXgnXSB8fCBbXSkubWFwKFxuICAgICAgKHN0ZXA6IGFueSkgPT5cbiAgICAgICAgbmV3IEFwcERhdGFTdGVwKFxuICAgICAgICAgIHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgICBzdGVwLnR5cGUsXG4gICAgICAgICAgKHN0ZXAuc2VjdGlvbnMgfHwgW10pLm1hcChcbiAgICAgICAgICAgIChzZWN0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICAgIG5ldyBBcHBEYXRhU2VjdGlvbihcbiAgICAgICAgICAgICAgICBzZWN0aW9uLmlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgKHNlY3Rpb24uY29udHJvbHMgfHwgW10pLm1hcChcbiAgICAgICAgICAgICAgICAgIChjb250cm9sOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBBcHBEYXRhQ29udHJvbChcbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmlkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5maWxsVmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG4gICAgY29uc3Qgb2ZmZXJJZCA9IHByb3BzPy5maWxsRGF0YT8ubWV0YWRhdGE/Lm9mZmVySWQgfHwgJyc7XG4gICAgY29uc3QgaXNTdWJtaXR0ZWQgPSBwcm9wcz8uZmlsbERhdGE/Lm1ldGFkYXRhPy5pc1N1Ym1pdHRlZCB8fCBmYWxzZTtcblxuICAgIGNvbnN0IGZpbGxEYXRhID0gbmV3IEFwcERhdGFGaWxsKFxuICAgICAgYXBwRGF0YUlkLFxuICAgICAgYXBwbGljYXRpb25JZCxcbiAgICAgIGN1cnJlbnRTdGVwSWQsXG4gICAgICBzdGF0dXNJZCxcbiAgICAgIGRlZmF1bHRMYW5ndWFnZSxcbiAgICAgIGZsdXgsXG4gICAgICBvZmZlcklkLFxuICAgICAgaXNTdWJtaXR0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5hcHBEYXRhID0gbmV3IEFwcERhdGEoe1xuICAgICAgYXBwRGF0YUlkOiBhcHBEYXRhSWQsXG4gICAgICBhcHBDb25maWd1cmF0aW9uSWQ6IGFwcGxpY2F0aW9uSWQsXG4gICAgICBmaWxsRGF0YTogZmlsbERhdGEsXG4gICAgICBpbml0Rmxvd1ZhbHVlczogcHJvcHNbJ2luaXRGbG93VmFsdWVzJ10sXG4gICAgICB3aXRoTmV4dFN0ZXA6IGZhbHNlLFxuICAgICAgYmxvY2tQcmV2aW91c1N0ZXA6IHByb3BzWydibG9ja1ByZXZpb3VzU3RlcCddID8/IGZhbHNlLFxuICAgICAgZW52OiBwcm9wc1snZW52J10sXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuaXNEaXNwbGF5TW9kZSAmJiAhcHJvcHNbJ2ZpbGxEYXRhJ10pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZUFwcERhdGEoKTtcbiAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS5maWxsRGF0YSA9IHRoaXMuYXBwRGF0YS5maWxsRGF0YTtcbiAgICAgIGF3YWl0IHRoaXMuY29sbGVjdG9yRm9ybS5pbml0QXN5bmMoKTtcblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBcHBEYXRhKCkge1xuICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUgfHwgdGhpcy5wcm9wc1snZGVtb01vZGUnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tEZW1vIE1vZGVdIFNraXBwaW5nIHNhdmVBcHBEYXRhIHJlcXVlc3QuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5zYXZlQXBwKHRoaXMuYXBwRGF0YSkucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgQXBwRGF0YScsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5hcHBEYXRhLmZpbGxEYXRhID0gSlNPTi5wYXJzZShkYXRhLmZpbGxEYXRhKTtcbiAgICAgICAgdGhpcy5hcHBEYXRhLmJsb2NrUHJldmlvdXNTdGVwID0gZGF0YS5ibG9ja1ByZXZpb3VzU3RlcDtcbiAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvY2N1cnJlZCBkdXJpbmcgc2F2ZVN0ZXAnLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRQcmV2aW91c1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSB8fCB0aGlzLnByb3BzWydkZW1vTW9kZSddID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0RlbW8gTW9kZV0gU2tpcHBpbmcgZ2V0UHJldmlvdXNTdGVwIHJlcXVlc3QuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLmdldFByZXZpb3VzU3RlcCh0aGlzLmFwcERhdGEuYXBwRGF0YUlkKS5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgdGhlIHByZXZpb3VzU3RlcCcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICB0aGlzLmFwcERhdGEuZmlsbERhdGEgPSBKU09OLnBhcnNlKGRhdGEuZmlsbERhdGEpO1xuICAgICAgICAgIHRoaXMuYXBwRGF0YS5ibG9ja1ByZXZpb3VzU3RlcCA9IGRhdGEuYmxvY2tQcmV2aW91c1N0ZXA7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgZHVyaW5nIGdldFByZXZpb3VzU3RlcCcsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUFwcERhdGFTdGVwKCkge1xuICAgIGlmICh0aGlzLmlzRGlzcGxheU1vZGUgfHwgdGhpcy5wcm9wc1snZGVtb01vZGUnXSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tEZW1vIE1vZGVdIFNraXBwaW5nIHNhdmVBcHBEYXRhU3RlcCByZXF1ZXN0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgY3VycmVudCB2aXNpYmxlIHN0ZXAgYmFzZWQgb24gY3VycmVudFN0ZXBJbmRleFxuXG4gICAgY29uc3QgY3VycmVudFZpc2libGVTdGVwID0gdGhpcy5maWx0ZXJlZFZpc2libGVTdGVwc1t0aGlzLmN1cnJlbnRTdGVwSW5kZXhdO1xuXG4gICAgaWYgKCFjdXJyZW50VmlzaWJsZVN0ZXApIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gY3VycmVudCB2aXNpYmxlIHN0ZXAgZm91bmQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIHN0ZXAgaW4gZmlsbERhdGEuZmx1eCBiYXNlZCBvbiB0aGUgdmlzaWJsZSBzdGVwIGlkZW50aWZpZXJcbiAgICBsZXQgY3VycmVudFN0ZXAgPSB0aGlzLmFwcERhdGEuZmlsbERhdGE/LmZsdXguZmluZChcbiAgICAgIChzKSA9PiBzLnN0ZXBJZCA9PT0gY3VycmVudFZpc2libGVTdGVwLmlkZW50aWZpZXJcbiAgICApO1xuXG4gICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBpdCBieSBpZGVudGlmaWVyLCBjcmVhdGUgaXQgb3IgdXBkYXRlIG1ldGFkYXRhXG4gICAgaWYgKCFjdXJyZW50U3RlcCAmJiB0aGlzLmFwcERhdGEuZmlsbERhdGEpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudFN0ZXBJZCBpbiBtZXRhZGF0YSB0byBtYXRjaCB0aGUgY3VycmVudCB2aXNpYmxlIHN0ZXBcbiAgICAgIHRoaXMuYXBwRGF0YS5maWxsRGF0YS5tZXRhZGF0YS5jdXJyZW50U3RlcElkID1cbiAgICAgICAgY3VycmVudFZpc2libGVTdGVwLmlkZW50aWZpZXI7XG5cbiAgICAgIC8vIFRyeSB0byBmaW5kIGl0IGFnYWluIGFmdGVyIHVwZGF0aW5nIG1ldGFkYXRhXG4gICAgICBjdXJyZW50U3RlcCA9IHRoaXMuYXBwRGF0YS5maWxsRGF0YS5mbHV4LmZpbmQoXG4gICAgICAgIChzKSA9PiBzLnN0ZXBJZCA9PT0gY3VycmVudFZpc2libGVTdGVwLmlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICAnU2F2aW5nIHN0ZXAgZGF0YSBmb3Igc3RlcDonLFxuICAgICAgY3VycmVudFZpc2libGVTdGVwLmlkZW50aWZpZXIsXG4gICAgICAnU3RlcCBkYXRhOicsXG4gICAgICBjdXJyZW50U3RlcFxuICAgICk7XG5cbiAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZVxuICAgICAgICAuc2F2ZVN0ZXAoXG4gICAgICAgICAgdGhpcy5hcHBEYXRhLmFwcERhdGFJZCxcbiAgICAgICAgICBjdXJyZW50U3RlcCxcbiAgICAgICAgICB0aGlzLmFwcERhdGEuZmlsbERhdGE/Lm1ldGFkYXRhLm9mZmVySWRcbiAgICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIEFwcERhdGEnLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIClcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmZpbGxEYXRhID0gdGhpcy5hcHBEYXRhLmZpbGxEYXRhID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgIGRhdGEuZmlsbERhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYXBwRGF0YS5ibG9ja1ByZXZpb3VzU3RlcCA9IGRhdGEuYmxvY2tQcmV2aW91c1N0ZXA7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsZWFyIHRoZSBzYXZpbmcgYWZ0ZXIgYWN0aW9ucyBmbGFnXG4gICAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS5jbGVhclNhdmluZ0FmdGVyQWN0aW9uc1N0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgZHVyaW5nIHNhdmVTdGVwJywgZXJyb3IpO1xuICAgICAgICAvLyBDbGVhciB0aGUgc2F2aW5nIGFmdGVyIGFjdGlvbnMgZmxhZyBvbiBlcnJvciBhcyB3ZWxsXG4gICAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS5jbGVhclNhdmluZ0FmdGVyQWN0aW9uc1N0YXRlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcERhdGEoc2F2ZUNoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBmb3JtVmFsdWVzID0gdGhpcy5mb3JtLnZhbHVlO1xuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHZpc2libGUgc3RlcCB0byBlbnN1cmUgd2UncmUgdXBkYXRpbmcgdGhlIHJpZ2h0IHN0ZXAgZGF0YVxuICAgIGNvbnN0IGN1cnJlbnRWaXNpYmxlU3RlcCA9IHRoaXMuZmlsdGVyZWRWaXNpYmxlU3RlcHNbdGhpcy5jdXJyZW50U3RlcEluZGV4XTtcblxuICAgIGNvbnN0IGZsdXggPSAodGhpcy5maWVsZD8ucHJvcHM/LlsnZmx1eCddIHx8IFtdKS5tYXAoXG4gICAgICAoc3RlcDogYW55KSA9PlxuICAgICAgICBuZXcgQXBwRGF0YVN0ZXAoXG4gICAgICAgICAgc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICAgIHN0ZXAudHlwZSxcbiAgICAgICAgICAoc3RlcC5zZWN0aW9ucyB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKHNlY3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgbmV3IEFwcERhdGFTZWN0aW9uKFxuICAgICAgICAgICAgICAgIHNlY3Rpb24uaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAoc2VjdGlvbi5jb250cm9scyB8fCBbXSlcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2w6IGFueSkgPT4gY29udHJvbC5pZGVudGlmaWVyICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1WYWx1ZXNbY29udHJvbC5pZGVudGlmaWVyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wudHlwZSAhPT0gU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFkID0gKG46IG51bWJlcikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gYCR7cGFkKHZhbHVlLmdldERhdGUoKSl9LiR7cGFkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmdldE1vbnRoKCkgKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9LiR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWUgPSBmb3JtYXR0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFwcERhdGFDb250cm9sKGNvbnRyb2wuaWRlbnRpZmllciwgZmlsbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsbFZhbHVlSWQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlsbFZhbHVlTmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxsVmFsdWVJZHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxsVmFsdWVOYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG11bHRpcGxlIHNlbGVjdGlvbiAoYXJyYXkgb2YgdmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkcyA9IHZhbHVlLm1hcCgodjogYW55KSA9PiBTdHJpbmcodi5pZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVOYW1lcyA9IHZhbHVlLm1hcCgodjogYW55KSA9PiB2Lm5hbWUgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGFsc28gc2V0IHNpbmdsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVJZCA9IFN0cmluZyh2YWx1ZVswXS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlTmFtZSA9IHZhbHVlWzBdLm5hbWUgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkID0gU3RyaW5nKHZhbHVlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlTmFtZSA9IHZhbHVlLm5hbWUgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVJZCA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnlDb250cm9sRGF0YSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhIGFzIERpY3Rpb25hcnlDb250cm9sRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnlDb250cm9sRGF0YT8uZGljdGlvbmFyeVVVSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS5kaWN0aW9uYXJ5TWFwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeUNvbnRyb2xEYXRhLmRpY3Rpb25hcnlVVUlEXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gZGljdGlvbmFyeT8udmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYpID0+IHYuaWQgPT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlTmFtZSA9IHNlbGVjdGVkT3B0aW9uLm5hbWUgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIGRpY3Rpb25hcnkgdmFsdWUgbmFtZSBmb3IgSUQ6ICR7dmFsdWV9IGluIGRpY3Rpb25hcnkgJHtkaWN0aW9uYXJ5Q29udHJvbERhdGEuZGljdGlvbmFyeVVVSUR9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYERpY3Rpb25hcnkgVVVJRCBub3QgZm91bmQgZm9yIGNvbnRyb2w6ICR7Y29udHJvbC5pZGVudGlmaWVyfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcHBEYXRhQ29udHJvbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZU5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlSWRzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5hcHBEYXRhLmZpbGxEYXRhKSB7XG4gICAgICB0aGlzLmFwcERhdGEuZmlsbERhdGEuZmx1eCA9IGZsdXg7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgbWV0YWRhdGEgcmVmbGVjdHMgdGhlIGN1cnJlbnQgdmlzaWJsZSBzdGVwXG4gICAgICBpZiAoY3VycmVudFZpc2libGVTdGVwKSB7XG4gICAgICAgIHRoaXMuYXBwRGF0YS5maWxsRGF0YS5tZXRhZGF0YS5jdXJyZW50U3RlcElkID1cbiAgICAgICAgICBjdXJyZW50VmlzaWJsZVN0ZXAuaWRlbnRpZmllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2F2ZUNoYW5nZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZUFwcERhdGFTdGVwKCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQnV0dG9ucyhcbiAgICBzdGVwOiBhbnksXG4gICAgc3RlcEluZGV4OiBudW1iZXIsXG4gICAgbGFzdDogYm9vbGVhbixcbiAgICBidG5EaXNhYmxlZDogYm9vbGVhblxuICApOiBhbnkge1xuICAgIGxldCBidXR0b25zOiBhbnlbXSA9IFtdO1xuICAgIGlmIChzdGVwLnByb3BzPy5bJ2J1dHRvbnMnXT8ubGVuZ3RoID4gMCkge1xuICAgICAgYnV0dG9ucyA9IHN0ZXAucHJvcHM/LlsnYnV0dG9ucyddO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25zID0gdGhpcy5nZXREZWZhdWx0QnV0dG9ucyhzdGVwSW5kZXgsIGxhc3QpO1xuICAgIH1cbiAgICBidXR0b25zLmZvckVhY2goKGIpID0+IHRoaXMuc2V0dXBCdXR0b25Qcm9wZXJ0aWVzKGIsIGJ0bkRpc2FibGVkKSk7XG4gICAgaWYgKHRoaXMuYXBwRGF0YT8uZmlsbERhdGE/Lm1ldGFkYXRhPy5pc1N1Ym1pdHRlZCkge1xuICAgICAgYnV0dG9ucyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gYnV0dG9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEJ1dHRvbnMoaW5kZXg6IG51bWJlciwgbGFzdDogYm9vbGVhbik6IGFueVtdIHtcbiAgICBjb25zdCBidXR0b25zOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuYXBwRGF0YT8uZmlsbERhdGE/Lm1ldGFkYXRhPy5pc1N1Ym1pdHRlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGJ1dHRvbnM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSkge1xuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgICBsYWJlbDogJ0JhY2snLFxuICAgICAgICBzdHlsZUtleTogJy5idXR0b24tYmFjaycsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ICE9PSAwICYmIHRoaXMuYXBwRGF0YT8uYmxvY2tQcmV2aW91c1N0ZXAgPT09IGZhbHNlKSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgICAgIGxhYmVsOiAnQmFjaycsXG4gICAgICAgICAgc3R5bGVLZXk6ICcuYnV0dG9uLWJhY2snLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghbGFzdCkge1xuICAgICAgICBidXR0b25zLnB1c2goeyB0eXBlOiAnbmV4dCcsIGxhYmVsOiAnTmV4dCcsIHN0eWxlS2V5OiAnLmJ1dHRvbi1uZXh0JyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgbGFiZWw6ICdTdWJtaXQnLFxuICAgICAgICAgIHN0eWxlS2V5OiAnLmJ1dHRvbi1zdWJtaXQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1dHRvbnM7XG4gIH1cblxuICBhcHBseVByb2dyZXNzQmFyU3R5bGVzKCkge1xuICAgIGNvbnN0IGRlc2lnbkNvbmZpZyA9IHRoaXMuZmllbGQucHJvcHM/LlsnZGVzaWduJ107XG5cbiAgICBpZiAoZGVzaWduQ29uZmlnKSB7XG4gICAgICBjb25zdCBwcm9ncmVzc0JhckNvbmZpZyA9IGRlc2lnbkNvbmZpZ1snLmNvbXBvbmVudC1wcm9ncmVzcy1iYXInXTtcbiAgICAgIGlmIChwcm9ncmVzc0JhckNvbmZpZykge1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyU3R5bGVzID0ge1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJvZ3Jlc3NCYXJDb25maWcuYmFja2dyb3VuZENvbG9yIHx8ICcjZmZmZmZmJyxcbiAgICAgICAgICBib3JkZXJDb2xvcjogcHJvZ3Jlc3NCYXJDb25maWcuYm9yZGVyQ29sb3IgfHwgJyMwMDAwMDAnLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogcHJvZ3Jlc3NCYXJDb25maWcuYm9yZGVyUmFkaXVzIHx8ICc3cHgnLFxuICAgICAgICAgIGNvbG9yOiBwcm9ncmVzc0JhckNvbmZpZy5jb2xvciB8fCAnIzAwMDAwMCcsXG4gICAgICAgICAgc3RhcnRDb2xvcjogcHJvZ3Jlc3NCYXJDb25maWcuc3RhcnRDb2xvciB8fCAnIzg4ODRCRicsXG4gICAgICAgICAgZW5kQ29sb3I6IHByb2dyZXNzQmFyQ29uZmlnLmVuZENvbG9yIHx8ICcjODg4NEJGJyxcbiAgICAgICAgICBoZWlnaHQ6IHByb2dyZXNzQmFyQ29uZmlnLmhlaWdodCB8fCAnNHB4JyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXR1cEJ1dHRvblByb3BlcnRpZXMoYnV0dG9uOiBhbnksIGJ0bkRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgYnV0dG9uLnN0eWxlID0gdGhpcy5maWVsZC5wcm9wcz8uWydkZXNpZ24nXVtidXR0b24uc3R5bGVLZXldIHx8IHt9O1xuICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRoaXMucHJvcHNbJ2RlbW9Nb2RlJ10gPT09IGZhbHNlID8gYnRuRGlzYWJsZWQgOiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGJ1dHRvbkNsaWNrKHR5cGU6IHN0cmluZywgc3RlcDogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuaXNOYXZpZ2F0aW9uSW5Qcm9ncmVzcykge1xuICAgICAgdGhpcy5pc05hdmlnYXRpb25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVBc3luYyh0eXBlLCBzdGVwKTtcbiAgICAgIHRoaXMuaXNOYXZpZ2F0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlTmV4dEFzeW5jKCkge1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5maWVsZD8uZmllbGRHcm91cCFbdGhpcy5jdXJyZW50U3RlcEluZGV4XTtcbiAgICBpZiAoY3VycmVudFN0ZXApIHtcbiAgICAgIGF3YWl0IHRoaXMuYnV0dG9uQ2xpY2soJ25leHQnLCBjdXJyZW50U3RlcCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cnlDbGljayhzdGVwOiBhbnkpIHtcbiAgICBpZiAoc3RlcD8uZmllbGRHcm91cD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJldHJ5UmVjdXJzaXZlbHkoc3RlcC5maWVsZEdyb3VwKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcm9ncmVzc0JhckZpbGwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvZ3Jlc3NCYXJTdHlsZXMuc3RhcnRDb2xvciB8fCAnIzg4ODRCRic7XG4gICAgY29uc3QgZW5kID0gdGhpcy5wcm9ncmVzc0JhclN0eWxlcy5lbmRDb2xvciB8fCAnIzg4ODRCRic7XG4gICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICR7c3RhcnR9LCAke2VuZH0pYDtcbiAgfVxuXG4gIHJldHJ5UmVjdXJzaXZlbHkoZmllbGRHcm91cDogYW55KSB7XG4gICAgaWYgKGZpZWxkR3JvdXAgJiYgZmllbGRHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICBmaWVsZEdyb3VwLmZvckVhY2goKGY6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmLnByb3BzPy5bJ2NvbXBvbmVudCddO1xuICAgICAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5yZXRyeSkge1xuICAgICAgICAgIGNvbXBvbmVudC5yZXRyeSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnJldHJ5QXN5bmMpIHtcbiAgICAgICAgICBjb21wb25lbnQucmV0cnlBc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV0cnlSZWN1cnNpdmVseShmLmZpZWxkR3JvdXApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVBc3luYyh0eXBlOiBzdHJpbmcsIHN0ZXA6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgdGhpcy5pc05hdmlnYXRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5maWVsZD8uZmllbGRHcm91cCB8fCBbXTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBzdGVwcy5pbmRleE9mKHN0ZXApO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA8IDApIHJldHVybjtcblxuICAgIGNvbnN0IHByZXZJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG5cbiAgICBpZiAoXG4gICAgICAodHlwZSA9PT0gJ25leHQnIHx8IHR5cGUgPT09ICdzdWJtaXQnKSAmJlxuICAgICAgY3VycmVudEluZGV4IDw9IHN0ZXBzLmxlbmd0aCAtIDFcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnByb3BzWydkZW1vTW9kZSddID09PSBmYWxzZSAmJiAhdGhpcy52YWxpZGF0ZUZvcm0oc3RlcCkpIHtcbiAgICAgICAgdGhpcy5pc05hdmlnYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc2hvd1N0ZXBzKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZEdyb3VwID0gc3RlcHNbY3VycmVudEluZGV4XT8uZmllbGRHcm91cDtcbiAgICAgICAgY29uc3QgY2FuQWR2YW5jZSA9IHRoaXMuY2FuQWR2YW5jZVJlY3Vyc2l2ZWx5KGN1cnJlbnRGaWVsZEdyb3VwKTtcbiAgICAgICAgaWYgKCFjYW5BZHZhbmNlKSB7XG4gICAgICAgICAgdGhpcy5pc05hdmlnYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcERhdGEodHJ1ZSk7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgIGNvbnN0IGhhc0FjdGlvblN0ZXBzID0gYXdhaXQgdGhpcy5maWVsZD8ucHJvcHM/LltcbiAgICAgICAgICAnb25TZWxlY3RlZFBhZ2VDaGFuZ2luZydcbiAgICAgICAgXSh7XG4gICAgICAgICAgZnJvbTogdGhpcy5jdXJyZW50U3RlcEluZGV4LFxuICAgICAgICAgIHRvOiBuZXh0SW5kZXgsXG4gICAgICAgICAgY3VycmVudDogdGhpcy5jdXJyZW50U3RlcEluZGV4LFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLmNoZWNrSWZGbG93SXNGaW5pc2hlZCgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJ2hhc0FjdGlvblN0ZXBzJywgaGFzQWN0aW9uU3RlcHMpO1xuXG4gICAgICAgIGlmIChoYXNBY3Rpb25TdGVwcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0Zsb3dGaW5pc2hlZCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IG5leHRJbmRleDtcbiAgICAgICAgICB0aGlzLmxvYWRlZFN0ZXBzW25leHRJbmRleF0gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZmllbGQ/LnByb3BzPy5bJ29uU2VsZWN0ZWRQYWdlQ2hhbmdlZCddKHRoaXMuY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBhd2FpdCB0aGlzLnRyaWdnZXJPblBhZ2VTZWxlY3RlZEZvckluZGV4KHRoaXMuY3VycmVudFN0ZXBJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RlcD8uZmllbGRHcm91cD8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgY2FuQWR2YW5jZSA9IHRoaXMuY2FuQWR2YW5jZVJlY3Vyc2l2ZWx5KHN0ZXAuZmllbGRHcm91cCk7XG4gICAgICAgICAgaWYgKCFjYW5BZHZhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFuZEdvTmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQW5kR29OZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiYWNrJyAmJiBjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldFByZXZpb3VzU3RlcCgpO1xuICAgICAgaWYgKCF0aGlzLnNob3dTdGVwcykge1xuICAgICAgICBjb25zdCBoYXNBY3Rpb25TdGVwcyA9IGF3YWl0IHRoaXMuZmllbGQ/LnByb3BzPy5bXG4gICAgICAgICAgJ29uU2VsZWN0ZWRQYWdlQ2hhbmdpbmcnXG4gICAgICAgIF0oe1xuICAgICAgICAgIGZyb206IHRoaXMuY3VycmVudFN0ZXBJbmRleCxcbiAgICAgICAgICB0bzogcHJldkluZGV4LFxuICAgICAgICAgIGN1cnJlbnQ6IHRoaXMuY3VycmVudFN0ZXBJbmRleCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhc0FjdGlvblN0ZXBzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBcHBEYXRhKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gcHJldkluZGV4O1xuICAgICAgICB0aGlzLmxvYWRlZFN0ZXBzW3ByZXZJbmRleF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4IC0gMTtcbiAgICAgICAgY29uc3QgaGFzQWN0aW9uU3RlcHMgPSBhd2FpdCB0aGlzLmZpZWxkPy5wcm9wcz8uW1xuICAgICAgICAgICdvblNlbGVjdGVkUGFnZUNoYW5naW5nJ1xuICAgICAgICBdKHtcbiAgICAgICAgICBmcm9tOiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgICB0bzogdGFyZ2V0SW5kZXgsXG4gICAgICAgICAgY3VycmVudDogdGhpcy5zdGVwcGVyLnNlbGVjdGVkSW5kZXgsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNBY3Rpb25TdGVwcykge1xuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RlcHBlci5wcmV2aW91cygpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc05hdmlnYXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUFuZEdvTmV4dCgpIHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcERhdGEodHJ1ZSk7XG4gICAgdGhpcy5nb05leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ29OZXh0KCkge1xuICAgIGNvbnN0IGN1cnJlbnRJZHggPSB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleDtcbiAgICBjb25zdCBuZXh0SWR4ID0gY3VycmVudElkeCArIDE7XG5cbiAgICBjb25zdCBoYXNBY3Rpb25TdGVwcyA9IGF3YWl0IHRoaXMuZmllbGQ/LnByb3BzPy5bJ29uU2VsZWN0ZWRQYWdlQ2hhbmdpbmcnXSh7XG4gICAgICBmcm9tOiBjdXJyZW50SWR4LFxuICAgICAgdG86IG5leHRJZHgsXG4gICAgICBjdXJyZW50OiBjdXJyZW50SWR4LFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuY2hlY2tJZkZsb3dJc0ZpbmlzaGVkKCksXG4gICAgfSk7XG5cbiAgICBpZiAoaGFzQWN0aW9uU3RlcHMpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwRGF0YSh0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBwZXIubmV4dCgpO1xuICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4O1xuICAgIHRoaXMuZmllbGQ/LnByb3BzPy5bJ29uU2VsZWN0ZWRQYWdlQ2hhbmdlZCddKHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZGbG93SXNGaW5pc2hlZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0ZXBwZXIgJiZcbiAgICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSB0aGlzLmZpZWxkPy5maWVsZEdyb3VwPy5sZW5ndGghIC0gMVxuICAgICkge1xuICAgICAgdGhpcy5pc0Zsb3dGaW5pc2hlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTdGVwSW5kZXggPT09IHRoaXMuZmllbGQ/LmZpZWxkR3JvdXA/Lmxlbmd0aCEgLSAxKSB7XG4gICAgICB0aGlzLmlzRmxvd0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNGbG93RmluaXNoZWQpIHtcbiAgICAgIGlmICh0aGlzLmZpbmFsU3RlcEZpZWxkQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuc2hvd0ZpbmFsU3RlcCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkPy5wcm9wcz8uWydjb21wbGV0aW9uRXZlbnQnXSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRm9ybShzdGVwOiBGb3JtbHlGaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnByb3BzWydkZW1vTW9kZSddID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIGxldCBmaXJzdEludmFsaWRGaWVsZEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoc3RlcC5maWVsZEdyb3VwKSB7XG4gICAgICBzdGVwLmZpZWxkR3JvdXAuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICBpZiAoZi5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZi5maWVsZEdyb3VwLmZvckVhY2goKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgYy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICBjLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGlmIChjLmZvcm1Db250cm9sLmVycm9ycyAmJiAhYy5faGlkZSkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgaW52YWxpZCBmaWVsZCBrZXkgZm9yIHNjcm9sbGluZ1xuICAgICAgICAgICAgICBpZiAoIWZpcnN0SW52YWxpZEZpZWxkS2V5ICYmIGMua2V5KSB7XG4gICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkRmllbGRLZXkgPSBjLmtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIGZhaWxlZCBhbmQgd2UgaGF2ZSBhIGZpZWxkIHRvIHNjcm9sbCB0bywgdXNlIHRoZSBzY3JvbGwgc2VydmljZVxuICAgIGlmICghaXNWYWxpZCAmJiBmaXJzdEludmFsaWRGaWVsZEtleSkge1xuICAgICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpZWxkKGZpcnN0SW52YWxpZEZpZWxkS2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIGlzVmFsaWQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmtleSkge1xuICAgICAgcmV0dXJuIGZpZWxkLmZvcm1Db250cm9sPy52YWxpZCA/PyBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLmZpZWxkR3JvdXBcbiAgICAgID8gZmllbGQuZmllbGRHcm91cC5ldmVyeSgoZikgPT4gdGhpcy5pc1ZhbGlkKGYpKVxuICAgICAgOiB0cnVlO1xuICB9XG5cbiAgaXNDdXN0b21TdGVwKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IHRoaXMuZmllbGQuZmllbGRHcm91cCFbaW5kZXhdPy5wcm9wcz8uWydmbHV4VHlwZSddO1xuICAgIHJldHVybiBzdGVwVHlwZSA9PT0gRmx1eFR5cGUuQ3VzdG9tO1xuICB9XG5cbiAgYXN5bmMgb25TdGVwQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc2VsZWN0ZWRJbmRleCkge1xuICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyT25QYWdlU2VsZWN0ZWRGb3JJbmRleChldmVudC5zZWxlY3RlZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cmlnZ2VyT25QYWdlU2VsZWN0ZWRGb3JJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZmcgPSB0aGlzLmZpZWxkLmZpZWxkR3JvdXAhW2luZGV4XT8uZmllbGRHcm91cDtcbiAgICB0aGlzLnRyaWdnZXJPblBhZ2VTZWxlY3RlZFJlY3Vyc2l2ZWx5KGZnKTtcbiAgfVxuXG4gIGFzeW5jIHRyaWdnZXJPblBhZ2VTZWxlY3RlZFJlY3Vyc2l2ZWx5KGZnOiBhbnkpIHtcbiAgICBpZiAoZmcgJiYgZmcubGVuZ3RoID4gMCkge1xuICAgICAgZmcuZm9yRWFjaChhc3luYyAoZjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGYucHJvcHM/LlsnY29tcG9uZW50J107XG4gICAgICAgIGlmIChjb21wb25lbnQ/Lm9uUGFnZVNlbGVjdGVkQXN5bmMpIHtcbiAgICAgICAgICBhd2FpdCBjb21wb25lbnQ/Lm9uUGFnZVNlbGVjdGVkQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50Py5vblBhZ2VTZWxlY3RlZCkge1xuICAgICAgICAgIGNvbXBvbmVudD8ub25QYWdlU2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXJPblBhZ2VTZWxlY3RlZFJlY3Vyc2l2ZWx5KGYuZmllbGRHcm91cCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5BZHZhbmNlUmVjdXJzaXZlbHkoZmc6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgbGV0IGZpcnN0SW52YWxpZEZpZWxkS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChmZyAmJiBmZy5sZW5ndGggPiAwKSB7XG4gICAgICBmZy5mb3JFYWNoKGFzeW5jIChmOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGlubmVyUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZi5wcm9wcz8uWydjb21wb25lbnQnXTtcbiAgICAgICAgaWYgKGNvbXBvbmVudD8uY2FuQWR2YW5jZSkge1xuICAgICAgICAgIGlubmVyUmVzdWx0ID0gY29tcG9uZW50Py5jYW5BZHZhbmNlKCk7XG4gICAgICAgICAgaWYgKGlubmVyUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFRyeSB0byBnZXQgdGhlIGZpZWxkIGtleSBmb3Igc2Nyb2xsaW5nXG4gICAgICAgICAgICBpZiAoIWZpcnN0SW52YWxpZEZpZWxkS2V5ICYmIGYua2V5KSB7XG4gICAgICAgICAgICAgIGZpcnN0SW52YWxpZEZpZWxkS2V5ID0gZi5rZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlubmVyUmVzdWx0ID0gdGhpcy5jYW5BZHZhbmNlUmVjdXJzaXZlbHkoZi5maWVsZEdyb3VwKTtcbiAgICAgICAgaWYgKGlubmVyUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIHZhbGlkYXRpb24gZmFpbGVkIGFuZCB3ZSBoYXZlIGEgZmllbGQgdG8gc2Nyb2xsIHRvLCB1c2UgdGhlIHNjcm9sbCBzZXJ2aWNlXG4gICAgaWYgKCF2YWxpZCAmJiBmaXJzdEludmFsaWRGaWVsZEtleSkge1xuICAgICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpZWxkKGZpcnN0SW52YWxpZEZpZWxkS2V5KTtcbiAgICB9IGVsc2UgaWYgKCF2YWxpZCkge1xuICAgICAgLy8gRmFsbGJhY2s6IHRyeSB0byBzY3JvbGwgdG8gZmlyc3QgZXJyb3IgdXNpbmcgdGhlIGNvbGxlY3RvciBmb3JtJ3MgbWV0aG9kXG4gICAgICB0aGlzLmNvbGxlY3RvckZvcm0uc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIGdldENvbXBvbmVudHNXaXRoRGVmYXVsdExhYmVscygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgW0ZsdXhUeXBlLkt5Y106ICdLeWMnLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJzaG93U3RlcHM7IGVsc2Ugc2luZ2xlU3RlcFRlbXBsYXRlXCI+XG4gIDxkaXYgW25nU3R5bGVdPVwiY29uY2F0ZW5hdGVkRm9ybVN0eWxlXCI+XG4gICAgPGZvcm1seS1maWVsZFxuICAgICAgKm5nSWY9XCJzaG93RmluYWxTdGVwXCJcbiAgICAgIFtmaWVsZF09XCJmaW5hbFN0ZXBGaWVsZENvbmZpZ1wiXG4gICAgPjwvZm9ybWx5LWZpZWxkPlxuICA8L2Rpdj5cblxuICA8bWF0LWhvcml6b250YWwtc3RlcHBlclxuICAgICNzdGVwcGVyXG4gICAgKm5nSWY9XCIhc2hvd0ZpbmFsU3RlcFwiXG4gICAgW2xpbmVhcl09XCJ0cnVlXCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU3RlcENoYW5nZSgkZXZlbnQpXCJcbiAgICBbbmdTdHlsZV09XCJjb25jYXRlbmF0ZWRGb3JtU3R5bGVcIlxuICA+XG4gICAgPG1hdC1zdGVwICpuZ0Zvcj1cImxldCBzdGVwIG9mIGZpZWxkLmZpZWxkR3JvdXA7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsICpuZ0lmPVwic2hvd1N0ZXBzTGFiZWxzXCI+XG4gICAgICAgIHt7IHN0ZXAucHJvcHM/LmxhYmVsIH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT0gJ3RvcCdcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25zQ29udGFpbmVyXCJcbiAgICAgIC8+XG5cbiAgICAgIDxoMyBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmZvbnQtaGVhZGluZy0zJ10gfHwge31cIj5cbiAgICAgICAge3sgc3RlcC5wcm9wcz8uZGVzY3JpcHRpb24gfX1cbiAgICAgIDwvaDM+XG4gICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJzdGVwXCI+PC9mb3JtbHktZmllbGQ+XG5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJidXR0b25zVmVydGljYWxQb3NpdGlvbiA9PSAnYm90dG9tJ1wiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ1dHRvbnNDb250YWluZXJcIlxuICAgICAgLz5cbiAgICA8L21hdC1zdGVwPlxuICAgIDwhLS0gPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXNob3dTdGVwc0NvdW50ZXJcIiBtYXRTdGVwcGVySWNvbj1cIm51bWJlclwiPlxuICAgICAgPG1hdC1pY29uPnJhZGlvX2J1dHRvbl9jaGVja2VkPC9tYXQtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPiAtLT5cbiAgPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlU3RlcFRlbXBsYXRlPlxuICA8ZGl2IFtuZ1N0eWxlXT1cImNvbmNhdGVuYXRlZEZvcm1TdHlsZVwiPlxuICAgIDxmb3JtbHktZmllbGRcbiAgICAgICpuZ0lmPVwic2hvd0ZpbmFsU3RlcFwiXG4gICAgICBbZmllbGRdPVwiZmluYWxTdGVwRmllbGRDb25maWdcIlxuICAgID48L2Zvcm1seS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNpbmdsZS1zdGVwLWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCIhc2hvd0ZpbmFsU3RlcFwiXG4gICAgW25nU3R5bGVdPVwiY29uY2F0ZW5hdGVkRm9ybVN0eWxlXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyLXdyYXBwZXJcIlxuICAgICAgKm5nSWY9XCJzaG93UHJvZ3Jlc3NCYXJcIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAnYm9yZGVyLXJhZGl1cyc6IHByb2dyZXNzQmFyU3R5bGVzLmJvcmRlclJhZGl1cyxcbiAgICAgICAgIGhlaWdodDogcHJvZ3Jlc3NCYXJTdHlsZXMuaGVpZ2h0LFxuICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWZpbGxcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgd2lkdGg6ICgoY3VycmVudFN0ZXBJbmRleCArIDEpIC8gdG90YWxTdGVwc0NvdW50KSAqIDEwMCArICclJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBnZXRQcm9ncmVzc0JhckZpbGwoKSxcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgICB9XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtc3RlcC1oZWFkZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzaW5nbGUtc3RlcC1pbmRpY2F0b3JcIlxuICAgICAgICAqbmdJZj1cInNob3dTdGVwc0NvdW50ZXI7XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwLWN1cnJlbnRcIj57eyBjdXJyZW50U3RlcEluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwLXNlcGFyYXRvclwiPi88L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RlcC10b3RhbFwiPnt7IHRvdGFsU3RlcHNDb3VudCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGgxICpuZ0lmPVwic2hvd1N0ZXBzTGFiZWxzXCIgY2xhc3M9XCJzaW5nbGUtc3RlcC1sYWJlbFwiICBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmZvbnQtaGVhZGluZy0xJ10gfHwge31cIj5cbiAgICAgICAge3sgZmllbGQuZmllbGRHcm91cCFbY3VycmVudFN0ZXBJbmRleF0hLnByb3BzIS5sYWJlbCB9fVxuICAgICAgPC9oMT5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT0gJ3RvcCdcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uc0NvbnRhaW5lclwiXG4gICAgLz5cblxuICAgIDxoMyBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmZvbnQtaGVhZGluZy0zJ10gfHwge31cIj5cbiAgICAgIHt7IGZpZWxkIS5maWVsZEdyb3VwIVtjdXJyZW50U3RlcEluZGV4XSEucHJvcHMhLmRlc2NyaXB0aW9uIH19XG4gICAgPC9oMz5cbiAgICA8Zm9ybWx5LWZpZWxkXG4gICAgICAqbmdJZj1cImxvYWRlZFN0ZXBzW2N1cnJlbnRTdGVwSW5kZXhdXCJcbiAgICAgIFtmaWVsZF09XCJmaWVsZCEuZmllbGRHcm91cCFbY3VycmVudFN0ZXBJbmRleF1cIlxuICAgID48L2Zvcm1seS1maWVsZD5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT0gJ2JvdHRvbSdcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uc0NvbnRhaW5lclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNDb250YWluZXI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgYnV0dG9uc1RlbXBsYXRlO1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBpbmRleDogY3VycmVudFN0ZXBJbmRleCxcbiAgICAgICAgc3RlcDogZmllbGQhLmZpZWxkR3JvdXAhW2N1cnJlbnRTdGVwSW5kZXhdXG4gICAgICB9XG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGVtcGxhdGUgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc3RlcD1cInN0ZXBcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIWlzRmxvd0ZpbmlzaGVkXCJcbiAgICBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCJcbiAgICBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmJ1dHRvbnMtY29udGFpbmVyJ10gfHwge31cIlxuICA+XG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gKm5nSWY9XCJpc0RlYnVnXCIgKGNsaWNrKT1cInJldHJ5Q2xpY2soc3RlcClcIj5cbiAgICAgIERlYnVnIFJldHJ5XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNHcm91cHNbaW5kZXhdXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlID09PSAnc3VibWl0JyA/ICdzdWJtaXQnIDogJ2J1dHRvbidcIlxuICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2soYnV0dG9uLnR5cGUsIHN0ZXApXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZCB8fCBpc1NhdmluZ1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cImJ1dHRvbi5zdHlsZVwiXG4gICAgICA+XG4gICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqbmdJZj1cImlzTmF2aWdhdGluZyB8fCBpc1NhdmluZ1wiIGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XG4gICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjMyXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAqbmdJZj1cImlzRGVidWdcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soJ25leHQnLCBzdGVwKVwiPlxuICAgICAgRGVidWcgTmV4dFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
778
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWZpZWxkLXN0ZXBwZXIvZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtbHkvZm9ybWx5LWZpZWxkLXN0ZXBwZXIvZm9ybWx5LWZpZWxkLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUVMLFNBQVMsRUFHVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFnQixLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUNMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxFQUNYLGVBQWUsR0FFaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7OztBQWdCaEYsTUFBTSxPQUFPLDJCQUNYLFNBQVEsU0FBUztJQStCakIsWUFDVSxzQkFBOEMsRUFDOUMsYUFBcUMsRUFDckMsR0FBc0IsRUFDdEIsb0JBQTBDO1FBRWxELEtBQUssRUFBRSxDQUFDO1FBTEEsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxrQkFBYSxHQUFi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RkN4Q3ZCLDI3SUFrSkE7OzRGRDdHYSwyQkFBMkI7a0JBWnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGFBR3pCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxzQkFBc0I7NEJBQy9CLFFBQVEsRUFBRSxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRTt5QkFDakQ7d0JBQ0Qsc0JBQXNCO3FCQUN2QjttTUFLc0IsT0FBTztzQkFBN0IsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1RFUFBFUl9HTE9CQUxfT1BUSU9OUyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0aW1lciwgZmlyc3RWYWx1ZUZyb20sIGNhdGNoRXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBcHBEYXRhLFxuICBGbHV4VHlwZSxcbiAgQXBwRGF0YVN0ZXAsXG4gIEFwcERhdGFTZWN0aW9uLFxuICBBcHBEYXRhQ29udHJvbCxcbiAgQXBwRGF0YUZpbGwsXG4gIFN0ZXBDb250cm9sVHlwZSxcbiAgRGljdGlvbmFyeUNvbnRyb2xEYXRhLFxufSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybXMubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbGxlY3RvckZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9vcmlnaW4tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2Nyb2xsVG9FcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zY3JvbGwtdG8tZXJyb3Iuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1mb3JtbHktZmllbGQtc3RlcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtbHktZmllbGQtc3RlcHBlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm1seS1maWVsZC1zdGVwcGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNURVBQRVJfR0xPQkFMX09QVElPTlMsXG4gICAgICB1c2VWYWx1ZTogeyBkaXNwbGF5RGVmYXVsdEluZGljYXRvclR5cGU6IGZhbHNlIH0sXG4gICAgfSxcbiAgICBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlGaWVsZFN0ZXBwZXJDb21wb25lbnRcbiAgZXh0ZW5kcyBGaWVsZFR5cGVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoTWF0U3RlcHBlcikgc3RlcHBlciE6IE1hdFN0ZXBwZXI7XG4gIGJ1dHRvbnNHcm91cHM6IGFueVtdW10gPSBbXTtcbiAgc2hvd1N0ZXBzOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd1N0ZXBzTGFiZWxzOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd1N0ZXBzQ291bnRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dCdXR0b25zT25Ub3A6IGJvb2xlYW47XG4gIHNob3dQcm9ncmVzc0JhcjogYm9vbGVhbjtcbiAgc2hvd0ZpbmFsU3RlcDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Zsb3dGaW5pc2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBhcHBEYXRhOiBBcHBEYXRhO1xuICBpc0Rpc3BsYXlNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOYXZpZ2F0aW9uSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBjdXJyZW50U3RlcEluZGV4OiBudW1iZXIgPSAwO1xuICBsb2FkZWRTdGVwczogYm9vbGVhbltdID0gW107XG4gIHByaXZhdGUgY29uZmlnVXBkYXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdmlzaWJsZUZpZWxkc1VwZGF0ZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB1cGRhdGVBbmRHb05leHRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBnb05leHRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgY29uY2F0ZW5hdGVkRm9ybVN0eWxlOiBhbnkgPSB7fTtcbiAgYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb246IHN0cmluZyA9ICdib3R0b20nO1xuXG4gIGlzTmF2aWdhdGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZpbmFsU3RlcEZpZWxkQ29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZztcbiAgZmlsdGVyZWRWaXNpYmxlU3RlcHM6IGFueVtdID0gW107XG4gIHByb2dyZXNzQmFyU3R5bGVzOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uRGF0YVNlcnZpY2U6IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb2xsZWN0b3JGb3JtOiBDb2xsZWN0b3JGb3JtQ29tcG9uZW50LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNjcm9sbFRvRXJyb3JTZXJ2aWNlOiBTY3JvbGxUb0Vycm9yU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcm9wc1snY29tcG9uZW50J10gPSB0aGlzO1xuICAgIHRoaXMuYXBwbHlQcm9ncmVzc0JhclN0eWxlcygpO1xuICAgIHRoaXMuY29uZmlnVXBkYXRlU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuY29sbGVjdG9yRm9ybS5mb3JtbHlDb25maWdVcGRhdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICAgIHRoaXMuZmllbGQuZmllbGRHcm91cCA9IHRoaXMuZXh0cmFjdEZpbmFsU3RlcElmTmVjZXNzYXJ5KFxuICAgICAgICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXBCdXR0b25zKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMudmlzaWJsZUZpZWxkc1VwZGF0ZWRTdWJzY3JpcHRpb24gPVxuICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLnZpc2libGVGaWVsZHNVcGRhdGVkLnN1YnNjcmliZSgodmlzaWJsZUZpZWxkcykgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlcmVkVmlzaWJsZVN0ZXBzID0gdmlzaWJsZUZpZWxkcztcbiAgICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVBbmRHb05leHRTdWJzY3JpcHRpb24gPVxuICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmZvcm1seVVwZGF0ZUFuZEdvTmV4dC5zdWJzY3JpYmUoYXN5bmMgKGUpID0+IHtcbiAgICAgICAgaWYgKGUgJiYgZS5zZWxlY3RlZE9mZmVySWQgJiYgdGhpcy5hcHBEYXRhPy5maWxsRGF0YSkge1xuICAgICAgICAgIHRoaXMuYXBwRGF0YS5maWxsRGF0YS5tZXRhZGF0YS5vZmZlcklkID0gZS5zZWxlY3RlZE9mZmVySWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuZmllbGQuZmllbGRHcm91cCFbdGhpcy5jdXJyZW50U3RlcEluZGV4XTtcbiAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZUFzeW5jKCduZXh0Jywgc3RlcCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ29OZXh0U3Vic2NyaXB0aW9uID0gdGhpcy5jb2xsZWN0b3JGb3JtLmZvcm1seUdvTmV4dC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgIHRoaXMuZ29OZXh0KCk7XG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5pbml0U3RlcCgpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuZmllbGQpIHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwRGF0YShmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGF3YWl0IHRoaXMuY3JlYXRlQXBwRGF0YSh0aGlzLmZpZWxkLnByb3BzKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcEluZGV4ID49IHRoaXMudG90YWxTdGVwc0NvdW50KSB7XG4gICAgICB0aGlzLnNob3dGaW5hbFN0ZXAgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93U3RlcHMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd1N0ZXBzQ291bnRlciA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGVwcGVyKSB7XG4gICAgICB0aGlzLnN0ZXBwZXIubGluZWFyID0gZmFsc2U7XG4gICAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IHRoaXMuY3VycmVudFN0ZXBJbmRleDtcbiAgICAgIGNvbnN0IHN0ZXBzID0gdGhpcy5zdGVwcGVyLl9zdGVwcy50b0FycmF5KCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VycmVudFN0ZXBJbmRleDsgaSsrKSB7XG4gICAgICAgIHN0ZXBzW2ldLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdGVwcGVyLmxpbmVhciA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmllbGQuZmllbGRHcm91cCAmJiB0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkZWRTdGVwcyA9IEFycmF5KHRoaXMuZmllbGQuZmllbGRHcm91cC5sZW5ndGgpLmZpbGwoZmFsc2UpO1xuICAgICAgdGhpcy5sb2FkZWRTdGVwc1t0aGlzLmN1cnJlbnRTdGVwSW5kZXhdID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNob3dTdGVwcyB8fCB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPT0gMCkge1xuICAgICAgdGhpcy50cmlnZ2VyT25QYWdlU2VsZWN0ZWRGb3JJbmRleCh0aGlzLmN1cnJlbnRTdGVwSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZ1VwZGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb25maWdVcGRhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXBkYXRlQW5kR29OZXh0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZUFuZEdvTmV4dFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nb05leHRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZ29OZXh0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpc2libGVGaWVsZHNVcGRhdGVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpc2libGVGaWVsZHNVcGRhdGVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdFN0ZXAoKSB7XG4gICAgaWYgKHRoaXMuZmllbGQpIHtcbiAgICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwID0gdGhpcy5leHRyYWN0RmluYWxTdGVwSWZOZWNlc3NhcnkoXG4gICAgICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubG9hZGVkU3RlcHMgPSBBcnJheSh0aGlzLmZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoKS5maWxsKGZhbHNlKTtcbiAgICAgICAgdGhpcy5sb2FkZWRTdGVwc1t0aGlzLmN1cnJlbnRTdGVwSW5kZXhdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpZWxkLnByb3BzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRWaXNpYmxlU3RlcHMgPSB0aGlzLmZpZWxkLnByb3BzWydmaWx0ZXJlZEZsdXgnXTtcbiAgICAgICAgdGhpcy5pc0RlYnVnID0gdGhpcy5maWVsZC5wcm9wc1snaXNEZWJ1ZyddO1xuICAgICAgICBjb25zdCBzdGVwU2V0dGluZ3MgPSB0aGlzLmZpZWxkLnByb3BzWydzdGVwc1NldHRpbmdzJ107XG4gICAgICAgIGlmIChzdGVwU2V0dGluZ3MpIHtcbiAgICAgICAgICB0aGlzLnNob3dTdGVwcyA9IHN0ZXBTZXR0aW5ncy5zaG93QWxsU3RlcHM7XG4gICAgICAgICAgdGhpcy5zaG93U3RlcHNDb3VudGVyID0gc3RlcFNldHRpbmdzLnNob3dDb3VudGVyO1xuICAgICAgICAgIHRoaXMuc2hvd1N0ZXBzTGFiZWxzID0gc3RlcFNldHRpbmdzLnNob3dMYWJlbHM7XG4gICAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPSBzdGVwU2V0dGluZ3Muc2hvd1Byb2dyZXNzQmFyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlc2lnbkNvbmZpZyA9IHRoaXMuZmllbGQucHJvcHNbJ2Rlc2lnbkNvbmZpZyddO1xuICAgICAgICBpZiAoZGVzaWduQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5zaG93QnV0dG9uc09uVG9wID1cbiAgICAgICAgICAgIGRlc2lnbkNvbmZpZy5idXR0b25zVmVydGljYWxQb3NpdGlvbiA9PT0gJ3RvcCc7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLmZpZWxkLnByb3BzWydkZXNpZ24nXSlcbiAgICAgICAgICAuZmlsdGVyKChpKSA9PiBpWzBdLnN0YXJ0c1dpdGgoJy5mb3JtJykpXG4gICAgICAgICAgLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3A6IGFueSA9IGlbMV07XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wKS5mb3JFYWNoKChqKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY29uY2F0ZW5hdGVkRm9ybVN0eWxlW2pdID0gcHJvcFtqXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPVxuICAgICAgICAgIHRoaXMuZmllbGQucHJvcHNbJ2Rlc2lnbiddWycuYnV0dG9ucy1jb250YWluZXInXVsnYWxpZ24taXRlbXMnXSA9PVxuICAgICAgICAgICAgJ2ZsZXgtc3RhcnQnXG4gICAgICAgICAgICA/ICd0b3AnXG4gICAgICAgICAgICA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwQnV0dG9ucygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b3RhbFN0ZXBzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5maWVsZD8uZmllbGRHcm91cD8uZmlsdGVyKFxuICAgICAgICAoc3RlcCkgPT4gc3RlcC5wcm9wcz8uWydmbHV4VHlwZSddICE9PSBGbHV4VHlwZS5GaW5hbFxuICAgICAgKS5sZW5ndGggPz8gMFxuICAgICk7XG4gIH1cblxuICBleHRyYWN0RmluYWxTdGVwSWZOZWNlc3NhcnkoXG4gICAgZmllbGRDb25maWdzOiBGb3JtbHlGaWVsZENvbmZpZ1tdXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xuICAgIGxldCBmaWx0ZXJlZENvbmZpZzogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgIHRoaXMuZmllbGQuZmllbGRHcm91cD8uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgaWYgKGYucHJvcHMgJiYgZi5wcm9wc1snZmx1eFR5cGUnXSA9PSBGbHV4VHlwZS5GaW5hbCkge1xuICAgICAgICB0aGlzLmZpbmFsU3RlcEZpZWxkQ29uZmlnID0gZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlcmVkQ29uZmlnLnB1c2goZik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkQ29uZmlnO1xuICB9XG5cbiAgY3JlYXRlRmllbGRHcm91cEJ1dHRvbnMoKSB7XG4gICAgaWYgKHRoaXMuZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgdGhpcy5idXR0b25zR3JvdXBzID0gW107XG4gICAgICB0aGlzLmZpZWxkLmZpZWxkR3JvdXAuZm9yRWFjaCgoZmcsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gdGhpcy5maWVsZC5maWVsZEdyb3VwIS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGxldCBidG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZmcucHJvcHMpIHtcbiAgICAgICAgICBjb25zdCBmbHV4VHlwZSA9IGZnLnByb3BzWydmbHV4VHlwZSddO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5LeWMgfHxcbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5HZW5lcmF0ZURvY3VtZW50IHx8XG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuU2lnbiB8fFxuICAgICAgICAgICAgZmx1eFR5cGUgPT09IEZsdXhUeXBlLkVtYWlsIHx8XG4gICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuUGhvbmUgfHxcbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5PcGVuQmFua2luZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5idXR0b25zR3JvdXBzLnB1c2goW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ0bkRpc2FibGVkID1cbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5LeWMgfHxcbiAgICAgICAgICAgIGZsdXhUeXBlID09PSBGbHV4VHlwZS5QaG9uZSB8fFxuICAgICAgICAgICAgZmx1eFR5cGUgPT09IEZsdXhUeXBlLkVtYWlsO1xuICAgICAgICAgIGZnLnByb3BzWydidXR0b25zRGlzYWJsZWQnXSA9PT0gdHJ1ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZmx1eFR5cGUgPT09IEZsdXhUeXBlLkt5YyB8fFxuICAgICAgICAgICAgICBmbHV4VHlwZSA9PT0gRmx1eFR5cGUuUGhvbmUgfHxcbiAgICAgICAgICAgICAgZmx1eFR5cGUgPT09IEZsdXhUeXBlLkVtYWlsKSAmJlxuICAgICAgICAgICAgZmcucHJvcHNbJ2J1dHRvbnNEaXNhYmxlZCddID09PSBmYWxzZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgYnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzV2l0aERlZmF1bHRMYWJlbHMgPVxuICAgICAgICAgICAgdGhpcy5nZXRDb21wb25lbnRzV2l0aERlZmF1bHRMYWJlbHMoKTtcbiAgICAgICAgICBpZiAoY29tcG9uZW50c1dpdGhEZWZhdWx0TGFiZWxzW2ZsdXhUeXBlXSkge1xuICAgICAgICAgICAgZmcucHJvcHNbJ2xhYmVsJ10gPSBjb21wb25lbnRzV2l0aERlZmF1bHRMYWJlbHNbZmx1eFR5cGVdO1xuICAgICAgICAgICAgZmcucHJvcHNbJ2Rlc2NyaXB0aW9uJ10gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmcucHJvcHM/LlsnZmx1eFR5cGUnXSA9PT0gRmx1eFR5cGUuVmlld09mZmVyIHx8XG4gICAgICAgICAgZmcucHJvcHM/LlsnZmx1eFR5cGUnXSA9PT0gRmx1eFR5cGUuUGF1c2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8xMj1saXN0IG9mZmVyc1xuICAgICAgICAgIHRoaXMuYnV0dG9uc0dyb3Vwcy5wdXNoKFtdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBidG5zID0gdGhpcy5jcmVhdGVCdXR0b25zKGZnLCBpLCBpc0xhc3QsIGJ0bkRpc2FibGVkKTtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wc1snZGVtb01vZGUnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYnRucy5mb3JFYWNoKChiOiB7IHR5cGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChiLnR5cGUgPT09ICdzdWJtaXQnKSB7XG4gICAgICAgICAgICAgICAgYnRucy5zcGxpY2UoYnRucy5pbmRleE9mKGIpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzWydub0J1dHRvbnNJblZpZXcnXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgYnRucy5zcGxpY2UoMCwgYnRucy5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmJ1dHRvbnNHcm91cHMucHVzaChidG5zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlQXBwRGF0YShwcm9wczogYW55KSB7XG4gICAgY29uc3QgYXBwRGF0YUlkID0gcHJvcHNbJ2FwcERhdGFJZCddO1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBwcm9wc1snYXBwbGljYXRpb25JZCddIHx8IDA7XG4gICAgY29uc3QgY3VycmVudFN0ZXBJZCA9XG4gICAgICBwcm9wcy5tZXRhRGF0YT8uY3VycmVudFN0ZXBJZCB8fCBwcm9wcy5mbHV4WzBdPy5pZGVudGlmaWVyO1xuXG4gICAgaWYgKHByb3BzWydoYXNEaWN0aW9uYXJ5RGVwZW5kZW50U3RlcHMnXSkge1xuICAgICAgYXdhaXQgdGltZXIoMTUwKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwSW5kZXggPVxuICAgICAgdGhpcy5maWVsZC5maWVsZEdyb3VwPy5maW5kSW5kZXgoXG4gICAgICAgIChzKSA9PiBzLnByb3BzPy5bJ3N0ZXBJZCddID09PSBjdXJyZW50U3RlcElkXG4gICAgICApIHx8IDA7XG4gICAgdGhpcy5pc0Rpc3BsYXlNb2RlID0gcHJvcHNbJ2lzRGlzcGxheU1vZGUnXSB8fCBmYWxzZTtcblxuICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9XG4gICAgICBzdGVwSW5kZXggPj0gMCAmJiAhdGhpcy5pc0Rpc3BsYXlNb2RlID8gc3RlcEluZGV4IDogMDtcblxuICAgIGNvbnN0IHN0YXR1c0lkID0gcHJvcHNbJ3N0YXR1c0lkJ10gfHwgJyc7XG4gICAgY29uc3QgZGVmYXVsdExhbmd1YWdlID0gcHJvcHNbJ2RlZmF1bHRMYW5ndWFnZSddO1xuXG4gICAgY29uc3QgZmx1eCA9IChwcm9wc1snZmx1eCddIHx8IFtdKS5tYXAoXG4gICAgICAoc3RlcDogYW55KSA9PlxuICAgICAgICBuZXcgQXBwRGF0YVN0ZXAoXG4gICAgICAgICAgc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICAgIHN0ZXAudHlwZSxcbiAgICAgICAgICAoc3RlcC5zZWN0aW9ucyB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKHNlY3Rpb246IGFueSkgPT5cbiAgICAgICAgICAgICAgbmV3IEFwcERhdGFTZWN0aW9uKFxuICAgICAgICAgICAgICAgIHNlY3Rpb24uaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAoc2VjdGlvbi5jb250cm9scyB8fCBbXSkubWFwKFxuICAgICAgICAgICAgICAgICAgKGNvbnRyb2w6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgICAgbmV3IEFwcERhdGFDb250cm9sKFxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmZpbGxWYWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcbiAgICBjb25zdCBvZmZlcklkID0gcHJvcHM/LmZpbGxEYXRhPy5tZXRhZGF0YT8ub2ZmZXJJZCB8fCAnJztcbiAgICBjb25zdCBpc1N1Ym1pdHRlZCA9IHByb3BzPy5maWxsRGF0YT8ubWV0YWRhdGE/LmlzU3VibWl0dGVkIHx8IGZhbHNlO1xuXG4gICAgY29uc3QgZmlsbERhdGEgPSBuZXcgQXBwRGF0YUZpbGwoXG4gICAgICBhcHBEYXRhSWQsXG4gICAgICBhcHBsaWNhdGlvbklkLFxuICAgICAgY3VycmVudFN0ZXBJZCxcbiAgICAgIHN0YXR1c0lkLFxuICAgICAgZGVmYXVsdExhbmd1YWdlLFxuICAgICAgZmx1eCxcbiAgICAgIG9mZmVySWQsXG4gICAgICBpc1N1Ym1pdHRlZFxuICAgICk7XG5cbiAgICB0aGlzLmFwcERhdGEgPSBuZXcgQXBwRGF0YSh7XG4gICAgICBhcHBEYXRhSWQ6IGFwcERhdGFJZCxcbiAgICAgIGFwcENvbmZpZ3VyYXRpb25JZDogYXBwbGljYXRpb25JZCxcbiAgICAgIGZpbGxEYXRhOiBmaWxsRGF0YSxcbiAgICAgIGluaXRGbG93VmFsdWVzOiBwcm9wc1snaW5pdEZsb3dWYWx1ZXMnXSxcbiAgICAgIHdpdGhOZXh0U3RlcDogZmFsc2UsXG4gICAgICBibG9ja1ByZXZpb3VzU3RlcDogcHJvcHNbJ2Jsb2NrUHJldmlvdXNTdGVwJ10gPz8gZmFsc2UsXG4gICAgICBlbnY6IHByb3BzWydlbnYnXSxcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5pc0Rpc3BsYXlNb2RlICYmICFwcm9wc1snZmlsbERhdGEnXSkge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlQXBwRGF0YSgpO1xuICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmZpbGxEYXRhID0gdGhpcy5hcHBEYXRhLmZpbGxEYXRhO1xuICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0b3JGb3JtLmluaXRBc3luYygpO1xuXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZUFwcERhdGEoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSB8fCB0aGlzLnByb3BzWydkZW1vTW9kZSddID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0RlbW8gTW9kZV0gU2tpcHBpbmcgc2F2ZUFwcERhdGEgcmVxdWVzdC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLnNhdmVBcHAodGhpcy5hcHBEYXRhKS5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBBcHBEYXRhJywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmFwcERhdGEuZmlsbERhdGEgPSBKU09OLnBhcnNlKGRhdGEuZmlsbERhdGEpO1xuICAgICAgICB0aGlzLmFwcERhdGEuYmxvY2tQcmV2aW91c1N0ZXAgPSBkYXRhLmJsb2NrUHJldmlvdXNTdGVwO1xuICAgICAgICB0aGlzLmNvbGxlY3RvckZvcm0uZm9ybWx5Q29uZmlnVXBkYXRlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkIGR1cmluZyBzYXZlU3RlcCcsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFByZXZpb3VzU3RlcCgpIHtcbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlIHx8IHRoaXMucHJvcHNbJ2RlbW9Nb2RlJ10gPT09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbRGVtbyBNb2RlXSBTa2lwcGluZyBnZXRQcmV2aW91c1N0ZXAgcmVxdWVzdC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UuZ2V0UHJldmlvdXNTdGVwKHRoaXMuYXBwRGF0YS5hcHBEYXRhSWQpLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyB0aGUgcHJldmlvdXNTdGVwJywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgIHRoaXMuYXBwRGF0YS5maWxsRGF0YSA9IEpTT04ucGFyc2UoZGF0YS5maWxsRGF0YSk7XG4gICAgICAgICAgdGhpcy5hcHBEYXRhLmJsb2NrUHJldmlvdXNTdGVwID0gZGF0YS5ibG9ja1ByZXZpb3VzU3RlcDtcbiAgICAgICAgICB0aGlzLmNvbGxlY3RvckZvcm0uZm9ybWx5Q29uZmlnVXBkYXRlZC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvY2N1cnJlZCBkdXJpbmcgZ2V0UHJldmlvdXNTdGVwJywgZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlQXBwRGF0YVN0ZXAoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXNwbGF5TW9kZSB8fCB0aGlzLnByb3BzWydkZW1vTW9kZSddID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0RlbW8gTW9kZV0gU2tpcHBpbmcgc2F2ZUFwcERhdGFTdGVwIHJlcXVlc3QuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHZpc2libGUgc3RlcCBiYXNlZCBvbiBjdXJyZW50U3RlcEluZGV4XG5cbiAgICBjb25zdCBjdXJyZW50VmlzaWJsZVN0ZXAgPSB0aGlzLmZpbHRlcmVkVmlzaWJsZVN0ZXBzW3RoaXMuY3VycmVudFN0ZXBJbmRleF07XG5cbiAgICBpZiAoIWN1cnJlbnRWaXNpYmxlU3RlcCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyBjdXJyZW50IHZpc2libGUgc3RlcCBmb3VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcCBpbiBmaWxsRGF0YS5mbHV4IGJhc2VkIG9uIHRoZSB2aXNpYmxlIHN0ZXAgaWRlbnRpZmllclxuICAgIGxldCBjdXJyZW50U3RlcCA9IHRoaXMuYXBwRGF0YS5maWxsRGF0YT8uZmx1eC5maW5kKFxuICAgICAgKHMpID0+IHMuc3RlcElkID09PSBjdXJyZW50VmlzaWJsZVN0ZXAuaWRlbnRpZmllclxuICAgICk7XG5cbiAgICAvLyBJZiB3ZSBjYW4ndCBmaW5kIGl0IGJ5IGlkZW50aWZpZXIsIGNyZWF0ZSBpdCBvciB1cGRhdGUgbWV0YWRhdGFcbiAgICBpZiAoIWN1cnJlbnRTdGVwICYmIHRoaXMuYXBwRGF0YS5maWxsRGF0YSkge1xuICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50U3RlcElkIGluIG1ldGFkYXRhIHRvIG1hdGNoIHRoZSBjdXJyZW50IHZpc2libGUgc3RlcFxuICAgICAgdGhpcy5hcHBEYXRhLmZpbGxEYXRhLm1ldGFkYXRhLmN1cnJlbnRTdGVwSWQgPVxuICAgICAgICBjdXJyZW50VmlzaWJsZVN0ZXAuaWRlbnRpZmllcjtcblxuICAgICAgLy8gVHJ5IHRvIGZpbmQgaXQgYWdhaW4gYWZ0ZXIgdXBkYXRpbmcgbWV0YWRhdGFcbiAgICAgIGN1cnJlbnRTdGVwID0gdGhpcy5hcHBEYXRhLmZpbGxEYXRhLmZsdXguZmluZChcbiAgICAgICAgKHMpID0+IHMuc3RlcElkID09PSBjdXJyZW50VmlzaWJsZVN0ZXAuaWRlbnRpZmllclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTYXZpbmcgc3RlcCBkYXRhIGZvciBzdGVwOicsXG4gICAgICBjdXJyZW50VmlzaWJsZVN0ZXAuaWRlbnRpZmllcixcbiAgICAgICdTdGVwIGRhdGE6JyxcbiAgICAgIGN1cnJlbnRTdGVwXG4gICAgKTtcblxuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlXG4gICAgICAgIC5zYXZlU3RlcChcbiAgICAgICAgICB0aGlzLmFwcERhdGEuYXBwRGF0YUlkLFxuICAgICAgICAgIGN1cnJlbnRTdGVwLFxuICAgICAgICAgIHRoaXMuYXBwRGF0YS5maWxsRGF0YT8ubWV0YWRhdGEub2ZmZXJJZFxuICAgICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgQXBwRGF0YScsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgKVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmNvbGxlY3RvckZvcm0uZmlsbERhdGEgPSB0aGlzLmFwcERhdGEuZmlsbERhdGEgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgZGF0YS5maWxsRGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5hcHBEYXRhLmJsb2NrUHJldmlvdXNTdGVwID0gZGF0YS5ibG9ja1ByZXZpb3VzU3RlcDtcbiAgICAgICAgICB0aGlzLmNvbGxlY3RvckZvcm0uZm9ybWx5Q29uZmlnVXBkYXRlZC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2xlYXIgdGhlIHNhdmluZyBhZnRlciBhY3Rpb25zIGZsYWdcbiAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmNsZWFyU2F2aW5nQWZ0ZXJBY3Rpb25zU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvY2N1cnJlZCBkdXJpbmcgc2F2ZVN0ZXAnLCBlcnJvcik7XG4gICAgICAgIC8vIENsZWFyIHRoZSBzYXZpbmcgYWZ0ZXIgYWN0aW9ucyBmbGFnIG9uIGVycm9yIGFzIHdlbGxcbiAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmNsZWFyU2F2aW5nQWZ0ZXJBY3Rpb25zU3RhdGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwRGF0YShzYXZlQ2hhbmdlczogYm9vbGVhbikge1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm0udmFsdWU7XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdmlzaWJsZSBzdGVwIHRvIGVuc3VyZSB3ZSdyZSB1cGRhdGluZyB0aGUgcmlnaHQgc3RlcCBkYXRhXG4gICAgY29uc3QgY3VycmVudFZpc2libGVTdGVwID0gdGhpcy5maWx0ZXJlZFZpc2libGVTdGVwc1t0aGlzLmN1cnJlbnRTdGVwSW5kZXhdO1xuXG4gICAgY29uc3QgZmx1eCA9ICh0aGlzLmZpZWxkPy5wcm9wcz8uWydmbHV4J10gfHwgW10pLm1hcChcbiAgICAgIChzdGVwOiBhbnkpID0+XG4gICAgICAgIG5ldyBBcHBEYXRhU3RlcChcbiAgICAgICAgICBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgICAgc3RlcC50eXBlLFxuICAgICAgICAgIChzdGVwLnNlY3Rpb25zIHx8IFtdKS5tYXAoXG4gICAgICAgICAgICAoc2VjdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgICBuZXcgQXBwRGF0YVNlY3Rpb24oXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgIChzZWN0aW9uLmNvbnRyb2xzIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY29udHJvbDogYW55KSA9PiBjb250cm9sLmlkZW50aWZpZXIgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgLm1hcCgoY29udHJvbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybVZhbHVlc1tjb250cm9sLmlkZW50aWZpZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbC50eXBlICE9PSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeSkge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxsVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBgJHtwYWQodmFsdWUuZ2V0RGF0ZSgpKX0uJHtwYWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZ2V0TW9udGgoKSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX0uJHt2YWx1ZS5nZXRGdWxsWWVhcigpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZSA9IGZvcm1hdHRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyBTdHJpbmcodmFsdWUpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXBwRGF0YUNvbnRyb2woY29udHJvbC5pZGVudGlmaWVyLCBmaWxsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxsVmFsdWVJZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxsVmFsdWVOYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGxWYWx1ZUlkczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGxWYWx1ZU5hbWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uIChhcnJheSBvZiB2YWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlSWRzID0gdmFsdWUubWFwKCh2OiBhbnkpID0+IFN0cmluZyh2LmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZU5hbWVzID0gdmFsdWUubWFwKCh2OiBhbnkpID0+IHYubmFtZSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYWxzbyBzZXQgc2luZ2xlIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkID0gU3RyaW5nKHZhbHVlWzBdLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVOYW1lID0gdmFsdWVbMF0ubmFtZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlSWQgPSBTdHJpbmcodmFsdWUuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVOYW1lID0gdmFsdWUubmFtZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGljdGlvbmFyeUNvbnRyb2xEYXRhID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEgYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeUNvbnRyb2xEYXRhPy5kaWN0aW9uYXJ5VVVJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0b3JGb3JtLmRpY3Rpb25hcnlNYXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEuZGljdGlvbmFyeVVVSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBkaWN0aW9uYXJ5Py52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodikgPT4gdi5pZCA9PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVOYW1lID0gc2VsZWN0ZWRPcHRpb24ubmFtZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgZGljdGlvbmFyeSB2YWx1ZSBuYW1lIGZvciBJRDogJHt2YWx1ZX0gaW4gZGljdGlvbmFyeSAke2RpY3Rpb25hcnlDb250cm9sRGF0YS5kaWN0aW9uYXJ5VVVJRH1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgRGljdGlvbmFyeSBVVUlEIG5vdCBmb3VuZCBmb3IgY29udHJvbDogJHtjb250cm9sLmlkZW50aWZpZXJ9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFwcERhdGFDb250cm9sKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsVmFsdWVJZHNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmFwcERhdGEuZmlsbERhdGEpIHtcbiAgICAgIHRoaXMuYXBwRGF0YS5maWxsRGF0YS5mbHV4ID0gZmx1eDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBtZXRhZGF0YSByZWZsZWN0cyB0aGUgY3VycmVudCB2aXNpYmxlIHN0ZXBcbiAgICAgIGlmIChjdXJyZW50VmlzaWJsZVN0ZXApIHtcbiAgICAgICAgdGhpcy5hcHBEYXRhLmZpbGxEYXRhLm1ldGFkYXRhLmN1cnJlbnRTdGVwSWQgPVxuICAgICAgICAgIGN1cnJlbnRWaXNpYmxlU3RlcC5pZGVudGlmaWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzYXZlQ2hhbmdlcykge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlQXBwRGF0YVN0ZXAoKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVCdXR0b25zKFxuICAgIHN0ZXA6IGFueSxcbiAgICBzdGVwSW5kZXg6IG51bWJlcixcbiAgICBsYXN0OiBib29sZWFuLFxuICAgIGJ0bkRpc2FibGVkOiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgbGV0IGJ1dHRvbnM6IGFueVtdID0gW107XG4gICAgaWYgKHN0ZXAucHJvcHM/LlsnYnV0dG9ucyddPy5sZW5ndGggPiAwKSB7XG4gICAgICBidXR0b25zID0gc3RlcC5wcm9wcz8uWydidXR0b25zJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1dHRvbnMgPSB0aGlzLmdldERlZmF1bHRCdXR0b25zKHN0ZXBJbmRleCwgbGFzdCk7XG4gICAgfVxuICAgIGJ1dHRvbnMuZm9yRWFjaCgoYikgPT4gdGhpcy5zZXR1cEJ1dHRvblByb3BlcnRpZXMoYiwgYnRuRGlzYWJsZWQpKTtcbiAgICBpZiAodGhpcy5hcHBEYXRhPy5maWxsRGF0YT8ubWV0YWRhdGE/LmlzU3VibWl0dGVkKSB7XG4gICAgICBidXR0b25zID0gW107XG4gICAgfVxuICAgIHJldHVybiBidXR0b25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0QnV0dG9ucyhpbmRleDogbnVtYmVyLCBsYXN0OiBib29sZWFuKTogYW55W10ge1xuICAgIGNvbnN0IGJ1dHRvbnM6IGFueVtdID0gW107XG5cbiAgICBpZiAodGhpcy5hcHBEYXRhPy5maWxsRGF0YT8ubWV0YWRhdGE/LmlzU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gYnV0dG9ucztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Rpc3BsYXlNb2RlKSB7XG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICB0eXBlOiAnYmFjaycsXG4gICAgICAgIGxhYmVsOiAnQmFjaycsXG4gICAgICAgIHN0eWxlS2V5OiAnLmJ1dHRvbi1iYWNrJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaW5kZXggIT09IDAgJiYgdGhpcy5hcHBEYXRhPy5ibG9ja1ByZXZpb3VzU3RlcCA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnYmFjaycsXG4gICAgICAgICAgbGFiZWw6ICdCYWNrJyxcbiAgICAgICAgICBzdHlsZUtleTogJy5idXR0b24tYmFjaycsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIGJ1dHRvbnMucHVzaCh7IHR5cGU6ICduZXh0JywgbGFiZWw6ICdOZXh0Jywgc3R5bGVLZXk6ICcuYnV0dG9uLW5leHQnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICBsYWJlbDogJ1N1Ym1pdCcsXG4gICAgICAgICAgc3R5bGVLZXk6ICcuYnV0dG9uLXN1Ym1pdCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnV0dG9ucztcbiAgfVxuXG4gIGFwcGx5UHJvZ3Jlc3NCYXJTdHlsZXMoKSB7XG4gICAgY29uc3QgZGVzaWduQ29uZmlnID0gdGhpcy5maWVsZC5wcm9wcz8uWydkZXNpZ24nXTtcblxuICAgIGlmIChkZXNpZ25Db25maWcpIHtcbiAgICAgIGNvbnN0IHByb2dyZXNzQmFyQ29uZmlnID0gZGVzaWduQ29uZmlnWycuY29tcG9uZW50LXByb2dyZXNzLWJhciddO1xuICAgICAgaWYgKHByb2dyZXNzQmFyQ29uZmlnKSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTdHlsZXMgPSB7XG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcm9ncmVzc0JhckNvbmZpZy5iYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZmZmZmYnLFxuICAgICAgICAgIGJvcmRlckNvbG9yOiBwcm9ncmVzc0JhckNvbmZpZy5ib3JkZXJDb2xvciB8fCAnIzAwMDAwMCcsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiBwcm9ncmVzc0JhckNvbmZpZy5ib3JkZXJSYWRpdXMgfHwgJzdweCcsXG4gICAgICAgICAgY29sb3I6IHByb2dyZXNzQmFyQ29uZmlnLmNvbG9yIHx8ICcjMDAwMDAwJyxcbiAgICAgICAgICBzdGFydENvbG9yOiBwcm9ncmVzc0JhckNvbmZpZy5zdGFydENvbG9yIHx8ICcjODg4NEJGJyxcbiAgICAgICAgICBlbmRDb2xvcjogcHJvZ3Jlc3NCYXJDb25maWcuZW5kQ29sb3IgfHwgJyM4ODg0QkYnLFxuICAgICAgICAgIGhlaWdodDogcHJvZ3Jlc3NCYXJDb25maWcuaGVpZ2h0IHx8ICc0cHgnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldHVwQnV0dG9uUHJvcGVydGllcyhidXR0b246IGFueSwgYnRuRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBidXR0b24uc3R5bGUgPSB0aGlzLmZpZWxkLnByb3BzPy5bJ2Rlc2lnbiddW2J1dHRvbi5zdHlsZUtleV0gfHwge307XG4gICAgYnV0dG9uLmRpc2FibGVkID0gdGhpcy5wcm9wc1snZGVtb01vZGUnXSA9PT0gZmFsc2UgPyBidG5EaXNhYmxlZCA6IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgYnV0dG9uQ2xpY2sodHlwZTogc3RyaW5nLCBzdGVwOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25JblByb2dyZXNzKSB7XG4gICAgICB0aGlzLmlzTmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZUFzeW5jKHR5cGUsIHN0ZXApO1xuICAgICAgdGhpcy5pc05hdmlnYXRpb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVOZXh0QXN5bmMoKSB7XG4gICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLmZpZWxkPy5maWVsZEdyb3VwIVt0aGlzLmN1cnJlbnRTdGVwSW5kZXhdO1xuICAgIGlmIChjdXJyZW50U3RlcCkge1xuICAgICAgYXdhaXQgdGhpcy5idXR0b25DbGljaygnbmV4dCcsIGN1cnJlbnRTdGVwKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXRyeUNsaWNrKHN0ZXA6IGFueSkge1xuICAgIGlmIChzdGVwPy5maWVsZEdyb3VwPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucmV0cnlSZWN1cnNpdmVseShzdGVwLmZpZWxkR3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb2dyZXNzQmFyRmlsbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9ncmVzc0JhclN0eWxlcy5zdGFydENvbG9yIHx8ICcjODg4NEJGJztcbiAgICBjb25zdCBlbmQgPSB0aGlzLnByb2dyZXNzQmFyU3R5bGVzLmVuZENvbG9yIHx8ICcjODg4NEJGJztcbiAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHtzdGFydH0sICR7ZW5kfSlgO1xuICB9XG5cbiAgcmV0cnlSZWN1cnNpdmVseShmaWVsZEdyb3VwOiBhbnkpIHtcbiAgICBpZiAoZmllbGRHcm91cCAmJiBmaWVsZEdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgIGZpZWxkR3JvdXAuZm9yRWFjaCgoZjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGYucHJvcHM/LlsnY29tcG9uZW50J107XG4gICAgICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnJldHJ5KSB7XG4gICAgICAgICAgY29tcG9uZW50LnJldHJ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQucmV0cnlBc3luYykge1xuICAgICAgICAgIGNvbXBvbmVudC5yZXRyeUFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXRyeVJlY3Vyc2l2ZWx5KGYuZmllbGRHcm91cCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZUFzeW5jKHR5cGU6IHN0cmluZywgc3RlcDogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICB0aGlzLmlzTmF2aWdhdGluZyA9IHRydWU7XG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLmZpZWxkPy5maWVsZEdyb3VwIHx8IFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHN0ZXBzLmluZGV4T2Yoc3RlcCk7XG5cbiAgICBpZiAoY3VycmVudEluZGV4IDwgMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcblxuICAgIGlmIChcbiAgICAgICh0eXBlID09PSAnbmV4dCcgfHwgdHlwZSA9PT0gJ3N1Ym1pdCcpICYmXG4gICAgICBjdXJyZW50SW5kZXggPD0gc3RlcHMubGVuZ3RoIC0gMVxuICAgICkge1xuICAgICAgaWYgKHRoaXMucHJvcHNbJ2RlbW9Nb2RlJ10gPT09IGZhbHNlICYmICF0aGlzLnZhbGlkYXRlRm9ybShzdGVwKSkge1xuICAgICAgICB0aGlzLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zaG93U3RlcHMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZpZWxkR3JvdXAgPSBzdGVwc1tjdXJyZW50SW5kZXhdPy5maWVsZEdyb3VwO1xuICAgICAgICBjb25zdCBjYW5BZHZhbmNlID0gdGhpcy5jYW5BZHZhbmNlUmVjdXJzaXZlbHkoY3VycmVudEZpZWxkR3JvdXApO1xuICAgICAgICBpZiAoIWNhbkFkdmFuY2UpIHtcbiAgICAgICAgICB0aGlzLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwRGF0YSh0cnVlKTtcbiAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgY29uc3QgaGFzQWN0aW9uU3RlcHMgPSBhd2FpdCB0aGlzLmZpZWxkPy5wcm9wcz8uW1xuICAgICAgICAgICdvblNlbGVjdGVkUGFnZUNoYW5naW5nJ1xuICAgICAgICBdKHtcbiAgICAgICAgICBmcm9tOiB0aGlzLmN1cnJlbnRTdGVwSW5kZXgsXG4gICAgICAgICAgdG86IG5leHRJbmRleCxcbiAgICAgICAgICBjdXJyZW50OiB0aGlzLmN1cnJlbnRTdGVwSW5kZXgsXG4gICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuY2hlY2tJZkZsb3dJc0ZpbmlzaGVkKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnaGFzQWN0aW9uU3RlcHMnLCBoYXNBY3Rpb25TdGVwcyk7XG5cbiAgICAgICAgaWYgKGhhc0FjdGlvblN0ZXBzICYmICF0aGlzLmlzRmxvd0ZpbmlzaGVkKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBcHBEYXRhKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRmxvd0ZpbmlzaGVkKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgIHRoaXMubG9hZGVkU3RlcHNbbmV4dEluZGV4XSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maWVsZD8ucHJvcHM/Llsnb25TZWxlY3RlZFBhZ2VDaGFuZ2VkJ10odGhpcy5jdXJyZW50U3RlcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGF3YWl0IHRoaXMudHJpZ2dlck9uUGFnZVNlbGVjdGVkRm9ySW5kZXgodGhpcy5jdXJyZW50U3RlcEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGVwPy5maWVsZEdyb3VwPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjYW5BZHZhbmNlID0gdGhpcy5jYW5BZHZhbmNlUmVjdXJzaXZlbHkoc3RlcC5maWVsZEdyb3VwKTtcbiAgICAgICAgICBpZiAoIWNhbkFkdmFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXNOYXZpZ2F0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQW5kR29OZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbmRHb05leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2JhY2snICYmIGN1cnJlbnRJbmRleCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0UHJldmlvdXNTdGVwKCk7XG4gICAgICBpZiAoIXRoaXMuc2hvd1N0ZXBzKSB7XG4gICAgICAgIGNvbnN0IGhhc0FjdGlvblN0ZXBzID0gYXdhaXQgdGhpcy5maWVsZD8ucHJvcHM/LltcbiAgICAgICAgICAnb25TZWxlY3RlZFBhZ2VDaGFuZ2luZydcbiAgICAgICAgXSh7XG4gICAgICAgICAgZnJvbTogdGhpcy5jdXJyZW50U3RlcEluZGV4LFxuICAgICAgICAgIHRvOiBwcmV2SW5kZXgsXG4gICAgICAgICAgY3VycmVudDogdGhpcy5jdXJyZW50U3RlcEluZGV4LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFzQWN0aW9uU3RlcHMpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUFwcERhdGEodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICAgIHRoaXMubG9hZGVkU3RlcHNbcHJldkluZGV4XSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5zdGVwcGVyLnNlbGVjdGVkSW5kZXggLSAxO1xuICAgICAgICBjb25zdCBoYXNBY3Rpb25TdGVwcyA9IGF3YWl0IHRoaXMuZmllbGQ/LnByb3BzPy5bXG4gICAgICAgICAgJ29uU2VsZWN0ZWRQYWdlQ2hhbmdpbmcnXG4gICAgICAgIF0oe1xuICAgICAgICAgIGZyb206IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4LFxuICAgICAgICAgIHRvOiB0YXJnZXRJbmRleCxcbiAgICAgICAgICBjdXJyZW50OiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhhc0FjdGlvblN0ZXBzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBcHBEYXRhKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGVwcGVyLnByZXZpb3VzKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzTmF2aWdhdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQW5kR29OZXh0KCkge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwRGF0YSh0cnVlKTtcbiAgICB0aGlzLmdvTmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnb05leHQoKSB7XG4gICAgY29uc3QgY3VycmVudElkeCA9IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4O1xuICAgIGNvbnN0IG5leHRJZHggPSBjdXJyZW50SWR4ICsgMTtcblxuICAgIGNvbnN0IGhhc0FjdGlvblN0ZXBzID0gYXdhaXQgdGhpcy5maWVsZD8ucHJvcHM/Llsnb25TZWxlY3RlZFBhZ2VDaGFuZ2luZyddKHtcbiAgICAgIGZyb206IGN1cnJlbnRJZHgsXG4gICAgICB0bzogbmV4dElkeCxcbiAgICAgIGN1cnJlbnQ6IGN1cnJlbnRJZHgsXG4gICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5jaGVja0lmRmxvd0lzRmluaXNoZWQoKSxcbiAgICB9KTtcblxuICAgIGlmIChoYXNBY3Rpb25TdGVwcyAmJiAhdGhpcy5pc0Zsb3dGaW5pc2hlZCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVBcHBEYXRhKHRydWUpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0Zsb3dGaW5pc2hlZCkge1xuICAgICAgdGhpcy5zdGVwcGVyLm5leHQoKTtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4O1xuICAgICAgdGhpcy5maWVsZD8ucHJvcHM/Llsnb25TZWxlY3RlZFBhZ2VDaGFuZ2VkJ10odGhpcy5zdGVwcGVyLnNlbGVjdGVkSW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZGbG93SXNGaW5pc2hlZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0ZXBwZXIgJiZcbiAgICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSB0aGlzLmZpZWxkPy5maWVsZEdyb3VwPy5sZW5ndGghIC0gMVxuICAgICkge1xuICAgICAgdGhpcy5pc0Zsb3dGaW5pc2hlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRTdGVwSW5kZXggPT09IHRoaXMuZmllbGQ/LmZpZWxkR3JvdXA/Lmxlbmd0aCEgLSAxKSB7XG4gICAgICB0aGlzLmlzRmxvd0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNGbG93RmluaXNoZWQpIHtcbiAgICAgIGlmICh0aGlzLmZpbmFsU3RlcEZpZWxkQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuc2hvd0ZpbmFsU3RlcCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkPy5wcm9wcz8uWydjb21wbGV0aW9uRXZlbnQnXSgpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRm9ybShzdGVwOiBGb3JtbHlGaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnByb3BzWydkZW1vTW9kZSddID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIGxldCBmaXJzdEludmFsaWRGaWVsZEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoc3RlcC5maWVsZEdyb3VwKSB7XG4gICAgICBzdGVwLmZpZWxkR3JvdXAuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICBpZiAoZi5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgZi5maWVsZEdyb3VwLmZvckVhY2goKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgYy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICBjLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGlmIChjLmZvcm1Db250cm9sLmVycm9ycyAmJiAhYy5faGlkZSkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgaW52YWxpZCBmaWVsZCBrZXkgZm9yIHNjcm9sbGluZ1xuICAgICAgICAgICAgICBpZiAoIWZpcnN0SW52YWxpZEZpZWxkS2V5ICYmIGMua2V5KSB7XG4gICAgICAgICAgICAgICAgZmlyc3RJbnZhbGlkRmllbGRLZXkgPSBjLmtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIGZhaWxlZCBhbmQgd2UgaGF2ZSBhIGZpZWxkIHRvIHNjcm9sbCB0bywgdXNlIHRoZSBzY3JvbGwgc2VydmljZVxuICAgIGlmICghaXNWYWxpZCAmJiBmaXJzdEludmFsaWRGaWVsZEtleSkge1xuICAgICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpZWxkKGZpcnN0SW52YWxpZEZpZWxkS2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIGlzVmFsaWQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmtleSkge1xuICAgICAgcmV0dXJuIGZpZWxkLmZvcm1Db250cm9sPy52YWxpZCA/PyBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLmZpZWxkR3JvdXBcbiAgICAgID8gZmllbGQuZmllbGRHcm91cC5ldmVyeSgoZikgPT4gdGhpcy5pc1ZhbGlkKGYpKVxuICAgICAgOiB0cnVlO1xuICB9XG5cbiAgaXNDdXN0b21TdGVwKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwVHlwZSA9IHRoaXMuZmllbGQuZmllbGRHcm91cCFbaW5kZXhdPy5wcm9wcz8uWydmbHV4VHlwZSddO1xuICAgIHJldHVybiBzdGVwVHlwZSA9PT0gRmx1eFR5cGUuQ3VzdG9tO1xuICB9XG5cbiAgYXN5bmMgb25TdGVwQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc2VsZWN0ZWRJbmRleCkge1xuICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyT25QYWdlU2VsZWN0ZWRGb3JJbmRleChldmVudC5zZWxlY3RlZEluZGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cmlnZ2VyT25QYWdlU2VsZWN0ZWRGb3JJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZmcgPSB0aGlzLmZpZWxkLmZpZWxkR3JvdXAhW2luZGV4XT8uZmllbGRHcm91cDtcbiAgICB0aGlzLnRyaWdnZXJPblBhZ2VTZWxlY3RlZFJlY3Vyc2l2ZWx5KGZnKTtcbiAgfVxuXG4gIGFzeW5jIHRyaWdnZXJPblBhZ2VTZWxlY3RlZFJlY3Vyc2l2ZWx5KGZnOiBhbnkpIHtcbiAgICBpZiAoZmcgJiYgZmcubGVuZ3RoID4gMCkge1xuICAgICAgZmcuZm9yRWFjaChhc3luYyAoZjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGYucHJvcHM/LlsnY29tcG9uZW50J107XG4gICAgICAgIGlmIChjb21wb25lbnQ/Lm9uUGFnZVNlbGVjdGVkQXN5bmMpIHtcbiAgICAgICAgICBhd2FpdCBjb21wb25lbnQ/Lm9uUGFnZVNlbGVjdGVkQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50Py5vblBhZ2VTZWxlY3RlZCkge1xuICAgICAgICAgIGNvbXBvbmVudD8ub25QYWdlU2VsZWN0ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXJPblBhZ2VTZWxlY3RlZFJlY3Vyc2l2ZWx5KGYuZmllbGRHcm91cCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5BZHZhbmNlUmVjdXJzaXZlbHkoZmc6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgbGV0IGZpcnN0SW52YWxpZEZpZWxkS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChmZyAmJiBmZy5sZW5ndGggPiAwKSB7XG4gICAgICBmZy5mb3JFYWNoKGFzeW5jIChmOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGlubmVyUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZi5wcm9wcz8uWydjb21wb25lbnQnXTtcbiAgICAgICAgaWYgKGNvbXBvbmVudD8uY2FuQWR2YW5jZSkge1xuICAgICAgICAgIGlubmVyUmVzdWx0ID0gY29tcG9uZW50Py5jYW5BZHZhbmNlKCk7XG4gICAgICAgICAgaWYgKGlubmVyUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFRyeSB0byBnZXQgdGhlIGZpZWxkIGtleSBmb3Igc2Nyb2xsaW5nXG4gICAgICAgICAgICBpZiAoIWZpcnN0SW52YWxpZEZpZWxkS2V5ICYmIGYua2V5KSB7XG4gICAgICAgICAgICAgIGZpcnN0SW52YWxpZEZpZWxkS2V5ID0gZi5rZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlubmVyUmVzdWx0ID0gdGhpcy5jYW5BZHZhbmNlUmVjdXJzaXZlbHkoZi5maWVsZEdyb3VwKTtcbiAgICAgICAgaWYgKGlubmVyUmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIHZhbGlkYXRpb24gZmFpbGVkIGFuZCB3ZSBoYXZlIGEgZmllbGQgdG8gc2Nyb2xsIHRvLCB1c2UgdGhlIHNjcm9sbCBzZXJ2aWNlXG4gICAgaWYgKCF2YWxpZCAmJiBmaXJzdEludmFsaWRGaWVsZEtleSkge1xuICAgICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpZWxkKGZpcnN0SW52YWxpZEZpZWxkS2V5KTtcbiAgICB9IGVsc2UgaWYgKCF2YWxpZCkge1xuICAgICAgLy8gRmFsbGJhY2s6IHRyeSB0byBzY3JvbGwgdG8gZmlyc3QgZXJyb3IgdXNpbmcgdGhlIGNvbGxlY3RvciBmb3JtJ3MgbWV0aG9kXG4gICAgICB0aGlzLmNvbGxlY3RvckZvcm0uc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIGdldENvbXBvbmVudHNXaXRoRGVmYXVsdExhYmVscygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgW0ZsdXhUeXBlLkt5Y106ICdLeWMnLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJzaG93U3RlcHM7IGVsc2Ugc2luZ2xlU3RlcFRlbXBsYXRlXCI+XG4gIDxkaXYgW25nU3R5bGVdPVwiY29uY2F0ZW5hdGVkRm9ybVN0eWxlXCI+XG4gICAgPGZvcm1seS1maWVsZFxuICAgICAgKm5nSWY9XCJzaG93RmluYWxTdGVwXCJcbiAgICAgIFtmaWVsZF09XCJmaW5hbFN0ZXBGaWVsZENvbmZpZ1wiXG4gICAgPjwvZm9ybWx5LWZpZWxkPlxuICA8L2Rpdj5cblxuICA8bWF0LWhvcml6b250YWwtc3RlcHBlclxuICAgICNzdGVwcGVyXG4gICAgKm5nSWY9XCIhc2hvd0ZpbmFsU3RlcFwiXG4gICAgW2xpbmVhcl09XCJ0cnVlXCJcbiAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU3RlcENoYW5nZSgkZXZlbnQpXCJcbiAgICBbbmdTdHlsZV09XCJjb25jYXRlbmF0ZWRGb3JtU3R5bGVcIlxuICA+XG4gICAgPG1hdC1zdGVwICpuZ0Zvcj1cImxldCBzdGVwIG9mIGZpZWxkLmZpZWxkR3JvdXA7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsICpuZ0lmPVwic2hvd1N0ZXBzTGFiZWxzXCI+XG4gICAgICAgIHt7IHN0ZXAucHJvcHM/LmxhYmVsIH19XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT0gJ3RvcCdcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25zQ29udGFpbmVyXCJcbiAgICAgIC8+XG5cbiAgICAgIDxoMyBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmZvbnQtaGVhZGluZy0zJ10gfHwge31cIj5cbiAgICAgICAge3sgc3RlcC5wcm9wcz8uZGVzY3JpcHRpb24gfX1cbiAgICAgIDwvaDM+XG4gICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJzdGVwXCI+PC9mb3JtbHktZmllbGQ+XG5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJidXR0b25zVmVydGljYWxQb3NpdGlvbiA9PSAnYm90dG9tJ1wiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ1dHRvbnNDb250YWluZXJcIlxuICAgICAgLz5cbiAgICA8L21hdC1zdGVwPlxuICAgIDwhLS0gPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXNob3dTdGVwc0NvdW50ZXJcIiBtYXRTdGVwcGVySWNvbj1cIm51bWJlclwiPlxuICAgICAgPG1hdC1pY29uPnJhZGlvX2J1dHRvbl9jaGVja2VkPC9tYXQtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPiAtLT5cbiAgPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlU3RlcFRlbXBsYXRlPlxuICA8ZGl2IFtuZ1N0eWxlXT1cImNvbmNhdGVuYXRlZEZvcm1TdHlsZVwiPlxuICAgIDxmb3JtbHktZmllbGRcbiAgICAgICpuZ0lmPVwic2hvd0ZpbmFsU3RlcFwiXG4gICAgICBbZmllbGRdPVwiZmluYWxTdGVwRmllbGRDb25maWdcIlxuICAgID48L2Zvcm1seS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNpbmdsZS1zdGVwLWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCIhc2hvd0ZpbmFsU3RlcFwiXG4gICAgW25nU3R5bGVdPVwiY29uY2F0ZW5hdGVkRm9ybVN0eWxlXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyLXdyYXBwZXJcIlxuICAgICAgKm5nSWY9XCJzaG93UHJvZ3Jlc3NCYXJcIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAnYm9yZGVyLXJhZGl1cyc6IHByb2dyZXNzQmFyU3R5bGVzLmJvcmRlclJhZGl1cyxcbiAgICAgICAgIGhlaWdodDogcHJvZ3Jlc3NCYXJTdHlsZXMuaGVpZ2h0LFxuICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWZpbGxcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgd2lkdGg6ICgoY3VycmVudFN0ZXBJbmRleCArIDEpIC8gdG90YWxTdGVwc0NvdW50KSAqIDEwMCArICclJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBnZXRQcm9ncmVzc0JhckZpbGwoKSxcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJ1xuICAgICAgICB9XCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtc3RlcC1oZWFkZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzaW5nbGUtc3RlcC1pbmRpY2F0b3JcIlxuICAgICAgICAqbmdJZj1cInNob3dTdGVwc0NvdW50ZXI7XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwLWN1cnJlbnRcIj57eyBjdXJyZW50U3RlcEluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwLXNlcGFyYXRvclwiPi88L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3RlcC10b3RhbFwiPnt7IHRvdGFsU3RlcHNDb3VudCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGgxICpuZ0lmPVwic2hvd1N0ZXBzTGFiZWxzXCIgY2xhc3M9XCJzaW5nbGUtc3RlcC1sYWJlbFwiICBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmZvbnQtaGVhZGluZy0xJ10gfHwge31cIj5cbiAgICAgICAge3sgZmllbGQuZmllbGRHcm91cCFbY3VycmVudFN0ZXBJbmRleF0hLnByb3BzIS5sYWJlbCB9fVxuICAgICAgPC9oMT5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT0gJ3RvcCdcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uc0NvbnRhaW5lclwiXG4gICAgLz5cblxuICAgIDxoMyBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmZvbnQtaGVhZGluZy0zJ10gfHwge31cIj5cbiAgICAgIHt7IGZpZWxkIS5maWVsZEdyb3VwIVtjdXJyZW50U3RlcEluZGV4XSEucHJvcHMhLmRlc2NyaXB0aW9uIH19XG4gICAgPC9oMz5cbiAgICA8Zm9ybWx5LWZpZWxkXG4gICAgICAqbmdJZj1cImxvYWRlZFN0ZXBzW2N1cnJlbnRTdGVwSW5kZXhdXCJcbiAgICAgIFtmaWVsZF09XCJmaWVsZCEuZmllbGRHcm91cCFbY3VycmVudFN0ZXBJbmRleF1cIlxuICAgID48L2Zvcm1seS1maWVsZD5cblxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24gPT0gJ2JvdHRvbSdcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uc0NvbnRhaW5lclwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNDb250YWluZXI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgYnV0dG9uc1RlbXBsYXRlO1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBpbmRleDogY3VycmVudFN0ZXBJbmRleCxcbiAgICAgICAgc3RlcDogZmllbGQhLmZpZWxkR3JvdXAhW2N1cnJlbnRTdGVwSW5kZXhdXG4gICAgICB9XG4gICAgXCJcbiAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zVGVtcGxhdGUgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc3RlcD1cInN0ZXBcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIWlzRmxvd0ZpbmlzaGVkXCJcbiAgICBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCJcbiAgICBbbmdTdHlsZV09XCJmaWVsZC5wcm9wcz8uWydkZXNpZ24nXVsnLmJ1dHRvbnMtY29udGFpbmVyJ10gfHwge31cIlxuICA+XG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gKm5nSWY9XCJpc0RlYnVnXCIgKGNsaWNrKT1cInJldHJ5Q2xpY2soc3RlcClcIj5cbiAgICAgIERlYnVnIFJldHJ5XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNHcm91cHNbaW5kZXhdXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlID09PSAnc3VibWl0JyA/ICdzdWJtaXQnIDogJ2J1dHRvbidcIlxuICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2soYnV0dG9uLnR5cGUsIHN0ZXApXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZCB8fCBpc1NhdmluZ1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cImJ1dHRvbi5zdHlsZVwiXG4gICAgICA+XG4gICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqbmdJZj1cImlzTmF2aWdhdGluZyB8fCBpc1NhdmluZ1wiIGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XG4gICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjMyXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAqbmdJZj1cImlzRGVidWdcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soJ25leHQnLCBzdGVwKVwiPlxuICAgICAgRGVidWcgTmV4dFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=