@smarterplan/ngx-smarterplan-core 0.4.43 → 0.4.45

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.
@@ -161,7 +161,7 @@ export class MatterportImportService {
161
161
  await this.import360images();
162
162
  return Promise.resolve(true);
163
163
  }
164
- return Promise.resolve(false);
164
+ return Promise.reject(new Error("missing data (no building zone)"));
165
165
  }
166
166
  async createZone(name, layerID, surface = null, parentID = null, sweeps = [], node = null, metadata = null) {
167
167
  const zoneInput = {
@@ -336,4 +336,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
336
336
  providedIn: "root",
337
337
  }]
338
338
  }], ctorParameters: function () { return [{ type: i1.NavigationService }, { type: i2.ZoneService }, { type: i3.ViewerService }, { type: i4.LayerService }, { type: i5.BaseUserService }, { type: i6.PlanService }]; } });
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFLcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFPN0YsTUFBTSxPQUFPLHVCQUF1QjtJQXlDaEMsWUFDWSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFoQjdCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFYixvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTNELGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFFaEQsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFT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Q0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVk7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUNoRSxJQUFJLEVBQ0osWUFBWSxDQUNmLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUUsQ0FBQzs7b0hBM2FRLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnBCLE1BQU07MkZBRVQsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LCB3YWl0IH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMZXZlbFN0YXR1cywgTGF5ZXIsIE5vZGUsIFpvbmUsIE5hdmlnYXRpb24sIFBsYW4gfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMYXllclNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbGF5ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGxhblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcGxhbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3pvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyB1cGxvYWRKc29uVG9TMywgdXBsb2FkQmFzZTY0SW1hZ2UsIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzIH0gZnJvbSBcIi4vczMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVmlld2VyU2VydmljZSB9IGZyb20gXCIuL3ZpZXdlci5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdHRlcnBvcnRJbXBvcnRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgY3VycmVudEZyYW1lO1xyXG5cclxuICAgIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIHN3ZWVwczogT2JqZWN0O1xyXG5cclxuICAgIHB1YmxpYyBmbG9vcnM6IE9iamVjdDtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRGbG9vcjtcclxuXHJcbiAgICBwcml2YXRlIF9tb2RlbElEOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfc3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc3BhY2VJRCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zcGFjZUlEO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgc3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc3BhY2VJRCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbW9kZWxJRCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbElEO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgbW9kZWxJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbW9kZWxJRCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9wID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGltcG9ydGluZ0ltYWdlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgcHVibGljIGludGVyc2VjdGlvbjogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICAgIHB1YmxpYyBzd2VlcFByb2Nlc3NlZENvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgcHVibGljIHRvdGFsU3dlZXBzQ291bnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsYXllclNlcnZpY2U6IExheWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwbGFuU2VydmljZTogUGxhblNlcnZpY2UsXHJcbiAgICApIHt9XHJcblxyXG4gICAgYXN5bmMgaW5pdFNka0Zvck1vZGVsKG1vZGVsSUQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMuc3RvcCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZyBNYXR0ZXJwb3J0IFNES1wiKTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbElEID0gbW9kZWxJRDtcclxuICAgICAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcclxuICAgICAgICAgICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGlmcmFtZVwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnNldFRvdXJVcmwobW9kZWxJRCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMudmlld2VyU2VydmljZS5nZXRUb3VyVXJsKCk7XHJcbiAgICAgICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdXJsKTtcclxuICAgICAgICAgICAgaWZyYW1lLmFsbG93ID0gXCJ4ci1zcGF0aWFsLXRyYWNraW5nXCI7XHJcbiAgICAgICAgICAgIGlmcmFtZS5oZWlnaHQgPSBcIjEwMCVcIjtcclxuICAgICAgICAgICAgaWZyYW1lLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICAgICAgICAgIGlmcmFtZS5pZCA9IFwidmlld2VyLW1vZHVsZVwiO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN2aWV3ZXItZnJhbWVcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKGlmcmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gaWZyYW1lO1xyXG5cclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB3aW5kb3cuTVBfU0RLLmNvbm5lY3QoaWZyYW1lLCBcInFuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWRcIiwgXCIzLjExXCIpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyAoc2RrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zdGFuY2lhdGUgc2RrXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsgPSBzZGs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpYnNjcmliZSB0byBGbG9vciBkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkZsb29yc1wiLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBjdXJyZW50IEZsb29yXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuY3VycmVudC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZChjdXJyZW50Rmxvb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZsb29yID0gY3VycmVudEZsb29yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRvIHRoZSBjdXJyZW50IGZsb29yIGhhcyBvY2N1cnJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChjdXJyZW50Rmxvb3Iuc2VxdWVuY2UgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coXCJDdXJyZW50bHkgdmlld2luZyBhbGwgZmxvb3JzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChjdXJyZW50Rmxvb3Iuc2VxdWVuY2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGlmIChjdXJyZW50Rmxvb3IuaWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcIkN1cnJlbnQgdmlld2luZyBhbiB1bnBsYWNlZCB1bmFsaWduZWQgc3dlZXBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnRseSB0cmFuc2l0aW9uaW5nIGJldHdlZW4gZmxvb3JzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudGx5IG9uIGZsb29yJywgY3VycmVudEZsb29yLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBmbG9vclxcJ3Mgc2VxdWVuY2UgaW5kZXgnLCBjdXJyZW50Rmxvb3Iuc2VxdWVuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IGZsb29yXFwncyBuYW1lJywgY3VycmVudEZsb29yLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gU3dlZXAgZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIFwidGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gY29sbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwb2ludGVyKGludGVyc2VjdGlvbkRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uLm5leHQoaW50ZXJzZWN0aW9uRGF0YS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBsYWJlbHNcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5TZXR0aW5ncy51cGRhdGUoXCJsYWJlbHNcIiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHVwZGF0ZSBjb21wbGV0ZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBMYWJlbHMgc2V0dGluZzogJHtkYXRhfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIHVwZGF0ZSBlcnJvci5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImluaXQgZG9uZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGhhbmRsZUVycm9yKSA9PiBjb25zb2xlLmVycm9yKGhhbmRsZUVycm9yKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW1wb3J0RGF0YShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgc3VyZmFjZTogbnVtYmVyLFxyXG4gICAgICAgIHJlbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgICAgIG5vZGU6IE5vZGUgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zcGFjZUlEID0gc3BhY2VJRDtcclxuICAgICAgICBsZXQgZmxvb3Jab25lczogWm9uZVtdID0gW107XHJcbiAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzQnlTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBtYWluWm9uZSA9IHpvbmVzLmZpbmQoKHopID0+ICF6LnBhcmVudElEKTtcclxuICAgICAgICBpZiAodGhpcy5zd2VlcHMgJiYgbWFpblpvbmUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbXBvcnRpbmcgZGF0YSBmcm9tIG1hdHRlcnBvcnRcIik7XHJcbiAgICAgICAgICAgIC8vIHNhdmUgc3dlZXBzIGRhdGEgYXMganNvblxyXG4gICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoT2JqZWN0LnZhbHVlcyh0aGlzLnN3ZWVwcykpO1xyXG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRKc29uVG9TMyhcclxuICAgICAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L2ludmVudG9yeS9gLFxyXG4gICAgICAgICAgICAgICAganNvbixcclxuICAgICAgICAgICAgICAgIFwiZGF0YS5qc29uXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChyZWxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gb25seSAzNjAgaW1wb3J0IHNpbmNlIHdlIGFyZSByZWxvYWRpbmdcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFmdGVyIHJlbG9hZGluZ1wiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY2hlY2sgbGF5ZXIgb2YgYnVpbGRpbmcgdHlwZVxyXG4gICAgICAgICAgICBjb25zdCBsYXllckJ1aWxkaW5nID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkJVSUxESU5HXCIpO1xyXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkRGVmYXVsdFpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgICAgICBub2RlLm1ldGFkYXRhLFxyXG4gICAgICAgICAgICAgICAgbGF5ZXJCdWlsZGluZy5pZCxcclxuICAgICAgICAgICAgICAgIHN1cmZhY2UsXHJcbiAgICAgICAgICAgICAgICBtYWluWm9uZS5pZCxcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3dlZXBzKSxcclxuICAgICAgICAgICAgICAgIG5vZGUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghY3JlYXRlZERlZmF1bHRab25lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5mbG9vcnMpIHtcclxuICAgICAgICAgICAgICAgIGZsb29yWm9uZXMgPSBhd2FpdCB0aGlzLmltcG9ydEZsb29yRGF0YShcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGVmYXVsdFpvbmUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3Jab25lcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLm1hcChhc3luYyAoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dlZXBJbmZvID0gdGhpcy5zd2VlcHNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcEluZm8udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5wb3NpdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBKU09OLnN0cmluZ2lmeShzd2VlcEluZm8ucm90YXRpb24pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogTGV2ZWxTdGF0dXMuTE9XLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlSUQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBOYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdiA9IGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3JlYXRlTmF2aWdhdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbklucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYXYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdWxkIGNyZWF0ZSBuYXZpZ2F0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW1wb3J0MzYwaW1hZ2VzKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVpvbmUoXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxyXG4gICAgICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgICAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgICAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklELFxyXG4gICAgICAgICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICAgICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgICAgICB9IGFzIFpvbmU7XHJcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SUQpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gcGFyZW50SUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgICAgIHJldHVybiBuZXdMb2NhbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnQzNjBpbWFnZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgMzYwIGltYWdlc1wiKTtcclxuICAgICAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NhbjtcclxuICAgICAgICAgICAgbGV0IGluZGV4U2NhbjtcclxuICAgICAgICAgICAgY29uc3Qgbm1iU2NhbnMgPSBPYmplY3Qua2V5cyhzY2FucykubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBzY2FuIHBvaW50cyA6XCIsIG5tYlNjYW5zKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBzdGFydGVkIHRvIGxvYWQgaW1hZ2VzIGFscmVhZHlcclxuICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXRha2luZyBpbXBvcnQgZnJvbSBzY2FuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IGluZGV4U2NhbiArIDUwXHJcbiAgICAgICAgICAgICAgICAgICAgPyAobWF4U2NhbiA9IG5tYlNjYW5zKVxyXG4gICAgICAgICAgICAgICAgICAgIDogKG1heFNjYW4gPSBpbmRleFNjYW4gKyA1MCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleFNjYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgbm1iU2NhbnMgPCA1MCA/IChtYXhTY2FuID0gbm1iU2NhbnMpIDogKG1heFNjYW4gPSA1MCk7XHJcbiAgICAgICAgICAgICAgICBtYXhTY2FuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4U2NhbjsgaW5kZXggPCBtYXhTY2FuOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzY2Fuc1tpbmRleF0udXVpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlRXF1aXJlY3Rhbmd1bGFyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2Fuc1tpbmRleF0udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3dlZXBcIixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzKGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJhbmRvbmluZyBpbXBvcnQgYmVhY3VzZSBpdCB3YXMgY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXhTY2FuID09PSBubWJTY2Fucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnQgMzYwIGRvbmVcIik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0byByZXN0YXJ0IHRoZSBwcm9jZWR1cmUgZnJvbSB3aGVyZSB3ZSBsZWZ0IG9mXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiwgbWF4U2Nhbi50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdFNka0Zvck1vZGVsKHRoaXMubW9kZWxJRCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydERhdGEodGhpcy5zcGFjZUlELCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIGJ5IG5hbWVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck5hbWUpO1xyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLm5hbWUgIT09IFwiXCIgJiYgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgaWRcclxuICAgICAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cclxuICAgICAgICAgICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTWF0dGVycG9ydCk7XHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxyXG4gICAgICAgIG5vZGU6IE5vZGUsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gW107XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XHJcbiAgICAgICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBmbG9vcnNcIiwgbm1iRmxvb3JzKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm1iRmxvb3JzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0aW5nIGZsb29yXCIsIGluZGV4KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWJvdXQgdG8gc2F2ZSB0aGUgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlY2VpdmVkIGZsb29yIHpvbmVcIiwgem9uZSk7XHJcbiAgICAgICAgICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLmlkO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsYXllckZsb29yID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkZMT09SXCIpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgICAgICBjb25zdCBzd2VlcHNGb3JGbG9vciA9IHN3ZWVwc0luZm8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc3dlZXBJbmZvKSA9PiBzd2VlcEluZm8uZmxvb3JJbmZvLmlkID09PSB0aGlzLmN1cnJlbnRGbG9vci5pZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgIGDDiXRhZ2UgJHtuYW1lfSAtICR7bm9kZS5tZXRhZGF0YX1gLFxyXG4gICAgICAgICAgICBsYXllckZsb29yLmlkLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBkZWZhdXRab25lSUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7bWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IHRoaXMuY3VycmVudEZsb29yLnNlcXVlbmNlfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIFRPRE8gbGluayB0byBzY2Fuc1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICAgICAgICB7IHdpZHRoOiA0MDk2LCBoZWlnaHQ6IDIwNDggfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHNwYWNlSURzaG9ydCA9IHRoaXMuc3BhY2VJRC5zbGljZSgwLCA4KTtcclxuICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgYmFzZTY0LFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBgdmlzaXRzLyR7dGhpcy5tb2RlbElEfS9wbGFucy9gLFxyXG4gICAgICAgICAgICBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH1gLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY3JlYXRlIFBsYW4gb2JqZWN0XHJcbiAgICAgICAgY29uc3QgcGxhbiA9IHtcclxuICAgICAgICAgICAgbmFtZTogYHBsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1gLFxyXG4gICAgICAgICAgICBhbm5leGU6IGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL3BsYW5fZmxvb3JfJHt0aGlzLmN1cnJlbnRGbG9vci5pZH1fJHtzcGFjZUlEc2hvcnR9LmpwZWdgLFxyXG4gICAgICAgICAgICB6b25lSUQ6IHpvbmUuaWQsXHJcbiAgICAgICAgICAgIHNwYWNlSUQ6IHRoaXMuc3BhY2VJRCxcclxuICAgICAgICAgICAgaXNDdXJyZW50Rm9yWm9uZTogdHJ1ZSxcclxuICAgICAgICAgICAgaXNNb2RpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGlzSW1wb3J0ZWRNYXR0ZXJwb3J0OiB0cnVlLFxyXG4gICAgICAgIH0gYXMgUGxhbjtcclxuICAgICAgICBhd2FpdCB0aGlzLnBsYW5TZXJ2aWNlLmNyZWF0ZVBsYW4ocGxhbik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJmbG9vciBzYXZlZFwiKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHpvbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFiYW5kb24oKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWJhbmRvbm5pbmcgaW1wb3J0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcCA9IHRydWU7XHJcbiAgICAgICAgfSwgMTUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJhbWUoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TGF5ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxMYXllcj4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHRoaXMuc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE9yZ0lkID0gbWlzc2lvbi5vcmdhbmlzYXRpb25JRDtcclxuICAgICAgICBjb25zdCBsYXllcnMgPSBhd2FpdCB0aGlzLmxheWVyU2VydmljZS5nZXRMYXllckJ5TmFtZUZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgY3VycmVudE9yZ0lkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxheWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsYXllcnNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNyZWF0ZSB0aGVuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUxheWVyRm9yT3JnYW5pc2F0aW9uKG5hbWUsIGN1cnJlbnRPcmdJZCk7XHJcbiAgICB9XHJcbn1cclxuIl19
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbWF0dGVycG9ydC1pbXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7QUFLcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFPN0YsTUFBTSxPQUFPLHVCQUF1QjtJQXlDaEMsWUFDWSxpQkFBb0MsRUFDcEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsV0FBNEIsRUFDNUIsV0FBd0I7UUFMeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFoQjdCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFFYixvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRTNELGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFFaEQsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFFN0QscUJBQWdCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7SUFT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R0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FDaEUsSUFBSSxFQUNKLFlBQVksQ0FDZixDQUFDO1FBQ0YsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtRQUNELGNBQWM7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVFLENBQUM7O29IQTNhUSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZwQixNQUFNOzJGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCwgd2FpdCB9IGZyb20gXCIuLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGV2ZWxTdGF0dXMsIExheWVyLCBOb2RlLCBab25lLCBOYXZpZ2F0aW9uLCBQbGFuIH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2xheWVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBsYW5TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BsYW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gXCIuL21vZGVscy96b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgdXBsb2FkSnNvblRvUzMsIHVwbG9hZEJhc2U2NEltYWdlLCByZW1vdmVBbGxGaWxlc0Zyb21Gb2xkZXJTMyB9IGZyb20gXCIuL3MzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tIFwiLi92aWV3ZXIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0SW1wb3J0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRGcmFtZTtcclxuXHJcbiAgICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBzd2VlcHM6IE9iamVjdDtcclxuXHJcbiAgICBwdWJsaWMgZmxvb3JzOiBPYmplY3Q7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gICAgcHJpdmF0ZSBfbW9kZWxJRDogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3NwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3BhY2VJRDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IHNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NwYWNlSUQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1vZGVsSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxJRDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IG1vZGVsSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX21vZGVsSUQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RvcCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBpbXBvcnRpbmdJbWFnZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIHB1YmxpYyBpbnRlcnNlY3Rpb246IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBQcm9jZXNzZWRDb3VudDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbFN3ZWVwc0NvdW50OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhblNlcnZpY2U6IFBsYW5TZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBhc3luYyBpbml0U2RrRm9yTW9kZWwobW9kZWxJRDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5zdG9wID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsSUQgPSBtb2RlbElEO1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgaWZyYW1lXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2Uuc2V0VG91clVybChtb2RlbElEKTtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy52aWV3ZXJTZXJ2aWNlLmdldFRvdXJVcmwoKTtcclxuICAgICAgICAgICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB1cmwpO1xyXG4gICAgICAgICAgICBpZnJhbWUuYWxsb3cgPSBcInhyLXNwYXRpYWwtdHJhY2tpbmdcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICAgICAgICBpZnJhbWUud2lkdGggPSBcIjEwMCVcIjtcclxuICAgICAgICAgICAgaWZyYW1lLmlkID0gXCJ2aWV3ZXItbW9kdWxlXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3ZpZXdlci1mcmFtZVwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoaWZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBpZnJhbWU7XHJcblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHdpbmRvdy5NUF9TREsuY29ubmVjdChpZnJhbWUsIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLCBcIjMuMTFcIilcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIChzZGspID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbnN0YW5jaWF0ZSBzZGtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkayA9IHNkaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2lic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRmxvb3JzXCIsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGN1cnJlbnQgRmxvb3JcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5GbG9vci5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdXBkKGN1cnJlbnRGbG9vcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rmxvb3IgPSBjdXJyZW50Rmxvb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmxvb3IgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcIkN1cnJlbnRseSB2aWV3aW5nIGFsbCBmbG9vcnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGN1cnJlbnRGbG9vci5zZXF1ZW5jZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGN1cnJlbnRGbG9vci5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiQ3VycmVudCB2aWV3aW5nIGFuIHVucGxhY2VkIHVuYWxpZ25lZCBzd2VlcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudGx5IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBmbG9vcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50bHkgb24gZmxvb3InLCBjdXJyZW50Rmxvb3IuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IGZsb29yXFwncyBzZXF1ZW5jZSBpbmRleCcsIGN1cnJlbnRGbG9vci5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgZmxvb3JcXCdzIG5hbWUnLCBjdXJyZW50Rmxvb3IubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBTd2VlcCBkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQoY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXCJ0aGUgZW50aXJlIHVwLXRvLWRhdGUgY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5Qb2ludGVyLmludGVyc2VjdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBvaW50ZXIoaW50ZXJzZWN0aW9uRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb24ubmV4dChpbnRlcnNlY3Rpb25EYXRhLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxhYmVsc1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLlNldHRpbmdzLnVwZGF0ZShcImxhYmVsc1wiLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYExhYmVscyBzZXR0aW5nOiAke2RhdGF9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdXBkYXRlIGVycm9yLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiaW5pdCBkb25lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoaGFuZGxlRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoaGFuZGxlRXJyb3IpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnREYXRhKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIsXHJcbiAgICAgICAgcmVsb2FkaW5nOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgbm9kZTogTm9kZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLnNwYWNlSUQgPSBzcGFjZUlEO1xyXG4gICAgICAgIGxldCBmbG9vclpvbmVzOiBab25lW10gPSBbXTtcclxuICAgICAgICBjb25zdCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG1haW5ab25lID0gem9uZXMuZmluZCgoeikgPT4gIXoucGFyZW50SUQpO1xyXG4gICAgICAgIGlmICh0aGlzLnN3ZWVwcyAmJiBtYWluWm9uZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImltcG9ydGluZyBkYXRhIGZyb20gbWF0dGVycG9ydFwiKTtcclxuICAgICAgICAgICAgLy8gc2F2ZSBzd2VlcHMgZGF0YSBhcyBqc29uXHJcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHVwbG9hZEpzb25Ub1MzKFxyXG4gICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vaW52ZW50b3J5L2AsXHJcbiAgICAgICAgICAgICAgICBqc29uLFxyXG4gICAgICAgICAgICAgICAgXCJkYXRhLmpzb25cIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHJlbG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gcGVyZm9ybSBvbmx5IDM2MCBpbXBvcnQgc2luY2Ugd2UgYXJlIHJlbG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWZ0ZXIgcmVsb2FkaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjaGVjayBsYXllciBvZiBidWlsZGluZyB0eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IGxheWVyQnVpbGRpbmcgPSBhd2FpdCB0aGlzLmdldExheWVyQnlOYW1lKFwiQlVJTERJTkdcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWREZWZhdWx0Wm9uZSA9IGF3YWl0IHRoaXMuY3JlYXRlWm9uZShcclxuICAgICAgICAgICAgICAgIG5vZGUubWV0YWRhdGEsXHJcbiAgICAgICAgICAgICAgICBsYXllckJ1aWxkaW5nLmlkLFxyXG4gICAgICAgICAgICAgICAgc3VyZmFjZSxcclxuICAgICAgICAgICAgICAgIG1haW5ab25lLmlkLFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zd2VlcHMpLFxyXG4gICAgICAgICAgICAgICAgbm9kZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFjcmVhdGVkRGVmYXVsdFpvbmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZsb29ycykge1xyXG4gICAgICAgICAgICAgICAgZmxvb3Jab25lcyA9IGF3YWl0IHRoaXMuaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREZWZhdWx0Wm9uZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vclpvbmVzKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN3ZWVwcykubWFwKGFzeW5jIChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2VlcEluZm8gPSB0aGlzLnN3ZWVwc1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHN3ZWVwSW5mby51dWlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogSlNPTi5zdHJpbmdpZnkoc3dlZXBJbmZvLnBvc2l0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IEpTT04uc3RyaW5naWZ5KHN3ZWVwSW5mby5yb3RhdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiBMZXZlbFN0YXR1cy5MT1csXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJRDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgICAgICB9IGFzIE5hdmlnYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2ID0gYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jcmVhdGVOYXZpZ2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uSW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hdikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bGQgY3JlYXRlIG5hdmlnYXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25JbnB1dC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnQzNjBpbWFnZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIm1pc3NpbmcgZGF0YSAobm8gYnVpbGRpbmcgem9uZSlcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVpvbmUoXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIGxheWVySUQ6IHN0cmluZyxcclxuICAgICAgICBzdXJmYWNlOiBudW1iZXIgPSBudWxsLFxyXG4gICAgICAgIHBhcmVudElEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIHN3ZWVwczogc3RyaW5nW10gPSBbXSxcclxuICAgICAgICBub2RlOiBOb2RlID0gbnVsbCxcclxuICAgICAgICBtZXRhZGF0YTogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8Wm9uZT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVJbnB1dCA9IHtcclxuICAgICAgICAgICAgbmFtZSxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBsYXllcklELFxyXG4gICAgICAgICAgICBzd2VlcElEczogc3dlZXBzLFxyXG4gICAgICAgICAgICBub2RlSURzOiBub2RlID8gW25vZGUuaWRdIDogbnVsbCxcclxuICAgICAgICB9IGFzIFpvbmU7XHJcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHpvbmVJbnB1dCk7XHJcbiAgICAgICAgaWYgKHN1cmZhY2UpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnN1cmZhY2UgPSBzdXJmYWNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50SUQpIHtcclxuICAgICAgICAgICAgem9uZUlucHV0LnBhcmVudElEID0gcGFyZW50SUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB6b25lSW5wdXQubWV0YWRhdGEgPSBtZXRhZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3TG9jYWwgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmNyZWF0ZSh6b25lSW5wdXQpO1xyXG4gICAgICAgIHJldHVybiBuZXdMb2NhbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbXBvcnQzNjBpbWFnZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnRpbmcgMzYwIGltYWdlc1wiKTtcclxuICAgICAgICB0aGlzLmltcG9ydGluZ0ltYWdlcy5uZXh0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FucyA9IE9iamVjdC52YWx1ZXModGhpcy5zd2VlcHMpO1xyXG4gICAgICAgICAgICBsZXQgbWF4U2NhbjtcclxuICAgICAgICAgICAgbGV0IGluZGV4U2NhbjtcclxuICAgICAgICAgICAgY29uc3Qgbm1iU2NhbnMgPSBPYmplY3Qua2V5cyhzY2FucykubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBzY2FuIHBvaW50cyA6XCIsIG5tYlNjYW5zKTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFN3ZWVwc0NvdW50Lm5leHQobm1iU2NhbnMpO1xyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBzdGFydGVkIHRvIGxvYWQgaW1hZ2VzIGFscmVhZHlcclxuICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaW5kZXhTY2FuTG9hZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZXRha2luZyBpbXBvcnQgZnJvbSBzY2FuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGluZGV4U2NhbiA9ICtsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICBubWJTY2FucyA8IGluZGV4U2NhbiArIDUwXHJcbiAgICAgICAgICAgICAgICAgICAgPyAobWF4U2NhbiA9IG5tYlNjYW5zKVxyXG4gICAgICAgICAgICAgICAgICAgIDogKG1heFNjYW4gPSBpbmRleFNjYW4gKyA1MCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleFNjYW4gPSAwO1xyXG4gICAgICAgICAgICAgICAgbm1iU2NhbnMgPCA1MCA/IChtYXhTY2FuID0gbm1iU2NhbnMpIDogKG1heFNjYW4gPSA1MCk7XHJcbiAgICAgICAgICAgICAgICBtYXhTY2FuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4U2NhbjsgaW5kZXggPCBtYXhTY2FuOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzY2Fuc1tpbmRleF0udXVpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBhd2FpdCB0aGlzLnNkay5SZW5kZXJlci50YWtlRXF1aXJlY3Rhbmd1bGFyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAyMDQ4LCBoZWlnaHQ6IDEwMjQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXR0ZXJ0YWdzOiBmYWxzZSwgc3dlZXBzOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB1cGxvYWRCYXNlNjRJbWFnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2Fuc1tpbmRleF0udXVpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vc3dlZXBzL2AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3dlZXBcIixcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBQcm9jZXNzZWRDb3VudC5uZXh0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJpbmRleFNjYW5Mb2FkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFsbEZpbGVzRnJvbUZvbGRlclMzKGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3N3ZWVwc2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJhbmRvbmluZyBpbXBvcnQgYmVhY3VzZSBpdCB3YXMgY2FuY2VsbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXhTY2FuID09PSBubWJTY2Fucykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJbXBvcnQgMzYwIGRvbmVcIik7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImluZGV4U2NhbkxvYWRcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0byByZXN0YXJ0IHRoZSBwcm9jZWR1cmUgZnJvbSB3aGVyZSB3ZSBsZWZ0IG9mXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImluZGV4U2NhbkxvYWRcIiwgbWF4U2Nhbi50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdFNka0Zvck1vZGVsKHRoaXMubW9kZWxJRCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmltcG9ydERhdGEodGhpcy5zcGFjZUlELCAwLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb3ZlVG9GbG9vcihmbG9vck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIGJ5IG5hbWVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck5hbWUpO1xyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLm5hbWUgIT09IFwiXCIgJiYgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgaWRcclxuICAgICAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQgPSBPYmplY3QudmFsdWVzKHRoaXMuZmxvb3JzKS5maW5kKChmbG9vcikgPT5cclxuICAgICAgICAgICAgICAgIGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5pZCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZsb29yTWF0dGVycG9ydCk7XHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGZsb29yTWF0dGVycG9ydC5zZXF1ZW5jZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0Rmxvb3JEYXRhKFxyXG4gICAgICAgIGRlZmF1dFpvbmVJRDogc3RyaW5nLFxyXG4gICAgICAgIG5vZGU6IE5vZGUsXHJcbiAgICApOiBQcm9taXNlPFpvbmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IHpvbmVzID0gW107XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8odGhpcy5zZGsuTW9kZS5Nb2RlLkZMT09SUExBTik7XHJcbiAgICAgICAgY29uc3Qgbm1iRmxvb3JzID0gT2JqZWN0LmtleXModGhpcy5mbG9vcnMpLmxlbmd0aDtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRvdGFsIG51bWJlciBvZiBmbG9vcnNcIiwgbm1iRmxvb3JzKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm1iRmxvb3JzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSW1wb3J0aW5nIGZsb29yXCIsIGluZGV4KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKGluZGV4KS50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXQoNzAwKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWJvdXQgdG8gc2F2ZSB0aGUgZmxvb3JcIiwgaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZSA9IGF3YWl0IHRoaXMuc2F2ZUZsb29yKGRlZmF1dFpvbmVJRCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlY2VpdmVkIGZsb29yIHpvbmVcIiwgem9uZSk7XHJcbiAgICAgICAgICAgICAgICB6b25lcy5wdXNoKHpvbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh6b25lcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzYXZlRmxvb3IoZGVmYXV0Wm9uZUlEOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBQcm9taXNlPFpvbmU+IHtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMuY3VycmVudEZsb29yLmlkO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGbG9vci5uYW1lICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLmN1cnJlbnRGbG9vci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsYXllckZsb29yID0gYXdhaXQgdGhpcy5nZXRMYXllckJ5TmFtZShcIkZMT09SXCIpO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwc0luZm8gPSBPYmplY3QudmFsdWVzKHRoaXMuc3dlZXBzKTtcclxuICAgICAgICBjb25zdCBzd2VlcHNGb3JGbG9vciA9IHN3ZWVwc0luZm8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc3dlZXBJbmZvKSA9PiBzd2VlcEluZm8uZmxvb3JJbmZvLmlkID09PSB0aGlzLmN1cnJlbnRGbG9vci5pZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwSURzOiBzdHJpbmdbXSA9IHN3ZWVwc0ZvckZsb29yLm1hcCgoc3dlZXApID0+IHN3ZWVwLnV1aWQpO1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBhd2FpdCB0aGlzLmNyZWF0ZVpvbmUoXHJcbiAgICAgICAgICAgIGDDiXRhZ2UgJHtuYW1lfSAtICR7bm9kZS5tZXRhZGF0YX1gLFxyXG4gICAgICAgICAgICBsYXllckZsb29yLmlkLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBkZWZhdXRab25lSUQsXHJcbiAgICAgICAgICAgIHN3ZWVwSURzLFxyXG4gICAgICAgICAgICBub2RlLFxyXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiB0aGlzLmN1cnJlbnRGbG9vci5zZXF1ZW5jZSB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVE9ETyBsaW5rIHRvIHNjYW5zXHJcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgICAgICAgIHsgd2lkdGg6IDQwOTYsIGhlaWdodDogMjA0OCB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJRHNob3J0ID0gdGhpcy5zcGFjZUlELnNsaWNlKDAsIDgpO1xyXG4gICAgICAgIGF3YWl0IHVwbG9hZEJhc2U2NEltYWdlKFxyXG4gICAgICAgICAgICBiYXNlNjQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIGB2aXNpdHMvJHt0aGlzLm1vZGVsSUR9L3BsYW5zL2AsXHJcbiAgICAgICAgICAgIGBwbGFuX2Zsb29yXyR7dGhpcy5jdXJyZW50Rmxvb3IuaWR9XyR7c3BhY2VJRHNob3J0fWAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjcmVhdGUgUGxhbiBvYmplY3RcclxuICAgICAgICBjb25zdCBwbGFuID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBgcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfWAsXHJcbiAgICAgICAgICAgIGFubmV4ZTogYHZpc2l0cy8ke3RoaXMubW9kZWxJRH0vcGxhbnMvcGxhbl9mbG9vcl8ke3RoaXMuY3VycmVudEZsb29yLmlkfV8ke3NwYWNlSURzaG9ydH0uanBlZ2AsXHJcbiAgICAgICAgICAgIHpvbmVJRDogem9uZS5pZCxcclxuICAgICAgICAgICAgc3BhY2VJRDogdGhpcy5zcGFjZUlELFxyXG4gICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiB0cnVlLFxyXG4gICAgICAgICAgICBpc01vZGlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNJbXBvcnRlZE1hdHRlcnBvcnQ6IHRydWUsXHJcbiAgICAgICAgfSBhcyBQbGFuO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucGxhblNlcnZpY2UuY3JlYXRlUGxhbihwbGFuKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZsb29yIHNhdmVkXCIpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoem9uZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJhbmRvbigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhYmFuZG9ubmluZyBpbXBvcnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICB9LCAxNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGcmFtZSgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGcmFtZS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRMYXllckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPExheWVyPiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24odGhpcy5zcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50T3JnSWQgPSBtaXNzaW9uLm9yZ2FuaXNhdGlvbklEO1xyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGF3YWl0IHRoaXMubGF5ZXJTZXJ2aWNlLmdldExheWVyQnlOYW1lRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICBjdXJyZW50T3JnSWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxheWVyc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHRoZW5cclxuICAgICAgICByZXR1cm4gdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlTGF5ZXJGb3JPcmdhbmlzYXRpb24obmFtZSwgY3VycmVudE9yZ0lkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -3,6 +3,7 @@ import { Inject, Injectable } from "@angular/core";
3
3
  import { Subject } from "rxjs";
4
4
  import { dateHasExpired } from "../../helpers.service";
5
5
  import { ProfileStatus, RoleStatus } from "../../types.service";
6
+ import { DateTime } from "luxon";
6
7
  import * as i0 from "@angular/core";
7
8
  export class MissionService {
8
9
  constructor(
@@ -170,6 +171,26 @@ export class MissionService {
170
171
  });
171
172
  return missions.length > 0 ? missions : null;
172
173
  }
174
+ /**
175
+ * Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)
176
+ * @param template VisitTemplate
177
+ * @param missions Mission[] missions for this visit
178
+ * @returns Mission[] filtered missions
179
+ */
180
+ filterMissionsAssitedToLiveForTemplate(template, missions) {
181
+ const visitStartTimestamp = template.realStartedAt;
182
+ return missions.filter((mis) => {
183
+ if (!mis.connectedToLiveAt) {
184
+ return false;
185
+ }
186
+ if (mis.connectedToLiveAt.length === 0) {
187
+ return false;
188
+ }
189
+ const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];
190
+ const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();
191
+ return lastConnectedAtTimestamp > visitStartTimestamp;
192
+ });
193
+ }
173
194
  }
174
195
  MissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, deps: [{ token: 'currentAPIService' }], target: i0.ɵɵFactoryTarget.Injectable });
175
196
  MissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, providedIn: "root" });
@@ -182,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
182
203
  type: Inject,
183
204
  args: ['currentAPIService']
184
205
  }] }]; } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQWtDLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLaEcsTUFBTSxPQUFPLGNBQWM7SUFXdkI7SUFDSSxrREFBa0Q7SUFDckIsV0FBZ0I7UUFaakQsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQWM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQWM7UUFDdEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdDQUFnQyxDQUNsQyxZQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDdEUsQ0FBQyxRQUFR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RCxDQUFDOzsyR0F2T1EsY0FBYyxrQkFhWCxtQkFBbUI7K0dBYnRCLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFjUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGRhdGVIYXNFeHBpcmVkIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNaXNzaW9uLCBPcmdhbmlzYXRpb24sIFByb2ZpbGUsIFByb2ZpbGVTdGF0dXMsIFJvbGVTdGF0dXMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNaXNzaW9uU2VydmljZSB7XHJcbiAgICBjdXJyZW50TWlzc2lvbnNVcGRhdGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBsYXN0RXhwaXJlZE1pc3Npb246IE1pc3Npb247XHJcblxyXG4gICAgbmV4dE1pc3Npb25Ub1N0YXJ0OiBNaXNzaW9uO1xyXG5cclxuICAgIGN1cnJlbnRVc2VySUQ6IHN0cmluZztcclxuXHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAvLyBwcml2YXRlIGFmZmVjdGF0aW9uU2VydmljZTogQWZmZWN0YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0Zyb21Vc2VySUQodXNlcklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVVzZXIodXNlcklEKS50aGVuKChtaXNzaW9ucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnMuaXRlbXMuZmlsdGVyKChtaXMpID0+ICFtaXMuZGVsZXRlZEF0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihcclxuICAgICAgICBvcmRlcmVkT3JnSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8TWlzc2lvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihvcmRlcmVkT3JnSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZ0lEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeU9yZ2FuaXNhdGlvbihvcmdJRCkudGhlbihcclxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZShtaXNzaW9uOiBNaXNzaW9uKTogUHJvbWlzZTxNaXNzaW9uPiB7XHJcbiAgICAgICAgY29uc3QgdXBkTWlzc2lvbiA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVNaXNzaW9uKG1pc3Npb24pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWlzc2lvbiBjcmVhdGVkXCIsIHVwZE1pc3Npb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQodXBkTWlzc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIHVwZE1pc3Npb247XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlKG1pc3Npb246IGFueSk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIGNvbnN0IHVwZE1pc3Npb24gPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlTWlzc2lvbihtaXNzaW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1pc3Npb24gdXBkYXRlZFwiLCB1cGRNaXNzaW9uKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZDdXJyZW50VXNlck1pc3Npb25DaGFuZ2VkKHVwZE1pc3Npb24pO1xyXG4gICAgICAgIHJldHVybiB1cGRNaXNzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFzc2VydFJvbGVGb3JVc2VySW5PcmcoXHJcbiAgICAgICAgdXNlcjogUHJvZmlsZSxcclxuICAgICAgICBvcmc6IE9yZ2FuaXNhdGlvbixcclxuICAgICAgICByb2xlOiBSb2xlU3RhdHVzLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2lvbnNGcm9tVXNlcklEKHVzZXIuaWQpLnRoZW4oKG1pc3Npb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlzT3JnID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlzLm9yZ2FuaXNhdGlvbklEID09PSBvcmcuaWQgJiYgbWlzLnJvbGUgPT09IHJvbGU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNPcmcubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb25CeVNwYWNlKFxyXG4gICAgICAgIG9yZE9yZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlPcmRlcmVkT3JnYW5pc2F0aW9uQnlTcGFjZShvcmRPcmdJRCwge1xyXG4gICAgICAgICAgICBlcTogc3BhY2VJRCxcclxuICAgICAgICB9KS50aGVuKChtaXMpID0+IG1pcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc29mdERlbGV0ZU1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb24+IHtcclxuICAgICAgICAvLyBjb25zdCBoYXJkRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5IYXJkRGV0ZWxlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAvLyBpZiAoaGFyZERlbGV0ZSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5oYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTb2Z0IERlbGV0aW5nIG1pc3Npb25cIik7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvblVwZCA9IGF3YWl0IHRoaXMudXBkYXRlKHtcclxuICAgICAgICAgICAgaWQ6IG1pc3Npb25JRCxcclxuICAgICAgICAgICAgZGVsZXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQobWlzc2lvblVwZCk7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25VcGQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIGNvbnN0IG1pcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0TWlzc2lvbnMoKTtcclxuICAgICAgICByZXR1cm4gbWlzLml0ZW1zLmZpbHRlcigobSkgPT4gIW0uZGVsZXRlZEF0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhc3luYyBjYW5IYXJkRGV0ZWxlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gICAgIGNvbnN0IGV2ZW50cyA9IChcclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdEV2ZW50cyh7IG93bmVySUQ6IHsgZXE6IG1pc3Npb25JRCB9IH0pXHJcbiAgICAvLyAgICAgKS5pdGVtcztcclxuICAgIC8vICAgICBpZiAoZXZlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBjb25zdCBjb21tZW50cyA9IChcclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdENvbW1lbnRzKHsgb3duZXJJRDogeyBlcTogbWlzc2lvbklEIH0gfSlcclxuICAgIC8vICAgICApLml0ZW1zO1xyXG4gICAgLy8gICAgIGlmIChjb21tZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc3QgYWZmZWN0YXRpb25zID1cclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5hZmZlY3RhdGlvblNlcnZpY2UuZ2V0QWZmZWN0YXRpb25zRnJvbU1pc3Npb25JRChcclxuICAgIC8vICAgICAgICAgICAgIG1pc3Npb25JRCxcclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICBpZiAoYWZmZWN0YXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBhc3luYyBoYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTWlzc2lvbih7IGlkOiBtaXNzaW9uSUQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWN0aXZhdGVkTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkID0gW107XHJcbiAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZhdGVkID1cclxuICAgICAgICAgICAgICAgIG1pc3Npb24uZ3JvdXBzICYmIG1pc3Npb24uZ3JvdXBzLmluY2x1ZGVzKFByb2ZpbGVTdGF0dXMuQUNUSVZFKTtcclxuICAgICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWQucHVzaChtaXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhY3RpdmF0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5Wm9uZSh6b25lSUQpKS5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtaXMpID0+ICFtaXMuZGVsZXRlZEF0LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oKG1pc3Npb25zKSA9PiBtaXNzaW9ucy5pdGVtcylcclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmF0ZU1pc3Npb24obWlzOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBtaXMgJiZcclxuICAgICAgICAgICAgKCFtaXMuZ3JvdXBzIHx8ICFtaXMuZ3JvdXBzLmluY2x1ZGVzKFByb2ZpbGVTdGF0dXMuQUNUSVZFKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBzID0gbWlzLmdyb3VwcyA/IG1pcy5ncm91cHMgOiBbXTtcclxuICAgICAgICAgICAgZ3JvdXBzLnB1c2goUHJvZmlsZVN0YXR1cy5BQ1RJVkUpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh7IGlkOiBtaXMuaWQsIGdyb3VwcyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNCeVRlbXBsYXRlKHRlbXBsYXRlSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVRlbXBsYXRlKHRlbXBsYXRlSUQpKS5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtaXMpID0+ICFtaXMuZGVsZXRlZEF0LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0TWlzc2lvbihtaXNzaW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE1pc3Npb25zQnlab25lQnlSb2xlKFxyXG4gICAgICAgIHpvbmVJRDogc3RyaW5nLFxyXG4gICAgICAgIHJvbGU6IFJvbGVTdGF0dXMsXHJcbiAgICApOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5Wm9uZUJ5Um9sZShcclxuICAgICAgICAgICAgICAgIHpvbmVJRCxcclxuICAgICAgICAgICAgICAgIHsgZXE6IHJvbGUgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICB7ZGVsZXRlZEF0OiB7YXR0cmlidXRlRXhpc3RzOiBmYWxzZX19LFxyXG4gICAgICAgICAgICAgICAgMjAwLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKS5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0lmQ3VycmVudFVzZXJNaXNzaW9uQ2hhbmdlZChjaGFuZ2VkTWlzc2lvbjogTWlzc2lvbikge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VySUQgPT09IGNoYW5nZWRNaXNzaW9uLnVzZXJJRCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNaXNzaW9uc1VwZGF0ZWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5zdGFudE1pc3Npb25zT2ZDdXJyZW50KFxyXG4gICAgICAgIGN1cnJlbnRVc2VySUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8TWlzc2lvbltdIHwgbnVsbD4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJJRCA9IGN1cnJlbnRVc2VySUQ7XHJcbiAgICAgICAgbGV0IG1pc3Npb25zID0gYXdhaXQgdGhpcy5nZXRNaXNzaW9uc0Zyb21Vc2VySUQoY3VycmVudFVzZXJJRCk7XHJcbiAgICAgIFxyXG4gICAgICAgIC8qKiBGaWx0ZXIgdG8ga2VlcCBvbmx5IGF2YWlsYWJsZSBtaXNzaW9ucyAqL1xyXG4gICAgICAgIG1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0V4cGlyZWQgPSBkYXRlSGFzRXhwaXJlZChtaXNzaW9uLmVuZERhdGVUaW1lKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBVcGRhdGUgdGhpcy5sYXN0RXhwaXJlZE1pc3Npb24gKi9cclxuICAgICAgICAgICAgaWYgKGhhc0V4cGlyZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFeHBpcmVkRGF0ZSA9IHRoaXMubGFzdEV4cGlyZWRNaXNzaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLmxhc3RFeHBpcmVkTWlzc2lvbi5lbmREYXRlVGltZSlcclxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlRXhwaXJlZCA9IG5ldyBEYXRlKG1pc3Npb24uZW5kRGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsYXN0RXhwaXJlZERhdGUgfHwgZGF0ZUV4cGlyZWQgPiBsYXN0RXhwaXJlZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFeHBpcmVkTWlzc2lvbiA9IG1pc3Npb247XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICFoYXNFeHBpcmVkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAobWlzc2lvbnMuc29tZSgobWlzKT0+bWlzLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0pICYmIG1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gd29ya2Zsb3cgZm9yIFZJU0lUT1JfTVVTRVVNXHJcbiAgICAgICAgICAgIHJldHVybiBtaXNzaW9ucztcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqIEtlZXAgb25seSBzdGFydGVkIG1pc3Npb25zICovXHJcbiAgICAgICAgbGV0IG5leHRNaXNzaW9uRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgbWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRlZCA9IG1pc3Npb24uc3RhcnREYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyBkYXRlSGFzRXhwaXJlZChtaXNzaW9uLnN0YXJ0RGF0ZVRpbWUpXHJcbiAgICAgICAgICAgICAgICA6IHRydWU7XHJcbiAgICAgICAgICAgIC8qKiBVcGRhdGUgbmV4dCBtaXNzaW9uIHRvIHN0YXJ0ICovXHJcbiAgICAgICAgICAgIGlmICghc3RhcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlzc2lvbkRhdGUgPSBuZXcgRGF0ZShtaXNzaW9uLnN0YXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0TWlzc2lvbkRhdGUgfHwgbWlzc2lvbkRhdGUgPCBuZXh0TWlzc2lvbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRNaXNzaW9uVG9TdGFydCA9IG1pc3Npb247XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dE1pc3Npb25EYXRlID0gbWlzc2lvbkRhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zLmxlbmd0aCA+IDAgPyBtaXNzaW9ucyA6IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQWtDLGFBQWEsRUFBRSxVQUFVLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDL0csT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFLakMsTUFBTSxPQUFPLGNBQWM7SUFXdkI7SUFDSSxrREFBa0Q7SUFDckIsV0FBZ0I7UUFaakQsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQWM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQWM7UUFDdEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdDQUFnQyxDQUNsQyxZQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLDZCQUE2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QUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQ0FBc0MsQ0FBQyxRQUF1QixFQUFFLFFBQW1CO1FBQy9FLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUNuRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFO2dCQUN4QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUNELElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlFLE9BQU8sd0JBQXdCLEdBQUcsbUJBQW1CLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzsyR0E1UFEsY0FBYyxrQkFhWCxtQkFBbUI7K0dBYnRCLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFjUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGRhdGVIYXNFeHBpcmVkIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNaXNzaW9uLCBPcmdhbmlzYXRpb24sIFByb2ZpbGUsIFByb2ZpbGVTdGF0dXMsIFJvbGVTdGF0dXMsIFZpc2l0VGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNaXNzaW9uU2VydmljZSB7XHJcbiAgICBjdXJyZW50TWlzc2lvbnNVcGRhdGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBsYXN0RXhwaXJlZE1pc3Npb246IE1pc3Npb247XHJcblxyXG4gICAgbmV4dE1pc3Npb25Ub1N0YXJ0OiBNaXNzaW9uO1xyXG5cclxuICAgIGN1cnJlbnRVc2VySUQ6IHN0cmluZztcclxuXHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAvLyBwcml2YXRlIGFmZmVjdGF0aW9uU2VydmljZTogQWZmZWN0YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0Zyb21Vc2VySUQodXNlcklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVVzZXIodXNlcklEKS50aGVuKChtaXNzaW9ucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnMuaXRlbXMuZmlsdGVyKChtaXMpID0+ICFtaXMuZGVsZXRlZEF0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihcclxuICAgICAgICBvcmRlcmVkT3JnSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8TWlzc2lvbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5T3JkZXJlZE9yZ2FuaXNhdGlvbihvcmRlcmVkT3JnSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5T3JnYW5pc2F0aW9uKG9yZ0lEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeU9yZ2FuaXNhdGlvbihvcmdJRCkudGhlbihcclxuICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZShtaXNzaW9uOiBNaXNzaW9uKTogUHJvbWlzZTxNaXNzaW9uPiB7XHJcbiAgICAgICAgY29uc3QgdXBkTWlzc2lvbiA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVNaXNzaW9uKG1pc3Npb24pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWlzc2lvbiBjcmVhdGVkXCIsIHVwZE1pc3Npb24pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQodXBkTWlzc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIHVwZE1pc3Npb247XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlKG1pc3Npb246IGFueSk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIGNvbnN0IHVwZE1pc3Npb24gPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlTWlzc2lvbihtaXNzaW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1pc3Npb24gdXBkYXRlZFwiLCB1cGRNaXNzaW9uKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSWZDdXJyZW50VXNlck1pc3Npb25DaGFuZ2VkKHVwZE1pc3Npb24pO1xyXG4gICAgICAgIHJldHVybiB1cGRNaXNzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFzc2VydFJvbGVGb3JVc2VySW5PcmcoXHJcbiAgICAgICAgdXNlcjogUHJvZmlsZSxcclxuICAgICAgICBvcmc6IE9yZ2FuaXNhdGlvbixcclxuICAgICAgICByb2xlOiBSb2xlU3RhdHVzLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2lvbnNGcm9tVXNlcklEKHVzZXIuaWQpLnRoZW4oKG1pc3Npb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlzT3JnID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlzLm9yZ2FuaXNhdGlvbklEID09PSBvcmcuaWQgJiYgbWlzLnJvbGUgPT09IHJvbGU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNPcmcubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNCeU9yZGVyZWRPcmdhbmlzYXRpb25CeVNwYWNlKFxyXG4gICAgICAgIG9yZE9yZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlPcmRlcmVkT3JnYW5pc2F0aW9uQnlTcGFjZShvcmRPcmdJRCwge1xyXG4gICAgICAgICAgICBlcTogc3BhY2VJRCxcclxuICAgICAgICB9KS50aGVuKChtaXMpID0+IG1pcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc29mdERlbGV0ZU1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb24+IHtcclxuICAgICAgICAvLyBjb25zdCBoYXJkRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5IYXJkRGV0ZWxlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAvLyBpZiAoaGFyZERlbGV0ZSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5oYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTb2Z0IERlbGV0aW5nIG1pc3Npb25cIik7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvblVwZCA9IGF3YWl0IHRoaXMudXBkYXRlKHtcclxuICAgICAgICAgICAgaWQ6IG1pc3Npb25JRCxcclxuICAgICAgICAgICAgZGVsZXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tJZkN1cnJlbnRVc2VyTWlzc2lvbkNoYW5nZWQobWlzc2lvblVwZCk7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25VcGQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIGNvbnN0IG1pcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0TWlzc2lvbnMoKTtcclxuICAgICAgICByZXR1cm4gbWlzLml0ZW1zLmZpbHRlcigobSkgPT4gIW0uZGVsZXRlZEF0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhc3luYyBjYW5IYXJkRGV0ZWxlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gICAgIGNvbnN0IGV2ZW50cyA9IChcclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdEV2ZW50cyh7IG93bmVySUQ6IHsgZXE6IG1pc3Npb25JRCB9IH0pXHJcbiAgICAvLyAgICAgKS5pdGVtcztcclxuICAgIC8vICAgICBpZiAoZXZlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBjb25zdCBjb21tZW50cyA9IChcclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5BUEkuTGlzdENvbW1lbnRzKHsgb3duZXJJRDogeyBlcTogbWlzc2lvbklEIH0gfSlcclxuICAgIC8vICAgICApLml0ZW1zO1xyXG4gICAgLy8gICAgIGlmIChjb21tZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc3QgYWZmZWN0YXRpb25zID1cclxuICAgIC8vICAgICAgICAgYXdhaXQgdGhpcy5hZmZlY3RhdGlvblNlcnZpY2UuZ2V0QWZmZWN0YXRpb25zRnJvbU1pc3Npb25JRChcclxuICAgIC8vICAgICAgICAgICAgIG1pc3Npb25JRCxcclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICBpZiAoYWZmZWN0YXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBhc3luYyBoYXJkRGVsZXRlTWlzc2lvbihtaXNzaW9uSUQ6IHN0cmluZyk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTWlzc2lvbih7IGlkOiBtaXNzaW9uSUQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWN0aXZhdGVkTWlzc2lvbnMobWlzc2lvbnM6IE1pc3Npb25bXSk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkID0gW107XHJcbiAgICAgICAgbWlzc2lvbnMubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZhdGVkID1cclxuICAgICAgICAgICAgICAgIG1pc3Npb24uZ3JvdXBzICYmIG1pc3Npb24uZ3JvdXBzLmluY2x1ZGVzKFByb2ZpbGVTdGF0dXMuQUNUSVZFKTtcclxuICAgICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWQucHVzaChtaXNzaW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhY3RpdmF0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5NaXNzaW9uc0J5Wm9uZSh6b25lSUQpKS5pdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtaXMpID0+ICFtaXMuZGVsZXRlZEF0LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0TWlzc2lvbnNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oKG1pc3Npb25zKSA9PiBtaXNzaW9ucy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aXZhdGVNaXNzaW9uKG1pczogTWlzc2lvbikge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgbWlzICYmXHJcbiAgICAgICAgICAgICghbWlzLmdyb3VwcyB8fCAhbWlzLmdyb3Vwcy5pbmNsdWRlcyhQcm9maWxlU3RhdHVzLkFDVElWRSkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IG1pcy5ncm91cHMgPyBtaXMuZ3JvdXBzIDogW107XHJcbiAgICAgICAgICAgIGdyb3Vwcy5wdXNoKFByb2ZpbGVTdGF0dXMuQUNUSVZFKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBpZDogbWlzLmlkLCBncm91cHMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE1pc3Npb25zQnlUZW1wbGF0ZSh0ZW1wbGF0ZUlEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb25bXT4ge1xyXG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLk1pc3Npb25zQnlUZW1wbGF0ZSh0ZW1wbGF0ZUlEKSkuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobWlzKSA9PiAhbWlzLmRlbGV0ZWRBdCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldE1pc3Npb24obWlzc2lvbklEOiBzdHJpbmcpOiBQcm9taXNlPE1pc3Npb24+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldE1pc3Npb24obWlzc2lvbklEKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRNaXNzaW9uc0J5Wm9uZUJ5Um9sZShcclxuICAgICAgICB6b25lSUQ6IHN0cmluZyxcclxuICAgICAgICByb2xlOiBSb2xlU3RhdHVzLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10+IHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTWlzc2lvbnNCeVpvbmVCeVJvbGUoXHJcbiAgICAgICAgICAgICAgICB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICB7IGVxOiByb2xlIH0sXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgeyBkZWxldGVkQXQ6IHsgYXR0cmlidXRlRXhpc3RzOiBmYWxzZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAyMDAsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLml0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrSWZDdXJyZW50VXNlck1pc3Npb25DaGFuZ2VkKGNoYW5nZWRNaXNzaW9uOiBNaXNzaW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXJJRCA9PT0gY2hhbmdlZE1pc3Npb24udXNlcklEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1pc3Npb25zVXBkYXRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnN0YW50TWlzc2lvbnNPZkN1cnJlbnQoXHJcbiAgICAgICAgY3VycmVudFVzZXJJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxNaXNzaW9uW10gfCBudWxsPiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlcklEID0gY3VycmVudFVzZXJJRDtcclxuICAgICAgICBsZXQgbWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldE1pc3Npb25zRnJvbVVzZXJJRChjdXJyZW50VXNlcklEKTtcclxuXHJcbiAgICAgICAgLyoqIEZpbHRlciB0byBrZWVwIG9ubHkgYXZhaWxhYmxlIG1pc3Npb25zICovXHJcbiAgICAgICAgbWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzRXhwaXJlZCA9IGRhdGVIYXNFeHBpcmVkKG1pc3Npb24uZW5kRGF0ZVRpbWUpO1xyXG5cclxuICAgICAgICAgICAgLyoqIFVwZGF0ZSB0aGlzLmxhc3RFeHBpcmVkTWlzc2lvbiAqL1xyXG4gICAgICAgICAgICBpZiAoaGFzRXhwaXJlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEV4cGlyZWREYXRlID0gdGhpcy5sYXN0RXhwaXJlZE1pc3Npb25cclxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHRoaXMubGFzdEV4cGlyZWRNaXNzaW9uLmVuZERhdGVUaW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVFeHBpcmVkID0gbmV3IERhdGUobWlzc2lvbi5lbmREYXRlVGltZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3RFeHBpcmVkRGF0ZSB8fCBkYXRlRXhwaXJlZCA+IGxhc3RFeHBpcmVkRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEV4cGlyZWRNaXNzaW9uID0gbWlzc2lvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gIWhhc0V4cGlyZWQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChtaXNzaW9ucy5zb21lKChtaXMpID0+IG1pcy5yb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNKSAmJiBtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdvcmtmbG93IGZvciBWSVNJVE9SX01VU0VVTVxyXG4gICAgICAgICAgICByZXR1cm4gbWlzc2lvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKiBLZWVwIG9ubHkgc3RhcnRlZCBtaXNzaW9ucyAqL1xyXG4gICAgICAgIGxldCBuZXh0TWlzc2lvbkRhdGUgPSBudWxsO1xyXG4gICAgICAgIG1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBtaXNzaW9uLnN0YXJ0RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gZGF0ZUhhc0V4cGlyZWQobWlzc2lvbi5zdGFydERhdGVUaW1lKVxyXG4gICAgICAgICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgICAgICAvKiogVXBkYXRlIG5leHQgbWlzc2lvbiB0byBzdGFydCAqL1xyXG4gICAgICAgICAgICBpZiAoIXN0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb25EYXRlID0gbmV3IERhdGUobWlzc2lvbi5zdGFydERhdGVUaW1lKTtcclxuICAgICAgICAgICAgICAgIGlmICghbmV4dE1pc3Npb25EYXRlIHx8IG1pc3Npb25EYXRlIDwgbmV4dE1pc3Npb25EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TWlzc2lvblRvU3RhcnQgPSBtaXNzaW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIG5leHRNaXNzaW9uRGF0ZSA9IG1pc3Npb25EYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzdGFydGVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5sZW5ndGggPiAwID8gbWlzc2lvbnMgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmlsdGVycyB0aGUgbWlzc2lvbnMgdGhhdCBhc3Npc3RlZCB0byBsaXZlIG9mIHRoZSB2aXNpdCAoYnkgY29tcGFyaW5nIHRoZSByZWFsU3RhcnRUaW1lIG9mIFZpc2l0VGVtcGxhdGUgYW5kIGNvbm5lY3RlZEF0IHRpbWUpXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGUgVmlzaXRUZW1wbGF0ZSBcclxuICAgICAqIEBwYXJhbSBtaXNzaW9ucyBNaXNzaW9uW10gbWlzc2lvbnMgZm9yIHRoaXMgdmlzaXRcclxuICAgICAqIEByZXR1cm5zIE1pc3Npb25bXSBmaWx0ZXJlZCBtaXNzaW9uc1xyXG4gICAgICovXHJcbiAgICBmaWx0ZXJNaXNzaW9uc0Fzc2l0ZWRUb0xpdmVGb3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVmlzaXRUZW1wbGF0ZSwgbWlzc2lvbnM6IE1pc3Npb25bXSk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgY29uc3QgdmlzaXRTdGFydFRpbWVzdGFtcCA9IHRlbXBsYXRlLnJlYWxTdGFydGVkQXQ7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zLmZpbHRlcigobWlzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghbWlzLmNvbm5lY3RlZFRvTGl2ZUF0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1pcy5jb25uZWN0ZWRUb0xpdmVBdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsYXN0Q29ubmVjdGVkQXQgPSBtaXMuY29ubmVjdGVkVG9MaXZlQXRbbWlzLmNvbm5lY3RlZFRvTGl2ZUF0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0Q29ubmVjdGVkQXRUaW1lc3RhbXAgPSBEYXRlVGltZS5mcm9tSVNPKGxhc3RDb25uZWN0ZWRBdCkudG9NaWxsaXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGxhc3RDb25uZWN0ZWRBdFRpbWVzdGFtcCA+IHZpc2l0U3RhcnRUaW1lc3RhbXA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -2889,6 +2889,26 @@ class MissionService {
2889
2889
  return missions.length > 0 ? missions : null;
2890
2890
  });
2891
2891
  }
2892
+ /**
2893
+ * Filters the missions that assisted to live of the visit (by comparing the realStartTime of VisitTemplate and connectedAt time)
2894
+ * @param template VisitTemplate
2895
+ * @param missions Mission[] missions for this visit
2896
+ * @returns Mission[] filtered missions
2897
+ */
2898
+ filterMissionsAssitedToLiveForTemplate(template, missions) {
2899
+ const visitStartTimestamp = template.realStartedAt;
2900
+ return missions.filter((mis) => {
2901
+ if (!mis.connectedToLiveAt) {
2902
+ return false;
2903
+ }
2904
+ if (mis.connectedToLiveAt.length === 0) {
2905
+ return false;
2906
+ }
2907
+ const lastConnectedAt = mis.connectedToLiveAt[mis.connectedToLiveAt.length - 1];
2908
+ const lastConnectedAtTimestamp = DateTime.fromISO(lastConnectedAt).toMillis();
2909
+ return lastConnectedAtTimestamp > visitStartTimestamp;
2910
+ });
2911
+ }
2892
2912
  }
2893
2913
  MissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, deps: [{ token: 'currentAPIService' }], target: i0.ɵɵFactoryTarget.Injectable });
2894
2914
  MissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MissionService, providedIn: "root" });
@@ -9200,7 +9220,7 @@ class MatterportImportService {
9200
9220
  yield this.import360images();
9201
9221
  return Promise.resolve(true);
9202
9222
  }
9203
- return Promise.resolve(false);
9223
+ return Promise.reject(new Error("missing data (no building zone)"));
9204
9224
  });
9205
9225
  }
9206
9226
  createZone(name, layerID, surface = null, parentID = null, sweeps = [], node = null, metadata = null) {