@smarterplan/ngx-smarterplan-core 1.4.16 → 1.4.17

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.
@@ -216,6 +216,16 @@ export class FilterService {
216
216
  const pois = object.pois;
217
217
  if (pois) {
218
218
  const [poi] = pois.items;
219
+ // Zones are defined by the sweeps they contain, so an object placed in a viewer
220
+ // that has no sweeps belongs to no zone at all. Filtering by zone then removes
221
+ // it from every zone rather than from the wrong one - which is what kept tags
222
+ // created in the Three.js viewer from ever appearing in Matterport. The tag
223
+ // visibility filter already reads "no sweep" as "not floor-scoped, show it";
224
+ // this is the same rule applied to zones.
225
+ if (poi && poi.coordinate && !poi.matterportSweepID) {
226
+ filteredObjects.push(object);
227
+ return;
228
+ }
219
229
  if (poi && zone) {
220
230
  if (zone.sweepIDs && zone.sweepIDs.includes(poi.matterportSweepID)) {
221
231
  if (this.poiService.poiIsVirtual(poi) && zone.layer && zone.layer.name === "FLOOR") {
@@ -607,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
607
617
  providedIn: "root",
608
618
  }]
609
619
  }], ctorParameters: () => [{ type: i1.BaseUserService }, { type: i2.ZoneService }, { type: i3.PoiService }] });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSSxPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBTWIsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFNVjtJQUNBO0lBQ0E7SUFQSixnQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuRCxpQkFBaUIsQ0FBUztJQUVqQyxZQUNZLFdBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzlCLENBQUM7SUFHTCxxQkFBcUIsQ0FBQyxlQUF5QixF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QVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2hDLENBQUM7Z0JBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7d0dBL3lCUSxhQUFhOzRHQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBndWFyZC1mb3ItaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGdldExldmVsc0JlbG93LCBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucywgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucywgZmlsdGVyVW5pcXVlQXJyYXlCeUlEIH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBab25lLFxuICAgIEVxdWlwbWVudCxcbiAgICBMZXZlbFN0YXR1cyxcbiAgICBNZWFzdXJlbWVudCxcbiAgICBNaXNzaW9uLFxuICAgIE9yZ2FuaXNhdGlvbixcbiAgICBQb2lUeXBlLFxuICAgIFByb2ZpbGVFbnRpdHksXG4gICAgUm9sZVN0YXR1cyxcbiAgICBTcGFjZSxcbiAgICBUaWNrZXQsXG4gICAgRmVhdHVyZSxcbiAgICBDb21tZW50LFxuICAgIE9iamVjdDNEXG59IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BvaS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gXCIuL21vZGVscy96b25lLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xuZW51bSBGaWx0ZXJUeXBlIHtcbiAgICBET01BSU4gPSBcIkRPTUFJTlwiLFxuICAgIExFVkVMID0gXCJMRVZFTFwiLFxuICAgIFJPTEUgPSBcIlJPTEVcIixcbiAgICBaT05FID0gXCJaT05FXCIsXG4gICAgU1BBQ0UgPSBcIlNQQUNFXCIsXG4gICAgSEFTSFRBRyA9IFwiSEFTSFRBR1wiLFxufVxuaW1wb3J0IGxldmVuc2h0ZWluIGZyb20gJ2pzLWxldmVuc2h0ZWluJztcbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRlRmlsdGVyOiBTdWJqZWN0PERhdGVbXT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHVibGljIGN1cnJlbnREYXRlRmlsdGVyOiBEYXRlW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxuICAgICkgeyB9XG5cblxuICAgIGZpbHRlclRpY2tldHNCeURvbWFpbih0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLCBkb21haW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XG4gICAgfVxuXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xuICAgICAgICBjb25zdCB2aXNpYmxlTGV2ZWxzID0gZ2V0TGV2ZWxzQmVsb3cobGV2ZWwpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IG9iamVjdHNUb0ZpbHRlci5maWx0ZXIoKHRpYykgPT5cbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgIH1cblxuICAgIGZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxuICAgICAgICBtaXNzaW9uOiBNaXNzaW9uLFxuICAgICk6IFRpY2tldFtdIHtcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXG4gICAgICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXG4gICAgICAgICAgICBSb2xlU3RhdHVzLkFETUlOLFxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKCFtYW5hZ2VyUm9sZXMuaW5jbHVkZXMobWlzc2lvbi5yb2xlKSkge1xuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XG4gICAgICAgICAgICAgICAgLy8gU0VSVklDRSBjYW4gc2VlIHRpY2tldHMgdG8gd2hpY2ggaGUgaXMgYXNzaWduZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrZXRzQXNzaWduZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0LmFzc2lnbmVlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgdC5hc3NpZ25lZXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0c0Fzc2lnbmVkLnB1c2godCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPQ0NVUEFOVCBhbmQgVklTSVRPUiBjYW4gc2VlIG9ubHkgdGlja2V0cyB0aGF0IHRoZXkgY3JlYXRlZFxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXQub3duZXJNaXNzaW9uSUQgPT09IG1pc3Npb24uaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyO1xuICAgIH1cblxuICAgIGdldEZpbHRlcnNGb3JSb2xlKHJvbGU6IFJvbGVTdGF0dXMpOiBGaWx0ZXJUeXBlW10ge1xuICAgICAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk1BTkFHRVI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9XTkVSOlxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5aT05FLCBGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSwgLy8gdGhhdCBpcyB0aGUgbW9zdCBzZXZlcmUgZmlsdGVyXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5PQ0NVUEFOVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuSEFTSFRBRyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5aT05FLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTTpcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU06XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3JDdXJyZW50VXNlckluU3BhY2UoXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPE9iamVjdDNEW10+IHtcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvYmogb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXMob2JqKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxPYmplY3QzRHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZmlsdGVyVGlja2V0c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPFRpY2tldFtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XG4gICAgICAgIGxldCByb2xlRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogVGlja2V0W10gPSB0aWNrZXRzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuRE9NQUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9tYWluczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtLmRvbWFpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCAuLi5tLmRvbWFpbnNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0cywgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnREb21GaWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQgPSBhbGxEb21haW5zRmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ST0xFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZU1pc3Npb24gPSBjdXJyZW50U3BhY2VNaXNzaW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyVGlja2V0c0Zvck1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0Um9sZU1pc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0TGVsZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGtlZXAgb25seSB0aWNrZXRzIHByZXNlbnQgaW4gYWxsIGZpbHRlcmVkIGFycmF5c1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRvbUZpbHRlcmVkKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxldmVsRmlsdGVyZWQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHpvbmVGaWx0ZXJlZCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbmFsVGlja2V0cyk7XG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxuICAgICAgICBuZXh0PzogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcbiAgICApOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBjb25zdCBzID0gdGhpcy51cGRhdGVEYXRlRmlsdGVyLnN1YnNjcmliZShuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZUZpbHRlciA9IGRhdGVSYW5nZTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlRmlsdGVyLm5leHQoZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJPYmplY3RzRm9yRGF0ZVJhbmdlKG9iamVjdHM6IGFueVtdLCBkYXRlUmFuZ2U6IERhdGVbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShvYmplY3QuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbHRlck1lYXN1cmVtZW50c0ZvckRhdGVSYW5nZShcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxuICAgICAgICBkYXRlUmFuZ2U6IERhdGVbXSxcbiAgICApOiBNZWFzdXJlbWVudFtdIHtcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XG5cbiAgICAgICAgaWYgKGRhdGVSYW5nZS5ldmVyeShkID0+IGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzSW52YWxpZERhdGUoZCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShtZWFzdXJlLmNvbW1lbnQuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cbiAgICAgICAgem9uZUlEOiBzdHJpbmcgPSBudWxsLFxuICAgICAgICB6b25lOiBab25lID0gbnVsbCxcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IFtdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID0gb2JqZWN0LnBvaXM7XG4gICAgICAgICAgICAgICAgaWYgKHBvaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BvaV0gPSBwb2lzLml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6b25lLnN3ZWVwSURzICYmIHpvbmUuc3dlZXBJRHMuaW5jbHVkZXMocG9pLm1hdHRlcnBvcnRTd2VlcElEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvaVNlcnZpY2UucG9pSXNWaXJ0dWFsKHBvaSkgJiYgem9uZS5sYXllciAmJiB6b25lLmxheWVyLm5hbWUgPT09IFwiRkxPT1JcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmICF6b25lICYmIHpvbmVJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5pZCA9PT0gem9uZUlEIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5wYXJlbnRJRCA9PT0gem9uZUlELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT2JqZWN0cztcbiAgICB9XG5cbiAgICBmaWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxuICAgICAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcbiAgICAgICAgZG9tYWluSURMaXN0OiBzdHJpbmdbXSxcbiAgICApOiBFcXVpcG1lbnRbXSB7XG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoKGVxdWlwKSA9PlxuICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlEb21haW5dO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXF1aXApID0+XG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluICYmXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXG4gICAgICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbi5wYXJlbnRJRCksXG4gICAgICAgICk7XG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChmaWx0ZXJlZCk7XG4gICAgfVxuXG5cbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0IVxuICAgIC8vIGZpbHRlck9iamVjdHMzREJ5RG9tYWluTGlzdChcbiAgICAvLyAgIG9iamVjdHMzRDogT2JqZWN0M0RbXSxcbiAgICAvLyAgIGRvbWFpbklETGlzdDogc3RyaW5nW10sXG4gICAgLy8gKTogT2JqZWN0M0RbXSB7XG4gICAgLy8gICBsZXQgZmlsdGVyZWQgPSBbXTtcbiAgICAvLyAgIGNvbnN0IGZpbHRlcmVkQnlEb21haW4gPSBvYmplY3RzM0QuZmlsdGVyKChlcXVpcCkgPT5cbiAgICAvLyAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcbiAgICAvLyAgICk7XG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeURvbWFpbl07XG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gb2JqZWN0czNELmZpbHRlcihcbiAgICAvLyAgICAgKG9iaikgPT5cbiAgICAvLyAgICAgICBvYmouZG9tYWluICYmXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbi5wYXJlbnRJRCAmJlxuICAgIC8vICAgICAgIGRvbWFpbklETGlzdC5pbmNsdWRlcyhvYmouZG9tYWluLnBhcmVudElEKSxcbiAgICAvLyAgICk7XG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XG4gICAgLy8gICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcbiAgICAvLyB9XG5cbiAgICBmaWx0ZXJFcXVpcG1lbnRzRm9yVGVybShlcXVpcHM6IEVxdWlwbWVudFtdLCB0ZXJtOiBzdHJpbmcpOiBFcXVpcG1lbnRbXSB7XG4gICAgICAgIC8vIGZpbHRlciBkb21haW5zXG4gICAgICAgIGxldCBieURvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERvbWFpbiA9IGVxLmRvbWFpbi5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZERvbWFpbiwgdGVybSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldiA8PSAyIHx8IG5vcm1hbGl6ZWREb21haW4uaW5jbHVkZXModGVybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBieVBhcmVudERvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5wYXJlbnRJRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJlbnQgPSBlcS5kb21haW4ucGFyZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXYgPSBsZXZlbnNodGVpbihub3JtYWxpemVkUGFyZW50LCB0ZXJtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZFBhcmVudC5pbmNsdWRlcyh0ZXJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJ5RG9tYWluID0gWy4uLmJ5RG9tYWluLCAuLi5ieVBhcmVudERvbWFpbl07XG4gICAgICAgIC8vIGZpbHRlciBuYW1lXG4gICAgICAgIGxldCBieU5hbWUgPSBbXTtcbiAgICAgICAgY29uc3QgdGVybXMgPSB0ZXJtLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcbiAgICAgICAgZm9yIChjb25zdCBlcSBvZiBlcXVpcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZXEubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGVybXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVuc2h0ZWluKHRva2VuLCB3b3JkKSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCA9PT0gdGVybXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnlOYW1lLnB1c2goZXEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnlOYW1lU2ltcGxlID0gZXF1aXBzLmZpbHRlcigoZXEpID0+XG4gICAgICAgICAgICBlcS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIGJ5TmFtZSA9IFsuLi5ieU5hbWUsIC4uLmJ5TmFtZVNpbXBsZV07XG4gICAgICAgIC8vIGJ5IHNlcmlhbCBudW1iZXJcbiAgICAgICAgY29uc3QgYnlTZXJpYWxOdW1iZXIgPSBlcXVpcHMuZmlsdGVyKFxuICAgICAgICAgICAgKGVxKSA9PiBlcS5zZXJpYWxOdW1iZXIgJiYgZXEuc2VyaWFsTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5ieURvbWFpbiwgLi4uYnlOYW1lLCAuLi5ieVNlcmlhbE51bWJlcl07XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUaWNrZXRzRm9yVGVybSh0aWNrZXRzOiBUaWNrZXRbXSwgdGVybTogc3RyaW5nKTogVGlja2V0W10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0odGlja2V0cywgdGVybSk7XG4gICAgICAgIC8vIGJ5IGVxdWlwbWVudFxuICAgICAgICBjb25zdCBieUVxdWlwbWVudCA9IHRpY2tldHMuZmlsdGVyKFxuICAgICAgICAgICAgKHRpY2tldCkgPT5cbiAgICAgICAgICAgICAgICB0aWNrZXQuZXF1aXBtZW50cyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0ZvclRlcm0odGlja2V0LmVxdWlwbWVudHMsIHRlcm0pLmxlbmd0aCA+XG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlFcXVpcG1lbnRdKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJMb2NhdGlvbnNGb3JUZXJtKGxvY2F0aW9uczogU3BhY2VbXSwgdGVybTogc3RyaW5nKTogU3BhY2VbXSB7XG4gICAgICAgIC8vIGJ5IG5hbWVcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxuICAgICAgICAgICAgbG9jLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xuICAgICAgICBjb25zdCBieUFkZHJlc3MgPSBsb2NhdGlvbnMuZmlsdGVyKChsb2MpID0+XG4gICAgICAgICAgICBsb2MuYWRkcmVzc2VzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5TmFtZSwgLi4uYnlBZGRyZXNzXSk7XG4gICAgfVxuXG4gICAgZmlsdGVyT3JnYW5pc2F0aW9uc0ZvclRlcm0oXG4gICAgICAgIG9yZ3M6IE9yZ2FuaXNhdGlvbltdLFxuICAgICAgICB0ZXJtOiBzdHJpbmcsXG4gICAgKTogT3JnYW5pc2F0aW9uW10ge1xuICAgICAgICBjb25zdCBieU5hbWUgPSBvcmdzLmZpbHRlcigob3JnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXG4gICAgICAgICAgICAgICAgKSB8fCBvcmcubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJ5TmFtZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJVc2Vyc0ZvclRlcm0odXNlcnM6IFByb2ZpbGVFbnRpdHlbXSwgdGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGJ5TmFtZSA9IHVzZXJzLmZpbHRlcigodXNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXG4gICAgICAgICAgICAgICAgKSB8fCB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYnlOYW1lO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlckZlYXR1cmVzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRmlsdGVyZWQgPSB0aGlzLmZpbHRlck9iamVjdHNCeUxldmVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RMZWxlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkhBU0hUQUcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xuICAgIH1cblxuICAgIGZpbHRlckZlYXR1cmVzRm9yVGVybShmZWF0dXJlczogRmVhdHVyZVtdLCB0ZXJtOiBzdHJpbmcpOiBGZWF0dXJlW10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XG4gICAgICAgIC8vIGJ5IGNvbW1lbnRzXG4gICAgICAgIGNvbnN0IGJ5Q29tbWVudCA9IGZlYXR1cmVzLmZpbHRlcihcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0oZmVhdHVyZS5jb21tZW50cy5pdGVtcywgdGVybSkubGVuZ3RoID5cbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUNvbW1lbnRdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cbiAgICAgKiBAcGFyYW0gdGVybSBzdHJpbmdcbiAgICAgKi9cbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxuICAgICAgICBjb25zdCBieVRpdGxlID0gb2JqZWN0cy5maWx0ZXIoKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxuICAgICAgICAgICAgICAgICkgfHwgZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IGJ5RGVzY3JpcHRpb24gPSBvYmplY3RzLmZpbHRlcihcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxuICAgICAgICAgICAgICAgIGZlYXR1cmUuZGVzY3JpcHRpb24gJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5RGVzY3JpcHRpb25dKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJNaXNzaW9uQnlTdGFydFRpbWVEYXRlRm9yRGF0ZVJhbmdlKFxuICAgICAgICBtaXNzaW9uczogYW55W10sXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxuICAgICk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zLmZpbHRlcigobWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZVRpbWUgPj0gZGF0ZVJhbmdlWzBdICYmIHN0YXJ0RGF0ZVRpbWUgPD0gZGF0ZVJhbmdlWzFdXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBhcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcbiAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnM6IE1pc3Npb25bXSxcbiAgICAgICAgb2JqZWN0czogYW55W10sXG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICBjb25zdCBhbGxvd2VkWm9uZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XG4gICAgICAgICAgICBpZiAobWlzc2lvbi56b25lSUQpIHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkWm9uZXMucHVzaChtaXNzaW9uLnpvbmVJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93ZWRab25lcy5sZW5ndGggPT09IGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLm1hcChhc3luYyAoem9uZUlEKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVJRCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYWxsWm9uZUZpbHRlcmVkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWxsWm9uZUZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFsbFpvbmVGaWx0ZXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBlcXVpcHM6IEVxdWlwbWVudFtdLFxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICAgICAgY29uc3QgZmluYWxFcXVpcHM6IEVxdWlwbWVudFtdID0gW107XG4gICAgICAgIGxldCBkb21GaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XG4gICAgICAgIGNvbnN0IGxldmVsRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBFcXVpcG1lbnRbXSA9IGVxdWlwcztcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJIaWdoZXN0IGxldmVsOiBcIiwgaGlnaGVzdExlbGVsLCBcIiwgSGlnaGVzdCBSb2xlOiBcIiwgaGlnaGVzdFJvbGUpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkRPTUFJTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgY3VycmVudFNwYWNlTWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kb21haW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoZXF1aXBzLCBkb21haW5zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudERvbUZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuUk9MRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAobSkgPT4gbS5yb2xlID09PSBoaWdoZXN0Um9sZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPLCBlcXVpcG1lbnQgZG9lcyBub3QgaGF2ZSBsZXZlbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEVxdWlwcy5wdXNoKHRpYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmFsRXF1aXBzO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck1lYXN1cmVtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBjb21tZW50czogQ29tbWVudFtdLFxuICAgICk6IFByb21pc2U8Q29tbWVudFtdPiB7XG4gICAgICAgIGxldCBmaW5hbE1lYXN1cmVtZW50czogQ29tbWVudFtdID0gW107XG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IENvbW1lbnRbXSA9IGNvbW1lbnRzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUoaGlnaGVzdFJvbGUpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1lYXN1cmVtZW50cyA9IHpvbmVGaWx0ZXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxNZWFzdXJlbWVudHM7XG4gICAgfVxuXG4gICAgYXN5bmMgaXNPYmplY3RBbGxvd2VkRm9yVXNlckluU3BhY2UoXG4gICAgICAgIG9iamVjdDogT2JqZWN0LFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHNwYWNlSUQpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgXCJsZXZlbFwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGxldmVsRmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHpvbmVGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUZW1wbGF0ZXNGb3JUZXJtKG1pc3Npb25zOiBNaXNzaW9uW10sIHRlcm06IHN0cmluZyk6IE1pc3Npb25bXSB7XG4gICAgICAgIC8vIHRlcm0gcHJlc2VudCBpbiBkZXNjcmlwdGlvblxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKG1pcykgPT5cbiAgICAgICAgICAgICAgICBtaXMuZGVzY3JpcHRpb24gJiYgbWlzLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIC8vIGJ5IHVzZXIgbGFzdE5hbWUgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHZpc2l0OlxuICAgICAgICAvLyBtZXRhZGF0YTogXCJ7XFxcImZpcnN0TmFtZVxcXCI6XFxcIlxcXCIsXFxcImxhc3ROYW1lXFxcIjpcXFwiVmlzaXRlIGR1IDUgSnVpbGxldFxcXCJ9XCJcbiAgICAgICAgY29uc3QgdXNlclByb2ZpbGVzID0gbWlzc2lvbnMubWFwKChtaXMpID0+IG5ldyBQcm9maWxlRW50aXR5KG1pcy51c2VyKSk7XG4gICAgICAgIGNvbnN0IGJ5VXNlckxhc3RuYW1lID0gdGhpcy5maWx0ZXJVc2Vyc0ZvclRlcm0odXNlclByb2ZpbGVzLCB0ZXJtKTtcbiAgICAgICAgY29uc3QgdXNlcklkcyA9IG5ldyBTZXQoYnlVc2VyTGFzdG5hbWUubWFwKCh1c2VyKSA9PiB1c2VyLmlkKSk7XG4gICAgICAgIGNvbnN0IG1pc3Npb25zQnlVc2VyID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+XG4gICAgICAgICAgICB1c2VySWRzLmhhcyhtaXMudXNlcklEKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlEZXNjcmlwdGlvbiwgLi4ubWlzc2lvbnNCeVVzZXJdKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yU3dlZXAoXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxuICAgICAgICBvYmplY3RUeXBlOiBQb2lUeXBlLFxuICAgICAgICBzd2VlcDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XG4gICAgICAgIHN3aXRjaCAob2JqZWN0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcEJ5VHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcElEcyA9IG5ldyBTZXQocG9pcy5tYXAoKHBvaSkgPT4gcG9pLmVsZW1lbnRJRCkpO1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gb2JqZWN0cy5maWx0ZXIoKG9iamVjdCkgPT4gZXF1aXBJRHMuaGFzKG9iamVjdC5pZCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxuICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9uczogTWlzc2lvbltdLFxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgICk6IEZlYXR1cmVbXSB7XG4gICAgICAgIGNvbnN0IFtjdXJyZW50TWlzc2lvbl0gPSBjdXJyZW50U3BhY2VNaXNzaW9ucztcbiAgICAgICAgLy8gZmlsdGVyIGJ5IGxvY2FsZVxuICAgICAgICBsZXQgZmlsdGVyZWRMb2NhbGUgPSBbLi4uZmVhdHVyZXNdO1xuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24ubG9jYWxlKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZExvY2FsZSA9IGZlYXR1cmVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5sb2NhbGUgJiYgZmVhdHVyZS5sb2NhbGUgPT09IGN1cnJlbnRNaXNzaW9uLmxvY2FsZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlsdGVyIGJ5IGhhc2h0YWdzXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5oYXNodGFncyAmJiBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5SGFzaHRhZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmaWx0ZXJlZExvY2FsZSkge1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZS5oYXNodGFncyB8fCBmZWF0dXJlLmhhc2h0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGZWF0dXJlIHdpdGhvdXQgaGFzaHRhZyBpcyBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5ldmVyeSgoaGFzaHRhZykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuaGFzaHRhZ3MuaW5jbHVkZXMoaGFzaHRhZyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRCeUhhc2h0YWdzLnB1c2goZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQnlIYXNodGFncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMb2NhbGU7XG4gICAgfVxuXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JNaXNzaW9uV2l0aG91dFpvbmUoXG4gICAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXG4gICAgKTogRmVhdHVyZVtdIHtcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcbiAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgICAgIG1pc3Npb24ubGV2ZWwsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuWk9ORSkge1xuICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXG4gICAgICAgICAgICAvLyAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgLy8gICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5IQVNIVEFHKSB7XG4gICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxuICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xuICAgIH1cbn1cbiJdfQ==
620
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSSxPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBTWIsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFNVjtJQUNBO0lBQ0E7SUFQSixnQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuRCxpQkFBaUIsQ0FBUztJQUVqQyxZQUNZLFdBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzlCLENBQUM7SUFHTCxxQkFBcUIsQ0FBQyxlQUF5QixF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cEIsU0FBUztZQUNULElBQUk7WUFDSixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLGVBQWU7b0JBQ1gsSUFBSSxDQUFDLGlDQUFpQyxDQUNsQyxDQUFDLE9BQU8sQ0FBQyxFQUNULFFBQVEsQ0FDWCxDQUFDO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLElBQ0ksZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2hDLENBQUM7Z0JBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7d0dBM3pCUSxhQUFhOzRHQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBndWFyZC1mb3ItaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGdldExldmVsc0JlbG93LCBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucywgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucywgZmlsdGVyVW5pcXVlQXJyYXlCeUlEIH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBab25lLFxuICAgIEVxdWlwbWVudCxcbiAgICBMZXZlbFN0YXR1cyxcbiAgICBNZWFzdXJlbWVudCxcbiAgICBNaXNzaW9uLFxuICAgIE9yZ2FuaXNhdGlvbixcbiAgICBQb2lUeXBlLFxuICAgIFByb2ZpbGVFbnRpdHksXG4gICAgUm9sZVN0YXR1cyxcbiAgICBTcGFjZSxcbiAgICBUaWNrZXQsXG4gICAgRmVhdHVyZSxcbiAgICBDb21tZW50LFxuICAgIE9iamVjdDNEXG59IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BvaS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gXCIuL21vZGVscy96b25lLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xuZW51bSBGaWx0ZXJUeXBlIHtcbiAgICBET01BSU4gPSBcIkRPTUFJTlwiLFxuICAgIExFVkVMID0gXCJMRVZFTFwiLFxuICAgIFJPTEUgPSBcIlJPTEVcIixcbiAgICBaT05FID0gXCJaT05FXCIsXG4gICAgU1BBQ0UgPSBcIlNQQUNFXCIsXG4gICAgSEFTSFRBRyA9IFwiSEFTSFRBR1wiLFxufVxuaW1wb3J0IGxldmVuc2h0ZWluIGZyb20gJ2pzLWxldmVuc2h0ZWluJztcbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRlRmlsdGVyOiBTdWJqZWN0PERhdGVbXT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHVibGljIGN1cnJlbnREYXRlRmlsdGVyOiBEYXRlW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxuICAgICkgeyB9XG5cblxuICAgIGZpbHRlclRpY2tldHNCeURvbWFpbih0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLCBkb21haW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XG4gICAgfVxuXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xuICAgICAgICBjb25zdCB2aXNpYmxlTGV2ZWxzID0gZ2V0TGV2ZWxzQmVsb3cobGV2ZWwpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IG9iamVjdHNUb0ZpbHRlci5maWx0ZXIoKHRpYykgPT5cbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgIH1cblxuICAgIGZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxuICAgICAgICBtaXNzaW9uOiBNaXNzaW9uLFxuICAgICk6IFRpY2tldFtdIHtcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXG4gICAgICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXG4gICAgICAgICAgICBSb2xlU3RhdHVzLkFETUlOLFxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKCFtYW5hZ2VyUm9sZXMuaW5jbHVkZXMobWlzc2lvbi5yb2xlKSkge1xuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XG4gICAgICAgICAgICAgICAgLy8gU0VSVklDRSBjYW4gc2VlIHRpY2tldHMgdG8gd2hpY2ggaGUgaXMgYXNzaWduZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrZXRzQXNzaWduZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0LmFzc2lnbmVlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgdC5hc3NpZ25lZXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0c0Fzc2lnbmVkLnB1c2godCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPQ0NVUEFOVCBhbmQgVklTSVRPUiBjYW4gc2VlIG9ubHkgdGlja2V0cyB0aGF0IHRoZXkgY3JlYXRlZFxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXQub3duZXJNaXNzaW9uSUQgPT09IG1pc3Npb24uaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyO1xuICAgIH1cblxuICAgIGdldEZpbHRlcnNGb3JSb2xlKHJvbGU6IFJvbGVTdGF0dXMpOiBGaWx0ZXJUeXBlW10ge1xuICAgICAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk1BTkFHRVI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9XTkVSOlxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5aT05FLCBGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSwgLy8gdGhhdCBpcyB0aGUgbW9zdCBzZXZlcmUgZmlsdGVyXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5PQ0NVUEFOVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuSEFTSFRBRyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5aT05FLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTTpcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU06XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3JDdXJyZW50VXNlckluU3BhY2UoXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPE9iamVjdDNEW10+IHtcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvYmogb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXMob2JqKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxPYmplY3QzRHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZmlsdGVyVGlja2V0c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPFRpY2tldFtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XG4gICAgICAgIGxldCByb2xlRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogVGlja2V0W10gPSB0aWNrZXRzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuRE9NQUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9tYWluczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtLmRvbWFpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCAuLi5tLmRvbWFpbnNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0cywgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnREb21GaWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQgPSBhbGxEb21haW5zRmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ST0xFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZU1pc3Npb24gPSBjdXJyZW50U3BhY2VNaXNzaW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyVGlja2V0c0Zvck1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0Um9sZU1pc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0TGVsZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGtlZXAgb25seSB0aWNrZXRzIHByZXNlbnQgaW4gYWxsIGZpbHRlcmVkIGFycmF5c1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRvbUZpbHRlcmVkKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxldmVsRmlsdGVyZWQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHpvbmVGaWx0ZXJlZCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbmFsVGlja2V0cyk7XG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxuICAgICAgICBuZXh0PzogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcbiAgICApOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBjb25zdCBzID0gdGhpcy51cGRhdGVEYXRlRmlsdGVyLnN1YnNjcmliZShuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZUZpbHRlciA9IGRhdGVSYW5nZTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlRmlsdGVyLm5leHQoZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJPYmplY3RzRm9yRGF0ZVJhbmdlKG9iamVjdHM6IGFueVtdLCBkYXRlUmFuZ2U6IERhdGVbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShvYmplY3QuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbHRlck1lYXN1cmVtZW50c0ZvckRhdGVSYW5nZShcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxuICAgICAgICBkYXRlUmFuZ2U6IERhdGVbXSxcbiAgICApOiBNZWFzdXJlbWVudFtdIHtcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XG5cbiAgICAgICAgaWYgKGRhdGVSYW5nZS5ldmVyeShkID0+IGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzSW52YWxpZERhdGUoZCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShtZWFzdXJlLmNvbW1lbnQuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cbiAgICAgICAgem9uZUlEOiBzdHJpbmcgPSBudWxsLFxuICAgICAgICB6b25lOiBab25lID0gbnVsbCxcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IFtdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID0gb2JqZWN0LnBvaXM7XG4gICAgICAgICAgICAgICAgaWYgKHBvaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BvaV0gPSBwb2lzLml0ZW1zO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFpvbmVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBzd2VlcHMgdGhleSBjb250YWluLCBzbyBhbiBvYmplY3QgcGxhY2VkIGluIGEgdmlld2VyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vIHN3ZWVwcyBiZWxvbmdzIHRvIG5vIHpvbmUgYXQgYWxsLiBGaWx0ZXJpbmcgYnkgem9uZSB0aGVuIHJlbW92ZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgZnJvbSBldmVyeSB6b25lIHJhdGhlciB0aGFuIGZyb20gdGhlIHdyb25nIG9uZSAtIHdoaWNoIGlzIHdoYXQga2VwdCB0YWdzXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZWQgaW4gdGhlIFRocmVlLmpzIHZpZXdlciBmcm9tIGV2ZXIgYXBwZWFyaW5nIGluIE1hdHRlcnBvcnQuIFRoZSB0YWdcbiAgICAgICAgICAgICAgICAgICAgLy8gdmlzaWJpbGl0eSBmaWx0ZXIgYWxyZWFkeSByZWFkcyBcIm5vIHN3ZWVwXCIgYXMgXCJub3QgZmxvb3Itc2NvcGVkLCBzaG93IGl0XCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgcnVsZSBhcHBsaWVkIHRvIHpvbmVzLlxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlICYmICFwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6b25lLnN3ZWVwSURzICYmIHpvbmUuc3dlZXBJRHMuaW5jbHVkZXMocG9pLm1hdHRlcnBvcnRTd2VlcElEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvaVNlcnZpY2UucG9pSXNWaXJ0dWFsKHBvaSkgJiYgem9uZS5sYXllciAmJiB6b25lLmxheWVyLm5hbWUgPT09IFwiRkxPT1JcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmICF6b25lICYmIHpvbmVJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5pZCA9PT0gem9uZUlEIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5wYXJlbnRJRCA9PT0gem9uZUlELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT2JqZWN0cztcbiAgICB9XG5cbiAgICBmaWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxuICAgICAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcbiAgICAgICAgZG9tYWluSURMaXN0OiBzdHJpbmdbXSxcbiAgICApOiBFcXVpcG1lbnRbXSB7XG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoKGVxdWlwKSA9PlxuICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlEb21haW5dO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXF1aXApID0+XG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluICYmXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXG4gICAgICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbi5wYXJlbnRJRCksXG4gICAgICAgICk7XG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChmaWx0ZXJlZCk7XG4gICAgfVxuXG5cbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0IVxuICAgIC8vIGZpbHRlck9iamVjdHMzREJ5RG9tYWluTGlzdChcbiAgICAvLyAgIG9iamVjdHMzRDogT2JqZWN0M0RbXSxcbiAgICAvLyAgIGRvbWFpbklETGlzdDogc3RyaW5nW10sXG4gICAgLy8gKTogT2JqZWN0M0RbXSB7XG4gICAgLy8gICBsZXQgZmlsdGVyZWQgPSBbXTtcbiAgICAvLyAgIGNvbnN0IGZpbHRlcmVkQnlEb21haW4gPSBvYmplY3RzM0QuZmlsdGVyKChlcXVpcCkgPT5cbiAgICAvLyAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcbiAgICAvLyAgICk7XG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeURvbWFpbl07XG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gb2JqZWN0czNELmZpbHRlcihcbiAgICAvLyAgICAgKG9iaikgPT5cbiAgICAvLyAgICAgICBvYmouZG9tYWluICYmXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbi5wYXJlbnRJRCAmJlxuICAgIC8vICAgICAgIGRvbWFpbklETGlzdC5pbmNsdWRlcyhvYmouZG9tYWluLnBhcmVudElEKSxcbiAgICAvLyAgICk7XG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XG4gICAgLy8gICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcbiAgICAvLyB9XG5cbiAgICBmaWx0ZXJFcXVpcG1lbnRzRm9yVGVybShlcXVpcHM6IEVxdWlwbWVudFtdLCB0ZXJtOiBzdHJpbmcpOiBFcXVpcG1lbnRbXSB7XG4gICAgICAgIC8vIGZpbHRlciBkb21haW5zXG4gICAgICAgIGxldCBieURvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERvbWFpbiA9IGVxLmRvbWFpbi5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZERvbWFpbiwgdGVybSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldiA8PSAyIHx8IG5vcm1hbGl6ZWREb21haW4uaW5jbHVkZXModGVybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBieVBhcmVudERvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5wYXJlbnRJRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJlbnQgPSBlcS5kb21haW4ucGFyZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXYgPSBsZXZlbnNodGVpbihub3JtYWxpemVkUGFyZW50LCB0ZXJtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZFBhcmVudC5pbmNsdWRlcyh0ZXJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJ5RG9tYWluID0gWy4uLmJ5RG9tYWluLCAuLi5ieVBhcmVudERvbWFpbl07XG4gICAgICAgIC8vIGZpbHRlciBuYW1lXG4gICAgICAgIGxldCBieU5hbWUgPSBbXTtcbiAgICAgICAgY29uc3QgdGVybXMgPSB0ZXJtLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcbiAgICAgICAgZm9yIChjb25zdCBlcSBvZiBlcXVpcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZXEubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGVybXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVuc2h0ZWluKHRva2VuLCB3b3JkKSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCA9PT0gdGVybXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnlOYW1lLnB1c2goZXEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnlOYW1lU2ltcGxlID0gZXF1aXBzLmZpbHRlcigoZXEpID0+XG4gICAgICAgICAgICBlcS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIGJ5TmFtZSA9IFsuLi5ieU5hbWUsIC4uLmJ5TmFtZVNpbXBsZV07XG4gICAgICAgIC8vIGJ5IHNlcmlhbCBudW1iZXJcbiAgICAgICAgY29uc3QgYnlTZXJpYWxOdW1iZXIgPSBlcXVpcHMuZmlsdGVyKFxuICAgICAgICAgICAgKGVxKSA9PiBlcS5zZXJpYWxOdW1iZXIgJiYgZXEuc2VyaWFsTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5ieURvbWFpbiwgLi4uYnlOYW1lLCAuLi5ieVNlcmlhbE51bWJlcl07XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUaWNrZXRzRm9yVGVybSh0aWNrZXRzOiBUaWNrZXRbXSwgdGVybTogc3RyaW5nKTogVGlja2V0W10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0odGlja2V0cywgdGVybSk7XG4gICAgICAgIC8vIGJ5IGVxdWlwbWVudFxuICAgICAgICBjb25zdCBieUVxdWlwbWVudCA9IHRpY2tldHMuZmlsdGVyKFxuICAgICAgICAgICAgKHRpY2tldCkgPT5cbiAgICAgICAgICAgICAgICB0aWNrZXQuZXF1aXBtZW50cyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0ZvclRlcm0odGlja2V0LmVxdWlwbWVudHMsIHRlcm0pLmxlbmd0aCA+XG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlFcXVpcG1lbnRdKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJMb2NhdGlvbnNGb3JUZXJtKGxvY2F0aW9uczogU3BhY2VbXSwgdGVybTogc3RyaW5nKTogU3BhY2VbXSB7XG4gICAgICAgIC8vIGJ5IG5hbWVcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxuICAgICAgICAgICAgbG9jLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xuICAgICAgICBjb25zdCBieUFkZHJlc3MgPSBsb2NhdGlvbnMuZmlsdGVyKChsb2MpID0+XG4gICAgICAgICAgICBsb2MuYWRkcmVzc2VzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5TmFtZSwgLi4uYnlBZGRyZXNzXSk7XG4gICAgfVxuXG4gICAgZmlsdGVyT3JnYW5pc2F0aW9uc0ZvclRlcm0oXG4gICAgICAgIG9yZ3M6IE9yZ2FuaXNhdGlvbltdLFxuICAgICAgICB0ZXJtOiBzdHJpbmcsXG4gICAgKTogT3JnYW5pc2F0aW9uW10ge1xuICAgICAgICBjb25zdCBieU5hbWUgPSBvcmdzLmZpbHRlcigob3JnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXG4gICAgICAgICAgICAgICAgKSB8fCBvcmcubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJ5TmFtZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJVc2Vyc0ZvclRlcm0odXNlcnM6IFByb2ZpbGVFbnRpdHlbXSwgdGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGJ5TmFtZSA9IHVzZXJzLmZpbHRlcigodXNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXG4gICAgICAgICAgICAgICAgKSB8fCB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYnlOYW1lO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlckZlYXR1cmVzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRmlsdGVyZWQgPSB0aGlzLmZpbHRlck9iamVjdHNCeUxldmVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RMZWxlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkhBU0hUQUcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xuICAgIH1cblxuICAgIGZpbHRlckZlYXR1cmVzRm9yVGVybShmZWF0dXJlczogRmVhdHVyZVtdLCB0ZXJtOiBzdHJpbmcpOiBGZWF0dXJlW10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XG4gICAgICAgIC8vIGJ5IGNvbW1lbnRzXG4gICAgICAgIGNvbnN0IGJ5Q29tbWVudCA9IGZlYXR1cmVzLmZpbHRlcihcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0oZmVhdHVyZS5jb21tZW50cy5pdGVtcywgdGVybSkubGVuZ3RoID5cbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUNvbW1lbnRdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cbiAgICAgKiBAcGFyYW0gdGVybSBzdHJpbmdcbiAgICAgKi9cbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxuICAgICAgICBjb25zdCBieVRpdGxlID0gb2JqZWN0cy5maWx0ZXIoKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxuICAgICAgICAgICAgICAgICkgfHwgZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IGJ5RGVzY3JpcHRpb24gPSBvYmplY3RzLmZpbHRlcihcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxuICAgICAgICAgICAgICAgIGZlYXR1cmUuZGVzY3JpcHRpb24gJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5RGVzY3JpcHRpb25dKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJNaXNzaW9uQnlTdGFydFRpbWVEYXRlRm9yRGF0ZVJhbmdlKFxuICAgICAgICBtaXNzaW9uczogYW55W10sXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxuICAgICk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zLmZpbHRlcigobWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZVRpbWUgPj0gZGF0ZVJhbmdlWzBdICYmIHN0YXJ0RGF0ZVRpbWUgPD0gZGF0ZVJhbmdlWzFdXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBhcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcbiAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnM6IE1pc3Npb25bXSxcbiAgICAgICAgb2JqZWN0czogYW55W10sXG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICBjb25zdCBhbGxvd2VkWm9uZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XG4gICAgICAgICAgICBpZiAobWlzc2lvbi56b25lSUQpIHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkWm9uZXMucHVzaChtaXNzaW9uLnpvbmVJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93ZWRab25lcy5sZW5ndGggPT09IGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLm1hcChhc3luYyAoem9uZUlEKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVJRCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYWxsWm9uZUZpbHRlcmVkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWxsWm9uZUZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFsbFpvbmVGaWx0ZXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBlcXVpcHM6IEVxdWlwbWVudFtdLFxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICAgICAgY29uc3QgZmluYWxFcXVpcHM6IEVxdWlwbWVudFtdID0gW107XG4gICAgICAgIGxldCBkb21GaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XG4gICAgICAgIGNvbnN0IGxldmVsRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBFcXVpcG1lbnRbXSA9IGVxdWlwcztcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJIaWdoZXN0IGxldmVsOiBcIiwgaGlnaGVzdExlbGVsLCBcIiwgSGlnaGVzdCBSb2xlOiBcIiwgaGlnaGVzdFJvbGUpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkRPTUFJTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgY3VycmVudFNwYWNlTWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kb21haW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoZXF1aXBzLCBkb21haW5zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudERvbUZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuUk9MRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAobSkgPT4gbS5yb2xlID09PSBoaWdoZXN0Um9sZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPLCBlcXVpcG1lbnQgZG9lcyBub3QgaGF2ZSBsZXZlbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEVxdWlwcy5wdXNoKHRpYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmFsRXF1aXBzO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck1lYXN1cmVtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBjb21tZW50czogQ29tbWVudFtdLFxuICAgICk6IFByb21pc2U8Q29tbWVudFtdPiB7XG4gICAgICAgIGxldCBmaW5hbE1lYXN1cmVtZW50czogQ29tbWVudFtdID0gW107XG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IENvbW1lbnRbXSA9IGNvbW1lbnRzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUoaGlnaGVzdFJvbGUpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1lYXN1cmVtZW50cyA9IHpvbmVGaWx0ZXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxNZWFzdXJlbWVudHM7XG4gICAgfVxuXG4gICAgYXN5bmMgaXNPYmplY3RBbGxvd2VkRm9yVXNlckluU3BhY2UoXG4gICAgICAgIG9iamVjdDogT2JqZWN0LFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHNwYWNlSUQpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgXCJsZXZlbFwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGxldmVsRmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHpvbmVGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUZW1wbGF0ZXNGb3JUZXJtKG1pc3Npb25zOiBNaXNzaW9uW10sIHRlcm06IHN0cmluZyk6IE1pc3Npb25bXSB7XG4gICAgICAgIC8vIHRlcm0gcHJlc2VudCBpbiBkZXNjcmlwdGlvblxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKG1pcykgPT5cbiAgICAgICAgICAgICAgICBtaXMuZGVzY3JpcHRpb24gJiYgbWlzLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIC8vIGJ5IHVzZXIgbGFzdE5hbWUgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHZpc2l0OlxuICAgICAgICAvLyBtZXRhZGF0YTogXCJ7XFxcImZpcnN0TmFtZVxcXCI6XFxcIlxcXCIsXFxcImxhc3ROYW1lXFxcIjpcXFwiVmlzaXRlIGR1IDUgSnVpbGxldFxcXCJ9XCJcbiAgICAgICAgY29uc3QgdXNlclByb2ZpbGVzID0gbWlzc2lvbnMubWFwKChtaXMpID0+IG5ldyBQcm9maWxlRW50aXR5KG1pcy51c2VyKSk7XG4gICAgICAgIGNvbnN0IGJ5VXNlckxhc3RuYW1lID0gdGhpcy5maWx0ZXJVc2Vyc0ZvclRlcm0odXNlclByb2ZpbGVzLCB0ZXJtKTtcbiAgICAgICAgY29uc3QgdXNlcklkcyA9IG5ldyBTZXQoYnlVc2VyTGFzdG5hbWUubWFwKCh1c2VyKSA9PiB1c2VyLmlkKSk7XG4gICAgICAgIGNvbnN0IG1pc3Npb25zQnlVc2VyID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+XG4gICAgICAgICAgICB1c2VySWRzLmhhcyhtaXMudXNlcklEKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlEZXNjcmlwdGlvbiwgLi4ubWlzc2lvbnNCeVVzZXJdKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yU3dlZXAoXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxuICAgICAgICBvYmplY3RUeXBlOiBQb2lUeXBlLFxuICAgICAgICBzd2VlcDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XG4gICAgICAgIHN3aXRjaCAob2JqZWN0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcEJ5VHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcElEcyA9IG5ldyBTZXQocG9pcy5tYXAoKHBvaSkgPT4gcG9pLmVsZW1lbnRJRCkpO1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gb2JqZWN0cy5maWx0ZXIoKG9iamVjdCkgPT4gZXF1aXBJRHMuaGFzKG9iamVjdC5pZCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxuICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9uczogTWlzc2lvbltdLFxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgICk6IEZlYXR1cmVbXSB7XG4gICAgICAgIGNvbnN0IFtjdXJyZW50TWlzc2lvbl0gPSBjdXJyZW50U3BhY2VNaXNzaW9ucztcbiAgICAgICAgLy8gZmlsdGVyIGJ5IGxvY2FsZVxuICAgICAgICBsZXQgZmlsdGVyZWRMb2NhbGUgPSBbLi4uZmVhdHVyZXNdO1xuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24ubG9jYWxlKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZExvY2FsZSA9IGZlYXR1cmVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5sb2NhbGUgJiYgZmVhdHVyZS5sb2NhbGUgPT09IGN1cnJlbnRNaXNzaW9uLmxvY2FsZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlsdGVyIGJ5IGhhc2h0YWdzXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5oYXNodGFncyAmJiBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5SGFzaHRhZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmaWx0ZXJlZExvY2FsZSkge1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZS5oYXNodGFncyB8fCBmZWF0dXJlLmhhc2h0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGZWF0dXJlIHdpdGhvdXQgaGFzaHRhZyBpcyBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5ldmVyeSgoaGFzaHRhZykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuaGFzaHRhZ3MuaW5jbHVkZXMoaGFzaHRhZyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRCeUhhc2h0YWdzLnB1c2goZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQnlIYXNodGFncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMb2NhbGU7XG4gICAgfVxuXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JNaXNzaW9uV2l0aG91dFpvbmUoXG4gICAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXG4gICAgKTogRmVhdHVyZVtdIHtcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcbiAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgICAgIG1pc3Npb24ubGV2ZWwsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuWk9ORSkge1xuICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXG4gICAgICAgICAgICAvLyAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgLy8gICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5IQVNIVEFHKSB7XG4gICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxuICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xuICAgIH1cbn1cbiJdfQ==