mmhglobal-dynamicform 2.41.4 → 2.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,6 +5,14 @@ This library was generated with [Angular CLI](https://github.com/angular/angular
5
5
  ## Changelog
6
6
  ### Upcoming
7
7
 
8
+ ### 2.42.0
9
+ - Updated `ZComponentService` to support string and Date inputs in `localizeDateTimeByIgnoringTimeZone`, with improved handling for different date types and added timezone adjustment.
10
+ - Modified `DateParserFilter` to align with new service structure and return null for falsy values.
11
+ - Adjusted `ZdatetimeComponent` to pass Date objects instead of ISO strings and improved date conversion logic.
12
+
13
+ ### 2.41.5
14
+ - Determine the URL and resolve to either mmh or mus domain based on the DNS for zreport.
15
+
8
16
  ### 2.41.4
9
17
  - Determine the URL and resolve to either mmh or mus domain based on the DNS for zupload and zreport.
10
18
 
@@ -238,37 +238,27 @@ export class ZComponentService {
238
238
  }
239
239
  return obsList;
240
240
  }
241
- localizeDateTimeByIgnoringTimeZone(value, data) {
242
- if (this.timePickerDateType.includes(data.Type)) {
243
- const userTimeZoneOffSet = this.convertOffsetMinToHour((new Date(value).getTimezoneOffset()));
244
- const datetimeWithoutTimeZone = this.removeTimeZoneAndConvertToISOString(value);
245
- //return new Date(`${datetimeWithoutTimeZone.split('.000Z')[0]}${userTimeZoneOffSet}`);
246
- return new Date(`${datetimeWithoutTimeZone.split('Z')[0]}${userTimeZoneOffSet}`);
247
- }
248
- else if (data.Type === 'zshortdate') {
249
- const dateOnly = value.includes('T') ? value.split('T')[0] : value; // Extract date portion
250
- const date = new Date(dateOnly); // Create a date object from the extracted date
251
- date.setUTCDate(1); // Set day to the first of the month
252
- // Convert to UTC, accounting for the timezone offset
253
- const timezoneOffset = date.getTimezoneOffset(); // Get timezone offset in minutes
254
- date.setMinutes(date.getMinutes() + timezoneOffset); // Adjust for timezone offset
255
- // Return the final date object
256
- return date;
257
- }
258
- else {
259
- const dateOnly = value.includes('T') ? value.split('T')[0] : value;
260
- return new Date(dateOnly + " " + new Date(dateOnly).toLocaleTimeString());
261
- }
262
- }
263
- removeTimeZoneAndConvertToISOString(value) {
264
- const result = value.split('+')[0];
265
- return new Date(result.endsWith('Z') ? result : `${result}Z`).toISOString();
266
- }
267
- convertOffsetMinToHour(num) {
268
- num = -num;
269
- const prefix = num.toString().startsWith('-') ? '-' : '+';
270
- const result = `${(Math.abs(num) / 60).toString().padStart(2, '0')}:00`;
271
- return `${prefix}${result}`;
241
+ localizeDateTimeByIgnoringTimeZone(value, field) {
242
+ // Support both string and Date inputs
243
+ const originalDate = value instanceof Date ? new Date(value.getTime()) : new Date(value);
244
+ // Case 1: time / datetime fields → keep wall-clock time stable
245
+ if (this.timePickerDateType.includes(field.Type)) {
246
+ const adjusted = new Date(originalDate);
247
+ const offsetMinutes = originalDate.getTimezoneOffset();
248
+ adjusted.setMinutes(originalDate.getMinutes() - offsetMinutes);
249
+ return adjusted;
250
+ }
251
+ // Case 2: month-only (zshortdate) → year+month, day fixed to 1
252
+ if (field.Type === 'zshortdate') {
253
+ return new Date(originalDate.getFullYear(), originalDate.getMonth(), 1, // day
254
+ 0, 0, 0, 0);
255
+ }
256
+ // Case 3: normal date-only → keep calendar date stable, ignore time
257
+ const dateOnly = new Date(originalDate.getFullYear(), originalDate.getMonth(), originalDate.getDate(), 0, 0, 0, 0);
258
+ const normalizedDate = new Date(dateOnly);
259
+ const localOffsetMinutes = dateOnly.getTimezoneOffset();
260
+ normalizedDate.setMinutes(dateOnly.getMinutes() - localOffsetMinutes);
261
+ return normalizedDate;
272
262
  }
273
263
  //#endregion
274
264
  decrementComponentCounterForField(field) {
@@ -297,4 +287,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
297
287
  providedIn: 'root'
298
288
  }]
299
289
  }], ctorParameters: function () { return [{ type: i1.UISignalService }, { type: i2.ComponentObjectService }, { type: i1.TranslationService }, { type: i1.ZCoreService }, { type: i1.FieldService }]; } });
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFnRSxNQUFNLGVBQWUsQ0FBQztBQUd6Ryw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFXLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs5RCx5RkFBeUY7QUFDekYsT0FBTyxFQUVPLGdCQUFnQixFQUU3QixNQUFNLGlCQUFpQixDQUFDOzs7O0FBTXpCLE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFDUyxlQUFnQyxFQUMvQixzQkFBOEMsRUFDOUMsZ0JBQW9DLEVBQ3BDLFlBQTBCLEVBQzFCLFlBQTBCO1FBSjNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMvQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFpSG5CLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBeUt2Qyw2QkFBNkI7UUFDWix1QkFBa0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUF6UjVGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsYUFBcUI7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sYUFBYSxD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c0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEVtYmVkZGVkVmlld1JlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRmllbGRFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9maWVsZGVsZW1lbnQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50T2JqZWN0U2VydmljZSB9IGZyb20gJ21taGdsb2JhbC1taWRkbGV3YXJlJztcclxuLy8gaW1wb3J0IHsgQ29tcG9uZW50T2JqZWN0U2VydmljZSB9IGZyb20gJ3Byb2plY3RzL21taGdsb2JhbC1taWRkbGV3YXJlL3NyYy9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHtcclxuICBaQ29yZVNlcnZpY2UsIFRyYW5zbGF0aW9uU2VydmljZSwgRmllbGRTZXJ2aWNlLFxyXG4gIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaRmllbGQsIFpHcm91cCxcclxuICBVSVNpZ25hbFNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFpDb21wb25lbnRTZXJ2aWNlIHtcclxuICBwdWJsaWMgZW52aXJvbm1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHVpU2lnbmFsU2VydmljZTogVUlTaWduYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRPYmplY3RTZXJ2aWNlOiBDb21wb25lbnRPYmplY3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU2tpcENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5pc1NraXBDb21wb25lbnRUeXBlKGNvbXBvbmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRDb21wb25lbnQoXHJcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIGZpZWxkRWxlbWVudDogRmllbGRFbGVtZW50RGlyZWN0aXZlLFxyXG4gICAgZmllbGQ6IGFueSxcclxuICAgIGdyb3VwOiBhbnksXHJcbiAgICBmb3JtOiBGb3JtR3JvdXAsXHJcbiAgICBjb250YWluZXJGaWVsZDogYW55XHJcbiAgKSB7XHJcbiAgICAvLyBpZihmaWVsZC5OYW1lID09PSAnRm9ybURldGFpbENvbnRhY3RHcmlkJykge1xyXG4gICAgLy8gICBkZWJ1Z2dlcjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1NraXBDb21wb25lbnRUeXBlKGZpZWxkLlR5cGUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcG9uZW50RmFjdG9yeTtcclxuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLmNvbXBvbmVudE9iamVjdFNlcnZpY2UuZ2V0T2JqZWN0KGZpZWxkLlR5cGUpO1xyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgY29tcG9uZW50RmFjdG9yeSA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShcclxuICAgICAgICBjb21wb25lbnROYW1lXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoXCJ1bmtub3duXCIpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IGZpZWxkRWxlbWVudC52aWV3Q29udGFpbmVyUmVmO1xyXG4gICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignRm9ybUdyb3VwIGlzIGVtcHR5IScpO1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBaQ29tcG9uZW50KS5kYXRhID0gZmllbGQ7XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmdyb3VwID0gZ3JvdXA7XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmZvcm0gPSBmb3JtO1xyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBaQ29tcG9uZW50KS5jb250YWluZXJGaWVsZCA9IGNvbnRhaW5lckZpZWxkO1xyXG4gICAgLy8gKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBaQ29tcG9uZW50KS5vdXRwdXRFdmVudC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IGdyb3VwLm91dHB1dEV2ZW50KGV2ZW50KSk7XHJcblxyXG4gICAgLy8jcmVnaW9uIGZvciBjb21wb25lbnQgbG9hZCBpbiB6dWRmIGNvbnRhaW5lclxyXG4gICAgaWYgKGZpZWxkLlZhbHVlICYmIGZpZWxkLlN1YlR5cGUpIHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgIGlmIChmaWVsZC5WYWx1ZS5pbmNsdWRlcygnenVkZicpKSB7XHJcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRWYWx1ZSA9IGZpZWxkLlZhbHVlO1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmb3JtLmNvbnRyb2xzW2NvbXBvbmVudFZhbHVlXTtcclxuICAgICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICBjb25zdCBbZmlyc3RTZWdtZW50LCBzZWNvbmRTZWdtZW50XSA9IGNvbXBvbmVudFZhbHVlLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHp1ZGZTY29wZU5hbWUgPSBgJHtmaXJzdFNlZ21lbnR9XyR7c2Vjb25kU2VnbWVudH1gO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdyb3VwW3p1ZGZTY29wZU5hbWVdLnpNb2RlbFtjb21wb25lbnRWYWx1ZV07XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZShncm91cFt6dWRmU2NvcGVOYW1lXS56TW9kZWxbY29tcG9uZW50VmFsdWVdKTtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG4gIH1cclxuXHJcbiAgYXBwZW5kQ29tcG9uZW50VG9EeW5hbWljRm9ybShcclxuICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgaW5qZWN0b3I6IGFueSxcclxuICAgIGFwcFJlZjogYW55LFxyXG4gICAgZmllbGQ6IGFueSxcclxuICAgIGdyb3VwOiBhbnksXHJcbiAgICBjb250YWluZXJJZDogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5pc1NraXBDb21wb25lbnRUeXBlKGZpZWxkLlR5cGUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29tcG9uZW50UmVmO1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoZmllbGQuVHlwZSk7XHJcbiAgICAvLyAxLiBDcmVhdGUgYSBjb21wb25lbnQgcmVmZXJlbmNlIGZyb20gdGhlIGNvbXBvbmVudFxyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcclxuICAgICAgY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXHJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudE5hbWUpXHJcbiAgICAgICAgLmNyZWF0ZShpbmplY3Rvcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcclxuICAgICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnRPYmplY3RTZXJ2aWNlLmdldE9iamVjdChcInVua25vd25cIikpXHJcbiAgICAgICAgLmNyZWF0ZShpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4gQXR0YWNoIGNvbXBvbmVudCB0byB0aGUgYXBwUmVmIHNvIHRoYXQgaXQncyBpbnNpZGUgdGhlIG5nIGNvbXBvbmVudCB0cmVlXHJcbiAgICBhcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG5cclxuICAgIC8vIDMuIEdldCBET00gZWxlbWVudCBmcm9tIGNvbXBvbmVudFxyXG4gICAgY29uc3QgZG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pXHJcbiAgICAgIC5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgLy8gNC4gQXBwZW5kIERPTSBlbGVtZW50IHRvIHRoZSBib2R5XHJcbiAgICBjb25zdCBkeW5hbWljRm9ybUhvc3Q6IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyBjb250YWluZXJJZCk7XHJcbiAgICBkeW5hbWljRm9ybUhvc3QuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XHJcblxyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBaQ29tcG9uZW50KS5kYXRhID0gZmllbGQ7XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmdyb3VwID0gZ3JvdXA7XHJcbiAgICByZXR1cm4gY29tcG9uZW50UmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0lTRURJVCA9IHRydWU7XHJcbiAgcHVibGljIHNldEVkaXRNb2RlKG1lOiBhbnkpIHtcclxuICAgIGxldCBlZGl0TW9kZSA9IHsgdmFsdWU6IHRoaXMuREVGQVVMVF9JU0VESVQsIGluaXRWYWx1ZTogdGhpcy5ERUZBVUxUX0lTRURJVCB9O1xyXG5cclxuICAgIGlmIChtZSAmJiBtZS5kYXRhICYmIG1lLmRhdGEuRWRpdE1vZGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgbWUuZGF0YS5FZGl0TW9kZSAhPSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgY29uc3QgZ3JwRWRpdE1vZGVWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShtZS5kYXRhLkVkaXRNb2RlLCBtZS5ncm91cCk7XHJcbiAgICAgICAgZWRpdE1vZGUgPSB7IHZhbHVlOiBncnBFZGl0TW9kZVZhbHVlLCBpbml0VmFsdWU6IGdycEVkaXRNb2RlVmFsdWUgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlZGl0TW9kZSA9IG1lLmRhdGEuRWRpdE1vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG1lICYmIG1lLmNvbnRhaW5lckZpZWxkICYmIG1lLmNvbnRhaW5lckZpZWxkW2BfRWRpdE1vZGVgXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgZWRpdE1vZGUgPSBtZS5jb250YWluZXJGaWVsZFtgX0VkaXRNb2RlYF07XHJcbiAgICB9XHJcbiAgICBtZS5kYXRhW2BfRWRpdE1vZGVgXSA9IGVkaXRNb2RlO1xyXG4gICAgbWUuZGF0YVtgX0VkaXRNb2RlYF0udmFsdWUgPSBlZGl0TW9kZS5pbml0VmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29tcG9uZW50QWRkaXRpb25hbFByb3BlcnRpZXMobWU6IGFueSkge1xyXG4gICAgbWUuY29tcG9uZW50UHJvcGVydGllcy50aXRsZSA9IG1lLmRhdGEgJiYgbWUuZGF0YS5UaXRsZSAmJiB0eXBlb2YgbWUuZGF0YS5UaXRsZSA9PT0gJ3N0cmluZycgJiYgbWUuZGF0YS5UaXRsZS5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKG1lLCBtZS5kYXRhLlRpdGxlKSA6IG1lLmRhdGEuVGl0bGU7XHJcbiAgICBtZS5jb21wb25lbnRQcm9wZXJ0aWVzLmljb24gPSBtZS5kYXRhICYmIG1lLmRhdGEuSWNvbiAmJiB0eXBlb2YgbWUuZGF0YS5JY29uID09PSAnc3RyaW5nJyAmJiBtZS5kYXRhLkljb24uc3RhcnRzV2l0aChcImdyb3VwLlwiKSA/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChtZSwgbWUuZGF0YS5JY29uKSA6IG1lLmRhdGEuSWNvbjtcclxuICAgIG1lLmNvbXBvbmVudFByb3BlcnRpZXMubGFiZWwgPSBtZS5kYXRhICYmIG1lLmRhdGEuTGFiZWwgJiYgdHlwZW9mIG1lLmRhdGEuTGFiZWwgPT09ICdzdHJpbmcnICYmIG1lLmRhdGEuTGFiZWwuc3RhcnRzV2l0aChcImdyb3VwLlwiKSA/IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChtZSwgbWUuZGF0YS5MYWJlbCkgOiBtZS5kYXRhLkxhYmVsO1xyXG4gICAgaWYgKG1lLmdyb3VwLmZpZWxkcyAmJiBtZS5ncm91cC5maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RmllbGRGcm9tRmllbGRzQnlWYWx1ZShtZS5ncm91cC5maWVsZHMsIG1lLmRhdGEuVmFsdWUpO1xyXG4gICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZFtgY29tcG9uZW50UHJvcGVydGllc2BdID0gbWUuY29tcG9uZW50UHJvcGVydGllcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbXBTdHlsZXNCeUluZGV4KG1lOiBhbnkpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1lLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUpKSB7XHJcbiAgICAgIGNvbnN0IGluZCA9IGtleS5yZXBsYWNlKCdzdHlsZScsICcnKTtcclxuXHJcbiAgICAgIGxldCBzdHlsZSA9IG1lLmRhdGFbYFN0eWxlJHtpbmR9YF07XHJcbiAgICAgIGlmIChtZS5kYXRhICYmIG1lLmRhdGFbYFN0eWxlJHtpbmR9YF0gJiYgdHlwZW9mIG1lLmRhdGFbYFN0eWxlJHtpbmR9YF0gPT09ICdzdHJpbmcnICYmIG1lLmRhdGFbYFN0eWxlJHtpbmR9YF0uc3RhcnRzV2l0aCgnZ3JvdXAnKSkge1xyXG4gICAgICAgIHN0eWxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKG1lLmRhdGFbYFN0eWxlJHtpbmR9YF0sIG1lLmdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldFN0eWxlQnlJbmRleChtZSwgaW5kLCBzdHlsZSB8fCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZS5jb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlKSkge1xyXG4gICAgICBjb25zdCBpbmQgPSBrZXkucmVwbGFjZSgnc3R5bGUnLCAnJyk7XHJcbiAgICAgIGxldCBzdHlsZSA9IG1lLmRhdGFbYENvbnRhaW5lclN0eWxlJHtpbmR9YF07XHJcbiAgICAgIGlmIChtZS5kYXRhICYmIG1lLmRhdGFbYENvbnRhaW5lclN0eWxlJHtpbmR9YF0gJiYgdHlwZW9mIG1lLmRhdGFbYENvbnRhaW5lclN0eWxlJHtpbmR9YF0gPT09ICdzdHJpbmcnICYmIG1lLmRhdGFbYENvbnRhaW5lclN0eWxlJHtpbmR9YF0uc3RhcnRzV2l0aCgnZ3JvdXAnKSkge1xyXG4gICAgICAgIHN0eWxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKG1lLmRhdGFbYENvbnRhaW5lclN0eWxlJHtpbmR9YF0sIG1lLmdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldENvbnRhaW5lclN0eWxlQnlJbmRleChtZSwgaW5kLCBzdHlsZSB8fCBcIlwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTdHlsZUJ5SW5kZXgobWU6IGFueSwgaW5kOiBzdHJpbmcsIHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIG1lLmNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGVbYHN0eWxlJHtpbmR9YF0gPSBzdHlsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb250YWluZXJTdHlsZUJ5SW5kZXgobWU6IGFueSwgaW5kOiBzdHJpbmcsIHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIG1lLmNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGVbYHN0eWxlJHtpbmR9YF0gPSBzdHlsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb252ZXJ0U3R5bGVTdHJpbmdUb09iamVjdChzdHlsZVN0cmluZzogc3RyaW5nKTogYW55IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHN0eWxlQXJyID0gc3R5bGVTdHJpbmcuc3BsaXQoXCI7XCIpLmZpbHRlcih4ID0+IHgpO1xyXG4gICAgICBjb25zdCBzdHlsZU9iaiA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IHN0eWxlIG9mIHN0eWxlQXJyKSB7XHJcbiAgICAgICAgY29uc3Qga3ZwID0gc3R5bGUuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgIHN0eWxlT2JqW2t2cFswXS50cmltKCldID0ga3ZwWzFdLnRyaW0oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHN0eWxlT2JqO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFuc2xhdGVUb29sQmFySXRlbXMoaXRlbXM6IEFycmF5PGFueT4sIGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3Qgb2JzTGlzdCA9IG5ldyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KCk7XHJcbiAgICBvYnNMaXN0LnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLiR0cmFuc2xhdGVJdGVtTGlzdChpdGVtcywgXCJ0ZXh0XCIsIHsgZWxlbWVudE5hbWU6ICdnZW5lcmFsJywgZ3JvdXAgfSkpO1xyXG5cclxuICAgIGlmIChvYnNMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ya0pvaW4ob2JzTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRlR3JpZENvbHVtbkhlYWRlcihjb2x1bW5zOiBBcnJheTxhbnk+LCBncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IG9ic0xpc3QgPSBuZXcgQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PigpO1xyXG4gICAgb2JzTGlzdC5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS4kdHJhbnNsYXRlSXRlbUxpc3QoY29sdW1ucywgXCJ0aXRsZVwiLCB7IGVsZW1lbnROYW1lOiAnbWVudScsIGdyb3VwIH0pKTtcclxuXHJcbiAgICBpZiAob2JzTGlzdC5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcmtKb2luKG9ic0xpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zbGF0ZUJ1dHRvbkNvbXBvbmVudChidXR0b25zOiBBcnJheTxhbnk+LCBncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBvYnNMaXN0ID0gbmV3IEFycmF5PE9ic2VydmFibGU8YW55Pj4oKTtcclxuICAgIG9ic0xpc3QucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuJHRyYW5zbGF0ZUl0ZW1MaXN0KGJ1dHRvbnMsIFwidGV4dFwiLCB7IGVsZW1lbnROYW1lOiBncm91cC5maWVsZE5hbWUsIGdyb3VwIH0pKTtcclxuXHJcbiAgICBpZiAob2JzTGlzdC5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcmtKb2luKG9ic0xpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zbGF0ZUNvbXBvbmVudEZpZWxkKGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzTGlzdCA9IG5ldyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KCk7XHJcblxyXG4gICAgY29uc3QgcHJvcExpc3QgPSBbXCJMYWJlbFwiLCBcIlBsYWNlSG9sZGVyXCIsIFwiVGl0bGVcIl07IC8vIFRvb2xUaXBcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wTGlzdCkge1xyXG4gICAgICBpZiAoZGF0YVtwcm9wXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBvYnMgPSB0aGlzLnRyYW5zbGF0ZUNvbXBCeVByb3BlcnR5KGRhdGEsIHByb3AsIGdyb3VwLmZpZWxkTmFtZSwgZ3JvdXApO1xyXG4gICAgICAgIGlmIChvYnMpIHtcclxuICAgICAgICAgIG9ic0xpc3QgPSBvYnNMaXN0LmNvbmNhdChvYnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvYnNMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ya0pvaW4ob2JzTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRlQ29tcG9uZW50UHJvcGVydGllcyhjb21wb25lbnRQcm9wZXJ0aWVzOiBaQ29tcG9uZW50UHJvcGVydGllcywgZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzTGlzdCA9IG5ldyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KCk7XHJcblxyXG4gICAgY29uc3QgcHJvcExpc3QgPSBbXCJsYWJlbFwiLCBcInRpdGxlXCJdO1xyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BMaXN0KSB7XHJcbiAgICAgIGlmIChjb21wb25lbnRQcm9wZXJ0aWVzW3Byb3BdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IG9icyA9IHRoaXMudHJhbnNsYXRlQ29tcEJ5UHJvcGVydHkoY29tcG9uZW50UHJvcGVydGllcywgcHJvcCwgZ3JvdXAuZmllbGROYW1lLCBncm91cCk7XHJcbiAgICAgICAgaWYgKG9icykge1xyXG4gICAgICAgICAgb2JzTGlzdCA9IG9ic0xpc3QuY29uY2F0KG9icyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9ic0xpc3QubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JrSm9pbihvYnNMaXN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlQ29tcEJ5UHJvcGVydHkoZGF0YTogYW55LCBwcm9wTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZywgZ3JvdXA6IFpHcm91cCk6IEFycmF5PE9ic2VydmFibGU8YW55Pj4ge1xyXG4gICAgaWYgKGRhdGFbcHJvcE5hbWVdID09IHVuZGVmaW5lZCB8fCBkYXRhW3Byb3BOYW1lXSA9PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNMaXN0ID0gbmV3IEFycmF5PE9ic2VydmFibGU8YW55Pj4oKTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbcHJvcE5hbWVdKSAmJiBkYXRhW3Byb3BOYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9ic0xpc3QucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuJHRyYW5zbGF0ZUl0ZW1MaXN0KGRhdGFbcHJvcE5hbWVdLCBudWxsLCB7IGVsZW1lbnROYW1lOiBmaWVsZE5hbWUsIGdyb3VwIH0pLnBpcGUoXHJcbiAgICAgICAgdGFwKHJlc3AgPT4ge1xyXG4gICAgICAgICAgZGF0YVtwcm9wTmFtZV0gPSByZXNwO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG9ic0xpc3QucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuJHRyYW5zbGF0ZVNpbmdsZUl0ZW0oZGF0YSwgcHJvcE5hbWUsIHsgZWxlbWVudE5hbWU6IGZpZWxkTmFtZSwgZ3JvdXAgfSkucGlwZShcclxuICAgICAgICB0YXAocmVzcCA9PiB7XHJcbiAgICAgICAgICBkYXRhW3Byb3BOYW1lXSA9IHJlc3A7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JzTGlzdDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBEYXRlVGltZSBDb252ZXJzaW9uXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lUGlja2VyRGF0ZVR5cGUgPSBbJ3p1aWRhdGV0aW1lJywgJ3p0aW1lJywgJ3p1aXRpbWUnLCAnc2ZkYXRldGltZXBpY2tlciddO1xyXG4gIHB1YmxpYyBsb2NhbGl6ZURhdGVUaW1lQnlJZ25vcmluZ1RpbWVab25lKHZhbHVlOiBzdHJpbmcsIGRhdGE6IFpGaWVsZCk6IERhdGUge1xyXG4gICAgaWYgKHRoaXMudGltZVBpY2tlckRhdGVUeXBlLmluY2x1ZGVzKGRhdGEuVHlwZSkpIHtcclxuICAgICAgY29uc3QgdXNlclRpbWVab25lT2ZmU2V0ID0gdGhpcy5jb252ZXJ0T2Zmc2V0TWluVG9Ib3VyKChuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKSkpO1xyXG4gICAgICBjb25zdCBkYXRldGltZVdpdGhvdXRUaW1lWm9uZSA9IHRoaXMucmVtb3ZlVGltZVpvbmVBbmRDb252ZXJ0VG9JU09TdHJpbmcodmFsdWUpO1xyXG5cclxuICAgICAgLy9yZXR1cm4gbmV3IERhdGUoYCR7ZGF0ZXRpbWVXaXRob3V0VGltZVpvbmUuc3BsaXQoJy4wMDBaJylbMF19JHt1c2VyVGltZVpvbmVPZmZTZXR9YCk7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShgJHtkYXRldGltZVdpdGhvdXRUaW1lWm9uZS5zcGxpdCgnWicpWzBdfSR7dXNlclRpbWVab25lT2ZmU2V0fWApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZGF0YS5UeXBlID09PSAnenNob3J0ZGF0ZScpIHtcclxuICAgICAgY29uc3QgZGF0ZU9ubHkgPSB2YWx1ZS5pbmNsdWRlcygnVCcpID8gdmFsdWUuc3BsaXQoJ1QnKVswXSA6IHZhbHVlOyAvLyBFeHRyYWN0IGRhdGUgcG9ydGlvblxyXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZU9ubHkpOyAvLyBDcmVhdGUgYSBkYXRlIG9iamVjdCBmcm9tIHRoZSBleHRyYWN0ZWQgZGF0ZVxyXG4gICAgICBkYXRlLnNldFVUQ0RhdGUoMSk7IC8vIFNldCBkYXkgdG8gdGhlIGZpcnN0IG9mIHRoZSBtb250aFxyXG5cclxuICAgICAgLy8gQ29udmVydCB0byBVVEMsIGFjY291bnRpbmcgZm9yIHRoZSB0aW1lem9uZSBvZmZzZXRcclxuICAgICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7IC8vIEdldCB0aW1lem9uZSBvZmZzZXQgaW4gbWludXRlc1xyXG4gICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyB0aW1lem9uZU9mZnNldCk7IC8vIEFkanVzdCBmb3IgdGltZXpvbmUgb2Zmc2V0XHJcblxyXG4gICAgICAvLyBSZXR1cm4gdGhlIGZpbmFsIGRhdGUgb2JqZWN0XHJcbiAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRhdGVPbmx5ID0gdmFsdWUuaW5jbHVkZXMoJ1QnKSA/IHZhbHVlLnNwbGl0KCdUJylbMF0gOiB2YWx1ZTtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVPbmx5ICsgXCIgXCIgKyBuZXcgRGF0ZShkYXRlT25seSkudG9Mb2NhbGVUaW1lU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUaW1lWm9uZUFuZENvbnZlcnRUb0lTT1N0cmluZyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlLnNwbGl0KCcrJylbMF07XHJcbiAgICByZXR1cm4gbmV3IERhdGUocmVzdWx0LmVuZHNXaXRoKCdaJykgPyByZXN1bHQgOiBgJHtyZXN1bHR9WmApLnRvSVNPU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRPZmZzZXRNaW5Ub0hvdXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbnVtID0gLW51bTtcclxuICAgIGNvbnN0IHByZWZpeCA9IG51bS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJy0nKSA/ICctJyA6ICcrJztcclxuICAgIGNvbnN0IHJlc3VsdCA9IGAkeyhNYXRoLmFicyhudW0pIC8gNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgO1xyXG4gICAgcmV0dXJuIGAke3ByZWZpeH0ke3Jlc3VsdH1gO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIGRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZChmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuU3ViVHlwZSA9PT0gJ3p1ZGYnKSB7XHJcbiAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXIoJ3p1ZGYnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLkZpZWxkRWxlbWVudE5hbWUpIHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UuZGVjcmVtZW50Q29tcG9uZW50Q291bnRlcihmaWVsZC5GaWVsZEVsZW1lbnROYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkU2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyKCdtYWluJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNNb2JpbGVTY3JlZW4oKSB7XHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5tb2JpbGVNb2RlICYmICEhdGhpcy5lbnZpcm9ubWVudC5tb2JpbGVNb2RlLmlzRW5hYmxlZCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFnRSxNQUFNLGVBQWUsQ0FBQztBQUd6Ryw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFXLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs5RCx5RkFBeUY7QUFDekYsT0FBTyxFQUVPLGdCQUFnQixFQUU3QixNQUFNLGlCQUFpQixDQUFDOzs7O0FBTXpCLE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFDUyxlQUFnQyxFQUMvQixzQkFBOEMsRUFDOUMsZ0JBQW9DLEVBQ3BDLFlBQTBCLEVBQzFCLFlBQTBCO1FBSjNCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMvQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFpSG5CLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBeUt2Qyw2QkFBNkI7UUFDWix1QkFBa0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUF6UjVGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsYUFBcUI7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sYUFBYSxDQUNsQix3QkFBa0QsRUFDbEQsWUFBbUMsRUFDbkMsS0FBVSxFQUNWLEtBQVUsRUFDVixJQUFlLEVBQ2YsY0FBbUI7UUFFbkIsK0NBQStDO1FBQy9DLGNBQWM7UUFDZCxJQUFJO1FBRUosSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hDLE9BQU87U0FDUjtRQUVELElBQUksZ0JBQWdCLENBQUM7UUFDckIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEUsSUFBSSxhQUFhLEVBQUU7WUFDakIsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsdUJBQXVCLENBQ2pFLGFBQWEsQ0FDZCxDQUFDO1NBQ0g7YUFBTTtZQUNMLGdCQUFnQixHQUFHLHdCQUF3QixDQUFDLHVCQUF1QixDQUNqRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUNqRCxDQUFDO1NBQ0g7UUFFRCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3BDLFFBQVEsQ0FBQztTQUNWO1FBQ0QsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsWUFBWSxDQUFDLFFBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsRCxZQUFZLENBQUMsUUFBdUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25ELFlBQVksQ0FBQyxRQUF1QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakQsWUFBWSxDQUFDLFFBQXVCLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUN0RSx5R0FBeUc7UUFFekcsOENBQThDO1FBQzlDLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDaEMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxXQUFXLEVBQUU7d0JBQ2YsTUFBTSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNoRSxNQUFNLGFBQWEsR0FBRyxHQUFHLFlBQVksSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDekQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFFMUQsSUFBSSxLQUFLLEVBQUU7NEJBQ1QsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7NEJBQ2xFLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt5QkFDN0I7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsWUFBWTtJQUNkLENBQUM7SUFFRCw0QkFBNEIsQ0FDMUIsd0JBQWtELEVBQ2xELFFBQWEsRUFDYixNQUFXLEVBQ1gsS0FBVSxFQUNWLEtBQVUsRUFDVixXQUFtQjtRQUVuQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxZQUFZLENBQUM7UUFDakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEUscURBQXFEO1FBQ3JELElBQUksYUFBYSxFQUFFO1lBQ2pCLFlBQVksR0FBRyx3QkFBd0I7aUJBQ3BDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQztpQkFDdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JCO2FBQU07WUFDTCxZQUFZLEdBQUcsd0JBQXdCO2lCQUNwQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckI7UUFFRCw4RUFBOEU7UUFDOUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekMsb0NBQW9DO1FBQ3BDLE1BQU0sT0FBTyxHQUFJLFlBQVksQ0FBQyxRQUFpQzthQUM1RCxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBRS9CLG9DQUFvQztRQUNwQyxNQUFNLGVBQWUsR0FBUSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUN2RSxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLFlBQVksQ0FBQyxRQUF1QixDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEQsWUFBWSxDQUFDLFFBQXVCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBR00sV0FBVyxDQUFDLEVBQU87UUFDeEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRTlFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFO1lBQ2xELElBQUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUU7Z0JBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEYsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3JFO2lCQUNJO2dCQUNILFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUM3QjtTQUNGO2FBQ0ksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUMvRSxRQUFRLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMzQztRQUNELEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDbEQsQ0FBQztJQUVNLGdDQUFnQyxDQUFDLEVBQU87UUFDN0MsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNoTixFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFNLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDaE4sSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekYsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO2FBQ3ZEO1NBQ0Y7SUFDSCxDQUFDO0lBRU0sb0JBQW9CLENBQUMsRUFBTztRQUNqQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXJDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2pJLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFFO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM1QztRQUVELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDcEUsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM1SixLQUFLLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ25GO1lBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVNLGVBQWUsQ0FBQyxFQUFPLEVBQUUsR0FBVyxFQUFFLEtBQWE7UUFDeEQsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3RELENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxFQUFPLEVBQUUsR0FBVyxFQUFFLEtBQWE7UUFDakUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9ELENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxXQUFtQjtRQUNuRCxJQUFJO1lBQ0YsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDekM7WUFFRCxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxLQUFpQixFQUFFLEtBQWE7UUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpHLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZjtRQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxPQUFtQixFQUFFLEtBQWE7UUFDakUsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpHLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZjtRQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxPQUFtQixFQUFFLEtBQWE7UUFDaEUsSUFBSSxPQUFPLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqSCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sdUJBQXVCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDeEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7UUFFM0MsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUM5RCxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQjthQUNGO1NBQ0Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sNEJBQTRCLENBQUMsbUJBQXlDLEVBQUUsS0FBYTtRQUMxRixJQUFJLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztRQUUzQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUMzQixJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsRUFBRTtnQkFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1RixJQUFJLEdBQUcsRUFBRTtvQkFDUCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDL0I7YUFDRjtTQUNGO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNmO1FBQ0QsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLHVCQUF1QixDQUFDLElBQVMsRUFBRSxRQUFnQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUMzRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxPQUFPO1NBQ1I7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztRQUM3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2pILEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQ0osQ0FBQztTQUNIO2FBQ0k7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDN0csR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUFBO1NBQ0Y7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBSU0sa0NBQWtDLENBQUMsS0FBVSxFQUFFLEtBQWE7UUFDakUsc0NBQXNDO1FBQ3RDLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEUsK0RBQStEO1FBQy9ELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEMsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7WUFDL0QsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFFRCwrREFBK0Q7UUFDL0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtZQUMvQixPQUFPLElBQUksSUFBSSxDQUNiLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFDMUIsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUN2QixDQUFDLEVBQUksTUFBTTtZQUNYLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDWCxDQUFDO1NBQ0g7UUFFRCxvRUFBb0U7UUFDcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQ3ZCLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFDMUIsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUN2QixZQUFZLENBQUMsT0FBTyxFQUFFLEVBQ3RCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDWCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4RCxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXRFLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZO0lBRUwsaUNBQWlDLENBQUMsS0FBYTtRQUNwRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckQ7YUFDSSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3JFO2FBQ0k7WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ3JHLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OzhHQTdWVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRW1iZWRkZWRWaWV3UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBGaWVsZEVsZW1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZpZWxkZWxlbWVudC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRPYmplY3RTZXJ2aWNlIH0gZnJvbSAnbW1oZ2xvYmFsLW1pZGRsZXdhcmUnO1xyXG4vLyBpbXBvcnQgeyBDb21wb25lbnRPYmplY3RTZXJ2aWNlIH0gZnJvbSAncHJvamVjdHMvbW1oZ2xvYmFsLW1pZGRsZXdhcmUvc3JjL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQge1xyXG4gIFpDb3JlU2VydmljZSwgVHJhbnNsYXRpb25TZXJ2aWNlLCBGaWVsZFNlcnZpY2UsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIFVJU2lnbmFsU2VydmljZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgWkNvbXBvbmVudFNlcnZpY2Uge1xyXG4gIHB1YmxpYyBlbnZpcm9ubWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdWlTaWduYWxTZXJ2aWNlOiBVSVNpZ25hbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudE9iamVjdFNlcnZpY2U6IENvbXBvbmVudE9iamVjdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuemNvcmVTZXJ2aWNlLmdldEVudmlyb25tZW50KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNTa2lwQ29tcG9uZW50VHlwZShjb21wb25lbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmlzU2tpcENvbXBvbmVudFR5cGUoY29tcG9uZW50VHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZENvbXBvbmVudChcclxuICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgZmllbGRFbGVtZW50OiBGaWVsZEVsZW1lbnREaXJlY3RpdmUsXHJcbiAgICBmaWVsZDogYW55LFxyXG4gICAgZ3JvdXA6IGFueSxcclxuICAgIGZvcm06IEZvcm1Hcm91cCxcclxuICAgIGNvbnRhaW5lckZpZWxkOiBhbnlcclxuICApIHtcclxuICAgIC8vIGlmKGZpZWxkLk5hbWUgPT09ICdGb3JtRGV0YWlsQ29udGFjdEdyaWQnKSB7XHJcbiAgICAvLyAgIGRlYnVnZ2VyO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU2tpcENvbXBvbmVudFR5cGUoZmllbGQuVHlwZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb21wb25lbnRGYWN0b3J5O1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoZmllbGQuVHlwZSk7XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBjb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxyXG4gICAgICAgIGNvbXBvbmVudE5hbWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRPYmplY3RTZXJ2aWNlLmdldE9iamVjdChcInVua25vd25cIilcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gZmllbGRFbGVtZW50LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGb3JtR3JvdXAgaXMgZW1wdHkhJyk7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmRhdGEgPSBmaWVsZDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZ3JvdXAgPSBncm91cDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZm9ybSA9IGZvcm07XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmNvbnRhaW5lckZpZWxkID0gY29udGFpbmVyRmllbGQ7XHJcbiAgICAvLyAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLm91dHB1dEV2ZW50LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gZ3JvdXAub3V0cHV0RXZlbnQoZXZlbnQpKTtcclxuXHJcbiAgICAvLyNyZWdpb24gZm9yIGNvbXBvbmVudCBsb2FkIGluIHp1ZGYgY29udGFpbmVyXHJcbiAgICBpZiAoZmllbGQuVmFsdWUgJiYgZmllbGQuU3ViVHlwZSkge1xyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLlZhbHVlLmluY2x1ZGVzKCd6dWRmJykpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFZhbHVlID0gZmllbGQuVmFsdWU7XHJcbiAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGZvcm0uY29udHJvbHNbY29tcG9uZW50VmFsdWVdO1xyXG4gICAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdFNlZ21lbnQsIHNlY29uZFNlZ21lbnRdID0gY29tcG9uZW50VmFsdWUuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgY29uc3QgenVkZlNjb3BlTmFtZSA9IGAke2ZpcnN0U2VnbWVudH1fJHtzZWNvbmRTZWdtZW50fWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ3JvdXBbenVkZlNjb3BlTmFtZV0uek1vZGVsW2NvbXBvbmVudFZhbHVlXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKGdyb3VwW3p1ZGZTY29wZU5hbWVdLnpNb2RlbFtjb21wb25lbnRWYWx1ZV0pO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcbiAgfVxyXG5cclxuICBhcHBlbmRDb21wb25lbnRUb0R5bmFtaWNGb3JtKFxyXG4gICAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBpbmplY3RvcjogYW55LFxyXG4gICAgYXBwUmVmOiBhbnksXHJcbiAgICBmaWVsZDogYW55LFxyXG4gICAgZ3JvdXA6IGFueSxcclxuICAgIGNvbnRhaW5lcklkOiBzdHJpbmdcclxuICApIHtcclxuICAgIGlmICh0aGlzLmlzU2tpcENvbXBvbmVudFR5cGUoZmllbGQuVHlwZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb21wb25lbnRSZWY7XHJcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gdGhpcy5jb21wb25lbnRPYmplY3RTZXJ2aWNlLmdldE9iamVjdChmaWVsZC5UeXBlKTtcclxuICAgIC8vIDEuIENyZWF0ZSBhIGNvbXBvbmVudCByZWZlcmVuY2UgZnJvbSB0aGUgY29tcG9uZW50XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBjb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcclxuICAgICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50TmFtZSlcclxuICAgICAgICAuY3JlYXRlKGluamVjdG9yKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLmNvbXBvbmVudE9iamVjdFNlcnZpY2UuZ2V0T2JqZWN0KFwidW5rbm93blwiKSlcclxuICAgICAgICAuY3JlYXRlKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAyLiBBdHRhY2ggY29tcG9uZW50IHRvIHRoZSBhcHBSZWYgc28gdGhhdCBpdCdzIGluc2lkZSB0aGUgbmcgY29tcG9uZW50IHRyZWVcclxuICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcblxyXG4gICAgLy8gMy4gR2V0IERPTSBlbGVtZW50IGZyb20gY29tcG9uZW50XHJcbiAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55PilcclxuICAgICAgLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAvLyA0LiBBcHBlbmQgRE9NIGVsZW1lbnQgdG8gdGhlIGJvZHlcclxuICAgIGNvbnN0IGR5bmFtaWNGb3JtSG9zdDogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNcIiArIGNvbnRhaW5lcklkKTtcclxuICAgIGR5bmFtaWNGb3JtSG9zdC5hcHBlbmRDaGlsZChkb21FbGVtKTtcclxuXHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmRhdGEgPSBmaWVsZDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZ3JvdXAgPSBncm91cDtcclxuICAgIHJldHVybiBjb21wb25lbnRSZWY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfSVNFRElUID0gdHJ1ZTtcclxuICBwdWJsaWMgc2V0RWRpdE1vZGUobWU6IGFueSkge1xyXG4gICAgbGV0IGVkaXRNb2RlID0geyB2YWx1ZTogdGhpcy5ERUZBVUxUX0lTRURJVCwgaW5pdFZhbHVlOiB0aGlzLkRFRkFVTFRfSVNFRElUIH07XHJcblxyXG4gICAgaWYgKG1lICYmIG1lLmRhdGEgJiYgbWUuZGF0YS5FZGl0TW9kZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHR5cGVvZiBtZS5kYXRhLkVkaXRNb2RlICE9IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBjb25zdCBncnBFZGl0TW9kZVZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKG1lLmRhdGEuRWRpdE1vZGUsIG1lLmdyb3VwKTtcclxuICAgICAgICBlZGl0TW9kZSA9IHsgdmFsdWU6IGdycEVkaXRNb2RlVmFsdWUsIGluaXRWYWx1ZTogZ3JwRWRpdE1vZGVWYWx1ZSB9O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGVkaXRNb2RlID0gbWUuZGF0YS5FZGl0TW9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWUgJiYgbWUuY29udGFpbmVyRmllbGQgJiYgbWUuY29udGFpbmVyRmllbGRbYF9FZGl0TW9kZWBdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBlZGl0TW9kZSA9IG1lLmNvbnRhaW5lckZpZWxkW2BfRWRpdE1vZGVgXTtcclxuICAgIH1cclxuICAgIG1lLmRhdGFbYF9FZGl0TW9kZWBdID0gZWRpdE1vZGU7XHJcbiAgICBtZS5kYXRhW2BfRWRpdE1vZGVgXS52YWx1ZSA9IGVkaXRNb2RlLmluaXRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb21wb25lbnRBZGRpdGlvbmFsUHJvcGVydGllcyhtZTogYW55KSB7XHJcbiAgICBtZS5jb21wb25lbnRQcm9wZXJ0aWVzLnRpdGxlID0gbWUuZGF0YSAmJiBtZS5kYXRhLlRpdGxlICYmIHR5cGVvZiBtZS5kYXRhLlRpdGxlID09PSAnc3RyaW5nJyAmJiBtZS5kYXRhLlRpdGxlLnN0YXJ0c1dpdGgoXCJncm91cC5cIikgPyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwobWUsIG1lLmRhdGEuVGl0bGUpIDogbWUuZGF0YS5UaXRsZTtcclxuICAgIG1lLmNvbXBvbmVudFByb3BlcnRpZXMuaWNvbiA9IG1lLmRhdGEgJiYgbWUuZGF0YS5JY29uICYmIHR5cGVvZiBtZS5kYXRhLkljb24gPT09ICdzdHJpbmcnICYmIG1lLmRhdGEuSWNvbi5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKG1lLCBtZS5kYXRhLkljb24pIDogbWUuZGF0YS5JY29uO1xyXG4gICAgbWUuY29tcG9uZW50UHJvcGVydGllcy5sYWJlbCA9IG1lLmRhdGEgJiYgbWUuZGF0YS5MYWJlbCAmJiB0eXBlb2YgbWUuZGF0YS5MYWJlbCA9PT0gJ3N0cmluZycgJiYgbWUuZGF0YS5MYWJlbC5zdGFydHNXaXRoKFwiZ3JvdXAuXCIpID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKG1lLCBtZS5kYXRhLkxhYmVsKSA6IG1lLmRhdGEuTGFiZWw7XHJcbiAgICBpZiAobWUuZ3JvdXAuZmllbGRzICYmIG1lLmdyb3VwLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKG1lLmdyb3VwLmZpZWxkcywgbWUuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkW2Bjb21wb25lbnRQcm9wZXJ0aWVzYF0gPSBtZS5jb21wb25lbnRQcm9wZXJ0aWVzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q29tcFN0eWxlc0J5SW5kZXgobWU6IGFueSkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWUuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZSkpIHtcclxuICAgICAgY29uc3QgaW5kID0ga2V5LnJlcGxhY2UoJ3N0eWxlJywgJycpO1xyXG5cclxuICAgICAgbGV0IHN0eWxlID0gbWUuZGF0YVtgU3R5bGUke2luZH1gXTtcclxuICAgICAgaWYgKG1lLmRhdGEgJiYgbWUuZGF0YVtgU3R5bGUke2luZH1gXSAmJiB0eXBlb2YgbWUuZGF0YVtgU3R5bGUke2luZH1gXSA9PT0gJ3N0cmluZycgJiYgbWUuZGF0YVtgU3R5bGUke2luZH1gXS5zdGFydHNXaXRoKCdncm91cCcpKSB7XHJcbiAgICAgICAgc3R5bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUobWUuZGF0YVtgU3R5bGUke2luZH1gXSwgbWUuZ3JvdXApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0U3R5bGVCeUluZGV4KG1lLCBpbmQsIHN0eWxlIHx8IFwiXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1lLmNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUpKSB7XHJcbiAgICAgIGNvbnN0IGluZCA9IGtleS5yZXBsYWNlKCdzdHlsZScsICcnKTtcclxuICAgICAgbGV0IHN0eWxlID0gbWUuZGF0YVtgQ29udGFpbmVyU3R5bGUke2luZH1gXTtcclxuICAgICAgaWYgKG1lLmRhdGEgJiYgbWUuZGF0YVtgQ29udGFpbmVyU3R5bGUke2luZH1gXSAmJiB0eXBlb2YgbWUuZGF0YVtgQ29udGFpbmVyU3R5bGUke2luZH1gXSA9PT0gJ3N0cmluZycgJiYgbWUuZGF0YVtgQ29udGFpbmVyU3R5bGUke2luZH1gXS5zdGFydHNXaXRoKCdncm91cCcpKSB7XHJcbiAgICAgICAgc3R5bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUobWUuZGF0YVtgQ29udGFpbmVyU3R5bGUke2luZH1gXSwgbWUuZ3JvdXApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0Q29udGFpbmVyU3R5bGVCeUluZGV4KG1lLCBpbmQsIHN0eWxlIHx8IFwiXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFN0eWxlQnlJbmRleChtZTogYW55LCBpbmQ6IHN0cmluZywgc3R5bGU6IHN0cmluZykge1xyXG4gICAgbWUuY29tcG9uZW50UHJvcGVydGllcy5zdHlsZVtgc3R5bGUke2luZH1gXSA9IHN0eWxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbnRhaW5lclN0eWxlQnlJbmRleChtZTogYW55LCBpbmQ6IHN0cmluZywgc3R5bGU6IHN0cmluZykge1xyXG4gICAgbWUuY29tcG9uZW50UHJvcGVydGllcy5jb250YWluZXJTdHlsZVtgc3R5bGUke2luZH1gXSA9IHN0eWxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnZlcnRTdHlsZVN0cmluZ1RvT2JqZWN0KHN0eWxlU3RyaW5nOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc3R5bGVBcnIgPSBzdHlsZVN0cmluZy5zcGxpdChcIjtcIikuZmlsdGVyKHggPT4geCk7XHJcbiAgICAgIGNvbnN0IHN0eWxlT2JqID0ge307XHJcbiAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2Ygc3R5bGVBcnIpIHtcclxuICAgICAgICBjb25zdCBrdnAgPSBzdHlsZS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgc3R5bGVPYmpba3ZwWzBdLnRyaW0oKV0gPSBrdnBbMV0udHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc3R5bGVPYmo7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYW5zbGF0ZVRvb2xCYXJJdGVtcyhpdGVtczogQXJyYXk8YW55PiwgZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBvYnNMaXN0ID0gbmV3IEFycmF5PE9ic2VydmFibGU8YW55Pj4oKTtcclxuICAgIG9ic0xpc3QucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuJHRyYW5zbGF0ZUl0ZW1MaXN0KGl0ZW1zLCBcInRleHRcIiwgeyBlbGVtZW50TmFtZTogJ2dlbmVyYWwnLCBncm91cCB9KSk7XHJcblxyXG4gICAgaWYgKG9ic0xpc3QubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JrSm9pbihvYnNMaXN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFuc2xhdGVHcmlkQ29sdW1uSGVhZGVyKGNvbHVtbnM6IEFycmF5PGFueT4sIGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3Qgb2JzTGlzdCA9IG5ldyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KCk7XHJcbiAgICBvYnNMaXN0LnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLiR0cmFuc2xhdGVJdGVtTGlzdChjb2x1bW5zLCBcInRpdGxlXCIsIHsgZWxlbWVudE5hbWU6ICdtZW51JywgZ3JvdXAgfSkpO1xyXG5cclxuICAgIGlmIChvYnNMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ya0pvaW4ob2JzTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRlQnV0dG9uQ29tcG9uZW50KGJ1dHRvbnM6IEFycmF5PGFueT4sIGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IG9ic0xpc3QgPSBuZXcgQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PigpO1xyXG4gICAgb2JzTGlzdC5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS4kdHJhbnNsYXRlSXRlbUxpc3QoYnV0dG9ucywgXCJ0ZXh0XCIsIHsgZWxlbWVudE5hbWU6IGdyb3VwLmZpZWxkTmFtZSwgZ3JvdXAgfSkpO1xyXG5cclxuICAgIGlmIChvYnNMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ya0pvaW4ob2JzTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhbnNsYXRlQ29tcG9uZW50RmllbGQoZGF0YTogWkZpZWxkLCBncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBvYnNMaXN0ID0gbmV3IEFycmF5PE9ic2VydmFibGU8YW55Pj4oKTtcclxuXHJcbiAgICBjb25zdCBwcm9wTGlzdCA9IFtcIkxhYmVsXCIsIFwiUGxhY2VIb2xkZXJcIiwgXCJUaXRsZVwiXTsgLy8gVG9vbFRpcFxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BMaXN0KSB7XHJcbiAgICAgIGlmIChkYXRhW3Byb3BdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IG9icyA9IHRoaXMudHJhbnNsYXRlQ29tcEJ5UHJvcGVydHkoZGF0YSwgcHJvcCwgZ3JvdXAuZmllbGROYW1lLCBncm91cCk7XHJcbiAgICAgICAgaWYgKG9icykge1xyXG4gICAgICAgICAgb2JzTGlzdCA9IG9ic0xpc3QuY29uY2F0KG9icyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9ic0xpc3QubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JrSm9pbihvYnNMaXN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0cmFuc2xhdGVDb21wb25lbnRQcm9wZXJ0aWVzKGNvbXBvbmVudFByb3BlcnRpZXM6IFpDb21wb25lbnRQcm9wZXJ0aWVzLCBncm91cDogWkdyb3VwKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBvYnNMaXN0ID0gbmV3IEFycmF5PE9ic2VydmFibGU8YW55Pj4oKTtcclxuXHJcbiAgICBjb25zdCBwcm9wTGlzdCA9IFtcImxhYmVsXCIsIFwidGl0bGVcIl07XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcExpc3QpIHtcclxuICAgICAgaWYgKGNvbXBvbmVudFByb3BlcnRpZXNbcHJvcF0gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3Qgb2JzID0gdGhpcy50cmFuc2xhdGVDb21wQnlQcm9wZXJ0eShjb21wb25lbnRQcm9wZXJ0aWVzLCBwcm9wLCBncm91cC5maWVsZE5hbWUsIGdyb3VwKTtcclxuICAgICAgICBpZiAob2JzKSB7XHJcbiAgICAgICAgICBvYnNMaXN0ID0gb2JzTGlzdC5jb25jYXQob2JzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAob2JzTGlzdC5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcmtKb2luKG9ic0xpc3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVDb21wQnlQcm9wZXJ0eShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nLCBncm91cDogWkdyb3VwKTogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiB7XHJcbiAgICBpZiAoZGF0YVtwcm9wTmFtZV0gPT0gdW5kZWZpbmVkIHx8IGRhdGFbcHJvcE5hbWVdID09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9ic0xpc3QgPSBuZXcgQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PigpO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVtwcm9wTmFtZV0pICYmIGRhdGFbcHJvcE5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgb2JzTGlzdC5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS4kdHJhbnNsYXRlSXRlbUxpc3QoZGF0YVtwcm9wTmFtZV0sIG51bGwsIHsgZWxlbWVudE5hbWU6IGZpZWxkTmFtZSwgZ3JvdXAgfSkucGlwZShcclxuICAgICAgICB0YXAocmVzcCA9PiB7XHJcbiAgICAgICAgICBkYXRhW3Byb3BOYW1lXSA9IHJlc3A7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgb2JzTGlzdC5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS4kdHJhbnNsYXRlU2luZ2xlSXRlbShkYXRhLCBwcm9wTmFtZSwgeyBlbGVtZW50TmFtZTogZmllbGROYW1lLCBncm91cCB9KS5waXBlKFxyXG4gICAgICAgIHRhcChyZXNwID0+IHtcclxuICAgICAgICAgIGRhdGFbcHJvcE5hbWVdID0gcmVzcDtcclxuICAgICAgICB9KSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYnNMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERhdGVUaW1lIENvbnZlcnNpb25cclxuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVQaWNrZXJEYXRlVHlwZSA9IFsnenVpZGF0ZXRpbWUnLCAnenRpbWUnLCAnenVpdGltZScsICdzZmRhdGV0aW1lcGlja2VyJ107XHJcbiAgcHVibGljIGxvY2FsaXplRGF0ZVRpbWVCeUlnbm9yaW5nVGltZVpvbmUodmFsdWU6IGFueSwgZmllbGQ6IFpGaWVsZCk6IERhdGUge1xyXG4gICAgLy8gU3VwcG9ydCBib3RoIHN0cmluZyBhbmQgRGF0ZSBpbnB1dHNcclxuICAgIGNvbnN0IG9yaWdpbmFsRGF0ZSA9XHJcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgOiBuZXcgRGF0ZSh2YWx1ZSk7XHJcblxyXG4gICAgLy8gQ2FzZSAxOiB0aW1lIC8gZGF0ZXRpbWUgZmllbGRzIOKGkiBrZWVwIHdhbGwtY2xvY2sgdGltZSBzdGFibGVcclxuICAgIGlmICh0aGlzLnRpbWVQaWNrZXJEYXRlVHlwZS5pbmNsdWRlcyhmaWVsZC5UeXBlKSkge1xyXG4gICAgICBjb25zdCBhZGp1c3RlZCA9IG5ldyBEYXRlKG9yaWdpbmFsRGF0ZSk7XHJcbiAgICAgIGNvbnN0IG9mZnNldE1pbnV0ZXMgPSBvcmlnaW5hbERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICAgICAgYWRqdXN0ZWQuc2V0TWludXRlcyhvcmlnaW5hbERhdGUuZ2V0TWludXRlcygpIC0gb2Zmc2V0TWludXRlcyk7XHJcbiAgICAgIHJldHVybiBhZGp1c3RlZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYXNlIDI6IG1vbnRoLW9ubHkgKHpzaG9ydGRhdGUpIOKGkiB5ZWFyK21vbnRoLCBkYXkgZml4ZWQgdG8gMVxyXG4gICAgaWYgKGZpZWxkLlR5cGUgPT09ICd6c2hvcnRkYXRlJykge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUoXHJcbiAgICAgICAgb3JpZ2luYWxEYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgb3JpZ2luYWxEYXRlLmdldE1vbnRoKCksXHJcbiAgICAgICAgMSwgICAvLyBkYXlcclxuICAgICAgICAwLCAwLCAwLCAwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FzZSAzOiBub3JtYWwgZGF0ZS1vbmx5IOKGkiBrZWVwIGNhbGVuZGFyIGRhdGUgc3RhYmxlLCBpZ25vcmUgdGltZVxyXG4gICAgY29uc3QgZGF0ZU9ubHkgPSBuZXcgRGF0ZShcclxuICAgICAgb3JpZ2luYWxEYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG9yaWdpbmFsRGF0ZS5nZXRNb250aCgpLFxyXG4gICAgICBvcmlnaW5hbERhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICAwLCAwLCAwLCAwXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gbmV3IERhdGUoZGF0ZU9ubHkpO1xyXG4gICAgY29uc3QgbG9jYWxPZmZzZXRNaW51dGVzID0gZGF0ZU9ubHkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICAgIG5vcm1hbGl6ZWREYXRlLnNldE1pbnV0ZXMoZGF0ZU9ubHkuZ2V0TWludXRlcygpIC0gbG9jYWxPZmZzZXRNaW51dGVzKTtcclxuXHJcbiAgICByZXR1cm4gbm9ybWFsaXplZERhdGU7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIGRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZChmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBpZiAoZmllbGQuU3ViVHlwZSA9PT0gJ3p1ZGYnKSB7XHJcbiAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXIoJ3p1ZGYnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLkZpZWxkRWxlbWVudE5hbWUpIHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UuZGVjcmVtZW50Q29tcG9uZW50Q291bnRlcihmaWVsZC5GaWVsZEVsZW1lbnROYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmZpZWxkU2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyKCdtYWluJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNNb2JpbGVTY3JlZW4oKSB7XHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5tb2JpbGVNb2RlICYmICEhdGhpcy5lbnZpcm9ubWVudC5tb2JpbGVNb2RlLmlzRW5hYmxlZCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2OCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
@@ -5,21 +5,21 @@ export class DateParserFilter {
5
5
  constructor(componentService) {
6
6
  this.componentService = componentService;
7
7
  }
8
- transform(value, data) {
9
- // debugger;
10
- if (!value) {
11
- return value;
8
+ transform(rawValue, field) {
9
+ if (!rawValue) {
10
+ return null;
12
11
  }
13
- // filter items array, items which match and return true will be
14
- // kept, false will be filtered out
15
12
  try {
16
- if (data.IsIgnoreTimeZone) {
17
- return this.componentService.localizeDateTimeByIgnoringTimeZone(value, data);
13
+ // For "ignore timezone" fields, normalize via service
14
+ if (field.IsIgnoreTimeZone) {
15
+ return this.componentService.localizeDateTimeByIgnoringTimeZone(rawValue, field);
18
16
  }
19
- return new Date(value);
17
+ // Otherwise, just convert to Date
18
+ const inputDate = new Date(rawValue);
19
+ return inputDate;
20
20
  }
21
21
  catch (error) {
22
- console.log("DateParserFilter error: ", error);
22
+ console.log('DateParserFilter error:', error);
23
23
  return null;
24
24
  }
25
25
  }
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
33
33
  pure: true,
34
34
  }]
35
35
  }], ctorParameters: function () { return [{ type: i1.ZComponentService }]; } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZVBhcnNlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemRhdGV0aW1lL2RhdGVQYXJzZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7O0FBUXBELE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsWUFDUyxnQkFBbUM7UUFBbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtJQUU1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxJQUFZO1FBQ2hDLFlBQVk7UUFDWixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELGdFQUFnRTtRQUNoRSxtQ0FBbUM7UUFDbkMsSUFBSTtZQUNGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDOUU7WUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzs2R0F4QlUsZ0JBQWdCOzJHQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFKNUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLElBQUk7aUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgWkZpZWxkIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiBcImRhdGVQYXJzZXJcIixcclxuICBwdXJlOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVBhcnNlckZpbHRlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGRhdGE6IFpGaWVsZCk6IGFueSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZmlsdGVyIGl0ZW1zIGFycmF5LCBpdGVtcyB3aGljaCBtYXRjaCBhbmQgcmV0dXJuIHRydWUgd2lsbCBiZVxyXG4gICAgLy8ga2VwdCwgZmFsc2Ugd2lsbCBiZSBmaWx0ZXJlZCBvdXRcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChkYXRhLklzSWdub3JlVGltZVpvbmUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTZXJ2aWNlLmxvY2FsaXplRGF0ZVRpbWVCeUlnbm9yaW5nVGltZVpvbmUodmFsdWUsIGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJEYXRlUGFyc2VyRmlsdGVyIGVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZVBhcnNlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemRhdGV0aW1lL2RhdGVQYXJzZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7O0FBUXBELE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsWUFDUyxnQkFBbUM7UUFBbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtJQUU1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWEsRUFBRSxLQUFhO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSTtZQUNGLHNEQUFzRDtZQUN0RCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0NBQWtDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2xGO1lBRUQsa0NBQWtDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzs2R0F6QlUsZ0JBQWdCOzJHQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFKNUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLElBQUk7aUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgWkZpZWxkIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiBcImRhdGVQYXJzZXJcIixcclxuICBwdXJlOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVBhcnNlckZpbHRlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuICAgXHJcbiAgdHJhbnNmb3JtKHJhd1ZhbHVlOiBhbnksIGZpZWxkOiBaRmllbGQpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICBpZiAoIXJhd1ZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIEZvciBcImlnbm9yZSB0aW1lem9uZVwiIGZpZWxkcywgbm9ybWFsaXplIHZpYSBzZXJ2aWNlXHJcbiAgICAgIGlmIChmaWVsZC5Jc0lnbm9yZVRpbWVab25lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2VydmljZS5sb2NhbGl6ZURhdGVUaW1lQnlJZ25vcmluZ1RpbWVab25lKHJhd1ZhbHVlLCBmaWVsZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE90aGVyd2lzZSwganVzdCBjb252ZXJ0IHRvIERhdGVcclxuICAgICAgY29uc3QgaW5wdXREYXRlID0gbmV3IERhdGUocmF3VmFsdWUpO1xyXG4gICAgICByZXR1cm4gaW5wdXREYXRlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0RhdGVQYXJzZXJGaWx0ZXIgZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -58,12 +58,13 @@ export class ZdatetimeComponent extends InputFieldBase {
58
58
  }
59
59
  onChange(value) {
60
60
  const formControl = this.form.controls[this.data.Value];
61
- const val = this.convertDateTimeValueToString(value);
61
+ const dateValue = this.convertDateTimeValueToString(value);
62
62
  if (formControl) {
63
- formControl.setValue(val);
63
+ formControl.setValue(dateValue);
64
64
  formControl.markAsTouched();
65
65
  }
66
- super.onChange(null, val);
66
+ // Important: pass Date to base, not ISO string
67
+ super.onChange(null, dateValue);
67
68
  }
68
69
  setMinAndMaxDateRange() {
69
70
  const minDateGroupValue = ZComponentHelper.getGroupValue(this.data.MinDate, this.group);
@@ -83,24 +84,39 @@ export class ZdatetimeComponent extends InputFieldBase {
83
84
  }
84
85
  }
85
86
  convertDateTimeValueToString(value) {
86
- if (value == undefined) {
87
+ if (value === undefined || value === null) {
87
88
  return undefined;
88
89
  }
89
- const valueDate = value;
90
+ const inputDate = new Date(value);
91
+ // zshortdate → normalize to first day of month
90
92
  if (this.data.Type === 'zshortdate') {
91
- valueDate.setDate(1);
93
+ const monthStart = new Date(inputDate);
94
+ monthStart.setDate(1);
95
+ return monthStart;
92
96
  }
97
+ // Ignore timezone: keep same local wall-clock time regardless of browser TZ
93
98
  if (this.data.IsIgnoreTimeZone) {
94
- const timezoneOffSet = new Date(value).getTimezoneOffset();
95
- valueDate.setMinutes(valueDate.getMinutes() + (-timezoneOffSet));
96
- return valueDate.toISOString();
99
+ return this.adjustForIgnoreTimeZone(inputDate);
97
100
  }
101
+ // For non-time types -> date-only
98
102
  if (!['zuidatetime', 'ztime', 'zuitime'].includes(this.data.Type)) {
99
- return this.parseAnyValueToDateOnly(value).toISOString();
100
- }
101
- else {
102
- return this.parseAnyValueToDate(value).toISOString();
103
+ // Assuming these helpers already return Date
104
+ const dateOnly = this.parseAnyValueToDateOnly(inputDate);
105
+ return dateOnly;
103
106
  }
107
+ // For datetime/time types -> full datetime
108
+ const dateTime = this.parseAnyValueToDate(inputDate);
109
+ return dateTime;
110
+ }
111
+ /**
112
+ * Adjusts a Date so that its wall-clock time stays the same
113
+ * when ignoring the browser timezone.
114
+ */
115
+ adjustForIgnoreTimeZone(date) {
116
+ const adjustedDate = new Date(date);
117
+ const timezoneOffsetMinutes = adjustedDate.getTimezoneOffset();
118
+ adjustedDate.setMinutes(adjustedDate.getMinutes() - timezoneOffsetMinutes);
119
+ return adjustedDate;
104
120
  }
105
121
  parseAnyValueToDate(value) {
106
122
  return new Date(value instanceof Date ? value : new Date(value));
@@ -139,4 +155,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
139
155
  type: ViewChild,
140
156
  args: ["datetimepicker"]
141
157
  }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemRhdGV0aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pkYXRldGltZS96ZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemRhdGV0aW1lL3pkYXRldGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHN0QsNkJBQTZCO0FBRTdCLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBUy9ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjO0lBVXBELFlBQ0UsZ0JBQW1DO1FBRW5DLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBUm5CLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQTJDckIsaUJBQVksR0FBRyxDQUFDLE9BQVksRUFBRSxPQUFZLEVBQU8sRUFBRTtZQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7WUFDaEgsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFTSxpQkFBWSxHQUFHLENBQUMsT0FBWSxFQUFFLE9BQVksRUFBTyxFQUFFO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMs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QUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQUs7UUFDbkMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7K0dBcklVLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9YQ2xCL0IsNDdKQXlEQTsyRkR2Q2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGVBQWU7d0dBTUEsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNFLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDTSxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQsIERhdGVUaW1lUGlja2VyQ29tcG9uZW50LCBUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16ZGF0ZXRpbWVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pkYXRldGltZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96ZGF0ZXRpbWUuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWmRhdGV0aW1lQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRlcGlja2VyXCIpIGRhdGVwaWNrZXI6IERhdGVQaWNrZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcInRpbWVwaWNrZXJcIikgdGltZXBpY2tlcjogVGltZVBpY2tlckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiZGF0ZXRpbWVwaWNrZXJcIikgZGF0ZXRpbWVwaWNrZXI6IERhdGVUaW1lUGlja2VyQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgbWluRGF0ZSA9IG51bGw7XHJcbiAgcHVibGljIG1heERhdGUgPSBudWxsO1xyXG4gIHB1YmxpYyBzdGVwVmFsdWUgPSBudWxsO1xyXG4gIHB1YmxpYyBkaXNhYmxlZERhdGVzID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXRNaW5BbmRNYXhEYXRlUmFuZ2UoKTtcclxuICAgIHRoaXMuc2V0U3RlcFZhbHVlKCk7XHJcbiAgICB0aGlzLnNldERpc2FibGVkRGF0ZXMoKTtcclxuICAgIHN1cGVyLmZvY3VzT25EZWZhdWx0KHRoaXMuZm9jdXMuYmluZCh0aGlzKSk7XHJcbiAgICAvLyBpZiAodGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSkge1xyXG4gICAgLy8gICB0aGlzLmRhdGVWYWx1ZSA9IG5ldyBEYXRlKHRoaXMuZ3JvdXAuek1vZGVsW3RoaXMuZGF0YS5WYWx1ZV0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVZhbHVlKCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXS52YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuY29udmVydERhdGVUaW1lVmFsdWVUb1N0cmluZyh2YWx1ZSk7XHJcblxyXG4gICAgaWYgKGZvcm1Db250cm9sKSB7XHJcbiAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbCk7XHJcbiAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICAgIHN1cGVyLm9uQ2hhbmdlKG51bGwsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0RGF0ZVJhbmdlID0gKG1pbkRhdGU6IGFueSwgbWF4RGF0ZTogYW55KTogYW55ID0+IHtcclxuICAgIGNvbnNvbGUud2FybihgUGxlYXNlIGNoYW5nZSB0aGUgZnVuY3Rpb24gdG8gY2FtZWxjYXNlICdzZXREYXRlUmFuZ2UnLiAnU2V0RGF0ZVJhbmdlJyB3aWxsIGJlIGRlcHJlY2F0ZWQgc29vbi5gKTtcclxuICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRlUmFuZ2UgPSAobWluRGF0ZTogYW55LCBtYXhEYXRlOiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgaWYgKCFpc05hTihEYXRlLnBhcnNlKG1pbkRhdGUpKSkge1xyXG4gICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZShtaW5EYXRlKTtcclxuICAgIH1cclxuICAgIGlmICghaXNOYU4oRGF0ZS5wYXJzZShtYXhEYXRlKSkpIHtcclxuICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUobWF4RGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1pbkFuZE1heERhdGVSYW5nZSgpIHtcclxuICAgIGNvbnN0IG1pbkRhdGVHcm91cFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5NaW5EYXRlIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcbiAgICBjb25zdCBtaW5EYXRlVmFsdWUgPSBtaW5EYXRlR3JvdXBWYWx1ZSB8fCB0aGlzLmRhdGEuTWluRGF0ZTtcclxuXHJcbiAgICBjb25zdCBtYXhEYXRlR3JvdXBWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuTWF4RGF0ZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgY29uc3QgbWF4RGF0ZVZhbHVlID0gbWF4RGF0ZUdyb3VwVmFsdWUgfHwgdGhpcy5kYXRhLk1heERhdGU7XHJcbiAgICB0aGlzLnNldERhdGVSYW5nZShtaW5EYXRlVmFsdWUsIG1heERhdGVWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN0ZXBWYWx1ZSgpIHtcclxuICAgIGNvbnN0IHN0ZXBWYWx1ZUdyb3VwVmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlN0ZXBWYWx1ZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5zdGVwVmFsdWUgPSBzdGVwVmFsdWVHcm91cFZhbHVlIHx8IHRoaXMuZGF0YS5TdGVwVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERpc2FibGVkRGF0ZXMoKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkRGF0ZXMgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EaXNhYmxlZERhdGVzKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuRGlzYWJsZWREYXRlcyBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRpbWVWYWx1ZVRvU3RyaW5nKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlRGF0ZSA9IHZhbHVlIGFzIERhdGU7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5UeXBlID09PSAnenNob3J0ZGF0ZScpIHtcclxuICAgICAgdmFsdWVEYXRlLnNldERhdGUoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc0lnbm9yZVRpbWVab25lKSB7XHJcbiAgICAgIGNvbnN0IHRpbWV6b25lT2ZmU2V0ID0gbmV3IERhdGUodmFsdWUpLmdldFRpbWV6b25lT2Zmc2V0KCk7XHJcbiAgICAgIHZhbHVlRGF0ZS5zZXRNaW51dGVzKHZhbHVlRGF0ZS5nZXRNaW51dGVzKCkgKyAoLXRpbWV6b25lT2ZmU2V0KSk7XHJcbiAgICAgIHJldHVybiB2YWx1ZURhdGUudG9JU09TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIVsnenVpZGF0ZXRpbWUnLCAnenRpbWUnLCAnenVpdGltZSddLmluY2x1ZGVzKHRoaXMuZGF0YS5UeXBlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUFueVZhbHVlVG9EYXRlT25seSh2YWx1ZSkudG9JU09TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUFueVZhbHVlVG9EYXRlKHZhbHVlKS50b0lTT1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUFueVZhbHVlVG9EYXRlKHZhbHVlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUFueVZhbHVlVG9EYXRlT25seSh2YWx1ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMucGFyc2VBbnlWYWx1ZVRvRGF0ZSh2YWx1ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIpIHtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVwaWNrZXIuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRldGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLmRhdGV0aW1lcGlja2VyLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiemRhdGUtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuXHJcbiAgPGlvbi1kYXRldGltZSAqbmdJZj1cImlzTW9iaWxlU2NyZWVuKClcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCIgKGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQuZGV0YWlsLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGUgfCBkYXRlTWluTWF4SW9uaWNcIiBbbWF4XT1cIm1heERhdGUgfCBkYXRlTWluTWF4SW9uaWNcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIiBbZGlzcGxheUZvcm1hdF09XCJkYXRhIHwgZGF0ZUZvcm1hdElvbmljXCIgW3BpY2tlckZvcm1hdF09XCJkYXRhIHwgZGF0ZUZvcm1hdElvbmljXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogOHB4IDBweDtcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWRGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQpXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiPlxyXG4gIDwvaW9uLWRhdGV0aW1lPlxyXG4gIDxkaXYgY2xhc3M9XCJkYXRlVGltZURlc2t0b3BDb250YWluZXJcIiAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpXCIgW25nU3dpdGNoXT1cImRhdGEuVHlwZVwiPlxyXG4gICAgPGtlbmRvLWRhdGVwaWNrZXIgKm5nU3dpdGNoQ2FzZT1cIid6c2hvcnRkYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybS5nZXQoZGF0YS5WYWx1ZSkudmFsdWUgfCBkYXRlUGFyc2VyIDogZGF0YVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluRGF0ZVwiIFttYXhdPVwibWF4RGF0ZVwiIFtzdGVwc109XCJzdGVwVmFsdWVcIiBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCIgW2Zvcm1hdF09XCJkYXRhIHwgZGF0ZUZvcm1hdEtlbmRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiaW5wdXQtZmllbGQgZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiIFthY3RpdmVWaWV3XT1cIid5ZWFyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYm90dG9tVmlld109XCIneWVhcidcIiAjZGF0ZXBpY2tlcj5cclxuICAgIDwva2VuZG8tZGF0ZXBpY2tlcj5cclxuICAgIDxrZW5kby1kYXRldGltZXBpY2tlciAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtLmdldChkYXRhLlZhbHVlKS52YWx1ZSB8IGRhdGVQYXJzZXIgOiBkYXRhXCIgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluRGF0ZVwiIFttYXhdPVwibWF4RGF0ZVwiIFtzdGVwc109XCJzdGVwVmFsdWVcIiBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiIFtmb3JtYXRdPVwiZGF0YSB8IGRhdGVGb3JtYXRLZW5kb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVHlwZT1cImNsYXNzaWNcIiAjZGF0ZXRpbWVwaWNrZXI+XHJcbiAgICA8L2tlbmRvLWRhdGV0aW1lcGlja2VyPlxyXG4gICAgPGtlbmRvLXRpbWVwaWNrZXIgKm5nU3dpdGNoQ2FzZT1cIlsnenRpbWUnLCd6dWl0aW1lJ10uaW5jbHVkZXMoZGF0YS5UeXBlKSA/IGRhdGEuVHlwZSA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmb3JtLmdldChkYXRhLlZhbHVlKS52YWx1ZSB8IGRhdGVQYXJzZXIgOiBkYXRhXCIgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlXCIgW21heF09XCJtYXhEYXRlXCIgW3N0ZXBzXT1cInN0ZXBWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiIFtmb3JtYXRdPVwiZGF0YSB8IGRhdGVGb3JtYXRLZW5kb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI3RpbWVwaWNrZXI+XHJcbiAgICA8L2tlbmRvLXRpbWVwaWNrZXI+XHJcbiAgICA8a2VuZG8tZGF0ZXBpY2tlciAqbmdTd2l0Y2hEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybS5nZXQoZGF0YS5WYWx1ZSkudmFsdWUgfCBkYXRlUGFyc2VyIDogZGF0YVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluRGF0ZVwiIFttYXhdPVwibWF4RGF0ZVwiIFtzdGVwc109XCJzdGVwVmFsdWVcIiBbZGlzYWJsZWREYXRlc109XCJkaXNhYmxlZERhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCIgW2Zvcm1hdF09XCJkYXRhIHwgZGF0ZUZvcm1hdEtlbmRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiaW5wdXQtZmllbGQgZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjZGF0ZXBpY2tlcj5cclxuICAgIDwva2VuZG8tZGF0ZXBpY2tlcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemRhdGV0aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pkYXRldGltZS96ZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemRhdGV0aW1lL3pkYXRldGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHN0QsNkJBQTZCO0FBRTdCLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBUy9ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjO0lBVXBELFlBQ0UsZ0JBQW1DO1FBRW5DLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBUm5CLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQThDckIsaUJBQVksR0FBRyxDQUFDLE9BQVksRUFBRSxPQUFZLEVBQU8sRUFBRTtZQUN4RCxPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7WUFDaEgsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFTSxpQkFBWSxHQUFHLENBQUMsT0FBWSxFQUFFLE9BQVksRUFBTyxFQUFFO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMs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a0I7a0JBTjlCLFNBQVM7K0JBQ0UsZUFBZTt3R0FNQSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNNLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCwgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGF0ZWlucHV0c1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpkYXRldGltZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vemRhdGV0aW1lLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pkYXRldGltZS5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBaZGF0ZXRpbWVDb21wb25lbnQgZXh0ZW5kcyBJbnB1dEZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImRhdGVwaWNrZXJcIikgZGF0ZXBpY2tlcjogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwidGltZXBpY2tlclwiKSB0aW1lcGlja2VyOiBUaW1lUGlja2VyQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJkYXRldGltZXBpY2tlclwiKSBkYXRldGltZXBpY2tlcjogRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQ7XHJcblxyXG4gIHB1YmxpYyBtaW5EYXRlID0gbnVsbDtcclxuICBwdWJsaWMgbWF4RGF0ZSA9IG51bGw7XHJcbiAgcHVibGljIHN0ZXBWYWx1ZSA9IG51bGw7XHJcbiAgcHVibGljIGRpc2FibGVkRGF0ZXMgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICB0aGlzLnNldE1pbkFuZE1heERhdGVSYW5nZSgpO1xyXG4gICAgdGhpcy5zZXRTdGVwVmFsdWUoKTtcclxuICAgIHRoaXMuc2V0RGlzYWJsZWREYXRlcygpO1xyXG4gICAgc3VwZXIuZm9jdXNPbkRlZmF1bHQodGhpcy5mb2N1cy5iaW5kKHRoaXMpKTtcclxuICAgIC8vIGlmICh0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdKSB7XHJcbiAgICAvLyAgIHRoaXMuZGF0ZVZhbHVlID0gbmV3IERhdGUodGhpcy5ncm91cC56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFNlcnZpY2UuZGVjcmVtZW50Q29tcG9uZW50Q291bnRlckZvckZpZWxkKHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXREYXRlVmFsdWUoKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdLnZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG5cclxuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IHRoaXMuY29udmVydERhdGVUaW1lVmFsdWVUb1N0cmluZyh2YWx1ZSkgYXMgRGF0ZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUoZGF0ZVZhbHVlKTtcclxuICAgICAgZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gICAgIFxyXG4gICAgLy8gSW1wb3J0YW50OiBwYXNzIERhdGUgdG8gYmFzZSwgbm90IElTTyBzdHJpbmdcclxuICAgIHN1cGVyLm9uQ2hhbmdlKG51bGwsIGRhdGVWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2V0RGF0ZVJhbmdlID0gKG1pbkRhdGU6IGFueSwgbWF4RGF0ZTogYW55KTogYW55ID0+IHtcclxuICAgIGNvbnNvbGUud2FybihgUGxlYXNlIGNoYW5nZSB0aGUgZnVuY3Rpb24gdG8gY2FtZWxjYXNlICdzZXREYXRlUmFuZ2UnLiAnU2V0RGF0ZVJhbmdlJyB3aWxsIGJlIGRlcHJlY2F0ZWQgc29vbi5gKTtcclxuICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRlUmFuZ2UgPSAobWluRGF0ZTogYW55LCBtYXhEYXRlOiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgaWYgKCFpc05hTihEYXRlLnBhcnNlKG1pbkRhdGUpKSkge1xyXG4gICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZShtaW5EYXRlKTtcclxuICAgIH1cclxuICAgIGlmICghaXNOYU4oRGF0ZS5wYXJzZShtYXhEYXRlKSkpIHtcclxuICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUobWF4RGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1pbkFuZE1heERhdGVSYW5nZSgpIHtcclxuICAgIGNvbnN0IG1pbkRhdGVHcm91cFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5NaW5EYXRlIGFzIGFueSwgdGhpcy5ncm91cCk7XHJcbiAgICBjb25zdCBtaW5EYXRlVmFsdWUgPSBtaW5EYXRlR3JvdXBWYWx1ZSB8fCB0aGlzLmRhdGEuTWluRGF0ZTtcclxuXHJcbiAgICBjb25zdCBtYXhEYXRlR3JvdXBWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuTWF4RGF0ZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgY29uc3QgbWF4RGF0ZVZhbHVlID0gbWF4RGF0ZUdyb3VwVmFsdWUgfHwgdGhpcy5kYXRhLk1heERhdGU7XHJcbiAgICB0aGlzLnNldERhdGVSYW5nZShtaW5EYXRlVmFsdWUsIG1heERhdGVWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN0ZXBWYWx1ZSgpIHtcclxuICAgIGNvbnN0IHN0ZXBWYWx1ZUdyb3VwVmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlN0ZXBWYWx1ZSBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy5zdGVwVmFsdWUgPSBzdGVwVmFsdWVHcm91cFZhbHVlIHx8IHRoaXMuZGF0YS5TdGVwVmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERpc2FibGVkRGF0ZXMoKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkRGF0ZXMgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EaXNhYmxlZERhdGVzKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuRGlzYWJsZWREYXRlcyBhcyBhbnksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRpbWVWYWx1ZVRvU3RyaW5nKHZhbHVlOiBhbnkpOiBEYXRlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICAgXHJcbiAgICBjb25zdCBpbnB1dERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcblxyXG4gICAgLy8genNob3J0ZGF0ZSDihpIgbm9ybWFsaXplIHRvIGZpcnN0IGRheSBvZiBtb250aFxyXG4gICAgaWYgKHRoaXMuZGF0YS5UeXBlID09PSAnenNob3J0ZGF0ZScpIHtcclxuICAgICAgY29uc3QgbW9udGhTdGFydCA9IG5ldyBEYXRlKGlucHV0RGF0ZSk7XHJcbiAgICAgIG1vbnRoU3RhcnQuc2V0RGF0ZSgxKTtcclxuXHJcbiAgICAgIHJldHVybiBtb250aFN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElnbm9yZSB0aW1lem9uZToga2VlcCBzYW1lIGxvY2FsIHdhbGwtY2xvY2sgdGltZSByZWdhcmRsZXNzIG9mIGJyb3dzZXIgVFpcclxuICAgIGlmICh0aGlzLmRhdGEuSXNJZ25vcmVUaW1lWm9uZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hZGp1c3RGb3JJZ25vcmVUaW1lWm9uZShpbnB1dERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBub24tdGltZSB0eXBlcyAtPiBkYXRlLW9ubHlcclxuICAgIGlmICghWyd6dWlkYXRldGltZScsICd6dGltZScsICd6dWl0aW1lJ10uaW5jbHVkZXModGhpcy5kYXRhLlR5cGUpKSB7XHJcbiAgICAgIC8vIEFzc3VtaW5nIHRoZXNlIGhlbHBlcnMgYWxyZWFkeSByZXR1cm4gRGF0ZVxyXG4gICAgICBjb25zdCBkYXRlT25seSA9IHRoaXMucGFyc2VBbnlWYWx1ZVRvRGF0ZU9ubHkoaW5wdXREYXRlKTtcclxuICAgICAgcmV0dXJuIGRhdGVPbmx5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBkYXRldGltZS90aW1lIHR5cGVzIC0+IGZ1bGwgZGF0ZXRpbWVcclxuICAgIGNvbnN0IGRhdGVUaW1lID0gdGhpcy5wYXJzZUFueVZhbHVlVG9EYXRlKGlucHV0RGF0ZSk7XHJcbiAgICByZXR1cm4gZGF0ZVRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGp1c3RzIGEgRGF0ZSBzbyB0aGF0IGl0cyB3YWxsLWNsb2NrIHRpbWUgc3RheXMgdGhlIHNhbWVcclxuICAgKiB3aGVuIGlnbm9yaW5nIHRoZSBicm93c2VyIHRpbWV6b25lLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYWRqdXN0Rm9ySWdub3JlVGltZVpvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgY29uc3QgYWRqdXN0ZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICBjb25zdCB0aW1lem9uZU9mZnNldE1pbnV0ZXMgPSBhZGp1c3RlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcclxuICAgIGFkanVzdGVkRGF0ZS5zZXRNaW51dGVzKGFkanVzdGVkRGF0ZS5nZXRNaW51dGVzKCkgLSB0aW1lem9uZU9mZnNldE1pbnV0ZXMpO1xyXG4gICAgcmV0dXJuIGFkanVzdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VBbnlWYWx1ZVRvRGF0ZSh2YWx1ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlIDogbmV3IERhdGUodmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VBbnlWYWx1ZVRvRGF0ZU9ubHkodmFsdWUpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnBhcnNlQW55VmFsdWVUb0RhdGUodmFsdWUpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRlcGlja2VyKSB7XHJcbiAgICAgIHRoaXMuZGF0ZXBpY2tlci5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRpbWVwaWNrZXIpIHtcclxuICAgICAgdGhpcy50aW1lcGlja2VyLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0ZXRpbWVwaWNrZXIpIHtcclxuICAgICAgdGhpcy5kYXRldGltZXBpY2tlci5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInpkYXRlLWNvbnRhaW5lciBlMXRhZy1zdHlsZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcblxyXG4gIDxpb24tZGF0ZXRpbWUgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCJcclxuICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZGF0YS5WYWx1ZVwiIChpb25DaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50LmRldGFpbC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5EYXRlIHwgZGF0ZU1pbk1heElvbmljXCIgW21heF09XCJtYXhEYXRlIHwgZGF0ZU1pbk1heElvbmljXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCIgW2Rpc3BsYXlGb3JtYXRdPVwiZGF0YSB8IGRhdGVGb3JtYXRJb25pY1wiIFtwaWNrZXJGb3JtYXRdPVwiZGF0YSB8IGRhdGVGb3JtYXRJb25pY1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDhweCAwcHg7XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZEZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkKVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIj5cclxuICA8L2lvbi1kYXRldGltZT5cclxuICA8ZGl2IGNsYXNzPVwiZGF0ZVRpbWVEZXNrdG9wQ29udGFpbmVyXCIgKm5nSWY9XCIhaXNNb2JpbGVTY3JlZW4oKVwiIFtuZ1N3aXRjaF09XCJkYXRhLlR5cGVcIj5cclxuICAgIDxrZW5kby1kYXRlcGlja2VyICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm0uZ2V0KGRhdGEuVmFsdWUpLnZhbHVlIHwgZGF0ZVBhcnNlciA6IGRhdGFcIiAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGVcIiBbbWF4XT1cIm1heERhdGVcIiBbc3RlcHNdPVwic3RlcFZhbHVlXCIgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiIFtmb3JtYXRdPVwiZGF0YSB8IGRhdGVGb3JtYXRLZW5kb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIiBbYWN0aXZlVmlld109XCIneWVhcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2JvdHRvbVZpZXddPVwiJ3llYXInXCIgI2RhdGVwaWNrZXI+XHJcbiAgICA8L2tlbmRvLWRhdGVwaWNrZXI+XHJcbiAgICA8a2VuZG8tZGF0ZXRpbWVwaWNrZXIgKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybS5nZXQoZGF0YS5WYWx1ZSkudmFsdWUgfCBkYXRlUGFyc2VyIDogZGF0YVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGVcIiBbbWF4XT1cIm1heERhdGVcIiBbc3RlcHNdPVwic3RlcFZhbHVlXCIgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIiBbZm9ybWF0XT1cImRhdGEgfCBkYXRlRm9ybWF0S2VuZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiaW5wdXQtZmllbGQgZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhclR5cGU9XCJjbGFzc2ljXCIgI2RhdGV0aW1lcGlja2VyPlxyXG4gICAgPC9rZW5kby1kYXRldGltZXBpY2tlcj5cclxuICAgIDxrZW5kby10aW1lcGlja2VyICpuZ1N3aXRjaENhc2U9XCJbJ3p0aW1lJywnenVpdGltZSddLmluY2x1ZGVzKGRhdGEuVHlwZSkgPyBkYXRhLlR5cGUgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZm9ybS5nZXQoZGF0YS5WYWx1ZSkudmFsdWUgfCBkYXRlUGFyc2VyIDogZGF0YVwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttaW5dPVwibWluRGF0ZVwiIFttYXhdPVwibWF4RGF0ZVwiIFtzdGVwc109XCJzdGVwVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIiBbZm9ybWF0XT1cImRhdGEgfCBkYXRlRm9ybWF0S2VuZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICN0aW1lcGlja2VyPlxyXG4gICAgPC9rZW5kby10aW1lcGlja2VyPlxyXG4gICAgPGtlbmRvLWRhdGVwaWNrZXIgKm5nU3dpdGNoRGVmYXVsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZvcm0uZ2V0KGRhdGEuVmFsdWUpLnZhbHVlIHwgZGF0ZVBhcnNlciA6IGRhdGFcIiAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pbkRhdGVcIiBbbWF4XT1cIm1heERhdGVcIiBbc3RlcHNdPVwic3RlcFZhbHVlXCIgW2Rpc2FibGVkRGF0ZXNdPVwiZGlzYWJsZWREYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiIFtmb3JtYXRdPVwiZGF0YSB8IGRhdGVGb3JtYXRLZW5kb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI2RhdGVwaWNrZXI+XHJcbiAgICA8L2tlbmRvLWRhdGVwaWNrZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbiJdfQ==
@@ -39,7 +39,7 @@ export class ZreportComponent extends FieldBase {
39
39
  this.onPrintBegin = this.printBegin.bind(this);
40
40
  this.onPrintEnd = this.printEnd.bind(this);
41
41
  super.initComponent().subscribe(() => {
42
- this.serviceUrl = this.resourceApiService.getURL(this.data.ResourceURL);
42
+ this.serviceUrl = this.zcoreService.normalizeUrl(this.resourceApiService.getURL(this.data.ResourceURL));
43
43
  if (!this.serviceUrl) {
44
44
  console.log("resourceURL is empty.");
45
45
  }
@@ -182,4 +182,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
182
182
  type: HostListener,
183
183
  args: ['window:resize', ['$event']]
184
184
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cmVwb3J0L3pyZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenJlcG9ydC96cmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxZQUFZLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBTzFGLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFOUQsT0FBTyxFQUFxRSxnQkFBZ0IsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFXcEksTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUEwQjdDLFlBQ1MsZ0JBQW1DLEVBQ25DLGtCQUFzQyxFQUNyQyxrQkFBc0MsRUFDdEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFQakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUF0QjVCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRS9CLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIseUJBQW9CLEdBQUc7WUFDNUIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsT0FBTztZQUNmLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsZUFBZSxFQUFFLFNBQVM7WUFDMUIsU0FBUyxFQUFFLDhCQUE4QjtZQUN6QyxRQUFRLEVBQUUsTUFBTTtZQUNoQixVQUFVLEVBQUUsS0FBSztZQUNqQixLQUFLLEVBQUUsTUFBTTtTQUNkLENBQUM7SUFXRixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFHM0MsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUN0QztZQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUdELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hFLENBQUMsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNFLENBQUMsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFFLHNFQUFzRTtRQUN0RSw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsaUZBQWlGO1FBQ2pGLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsQ0FBQyxDQUFDLDBEQUEwRCxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUUsQ0FBQyxDQUFDLDZEQUE2RCxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakYscUVBQXFFO1FBQ3JFLHNFQUFzRTtRQUN0RSw2RUFBNkU7UUFDN0UsQ0FBQyxDQUFDLDJEQUEyRCxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVNLFdBQVcsQ0FBQyxDQUFNLEVBQUUsSUFBUztRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxTQUFTLENBQUMsQ0FBTSxFQUFFLElBQVM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sY0FBYyxDQUFDLENBQU0sRUFBRSxJQUFTO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtZQUNySSxPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFFckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDO1lBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFTSxZQUFZLENBQUMsQ0FBTSxFQUFFLElBQVM7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsOENBQThDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLHFPQUFxTyxDQUFDO1FBQ3pQLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLFVBQVUsQ0FBQyxDQUFNLEVBQUUsSUFBUztRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFBQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ25GLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNmO2FBQ0ksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2pDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDakI7UUFFRCxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNwQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJO2dCQUNGLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7Z0JBQ2hGLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsdUVBQXVFLENBQUMsQ0FBQztnQkFDekgsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFckUsNERBQTREO2dCQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUUzQixJQUFJLFFBQVEsRUFBRTt3QkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsd0tBQXdLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUM3Tjt5QkFDSSxJQUFJLE1BQU0sRUFBRTt3QkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsNE1BQTRNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUNqUTt5QkFDSTt3QkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsc0ZBQXNGLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUMzSTtpQkFDRjtxQkFDSTtvQkFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztpQkFDM0I7YUFDRjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLGdGQUFnRjtnQkFDaEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLHlDQUF5QztnQkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsc0ZBQXNGLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzNJO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IseUNBQXlDO1lBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsc0ZBQXNGLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzVJLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sUUFBUSxDQUFDLENBQU0sRUFBRSxJQUFTO1FBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQywyREFBMkQsQ0FBQyxDQUFBO1lBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDL0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDO1NBQ2pHO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzVFO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLDhCQUE4QjtJQUNoQyxDQUFDOzs2R0F2TVUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsaVBDdEI3Qix1dUJBa0JBOzJGRElhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxhQUFhOzBQQU13QixNQUFNO3NCQUFwRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBOEQ3QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBIb3N0TGlzdGVuZXIsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBUZWxlcmlrUmVwb3J0Vmlld2VyQ29tcG9uZW50IH0gZnJvbSBcIkBwcm9ncmVzcy90ZWxlcmlrLWFuZ3VsYXItcmVwb3J0LXZpZXdlclwiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9maWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvcmVTZXJ2aWNlIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16cmVwb3J0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96cmVwb3J0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pyZXBvcnQuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBacmVwb3J0Q29tcG9uZW50IGV4dGVuZHMgRmllbGRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdyZXBvcnRWaWV3ZXIxJywgeyBzdGF0aWM6IGZhbHNlIH0pIHZpZXdlcjogVGVsZXJpa1JlcG9ydFZpZXdlckNvbXBvbmVudDtcclxuXHJcbiAgcHVibGljIG9uRXhwb3J0QmVnaW46IEZ1bmN0aW9uO1xyXG4gIHB1YmxpYyBvbkV4cG9ydEVuZDogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uUmVuZGVyaW5nQmVnaW46IEZ1bmN0aW9uO1xyXG4gIHB1YmxpYyBvblJlbmRlcmluZ0VuZDogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uUHJpbnRCZWdpbjogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uUHJpbnRFbmQ6IEZ1bmN0aW9uO1xyXG5cclxuICBwcml2YXRlIGFsbG93UHJpbnRQREY6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgc2VydmljZVVybCA9IG51bGw7XHJcbiAgcHVibGljIHJlcG9ydFNvdXJjZSA9IG51bGw7XHJcbiAgcHVibGljIHZpZXdlckNvbnRhaW5lclN0eWxlID0ge1xyXG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcclxuICAgIHdpZHRoOiBcIjEwMCVcIixcclxuICAgIGhlaWdodDogXCI4MDBweFwiLFxyXG4gICAgZm9udEZhbWlseTogJ0FyaWFsLCBzYW5zLXNlcmlmJyxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxyXG4gICAgYm94U2hhZG93OiAnMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXHJcbiAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgbGluZUhlaWdodDogJzEuNScsXHJcbiAgICBjb2xvcjogJyMzMzMnLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgemNvcmVTZXJ2aWNlOiBaQ29yZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm9uRXhwb3J0QmVnaW4gPSB0aGlzLmV4cG9ydEJlZ2luLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLm9uRXhwb3J0RW5kID0gdGhpcy5leHBvcnRFbmQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25SZW5kZXJpbmdCZWdpbiA9IHRoaXMucmVuZGVyaW5nQmVnaW4uYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25SZW5kZXJpbmdFbmQgPSB0aGlzLnJlbmRlcmluZ0VuZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5vblByaW50QmVnaW4gPSB0aGlzLnByaW50QmVnaW4uYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25QcmludEVuZCA9IHRoaXMucHJpbnRFbmQuYmluZCh0aGlzKTtcclxuXHJcblxyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VydmljZVVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCh0aGlzLmRhdGEuUmVzb3VyY2VVUkwpO1xyXG4gICAgICBpZiAoIXRoaXMuc2VydmljZVVybCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVzb3VyY2VVUkwgaXMgZW1wdHkuXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmRhdGEuSXNBdXRvR2VuZXJhdGVSZXBvcnQpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydFNvdXJjZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuUmVwb3J0U291cmNlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFNlcnZpY2UuZGVjcmVtZW50Q29tcG9uZW50Q291bnRlckZvckZpZWxkKHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUmVwb3J0IHJlc2l6ZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVhZHkoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlJlcG9ydCByZWFkeS5cIik7XHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2hpc3RvcnlCYWNrJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9oaXN0b3J5Rm9yd2FyZCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfc3RvcFJlbmRlcmluZyddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9yZWZyZXNoJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2dvVG9GaXJzdFBhZ2UnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfZ29Ub1ByZXZQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2dvVG9OZXh0UGFnZSddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvTGFzdFBhZ2UnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfdG9nZ2xlUHJpbnRQcmV2aWV3J11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2V4cG9ydCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9wcmludCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfdG9nZ2xlRG9jdW1lbnRNYXAnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVBhcmFtZXRlcnNBcmVhJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3pvb21JbiddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl96b29tT3V0J11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVpvb21Nb2RlJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVTZWFyY2hEaWFsb2cnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0QmVnaW4oZTogYW55LCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRXhwb3J0IGJlZ2luLlwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRFbmQoZTogYW55LCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRXhwb3J0IGVuZC5cIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyaW5nQmVnaW4oZTogYW55LCBhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUmVuZGVyaW5nIHN0YXJ0ZWQuXCIpO1xyXG4gICAgaWYgKHRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMgJiYgdGhpcy5yZXBvcnRTb3VyY2UucGFyYW1ldGVycy5BdXRob3JpemF0aW9uICE9PSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25CZWFyZXIuQXV0aG9yaXphdGlvbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJVcGRhdGVkIGludmFsaWQgYXV0aG9yaXphdGlvbiB0b2tlbi5cIik7XHJcblxyXG4gICAgICB0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25CZWFyZXIuQXV0aG9yaXphdGlvbjtcclxuICAgICAgdGhpcy52aWV3ZXIuc2V0UmVwb3J0U291cmNlKHRoaXMucmVwb3J0U291cmNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJpbmdFbmQoZTogYW55LCBhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUmVuZGVyaW5nIGVuZGVkLlwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVFbXB0eVBkZigpOiBCbG9iIHtcclxuICAgIC8vIENyZWF0ZSBhbiBlbXB0eSBQREYgZmlsZSB3aXRoIGp1c3QgYSBoZWFkZXJcclxuICAgIGNvbnN0IHBkZkNvbnRlbnQgPSAnJVBERi0xLjNcXG4xIDAgb2JqXFxuPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+XFxuZW5kb2JqXFxuMiAwIG9ialxcbjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbXSAvQ291bnQgMCA+PlxcbmVuZG9ialxcbnhyZWZcXG4wIDNcXG4wMDAwMDAwMDAwIDY1NTM1IGYgXFxuMDAwMDAwMDAxMCAwMDAwMCBuIFxcbnRyYWlsZXJcXG48PCAvUm9vdCAxIDAgUiAvU2l6ZSAzID4+XFxuc3RhcnR4cmVmXFxuMjA1XFxuJSVFT0YnO1xyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtwZGZDb250ZW50XSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmludEJlZ2luKGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlByaW50IGJlZ2luLlwiKTtcclxuXHJcbiAgICBjb25zdCBhbGVydFRpdGxlID0gJ1ByaW50IFBERiBFcnJvcic7XHJcbiAgICBjb25zdCBwZGZCbG9iID0gdGhpcy5nZW5lcmF0ZUVtcHR5UGRmKCk7XHJcbiAgICBjb25zdCBwZGZVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHBkZkJsb2IpOyBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xyXG4gICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XHJcbiAgICBsZXQgaXNDaHJvbWUgPSBmYWxzZTtcclxuICAgIGxldCBpc0VkZ2UgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoL0VkZy8udGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgIGlzRWRnZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgvQ2hyb21lLy50ZXN0KHVzZXJBZ2VudCkpIHtcclxuICAgICAgaXNDaHJvbWUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmcmFtZS5zcmMgPSBwZGZVcmw7XHJcbiAgICBpZnJhbWUub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcGRmRWxlbWVudCA9IGlmcmFtZURvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2VtYmVkW3R5cGU9XCJhcHBsaWNhdGlvbi9wZGZcIl0sIG9iamVjdFt0eXBlPVwiYXBwbGljYXRpb24vcGRmXCJdLCBpZnJhbWUnKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2hlY2tpbmcgYnJvd3NlciBpcyByZXBvcnQgYWJsZSB0byBwcmludC4nLCBwZGZFbGVtZW50KTtcclxuXHJcbiAgICAgICAgLy8gSWYgbm8gUERGIGVsZW1lbnQgZm91bmQsIGFsZXJ0IHVzZXIgYWJvdXQgcG90ZW50aWFsIGlzc3VlXHJcbiAgICAgICAgaWYgKCFwZGZFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNDaHJvbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd09rYXkoYWxlcnRUaXRsZSwgXCJTdGVwIDE6IFBsZWFzZSBuYXZpZ2F0ZSB0byAnY2hyb21lOi8vc2V0dGluZ3MvY29udGVudC9wZGZEb2N1bWVudHMnIGluIHRoZSBicm93ZXIuPGJyLz5TdGVwIDI6IFNlbGVjdCAnT3BlbiBQREZzIGluIENocm9tZScgaW4gdGhlIHNldHRpbmcgYmVmb3JlIHByaW50aW5nIHRoZSByZXBvcnQuXCIsIFtcImNvbC02XCJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKGlzRWRnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93T2theShhbGVydFRpdGxlLCBcIlN0ZXAgMTogUGxlYXNlIG5hdmlnYXRlIHRvICdlZGdlOi8vc2V0dGluZ3MvY29udGVudC9wZGZEb2N1bWVudHMnIGluIHRoZSBicm93ZXIuPGJyLz5TdGVwIDI6IEVuYWJsZSAnUERGIHZpZXcgc2V0dGluZ3MnIGFuZCBEaXNhYmxlICdBbHdheXMgRG93bmxvYWQgUERGIGZpbGVzJyBpbiB0aGUgc2V0dGluZyBiZWZvcmUgcHJpbnRpbmcgdGhlIHJlcG9ydC5cIiwgW1wiY29sLTZcIl0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KGFsZXJ0VGl0bGUsIFwiVGhlIGJyb3dzZXIgc2V0dGluZ3MgY2Fubm90IGJlIGRldGVjdGVkLCBwbGVhc2UgcmVhY2ggb3V0IHRvIHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFtcImNvbC00XCJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvLyBJZiBhY2Nlc3NpbmcgaWZyYW1lIGNvbnRlbnQgdGhyb3dzIGFuIGVycm9yLCBhbGVydCB1c2VyIGFib3V0IHBvdGVudGlhbCBpc3N1ZVxyXG4gICAgICAgIHRoaXMuYWxsb3dQcmludFBERiA9IGZhbHNlO1xyXG4gICAgICAgIC8vIFBERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1BERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5IGluIHRoZSBpZnJhbWUuJyk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd09rYXkoYWxlcnRUaXRsZSwgXCJUaGUgYnJvd3NlciBzZXR0aW5ncyBjYW5ub3QgYmUgZGV0ZWN0ZWQsIHBsZWFzZSByZWFjaCBvdXQgdG8gc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgW1wiY29sLTRcIl0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmcmFtZS5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSBmYWxzZTtcclxuICAgICAgLy8gUERGIGZhaWxlZCB0byBsb2FkIG9yIGRpc3BsYXkgcHJvcGVybHlcclxuICAgICAgY29uc29sZS5sb2coJ1BERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5IGluIHRoZSBpZnJhbWUuJyk7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KGFsZXJ0VGl0bGUsIFwiVGhlIGJyb3dzZXIgc2V0dGluZ3MgY2Fubm90IGJlIGRldGVjdGVkLCBwbGVhc2UgcmVhY2ggb3V0IHRvIHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFtcImNvbC00XCJdKTtcclxuICAgIH07XHJcblxyXG4gICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJpbnRFbmQoZTogYW55LCBhcmdzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUHJpbnQgZW5kLlwiKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuYWxsb3dQcmludFBERikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0Jyb3dzZXIgaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBwcmludCB0aGUgUERGLicpXHJcbiAgICAgIGFyZ3MuaGFuZGxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVSZXBvcnQoKSB7XHJcbiAgICB0aGlzLnJlcG9ydFNvdXJjZSA9IHRoaXMuZ3JvdXBbXCJSZXBvcnRTb3VyY2VcIl07XHJcblxyXG4gICAgaWYgKHRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMgJiYgIXRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMuQXV0aG9yaXphdGlvbikge1xyXG4gICAgICB0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25CZWFyZXIuQXV0aG9yaXphdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXBvcnRTb3VyY2VbJ3VybCddKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVVybCA9IHRoaXMuemNvcmVTZXJ2aWNlLm5vcm1hbGl6ZVVybCh0aGlzLnJlcG9ydFNvdXJjZVsndXJsJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld2VyLnNldFJlcG9ydFNvdXJjZSh0aGlzLnJlcG9ydFNvdXJjZSk7XHJcbiAgICAvL3RoaXMudmlld2VyLnJlZnJlc2hSZXBvcnQoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MDBweFwiPiBcclxuICA8dHItdmlld2VyICNyZXBvcnRWaWV3ZXIxXHJcbiAgICAgICAgICAgICBbY29udGFpbmVyU3R5bGVdPVwidmlld2VyQ29udGFpbmVyU3R5bGVcIlxyXG4gICAgICAgICAgICAgW3NlcnZpY2VVcmxdPVwic2VydmljZVVybFwiXHJcbiAgICAgICAgICAgICBbcmVwb3J0U291cmNlXT1cInJlcG9ydFNvdXJjZVwiXHJcbiAgICAgICAgICAgICBbdmlld01vZGVdPVwiJ0lOVEVSQUNUSVZFJ1wiXHJcbiAgICAgICAgICAgICBbc2NhbGVNb2RlXT1cIidTUEVDSUZJQydcIlxyXG4gICAgICAgICAgICAgW3NjYWxlXT1cIjEuMFwiXHJcbiAgICAgICAgICAgICBbZW5hYmxlQWNjZXNzaWJpbGl0eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICBbcmVhZHldPVwib25SZWFkeVwiIFxyXG4gICAgICAgICAgICAgW2V4cG9ydEJlZ2luXT1cIm9uRXhwb3J0QmVnaW5cIlxyXG4gICAgICAgICAgICAgW2V4cG9ydEVuZF09XCJvbkV4cG9ydEVuZFwiXHJcbiAgICAgICAgICAgICBbcmVuZGVyaW5nQmVnaW5dPVwib25SZW5kZXJpbmdCZWdpblwiXHJcbiAgICAgICAgICAgICBbcmVuZGVyaW5nRW5kXT1cIm9uUmVuZGVyaW5nRW5kXCJcclxuICAgICAgICAgICAgIFtwcmludEJlZ2luXT1cIm9uUHJpbnRCZWdpblwiXHJcbiAgICAgICAgICAgICBbcHJpbnRFbmRdPVwib25QcmludEVuZFwiPlxyXG4gIDwvdHItdmlld2VyPlxyXG48L2Rpdj5cclxuIl19
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96cmVwb3J0L3pyZXBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenJlcG9ydC96cmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxZQUFZLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBTzFGLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFOUQsT0FBTyxFQUFxRSxnQkFBZ0IsRUFBZ0IsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFXcEksTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUEwQjdDLFlBQ1MsZ0JBQW1DLEVBQ25DLGtCQUFzQyxFQUNyQyxrQkFBc0MsRUFDdEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFQakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUF0QjVCLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRS9CLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIseUJBQW9CLEdBQUc7WUFDNUIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsS0FB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LENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxDQUFDLENBQUE7WUFDekUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFL0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtZQUMvRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7U0FDakc7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDNUU7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0MsOEJBQThCO0lBQ2hDLENBQUM7OzZHQXZNVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixpUEN0QjdCLHV1QkFrQkE7MkZESWEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGFBQWE7MFBBTXdCLE1BQU07c0JBQXBELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkE4RDdDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IFRlbGVyaWtSZXBvcnRWaWV3ZXJDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL3RlbGVyaWstYW5ndWxhci1yZXBvcnQtdmlld2VyXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IEZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgQXV0aFNlcnZpY2UsIEZvbnRBd2VTb21lU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29yZVNlcnZpY2UgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpyZXBvcnRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pyZXBvcnQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venJlcG9ydC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFpyZXBvcnRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ3JlcG9ydFZpZXdlcjEnLCB7IHN0YXRpYzogZmFsc2UgfSkgdmlld2VyOiBUZWxlcmlrUmVwb3J0Vmlld2VyQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgb25FeHBvcnRCZWdpbjogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uRXhwb3J0RW5kOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgb25SZW5kZXJpbmdCZWdpbjogRnVuY3Rpb247XHJcbiAgcHVibGljIG9uUmVuZGVyaW5nRW5kOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgb25QcmludEJlZ2luOiBGdW5jdGlvbjtcclxuICBwdWJsaWMgb25QcmludEVuZDogRnVuY3Rpb247XHJcblxyXG4gIHByaXZhdGUgYWxsb3dQcmludFBERjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBzZXJ2aWNlVXJsID0gbnVsbDtcclxuICBwdWJsaWMgcmVwb3J0U291cmNlID0gbnVsbDtcclxuICBwdWJsaWMgdmlld2VyQ29udGFpbmVyU3R5bGUgPSB7XHJcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxyXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgaGVpZ2h0OiBcIjgwMHB4XCIsXHJcbiAgICBmb250RmFtaWx5OiAnQXJpYWwsIHNhbnMtc2VyaWYnLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXHJcbiAgICBib3hTaGFkb3c6ICcwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcclxuICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICBsaW5lSGVpZ2h0OiAnMS41JyxcclxuICAgIGNvbG9yOiAnIzMzMycsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub25FeHBvcnRCZWdpbiA9IHRoaXMuZXhwb3J0QmVnaW4uYmluZCh0aGlzKTtcclxuICAgIHRoaXMub25FeHBvcnRFbmQgPSB0aGlzLmV4cG9ydEVuZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5vblJlbmRlcmluZ0JlZ2luID0gdGhpcy5yZW5kZXJpbmdCZWdpbi5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5vblJlbmRlcmluZ0VuZCA9IHRoaXMucmVuZGVyaW5nRW5kLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLm9uUHJpbnRCZWdpbiA9IHRoaXMucHJpbnRCZWdpbi5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5vblByaW50RW5kID0gdGhpcy5wcmludEVuZC5iaW5kKHRoaXMpO1xyXG5cclxuXHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5zZXJ2aWNlVXJsID0gdGhpcy56Y29yZVNlcnZpY2Uubm9ybWFsaXplVXJsKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTCh0aGlzLmRhdGEuUmVzb3VyY2VVUkwpKTtcclxuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VVcmwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInJlc291cmNlVVJMIGlzIGVtcHR5LlwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5kYXRhLklzQXV0b0dlbmVyYXRlUmVwb3J0KSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlJlcG9ydFNvdXJjZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlJlcG9ydCByZXNpemVkLlwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblJlYWR5KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJSZXBvcnQgcmVhZHkuXCIpO1xyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9oaXN0b3J5QmFjayddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfaGlzdG9yeUZvcndhcmQnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3N0b3BSZW5kZXJpbmcnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfcmVmcmVzaCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvRmlyc3RQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX2dvVG9QcmV2UGFnZSddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9nb1RvTmV4dFBhZ2UnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfZ29Ub0xhc3RQYWdlJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgLy8kKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZVByaW50UHJldmlldyddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl9leHBvcnQnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfcHJpbnQnXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAkKFwiW2RhdGEtY29tbWFuZCo9J3RlbGVyaWtfUmVwb3J0Vmlld2VyX3RvZ2dsZURvY3VtZW50TWFwJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gICAgJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVQYXJhbWV0ZXJzQXJlYSddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl96b29tSW4nXVwiKS5wYXJlbnQoKS5oaWRlKCk7XHJcbiAgICAvLyQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfem9vbU91dCddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgIC8vJChcIltkYXRhLWNvbW1hbmQqPSd0ZWxlcmlrX1JlcG9ydFZpZXdlcl90b2dnbGVab29tTW9kZSddXCIpLnBhcmVudCgpLmhpZGUoKTtcclxuICAgICQoXCJbZGF0YS1jb21tYW5kKj0ndGVsZXJpa19SZXBvcnRWaWV3ZXJfdG9nZ2xlU2VhcmNoRGlhbG9nJ11cIikucGFyZW50KCkuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cG9ydEJlZ2luKGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkV4cG9ydCBiZWdpbi5cIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0RW5kKGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkV4cG9ydCBlbmQuXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcmluZ0JlZ2luKGU6IGFueSwgYXJnczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlJlbmRlcmluZyBzdGFydGVkLlwiKTtcclxuICAgIGlmICh0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzICYmIHRoaXMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMuQXV0aG9yaXphdGlvbiAhPT0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uQmVhcmVyLkF1dGhvcml6YXRpb24pIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiVXBkYXRlZCBpbnZhbGlkIGF1dGhvcml6YXRpb24gdG9rZW4uXCIpO1xyXG5cclxuICAgICAgdGhpcy5yZXBvcnRTb3VyY2UucGFyYW1ldGVycy5BdXRob3JpemF0aW9uID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uQmVhcmVyLkF1dGhvcml6YXRpb247XHJcbiAgICAgIHRoaXMudmlld2VyLnNldFJlcG9ydFNvdXJjZSh0aGlzLnJlcG9ydFNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyaW5nRW5kKGU6IGFueSwgYXJnczogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlJlbmRlcmluZyBlbmRlZC5cIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRW1wdHlQZGYoKTogQmxvYiB7XHJcbiAgICAvLyBDcmVhdGUgYW4gZW1wdHkgUERGIGZpbGUgd2l0aCBqdXN0IGEgaGVhZGVyXHJcbiAgICBjb25zdCBwZGZDb250ZW50ID0gJyVQREYtMS4zXFxuMSAwIG9ialxcbjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAyIDAgUiA+PlxcbmVuZG9ialxcbjIgMCBvYmpcXG48PCAvVHlwZSAvUGFnZXMgL0tpZHMgW10gL0NvdW50IDAgPj5cXG5lbmRvYmpcXG54cmVmXFxuMCAzXFxuMDAwMDAwMDAwMCA2NTUzNSBmIFxcbjAwMDAwMDAwMTAgMDAwMDAgbiBcXG50cmFpbGVyXFxuPDwgL1Jvb3QgMSAwIFIgL1NpemUgMyA+PlxcbnN0YXJ0eHJlZlxcbjIwNVxcbiUlRU9GJztcclxuICAgIHJldHVybiBuZXcgQmxvYihbcGRmQ29udGVudF0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJpbnRCZWdpbihlOiBhbnksIGFyZ3M6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJQcmludCBiZWdpbi5cIik7XHJcblxyXG4gICAgY29uc3QgYWxlcnRUaXRsZSA9ICdQcmludCBQREYgRXJyb3InO1xyXG4gICAgY29uc3QgcGRmQmxvYiA9IHRoaXMuZ2VuZXJhdGVFbXB0eVBkZigpO1xyXG4gICAgY29uc3QgcGRmVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChwZGZCbG9iKTsgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xyXG4gICAgbGV0IGlzQ2hyb21lID0gZmFsc2U7XHJcbiAgICBsZXQgaXNFZGdlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKC9FZGcvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBpc0VkZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoL0Nocm9tZS8udGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgIGlzQ2hyb21lID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZnJhbWUuc3JjID0gcGRmVXJsO1xyXG4gICAgaWZyYW1lLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xyXG4gICAgICAgIGNvbnN0IHBkZkVsZW1lbnQgPSBpZnJhbWVEb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdlbWJlZFt0eXBlPVwiYXBwbGljYXRpb24vcGRmXCJdLCBvYmplY3RbdHlwZT1cImFwcGxpY2F0aW9uL3BkZlwiXSwgaWZyYW1lJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NoZWNraW5nIGJyb3dzZXIgaXMgcmVwb3J0IGFibGUgdG8gcHJpbnQuJywgcGRmRWxlbWVudCk7XHJcblxyXG4gICAgICAgIC8vIElmIG5vIFBERiBlbGVtZW50IGZvdW5kLCBhbGVydCB1c2VyIGFib3V0IHBvdGVudGlhbCBpc3N1ZVxyXG4gICAgICAgIGlmICghcGRmRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd1ByaW50UERGID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKGlzQ2hyb21lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KGFsZXJ0VGl0bGUsIFwiU3RlcCAxOiBQbGVhc2UgbmF2aWdhdGUgdG8gJ2Nocm9tZTovL3NldHRpbmdzL2NvbnRlbnQvcGRmRG9jdW1lbnRzJyBpbiB0aGUgYnJvd2VyLjxici8+U3RlcCAyOiBTZWxlY3QgJ09wZW4gUERGcyBpbiBDaHJvbWUnIGluIHRoZSBzZXR0aW5nIGJlZm9yZSBwcmludGluZyB0aGUgcmVwb3J0LlwiLCBbXCJjb2wtNlwiXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpc0VkZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd09rYXkoYWxlcnRUaXRsZSwgXCJTdGVwIDE6IFBsZWFzZSBuYXZpZ2F0ZSB0byAnZWRnZTovL3NldHRpbmdzL2NvbnRlbnQvcGRmRG9jdW1lbnRzJyBpbiB0aGUgYnJvd2VyLjxici8+U3RlcCAyOiBFbmFibGUgJ1BERiB2aWV3IHNldHRpbmdzJyBhbmQgRGlzYWJsZSAnQWx3YXlzIERvd25sb2FkIFBERiBmaWxlcycgaW4gdGhlIHNldHRpbmcgYmVmb3JlIHByaW50aW5nIHRoZSByZXBvcnQuXCIsIFtcImNvbC02XCJdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93T2theShhbGVydFRpdGxlLCBcIlRoZSBicm93c2VyIHNldHRpbmdzIGNhbm5vdCBiZSBkZXRlY3RlZCwgcGxlYXNlIHJlYWNoIG91dCB0byBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBbXCJjb2wtNFwiXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd1ByaW50UERGID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgLy8gSWYgYWNjZXNzaW5nIGlmcmFtZSBjb250ZW50IHRocm93cyBhbiBlcnJvciwgYWxlcnQgdXNlciBhYm91dCBwb3RlbnRpYWwgaXNzdWVcclxuICAgICAgICB0aGlzLmFsbG93UHJpbnRQREYgPSBmYWxzZTtcclxuICAgICAgICAvLyBQREYgZmFpbGVkIHRvIGxvYWQgb3IgZGlzcGxheSBwcm9wZXJseVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQREYgZmFpbGVkIHRvIGxvYWQgb3IgZGlzcGxheSBwcm9wZXJseSBpbiB0aGUgaWZyYW1lLicpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dPa2F5KGFsZXJ0VGl0bGUsIFwiVGhlIGJyb3dzZXIgc2V0dGluZ3MgY2Fubm90IGJlIGRldGVjdGVkLCBwbGVhc2UgcmVhY2ggb3V0IHRvIHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFtcImNvbC00XCJdKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZnJhbWUub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgdGhpcy5hbGxvd1ByaW50UERGID0gZmFsc2U7XHJcbiAgICAgIC8vIFBERiBmYWlsZWQgdG8gbG9hZCBvciBkaXNwbGF5IHByb3Blcmx5XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQREYgZmFpbGVkIHRvIGxvYWQgb3IgZGlzcGxheSBwcm9wZXJseSBpbiB0aGUgaWZyYW1lLicpO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93T2theShhbGVydFRpdGxlLCBcIlRoZSBicm93c2VyIHNldHRpbmdzIGNhbm5vdCBiZSBkZXRlY3RlZCwgcGxlYXNlIHJlYWNoIG91dCB0byBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBbXCJjb2wtNFwiXSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHByaW50RW5kKGU6IGFueSwgYXJnczogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlByaW50IGVuZC5cIik7XHJcblxyXG4gICAgaWYgKCF0aGlzLmFsbG93UHJpbnRQREYpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdCcm93c2VyIGluY29ycmVjdCBjb25maWd1cmF0aW9uLCB1bmFibGUgdG8gcHJpbnQgdGhlIFBERi4nKVxyXG4gICAgICBhcmdzLmhhbmRsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdlbmVyYXRlUmVwb3J0KCkge1xyXG4gICAgdGhpcy5yZXBvcnRTb3VyY2UgPSB0aGlzLmdyb3VwW1wiUmVwb3J0U291cmNlXCJdO1xyXG5cclxuICAgIGlmICh0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzICYmICF0aGlzLnJlcG9ydFNvdXJjZS5wYXJhbWV0ZXJzLkF1dGhvcml6YXRpb24pIHtcclxuICAgICAgdGhpcy5yZXBvcnRTb3VyY2UucGFyYW1ldGVycy5BdXRob3JpemF0aW9uID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uQmVhcmVyLkF1dGhvcml6YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVwb3J0U291cmNlWyd1cmwnXSkge1xyXG4gICAgICB0aGlzLnNlcnZpY2VVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5ub3JtYWxpemVVcmwodGhpcy5yZXBvcnRTb3VyY2VbJ3VybCddKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdlci5zZXRSZXBvcnRTb3VyY2UodGhpcy5yZXBvcnRTb3VyY2UpO1xyXG4gICAgLy90aGlzLnZpZXdlci5yZWZyZXNoUmVwb3J0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiODAwcHhcIj4gXHJcbiAgPHRyLXZpZXdlciAjcmVwb3J0Vmlld2VyMVxyXG4gICAgICAgICAgICAgW2NvbnRhaW5lclN0eWxlXT1cInZpZXdlckNvbnRhaW5lclN0eWxlXCJcclxuICAgICAgICAgICAgIFtzZXJ2aWNlVXJsXT1cInNlcnZpY2VVcmxcIlxyXG4gICAgICAgICAgICAgW3JlcG9ydFNvdXJjZV09XCJyZXBvcnRTb3VyY2VcIlxyXG4gICAgICAgICAgICAgW3ZpZXdNb2RlXT1cIidJTlRFUkFDVElWRSdcIlxyXG4gICAgICAgICAgICAgW3NjYWxlTW9kZV09XCInU1BFQ0lGSUMnXCJcclxuICAgICAgICAgICAgIFtzY2FsZV09XCIxLjBcIlxyXG4gICAgICAgICAgICAgW2VuYWJsZUFjY2Vzc2liaWxpdHldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgW3JlYWR5XT1cIm9uUmVhZHlcIiBcclxuICAgICAgICAgICAgIFtleHBvcnRCZWdpbl09XCJvbkV4cG9ydEJlZ2luXCJcclxuICAgICAgICAgICAgIFtleHBvcnRFbmRdPVwib25FeHBvcnRFbmRcIlxyXG4gICAgICAgICAgICAgW3JlbmRlcmluZ0JlZ2luXT1cIm9uUmVuZGVyaW5nQmVnaW5cIlxyXG4gICAgICAgICAgICAgW3JlbmRlcmluZ0VuZF09XCJvblJlbmRlcmluZ0VuZFwiXHJcbiAgICAgICAgICAgICBbcHJpbnRCZWdpbl09XCJvblByaW50QmVnaW5cIlxyXG4gICAgICAgICAgICAgW3ByaW50RW5kXT1cIm9uUHJpbnRFbmRcIj5cclxuICA8L3RyLXZpZXdlcj5cclxuPC9kaXY+XHJcbiJdfQ==