raain-app 3.2.2 → 3.2.5

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.
@@ -364,4 +364,4 @@ export class CompareManager {
364
364
  this.selectGaugeInCompare();
365
365
  }
366
366
  }
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQW9CakMsTUFBTSxPQUFPLGNBQWM7SUE2QnZCLFlBQ2MsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUQ3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFFdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUMvRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRTtZQUN4QyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMs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SSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUU7b0JBQzlDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUNaO3FCQUFNO29CQUNILENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXBMYXRMbmd9IGZyb20gJ3JhYWluLXVpJztcbmltcG9ydCB7XG4gICAgR2F1Z2VOb2RlLFxuICAgIElDb21wYXJlUGVyRGF0ZSxcbiAgICBJQ29tcGFyZXMsXG4gICAgUG9zaXRpb25WYWx1ZSxcbiAgICBRdWFsaXR5UG9pbnQsXG4gICAgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICBSYWluTm9kZSxcbiAgICBTcGVlZE1hdHJpeCxcbiAgICBTcGVlZE1hdHJpeENvbnRhaW5lcixcbn0gZnJvbSAncmFhaW4tbW9kZWwnO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5pbXBvcnQge1Byb2ZpbGVTZXJ2aWNlfSBmcm9tICcuLi9wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtGcmFtZVNldH0gZnJvbSAnLi9GcmFtZVNldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBhcmVUYXJnZXQge1xuICAgIGRhdGU6IERhdGU7XG4gICAgcmFpbkNvbXB1dGF0aW9uSWQ/OiBzdHJpbmc7XG4gICAgcmFpbkNvbXB1dGF0aW9uQ3VtdWxhdGl2ZUlkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElVSUNvbXBhcmUge1xuICAgIGRhdGU6IERhdGU7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGNvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogUXVhbGl0eVBvaW50W107XG4gICAgcmVtYXJrczogc3RyaW5nO1xuICAgIHF1YWxpdHlJbmRpY2F0b3I6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcbiAgICBwdWJsaWMgZ2F1Z2VzSW5NYXA6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBzZWxlY3RlZEdhdWdlczogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkUGl4ZWxzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuICAgIHB1YmxpYyBzcGVlZHM6IE1hcExhdExuZ1tdO1xuXG4gICAgLy8gZnJvbSBjb21wYXJlc1RpbWVsaW5lXG4gICAgcHVibGljIGNvbXBhcmVOYW1lczogc3RyaW5nW107XG4gICAgcHVibGljIHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVNwZWVkTWF0cml4OiBQb3NpdGlvblZhbHVlW107XG4gICAgcHVibGljIGNvbXBhcmVWZXJzaW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG4gICAgcHVibGljIGNvbXBhcmVEYXRlczogRGF0ZVtdO1xuXG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeTogc3RyaW5nO1xuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgICBwdWJsaWMgZ2xvYmFsUXVhbGl0eUluZGljYXRvcjogbnVtYmVyO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWQ6IHthbmdsZUluRGVncmVlczogbnVtYmVyOyBwaXhlbHNQZXJQZXJpb2Q6IG51bWJlcn07XG4gICAgcHJvdGVjdGVkIGJ1aWxkQ29tcGFyZXM6IElDb21wYXJlcztcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZTogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGU6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb25DaGFuZ2VzOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbiAgICApIHtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlZCBjdW11bGF0aXZlIGZyb20gZ3JhbnVsYXIgY29tcGFyaXNvbnMgKGNvbXB1dGVkIGZyb20gYnVpbGRDb21wYXJlcylcbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVBvaW50cygpOiBYWVR5cGVbXSB7XG4gICAgICAgIGlmICghdGhpcy5idWlsZENvbXBhcmVzPy5jb21wYXJlQ3VtdWxhdGl2ZT8ucXVhbGl0eVBvaW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzLm1hcChcbiAgICAgICAgICAgIChxcCkgPT4gbmV3IFhZVHlwZShxcC5nZXRHYXVnZVZhbHVlKCksIHFwLmdldFJhaW5WYWx1ZSgpLCAyLCBxcC5nYXVnZUxhYmVsLCBxcC5nYXVnZUlkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUG9pbnRzTWF4KCk6IFhZVHlwZSB7XG4gICAgICAgIGlmICghdGhpcy5idWlsZENvbXBhcmVzPy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBYWVR5cGUoMCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUubWF4VmFsdWUgKiAxLjIsIDEpO1xuICAgICAgICByZXR1cm4gbmV3IFhZVHlwZShtYXhWYWx1ZSwgbWF4VmFsdWUpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMSAoZnJvbSByYWFpbi1tb2RlbCBkZWZhdWx0cylcbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWluTm9kZTogUmFpbk5vZGU7XG5cbiAgICBwdWJsaWMgZ2V0IHJhaW5Ob2RlKCk6IFJhaW5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhaW5Ob2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmFpbk5vZGUocmFpbk5vZGU6IFJhaW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuX3JhaW5Ob2RlID0gcmFpbk5vZGU7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5NYXAgPSBbXTtcbiAgICAgICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gW107XG4gICAgICAgIHRoaXMuc3BlZWRzID0gW107XG5cbiAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzID0ge1xuICAgICAgICAgICAgY29tcGFyZXNQZXJEYXRlOiBbXSxcbiAgICAgICAgICAgIGNvbXBhcmVDdW11bGF0aXZlOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gbnVsbDtcbiAgICAgICAgLy8gZ3JhbnVsYXJDdW11bGF0aXZlKiBhcmUgbm93IGdldHRlcnMgY29tcHV0ZWQgZnJvbSBidWlsZENvbXBhcmVzXG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsIG9ubHlPbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgIC8vICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgLy8gdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbmx5T25lKSB7XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZVxuICAgICAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihjLnF1YWxpdHlQb2ludHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGMuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2V0UmFpblZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKE1hdGgubWF4KGMubWF4VmFsdWUgKiAxLjIsIDEpLCBNYXRoLm1heChjLm1heFZhbHVlICogMS4yLCAxKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya3M6IGMucmVtYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGljYXRvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGU/LmdldFRpbWUoKSAtIGIuZGF0ZT8uZ2V0VGltZSgpKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkubGF1bmNoZWRCeTtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkuZ2V0VmVyc2lvbigpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkID1cbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFNwZWVkKCk7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gdWlDb21wYXJlcy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IHVpQ29tcGFyZXM7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4sXG4gICAgICAgIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gNSxcbiAgICAgICAgdGltZVN0ZXBNb2RlOiAnZXEnIHwgJ2x0ZScgPSAnZXEnXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICAgICAgICAgIHRhcmdldHNPcmRlcmVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwTW9kZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQsIHBlcmlvZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRocm93IEVycm9yKCduZWVkcyBjdW11bGF0aXZlIGNvbXBhcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50Rm9yQXZlcmFnZSA9IHRhcmdldHNPcmRlcmVkLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlICogMS4yLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVQb2ludHMgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgKHFwKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gU2V0IGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGN1bXVsYXRpdmVQb2ludHM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBjdW11bGF0aXZlUG9pbnRzTWF4O1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3I7XG4gICAgICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIC8vIEdldCBhbGwgZ2F1Z2UgSURzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlR2F1Z2VJZHMgPSB0aGlzLnJhaW5Ob2RlLmdldExpbmtzKEdhdWdlTm9kZS5UWVBFKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZ2F1Z2VzIGZyb20gQVBJIChtYXkgYmUgZmlsdGVyZWQvbGltaXRlZClcbiAgICAgICAgbGV0IGdhdWdlc1RvRmlsdGVyID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRHYXVnZXMoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlPy5pZCxcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKClcbiAgICAgICAgKTtcbiAgICAgICAgZ2F1Z2VzVG9GaWx0ZXIgPSBnYXVnZXNUb0ZpbHRlclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBhLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKSAtXG4gICAgICAgICAgICAgICAgICAgIGIuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2LCBpbmRleCkgPT4gaW5kZXggPCAyMDApO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGdhdWdlcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgICBjb25zdCBnYXVnZXNGcm9tQXBpID0gbmV3IE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcjsgbmFtZTogc3RyaW5nfVxuICAgICAgICA+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgZ2F1Z2VzVG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBtaXNzaW5nIGdhdWdlcyBpbmRpdmlkdWFsbHkgKHRob3NlIGxpbmtlZCBidXQgbm90IGluIEFQSSByZXNwb25zZSlcbiAgICAgICAgY29uc3QgbWlzc2luZ0dhdWdlSWRzID0gcmFpbk5vZGVHYXVnZUlkcy5maWx0ZXIoKGlkKSA9PiAhZ2F1Z2VzRnJvbUFwaS5oYXMoaWQpKTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZUlkIG9mIG1pc3NpbmdHYXVnZUlkcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYXVnZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2UoZ2F1Z2VJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdhdWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIGdhdWdlICR7Z2F1Z2VJZH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBnYXVnZXMgbGlua2VkIHRvIHRoaXMgcmFpbk5vZGVcbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IHJhaW5Ob2RlR2F1Z2VJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBnYXVnZXNGcm9tQXBpLmdldChpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiAhIWcpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzLmxlbmd0aCwgJy8nLCByYWluTm9kZUdhdWdlSWRzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzTGF0TG5nOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHZpc2libGVHYXVnZXMpIHtcbiAgICAgICAgICAgIGdhdWdlc0xhdExuZy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZ2F1Z2UubGF0aXR1ZGUsIGdhdWdlLmxvbmdpdHVkZSwgdW5kZWZpbmVkLCBnYXVnZS5pZCwgZ2F1Z2UubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IGdhdWdlc0xhdExuZztcbiAgICB9XG5cbiAgICBhc3luYyBzZXRHYXVnZXNJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHA/LmdhdWdlSWQgPT09IHF1YWxpdHlQb2ludC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxdWFsaXR5UG9pbnRzLnB1c2gocXVhbGl0eVBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGdhdWdlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHh5cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGdhdWdlc0ZpbHRlcmVkID0gdGhpcy5nYXVnZXNJbk1hcC5maWx0ZXIoKGcpID0+IGcuaWQgPT09IGdhdWdlSWQpO1xuICAgICAgICAgICAgaWYgKGdhdWdlc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbZ2F1Z2VzRmlsdGVyZWRbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCBncmFudWxhciBxdWFsaXR5IHBvaW50cyBhY3Jvc3MgYWxsIGRhdGVzIGluIHRoZSBwZXJpb2QgKGV4Y2x1ZGVzIGN1bXVsYXRpdmUgZW5kIGRhdGUpXG4gICAgZ2V0QWxsR3JhbnVsYXJDb21wYXJlUG9pbnRzKCk6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgZ2F1Z2VOYW1lOiBzdHJpbmc7XG4gICAgICAgIGdhdWdlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgcGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIH1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDoge2RhdGU6IERhdGU7IGdhdWdlTmFtZTogc3RyaW5nOyBnYXVnZVZhbHVlOiBudW1iZXI7IHBpeGVsVmFsdWU6IG51bWJlcn1bXSA9XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZXNQZXJEYXRlPy5sZW5ndGggfHwgIXRoaXMuY29tcGFyZURhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGRhdGUgKGN1bXVsYXRpdmUgZW5kIGRhdGUpIHRvIGV4Y2x1ZGUgaXRcbiAgICAgICAgY29uc3QgbGFzdERhdGVUaW1lID0gTWF0aC5tYXgoLi4udGhpcy5jb21wYXJlRGF0ZXMubWFwKChkKSA9PiBkLmdldFRpbWUoKSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZVBlckRhdGUgb2YgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZSkge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgbGFzdCBkYXRlIHdoaWNoIGNvbnRhaW5zIGN1bXVsYXRpdmUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBlckRhdGUuZGF0ZS5nZXRUaW1lKCkgPj0gbGFzdERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgZmlyc3QgdGltZWxpbmUgZW50cnkgKGN1cnJlbnQgc3RlcCkgZm9yIGVhY2ggZGF0ZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmVbMF07XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb21wYXJlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcXAgb2YgY3VycmVudENvbXBhcmUucXVhbGl0eVBvaW50cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogY29tcGFyZVBlckRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VOYW1lOiBxcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBnYXVnZVZhbHVlOiBxcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsVmFsdWU6IHFwLmdldFJhaW5WYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZShcbiAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgIHBlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9LFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM/Lmxlbmd0aCA+IDEgPyBjb21wYXJlRGF0ZXMgOiBbcGVyaW9kLmJlZ2luLCBwZXJpb2QuZW5kXTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZURhdGVzWzBdLmdldFRpbWUoKSA+IHBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURhdGVzLnVuc2hpZnQocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMocXVhbGl0aWVzLCAhd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZXNQZXJEYXRlLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudWlDb21wYXJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGNvbXBhcmVJbmRleCA8IDAgfHxcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhaW5Db21wdXRhdGlvblF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXBNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYWluQ29tcHV0YXRpb25RdWFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDb25zaXN0ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpY2VzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRyaXggb2YgbWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdHJpeC5pc0NvbnNpc3RlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbnNpc3RlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25zaXN0ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25lIG9mIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgbWF0cmljZXMgaXMgbm90IGNvbnNpc3RlbnQgZm9yICR7dGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cbn1cbiJdfQ==
367
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQW9CakMsTUFBTSxPQUFPLGNBQWM7SUE2QnZCLFlBQ2MsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUQ3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFFdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUMvRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRTtZQUN4QyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMs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QUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRTtvQkFDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ1o7cUJBQU07b0JBQ0gsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ1g7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVTLG1CQUFtQjtRQUN6Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtcbiAgICBHYXVnZU5vZGUsXG4gICAgSUNvbXBhcmVQZXJEYXRlLFxuICAgIElDb21wYXJlcyxcbiAgICBQb3NpdGlvblZhbHVlLFxuICAgIFF1YWxpdHlQb2ludCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFNwZWVkTWF0cml4LFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFyZVRhcmdldCB7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICByYWluQ29tcHV0YXRpb25JZD86IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVJQ29tcGFyZSB7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBRdWFsaXR5UG9pbnRbXTtcbiAgICByZW1hcmtzOiBzdHJpbmc7XG4gICAgcXVhbGl0eUluZGljYXRvcjogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyZU1hbmFnZXIge1xuICAgIHB1YmxpYyBnYXVnZXNJbk1hcDogTWFwTGF0TG5nW107XG4gICAgcHVibGljIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW107XG4gICAgcHVibGljIHNwZWVkczogTWFwTGF0TG5nW107XG5cbiAgICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I6IG51bWJlcjtcbiAgICBwdWJsaWMgY29tcGFyZURhdGVzOiBEYXRlW107XG5cbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlEb25lRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIHB1YmxpYyBnbG9iYWxRdWFsaXR5SW5kaWNhdG9yOiBudW1iZXI7XG4gICAgcHVibGljIGNvbXBhcmVTcGVlZDoge2FuZ2xlSW5EZWdyZWVzOiBudW1iZXI7IHBpeGVsc1BlclBlcmlvZDogbnVtYmVyfTtcbiAgICBwcm90ZWN0ZWQgYnVpbGRDb21wYXJlczogSUNvbXBhcmVzO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50czogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7fVxuICAgICkge1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2VkIGN1bXVsYXRpdmUgZnJvbSBncmFudWxhciBjb21wYXJpc29ucyAoY29tcHV0ZWQgZnJvbSBidWlsZENvbXBhcmVzKVxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUG9pbnRzKCk6IFhZVHlwZVtdIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgKHFwKSA9PiBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBncmFudWxhckN1bXVsYXRpdmVQb2ludHNNYXgoKTogWFlUeXBlIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAqIDEuMiwgMSk7XG4gICAgICAgIHJldHVybiBuZXcgWFlUeXBlKG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogS0dFIG5vcm1hbGl6ZWQgMC0xIChmcm9tIHJhYWluLW1vZGVsIGRlZmF1bHRzKVxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUXVhbGl0eUluZGljYXRvcigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZUN1bXVsYXRpdmU/LnF1YWxpdHlQb2ludHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNwZWVkTWF0cml4LkNvbXB1dGVRdWFsaXR5SW5kaWNhdG9yKFxuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaW5Ob2RlOiBSYWluTm9kZTtcblxuICAgIHB1YmxpYyBnZXQgcmFpbk5vZGUoKTogUmFpbk5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmFpbk5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByYWluTm9kZShyYWluTm9kZTogUmFpbk5vZGUpIHtcbiAgICAgICAgdGhpcy5fcmFpbk5vZGUgPSByYWluTm9kZTtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhbkFsbCgpIHtcbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IFtdO1xuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zcGVlZHMgPSBbXTtcblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSB7XG4gICAgICAgICAgICBjb21wYXJlc1BlckRhdGU6IFtdLFxuICAgICAgICAgICAgY29tcGFyZUN1bXVsYXRpdmU6IG51bGwsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKDAsIDApO1xuICAgICAgICB0aGlzLmdsb2JhbFF1YWxpdHlJbmRpY2F0b3IgPSBudWxsO1xuICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXNcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUgeWV0Jyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCwgb25seU9uZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBjb21wYXJlUGVyRGF0ZSA9IHRoaXMuZ2V0Q29tcGFyZVBlckRhdGUoZnJhbWVTZXQuZGF0ZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlIHx8XG4gICAgICAgICAgICAhY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KFxuICAgICAgICAgICAgLy8gICAgICdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSlcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uQ2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9ubHlPbmUpIHtcbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IGMuZGF0ZS5nZXRUaW1lKCkgPT09IGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdID0gY29tcGFyZVBlckRhdGUuY29tcGFyZVRpbWVsaW5lXG4gICAgICAgICAgICAubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRGVmYXVsdDogS0dFIG5vcm1hbGl6ZWQgMC0xXG4gICAgICAgICAgICAgICAgY29uc3QgcXVhbGl0eUluZGljYXRvciA9IFNwZWVkTWF0cml4LkNvbXB1dGVRdWFsaXR5SW5kaWNhdG9yKGMucXVhbGl0eVBvaW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogYy5kYXRlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRSYWluVmFsdWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdhdWdlSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNNYXg6IG5ldyBYWVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjLm1heFZhbHVlICogMS4yLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGMubWF4VmFsdWUgKiAxLjIsIDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya3M6IGMucmVtYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGljYXRvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGU/LmdldFRpbWUoKSAtIGIuZGF0ZT8uZ2V0VGltZSgpKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkubGF1bmNoZWRCeTtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkuZ2V0VmVyc2lvbigpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkID1cbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFNwZWVkKCk7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gdWlDb21wYXJlcy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IHVpQ29tcGFyZXM7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4sXG4gICAgICAgIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gNSxcbiAgICAgICAgdGltZVN0ZXBNb2RlOiAnZXEnIHwgJ2x0ZScgPSAnZXEnXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICAgICAgICAgIHRhcmdldHNPcmRlcmVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwTW9kZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQsIHBlcmlvZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRocm93IEVycm9yKCduZWVkcyBjdW11bGF0aXZlIGNvbXBhcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50Rm9yQXZlcmFnZSA9IHRhcmdldHNPcmRlcmVkLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlICogMS4yLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVQb2ludHMgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgKHFwKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gU2V0IGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGN1bXVsYXRpdmVQb2ludHM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBjdW11bGF0aXZlUG9pbnRzTWF4O1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3I7XG4gICAgICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIC8vIEdldCBhbGwgZ2F1Z2UgSURzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlR2F1Z2VJZHMgPSB0aGlzLnJhaW5Ob2RlLmdldExpbmtzKEdhdWdlTm9kZS5UWVBFKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZ2F1Z2VzIGZyb20gQVBJIChtYXkgYmUgZmlsdGVyZWQvbGltaXRlZClcbiAgICAgICAgbGV0IGdhdWdlc1RvRmlsdGVyID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRHYXVnZXMoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlPy5pZCxcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKClcbiAgICAgICAgKTtcbiAgICAgICAgZ2F1Z2VzVG9GaWx0ZXIgPSBnYXVnZXNUb0ZpbHRlclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBhLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKSAtXG4gICAgICAgICAgICAgICAgICAgIGIuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2LCBpbmRleCkgPT4gaW5kZXggPCAyMDApO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGdhdWdlcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgICBjb25zdCBnYXVnZXNGcm9tQXBpID0gbmV3IE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcjsgbmFtZTogc3RyaW5nfVxuICAgICAgICA+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgZ2F1Z2VzVG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBtaXNzaW5nIGdhdWdlcyBpbmRpdmlkdWFsbHkgKHRob3NlIGxpbmtlZCBidXQgbm90IGluIEFQSSByZXNwb25zZSlcbiAgICAgICAgY29uc3QgbWlzc2luZ0dhdWdlSWRzID0gcmFpbk5vZGVHYXVnZUlkcy5maWx0ZXIoKGlkKSA9PiAhZ2F1Z2VzRnJvbUFwaS5oYXMoaWQpKTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZUlkIG9mIG1pc3NpbmdHYXVnZUlkcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYXVnZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2UoZ2F1Z2VJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdhdWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIGdhdWdlICR7Z2F1Z2VJZH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBnYXVnZXMgbGlua2VkIHRvIHRoaXMgcmFpbk5vZGVcbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IHJhaW5Ob2RlR2F1Z2VJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBnYXVnZXNGcm9tQXBpLmdldChpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiAhIWcpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzLmxlbmd0aCwgJy8nLCByYWluTm9kZUdhdWdlSWRzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzTGF0TG5nOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHZpc2libGVHYXVnZXMpIHtcbiAgICAgICAgICAgIGdhdWdlc0xhdExuZy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZ2F1Z2UubGF0aXR1ZGUsIGdhdWdlLmxvbmdpdHVkZSwgdW5kZWZpbmVkLCBnYXVnZS5pZCwgZ2F1Z2UubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IGdhdWdlc0xhdExuZztcbiAgICB9XG5cbiAgICBhc3luYyBzZXRHYXVnZXNJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHA/LmdhdWdlSWQgPT09IHF1YWxpdHlQb2ludC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxdWFsaXR5UG9pbnRzLnB1c2gocXVhbGl0eVBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGdhdWdlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHh5cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGdhdWdlc0ZpbHRlcmVkID0gdGhpcy5nYXVnZXNJbk1hcC5maWx0ZXIoKGcpID0+IGcuaWQgPT09IGdhdWdlSWQpO1xuICAgICAgICAgICAgaWYgKGdhdWdlc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbZ2F1Z2VzRmlsdGVyZWRbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCBncmFudWxhciBxdWFsaXR5IHBvaW50cyBhY3Jvc3MgYWxsIGRhdGVzIGluIHRoZSBwZXJpb2QgKGV4Y2x1ZGVzIGN1bXVsYXRpdmUgZW5kIGRhdGUpXG4gICAgZ2V0QWxsR3JhbnVsYXJDb21wYXJlUG9pbnRzKCk6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgZ2F1Z2VOYW1lOiBzdHJpbmc7XG4gICAgICAgIGdhdWdlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgcGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIH1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDoge2RhdGU6IERhdGU7IGdhdWdlTmFtZTogc3RyaW5nOyBnYXVnZVZhbHVlOiBudW1iZXI7IHBpeGVsVmFsdWU6IG51bWJlcn1bXSA9XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZXNQZXJEYXRlPy5sZW5ndGggfHwgIXRoaXMuY29tcGFyZURhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGRhdGUgKGN1bXVsYXRpdmUgZW5kIGRhdGUpIHRvIGV4Y2x1ZGUgaXRcbiAgICAgICAgY29uc3QgbGFzdERhdGVUaW1lID0gTWF0aC5tYXgoLi4udGhpcy5jb21wYXJlRGF0ZXMubWFwKChkKSA9PiBkLmdldFRpbWUoKSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZVBlckRhdGUgb2YgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZSkge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgbGFzdCBkYXRlIHdoaWNoIGNvbnRhaW5zIGN1bXVsYXRpdmUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBlckRhdGUuZGF0ZS5nZXRUaW1lKCkgPj0gbGFzdERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgZmlyc3QgdGltZWxpbmUgZW50cnkgKGN1cnJlbnQgc3RlcCkgZm9yIGVhY2ggZGF0ZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmVbMF07XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb21wYXJlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcXAgb2YgY3VycmVudENvbXBhcmUucXVhbGl0eVBvaW50cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogY29tcGFyZVBlckRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VOYW1lOiBxcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBnYXVnZVZhbHVlOiBxcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsVmFsdWU6IHFwLmdldFJhaW5WYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZShcbiAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgIHBlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9LFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM/Lmxlbmd0aCA+IDEgPyBjb21wYXJlRGF0ZXMgOiBbcGVyaW9kLmJlZ2luLCBwZXJpb2QuZW5kXTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZURhdGVzWzBdLmdldFRpbWUoKSA+IHBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURhdGVzLnVuc2hpZnQocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMocXVhbGl0aWVzLCAhd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZXNQZXJEYXRlLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudWlDb21wYXJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGNvbXBhcmVJbmRleCA8IDAgfHxcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhaW5Db21wdXRhdGlvblF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXBNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYWluQ29tcHV0YXRpb25RdWFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDb25zaXN0ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpY2VzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRyaXggb2YgbWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdHJpeC5pc0NvbnNpc3RlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbnNpc3RlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25zaXN0ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25lIG9mIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgbWF0cmljZXMgaXMgbm90IGNvbnNpc3RlbnQgZm9yICR7dGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -242,7 +242,7 @@ class RaainMapComponent {
242
242
  this.alpha = this.storage.get('raain-map-alpha', 0.4);
243
243
  }
244
244
  change(changes) {
245
- var _a, _b, _c, _d, _e, _f, _g;
245
+ var _a, _b, _c, _d, _e, _f, _g, _h;
246
246
  let possibleNewDefaultDate;
247
247
  if (changes.defaultDate) {
248
248
  if (this.areDatesEqual(changes.defaultDate.currentValue, changes.defaultDate.previousValue)) {
@@ -250,7 +250,10 @@ class RaainMapComponent {
250
250
  }
251
251
  possibleNewDefaultDate = this.defaultDate;
252
252
  }
253
- if (changes.markers && ((_a = this.mapElement) === null || _a === void 0 ? void 0 : _a.markersLayer)) {
253
+ if (changes.coordinates && ((_a = this.mapElement) === null || _a === void 0 ? void 0 : _a.mapLeaflet) && this.coordinates) {
254
+ this.mapElement.mapLeaflet.setView([this.coordinates.lat, this.coordinates.lng], 10);
255
+ }
256
+ if (changes.markers && ((_b = this.mapElement) === null || _b === void 0 ? void 0 : _b.markersLayer)) {
254
257
  const { allMarkers } = this.buildMarkersConfig();
255
258
  const markersProduced = this.mapElement.updateMarkers(allMarkers);
256
259
  if (markersProduced === null || markersProduced === void 0 ? void 0 : markersProduced.length) {
@@ -262,18 +265,18 @@ class RaainMapComponent {
262
265
  }
263
266
  }
264
267
  if (changes.markers &&
265
- ((_b = this.markers) === null || _b === void 0 ? void 0 : _b.selectedGauges) &&
266
- ((_c = this.markers) === null || _c === void 0 ? void 0 : _c.selectedGauges.length) === 1) {
268
+ ((_c = this.markers) === null || _c === void 0 ? void 0 : _c.selectedGauges) &&
269
+ ((_d = this.markers) === null || _d === void 0 ? void 0 : _d.selectedGauges.length) === 1) {
267
270
  const selectedGauge = this.markers.selectedGauges[0];
268
- (_e = (_d = this.mapElement) === null || _d === void 0 ? void 0 : _d.mapLeaflet) === null || _e === void 0 ? void 0 : _e.setView(selectedGauge, 10);
271
+ (_f = (_e = this.mapElement) === null || _e === void 0 ? void 0 : _e.mapLeaflet) === null || _f === void 0 ? void 0 : _f.setView(selectedGauge, 10);
269
272
  }
270
273
  if (this.mapElement && changes.timeframeContainers) {
271
274
  this.updateTimeframe();
272
275
  }
273
- if (((_f = this.mapElement) === null || _f === void 0 ? void 0 : _f.compositeLayer) && changes.sumValues) {
276
+ if (((_g = this.mapElement) === null || _g === void 0 ? void 0 : _g.compositeLayer) && changes.sumValues) {
274
277
  this.updateSum();
275
278
  }
276
- if (((_g = this.mapElement) === null || _g === void 0 ? void 0 : _g.compositeLayer) && changes.showVisiblePixelMarkers) {
279
+ if (((_h = this.mapElement) === null || _h === void 0 ? void 0 : _h.compositeLayer) && changes.showVisiblePixelMarkers) {
277
280
  const drawer = this.mapElement.compositeLayer.getFirstDrawer();
278
281
  this.updateVisiblePixelMarkers(drawer);
279
282
  }
@@ -809,8 +812,13 @@ class RaainConfigurationComponent {
809
812
  this.minPoint = { x: 0, y: 0 };
810
813
  this.maxPoint = { x: 300, y: 100 };
811
814
  this.logStyle = false;
815
+ this.readonly = false;
816
+ this.createTimer = null;
812
817
  this.onSizeChanged = () => { };
813
818
  this.onDrag = (e) => {
819
+ if (this.readonly) {
820
+ return false;
821
+ }
814
822
  this.changedPoints.emit(this.points);
815
823
  };
816
824
  }
@@ -842,7 +850,7 @@ class RaainConfigurationComponent {
842
850
  return;
843
851
  }
844
852
  this.created = true;
845
- let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag);
853
+ let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag, this.readonly);
846
854
  if (this.logStyle) {
847
855
  const confTransparency = 0.3;
848
856
  inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, true, [
@@ -911,10 +919,11 @@ class RaainConfigurationComponent {
911
919
  yStart: Math.log10(300),
912
920
  yEnd: Math.log10(500),
913
921
  },
914
- ], this.onDrag);
922
+ ], this.onDrag, this.readonly);
915
923
  }
916
924
  this.ngZone.runOutsideAngular(() => {
917
- setTimeout(() => {
925
+ this.createTimer = setTimeout(() => {
926
+ this.createTimer = null;
918
927
  const factory = new ElementsFactory();
919
928
  this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, inputs);
920
929
  }, 10);
@@ -923,13 +932,28 @@ class RaainConfigurationComponent {
923
932
  delete() {
924
933
  var _a, _b;
925
934
  return __awaiter(this, void 0, void 0, function* () {
935
+ if (this.createTimer) {
936
+ clearTimeout(this.createTimer);
937
+ this.createTimer = null;
938
+ }
926
939
  (_b = (_a = this.configurationElement) === null || _a === void 0 ? void 0 : _a.chart) === null || _b === void 0 ? void 0 : _b.destroy();
927
940
  this.created = false;
928
941
  });
929
942
  }
930
943
  change(changes) {
944
+ var _a;
931
945
  return __awaiter(this, void 0, void 0, function* () {
932
- // console.log('changed', changes);
946
+ // Fast path: update chart data in-place when only points changed
947
+ if (((_a = this.configurationElement) === null || _a === void 0 ? void 0 : _a.chart) &&
948
+ changes.points &&
949
+ Object.keys(changes).length === 1) {
950
+ const chart = this.configurationElement.chart;
951
+ chart.data.datasets.forEach((ds) => {
952
+ ds.data = this.points;
953
+ });
954
+ chart.update('none');
955
+ return;
956
+ }
933
957
  yield this.delete();
934
958
  this.create();
935
959
  });
@@ -955,7 +979,7 @@ class RaainConfigurationComponent {
955
979
  }
956
980
  }
957
981
  RaainConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
958
- RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }] });
982
+ RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle", readonly: "readonly" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }] });
959
983
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, decorators: [{
960
984
  type: Component,
961
985
  args: [{ selector: 'raain-configuration', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"] }]
@@ -973,6 +997,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
973
997
  type: Input
974
998
  }], logStyle: [{
975
999
  type: Input
1000
+ }], readonly: [{
1001
+ type: Input
976
1002
  }], canvasElement: [{
977
1003
  type: ViewChild,
978
1004
  args: ['canvasElement']