@seniorsistemas/angular-components 17.1.2 → 17.1.4

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.
Files changed (36) hide show
  1. package/bundles/seniorsistemas-angular-components.umd.js +179 -72
  2. package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
  4. package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
  5. package/components/gantt/components/gantt/bar.d.ts +1 -0
  6. package/components/gantt/components/gantt/gantt.d.ts +1 -1
  7. package/components/gantt/components/gantt/popup.d.ts +4 -1
  8. package/components/gantt/gantt.component.d.ts +9 -1
  9. package/components/gantt/models/options.d.ts +5 -0
  10. package/components/gantt/models/view-mode.d.ts +2 -2
  11. package/esm2015/components/dynamic-form/components/fields/chips/chips-field.component.js +1 -1
  12. package/esm2015/components/gantt/components/gantt/bar.js +61 -33
  13. package/esm2015/components/gantt/components/gantt/gantt-options.js +5 -1
  14. package/esm2015/components/gantt/components/gantt/gantt.js +44 -31
  15. package/esm2015/components/gantt/components/gantt/popup.js +37 -5
  16. package/esm2015/components/gantt/components/side-table/side-table.component.js +3 -3
  17. package/esm2015/components/gantt/gantt.component.js +41 -4
  18. package/esm2015/components/gantt/gantt.module.js +3 -2
  19. package/esm2015/components/gantt/models/options.js +1 -1
  20. package/esm2015/components/gantt/models/view-mode.js +2 -2
  21. package/esm5/components/dynamic-form/components/fields/chips/chips-field.component.js +1 -1
  22. package/esm5/components/gantt/components/gantt/bar.js +62 -34
  23. package/esm5/components/gantt/components/gantt/gantt-options.js +5 -1
  24. package/esm5/components/gantt/components/gantt/gantt.js +43 -30
  25. package/esm5/components/gantt/components/gantt/popup.js +30 -5
  26. package/esm5/components/gantt/components/side-table/side-table.component.js +3 -3
  27. package/esm5/components/gantt/gantt.component.js +41 -4
  28. package/esm5/components/gantt/gantt.module.js +3 -2
  29. package/esm5/components/gantt/models/options.js +1 -1
  30. package/esm5/components/gantt/models/view-mode.js +2 -2
  31. package/fesm2015/seniorsistemas-angular-components.js +187 -73
  32. package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
  33. package/fesm5/seniorsistemas-angular-components.js +179 -72
  34. package/fesm5/seniorsistemas-angular-components.js.map +1 -1
  35. package/package.json +1 -1
  36. package/seniorsistemas-angular-components.metadata.json +1 -1
@@ -7,8 +7,8 @@ import { defaultOptions } from "./gantt-options";
7
7
  import { ViewMode } from "../../models/view-mode";
8
8
  export class Gantt {
9
9
  constructor(wrapper, tasks, options) {
10
- this.setup_wrapper(wrapper);
11
10
  this.setup_options(options);
11
+ this.setup_wrapper(wrapper);
12
12
  this.setup_tasks(tasks);
13
13
  // initialize with default view mode
14
14
  this.change_view_mode();
@@ -52,6 +52,9 @@ export class Gantt {
52
52
  // wrapper element
53
53
  this.$container = document.createElement("div");
54
54
  this.$container.classList.add("gantt-container");
55
+ if (this.options.containerWidth) {
56
+ this.$container.style.width = this.options.containerWidth + 'px';
57
+ }
55
58
  const parent_element = this.$svg.parentElement;
56
59
  parent_element.appendChild(this.$container);
57
60
  this.$container.appendChild(this.$svg);
@@ -135,6 +138,7 @@ export class Gantt {
135
138
  this.change_view_mode();
136
139
  }
137
140
  change_view_mode(mode = this.options.viewMode) {
141
+ this.setup_gantt_dates();
138
142
  this.update_view_scale(mode);
139
143
  this.setup_dates();
140
144
  this.render();
@@ -147,7 +151,6 @@ export class Gantt {
147
151
  if (view_mode === ViewMode.Hour) {
148
152
  this.options.step = 24 / 24;
149
153
  this.options.columnWidth = 50;
150
- // this.isHourView = true;
151
154
  }
152
155
  else if (view_mode === ViewMode.Day) {
153
156
  this.options.step = 24;
@@ -175,7 +178,6 @@ export class Gantt {
175
178
  }
176
179
  }
177
180
  setup_dates() {
178
- this.setup_gantt_dates();
179
181
  this.setup_date_values();
180
182
  }
181
183
  setup_gantt_dates() {
@@ -185,7 +187,7 @@ export class Gantt {
185
187
  for (let task of this.tasks) {
186
188
  // set global start and end date
187
189
  if (!this.minDate || task.start < this.minDate) {
188
- this._minDate = task.start;
190
+ this._minDate = DateUtils.startOf(task.start, 'day');
189
191
  }
190
192
  if (!this.maxDate || task.end > this.maxDate) {
191
193
  this._maxDate = task.end;
@@ -199,28 +201,28 @@ export class Gantt {
199
201
  this._maxDate = DateUtils.add(this.maxDate, (_b = this.options.marginAfterEnd) !== null && _b !== void 0 ? _b : 1, "hour");
200
202
  break;
201
203
  case ViewMode.QuarterDay:
202
- this._minDate = DateUtils.add(this.minDate, -((_c = this.options.marginBeforeStart) !== null && _c !== void 0 ? _c : 12), "hour");
203
- this._maxDate = DateUtils.add(this.maxDate, (_d = this.options.marginAfterEnd) !== null && _d !== void 0 ? _d : 12, "hour");
204
+ this._minDate = DateUtils.add(this.minDate, -((_c = this.options.marginBeforeStart) !== null && _c !== void 0 ? _c : 6), "hour");
205
+ this._maxDate = DateUtils.add(this.maxDate, (_d = this.options.marginAfterEnd) !== null && _d !== void 0 ? _d : 6, "hour");
204
206
  break;
205
207
  case ViewMode.HalfDay:
206
- this._minDate = DateUtils.add(this.minDate, -((_e = this.options.marginBeforeStart) !== null && _e !== void 0 ? _e : 1), "day");
207
- this._maxDate = DateUtils.add(this.maxDate, (_f = this.options.marginAfterEnd) !== null && _f !== void 0 ? _f : 1, "day");
208
+ this._minDate = DateUtils.add(this.minDate, -((_e = this.options.marginBeforeStart) !== null && _e !== void 0 ? _e : 12), "hour");
209
+ this._maxDate = DateUtils.add(this.maxDate, (_f = this.options.marginAfterEnd) !== null && _f !== void 0 ? _f : 12, "hour");
208
210
  break;
209
211
  case ViewMode.Day:
210
- this._minDate = DateUtils.add(this.minDate, -((_g = this.options.marginBeforeStart) !== null && _g !== void 0 ? _g : 3), "day");
211
- this._maxDate = DateUtils.add(this.maxDate, (_h = this.options.marginAfterEnd) !== null && _h !== void 0 ? _h : 3, "day");
212
+ this._minDate = DateUtils.add(this.minDate, -((_g = this.options.marginBeforeStart) !== null && _g !== void 0 ? _g : 1), "day");
213
+ this._maxDate = DateUtils.add(this.maxDate, (_h = this.options.marginAfterEnd) !== null && _h !== void 0 ? _h : 1, "day");
212
214
  break;
213
215
  case ViewMode.Week:
214
- this._minDate = DateUtils.add(this.minDate, -((_j = this.options.marginBeforeStart) !== null && _j !== void 0 ? _j : 1), "month");
215
- this._maxDate = DateUtils.add(this.maxDate, (_k = this.options.marginAfterEnd) !== null && _k !== void 0 ? _k : 1, "month");
216
+ this._minDate = DateUtils.add(this.minDate, -((_j = this.options.marginBeforeStart) !== null && _j !== void 0 ? _j : 1), "week");
217
+ this._maxDate = DateUtils.add(this.maxDate, (_k = this.options.marginAfterEnd) !== null && _k !== void 0 ? _k : 1, "week");
216
218
  break;
217
219
  case ViewMode.Month:
218
- this._minDate = DateUtils.add(this.minDate, -((_l = this.options.marginBeforeStart) !== null && _l !== void 0 ? _l : 1), "year");
219
- this._maxDate = DateUtils.add(this.maxDate, (_m = this.options.marginAfterEnd) !== null && _m !== void 0 ? _m : 1, "year");
220
+ this._minDate = DateUtils.add(this.minDate, -((_l = this.options.marginBeforeStart) !== null && _l !== void 0 ? _l : 1), "month");
221
+ this._maxDate = DateUtils.add(this.maxDate, (_m = this.options.marginAfterEnd) !== null && _m !== void 0 ? _m : 1, "month");
220
222
  break;
221
223
  case ViewMode.Year:
222
- this._minDate = DateUtils.add(this.minDate, -((_o = this.options.marginBeforeStart) !== null && _o !== void 0 ? _o : 2), "year");
223
- this._maxDate = DateUtils.add(this.maxDate, (_p = this.options.marginAfterEnd) !== null && _p !== void 0 ? _p : 2, "year");
224
+ this._minDate = DateUtils.add(this.minDate, -((_o = this.options.marginBeforeStart) !== null && _o !== void 0 ? _o : 1), "year");
225
+ this._maxDate = DateUtils.add(this.maxDate, (_p = this.options.marginAfterEnd) !== null && _p !== void 0 ? _p : 1, "year");
224
226
  break;
225
227
  }
226
228
  }
@@ -244,6 +246,10 @@ export class Gantt {
244
246
  }
245
247
  this.dates.push(cur_date);
246
248
  }
249
+ if (this.options.containerWidth) {
250
+ const columnWidth = (this.options.containerWidth - 1) / this.dates.length;
251
+ this.options.columnWidth = columnWidth < 45 ? 45 : columnWidth;
252
+ }
247
253
  console.log("cur_date", cur_date);
248
254
  console.log("dates", this.dates);
249
255
  }
@@ -281,7 +287,10 @@ export class Gantt {
281
287
  this.make_grid_ticks();
282
288
  }
283
289
  make_grid_background() {
284
- const grid_width = this.dates.length * this.options.columnWidth;
290
+ let grid_width = this.dates.length * this.options.columnWidth;
291
+ if (this.options.containerWidth) {
292
+ grid_width = this.options.containerWidth;
293
+ }
285
294
  const distinct_rows = [...new Set(this.tasks.map((x) => x._row_id))];
286
295
  const grid_height = this.options.headerHeight +
287
296
  this.options.padding / 2 +
@@ -361,6 +370,11 @@ export class Gantt {
361
370
  if (this.view_is(ViewMode.Month) && date.getMonth() % 3 === 0) {
362
371
  tick_class += " thick";
363
372
  }
373
+ // Thick ticks for hours
374
+ if (this.view_is(ViewMode.Hour) &&
375
+ date.getHours() == 0) {
376
+ tick_class += " thick";
377
+ }
364
378
  createSVG("path", {
365
379
  d: `M ${tick_x} ${tick_y} v ${tick_height}`,
366
380
  class: tick_class,
@@ -469,9 +483,7 @@ export class Gantt {
469
483
  hourLower: DateUtils.format(date, "HH:mm", this.options.language),
470
484
  quarterDayLower: DateUtils.format(date, "HH:mm", this.options.language),
471
485
  halfDayLower: DateUtils.format(date, "HH:mm", this.options.language),
472
- dayLower: date.getDate() !== last_date.getDate()
473
- ? DateUtils.format(date, "D", this.options.language)
474
- : "",
486
+ dayLower: DateUtils.format(date, "D", this.options.language),
475
487
  weekLower: date.getMonth() !== last_date.getMonth()
476
488
  ? DateUtils.format(date, "D MMM", this.options.language)
477
489
  : DateUtils.format(date, "D", this.options.language),
@@ -480,12 +492,12 @@ export class Gantt {
480
492
  quarterDayUpper: date.getDate() !== last_date.getDate()
481
493
  ? DateUtils.format(date, "D MMM", this.options.language)
482
494
  : "",
483
- halfDayUpper: date.getDate() !== last_date.getDate()
484
- ? date.getMonth() !== last_date.getMonth()
495
+ halfDayUpper: (date.getDate() !== last_date.getDate())
496
+ ? (((date.getMonth() !== last_date.getMonth()) || i < 2)
485
497
  ? DateUtils.format(date, "D MMM", this.options.language)
486
- : DateUtils.format(date, "D", this.options.language)
498
+ : DateUtils.format(date, "D", this.options.language))
487
499
  : "",
488
- dayUpper: date.getMonth() !== last_date.getMonth()
500
+ dayUpper: ((date.getMonth() !== last_date.getMonth()) || i === 0)
489
501
  ? DateUtils.format(date, "MMMM", this.options.language)
490
502
  : "",
491
503
  weekUpper: date.getMonth() !== last_date.getMonth()
@@ -497,8 +509,8 @@ export class Gantt {
497
509
  yearUpper: date.getFullYear() !== last_date.getFullYear()
498
510
  ? DateUtils.format(date, "YYYY", this.options.language)
499
511
  : "",
500
- hour: date.getHours() !== last_date.getHours()
501
- ? DateUtils.format(date, "HH:mm", this.options.language)
512
+ hourUpper: date.getDate() !== last_date.getDate()
513
+ ? DateUtils.format(date, "D MMM", this.options.language)
502
514
  : "",
503
515
  };
504
516
  // Descontando 20 para adcionar uma segunda linha de informação no cabeçalho
@@ -507,15 +519,16 @@ export class Gantt {
507
519
  lower_y: this.options.headerHeight - 20,
508
520
  upper_y: this.options.headerHeight - 20 - 25,
509
521
  };
522
+ debugger;
510
523
  const x_pos = {
511
524
  hourLower: this.options.columnWidth / 2,
512
- hourUpper: this.options.columnWidth * 24 / 2,
525
+ hourUpper: (this.dates.length < 14) ? (this.options.columnWidth) : (this.options.columnWidth * 24 / 2),
513
526
  quarterDayLower: this.options.columnWidth / 2,
514
527
  quarterDayUpper: this.options.columnWidth * 4 / 2,
515
528
  halfDayLower: this.options.columnWidth / 2,
516
529
  halfDayUpper: this.options.columnWidth * 2 / 2,
517
530
  dayLower: this.options.columnWidth / 2,
518
- dayUpper: (this.options.columnWidth * 30) / 2,
531
+ dayUpper: (this.dates.length < 15) ? (this.options.columnWidth) : ((this.options.columnWidth * 30) / 2),
519
532
  weekLower: 0,
520
533
  weekUpper: (this.options.columnWidth * 4) / 2,
521
534
  monthLower: this.options.columnWidth / 2,
@@ -611,7 +624,7 @@ export class Gantt {
611
624
  else if (element.classList.contains("right")) {
612
625
  is_resizing_right = true;
613
626
  }
614
- else if (element.classList.contains("bar-wrapper")) {
627
+ else if (element.classList.contains("bar-wrapper") && this.options.allowMovement) {
615
628
  is_dragging = true;
616
629
  }
617
630
  bar_wrapper.classList.add("active");
@@ -666,7 +679,7 @@ export class Gantt {
666
679
  });
667
680
  }, null);
668
681
  document.addEventListener("mouseup", (e) => {
669
- if (is_dragging || is_resizing_left || is_resizing_right) {
682
+ if (is_dragging || is_resizing_left || is_resizing_right || !this.options.allowMovement) {
670
683
  bars.forEach((bar) => bar.group.classList.remove("active"));
671
684
  }
672
685
  is_dragging = false;
@@ -764,4 +777,4 @@ export class Gantt {
764
777
  function generate_id(task) {
765
778
  return task.name + "_" + Math.random().toString(36).slice(2, 12);
766
779
  }
767
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHbEQsTUFBTSxPQUFPLEtBQUs7SUE0QmQsWUFBWSxPQUFZLEVBQUUsS0FBYSxFQUFFLE9BQWlCO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQWZELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFXTyxhQUFhLENBQUMsT0FBWTtRQUM5QixJQUFJLFdBQVcsRUFBRSxlQUFlLENB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QUM7YUFDL0IsTUFBTSxDQUFDLENBQUMsU0FBYyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQ3RDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUMvQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztDQUNKO0FBRUQsU0FBUyxXQUFXLENBQUMsSUFBUztJQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSBcIi4vdXRpbHMvZGF0ZS11dGlsc1wiO1xuaW1wb3J0IHsgJCwgY3JlYXRlU1ZHIH0gZnJvbSBcIi4vdXRpbHMvc3ZnLXV0aWxzXCI7XG5pbXBvcnQgeyBCYXIgfSBmcm9tIFwiLi9iYXJcIjtcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4vcG9wdXBcIjtcbmltcG9ydCB7IEFycm93IH0gZnJvbSBcIi4vYXJyb3dcIjtcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL29wdGlvbnNcIjtcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vZ2FudHQtb3B0aW9uc1wiO1xuaW1wb3J0IHsgVmlld01vZGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3ZpZXctbW9kZVwiO1xuaW1wb3J0IHsgVGFzaywgRW5yaWNoZWRUYXNrIH0gZnJvbSBcIi4uLy4uL21vZGVsc1wiO1xuXG5leHBvcnQgY2xhc3MgR2FudHQge1xuICAgIHB1YmxpYyBvcHRpb25zOiBPcHRpb25zO1xuICAgIHB1YmxpYyB0YXNrczogRW5yaWNoZWRUYXNrW107XG4gICAgcHVibGljIGRlcGVuZGVuY3lfbWFwOiBhbnk7XG5cbiAgICBwcml2YXRlIF9taW5EYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX21heERhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfcmVhbE1pbkRhdGU6IERhdGU7XG4gICAgcHJpdmF0ZSBfcmVhbE1heERhdGU6IERhdGU7XG5cbiAgICBwdWJsaWMgZGF0ZXM6IGFueTtcbiAgICBwdWJsaWMgbGF5ZXJzOiBhbnk7XG4gICAgcHVibGljIGJhcnM6IEJhcltdO1xuICAgIHB1YmxpYyBhcnJvd3M6IEFycm93W107XG4gICAgcHVibGljIGJhcl9iZWluZ19kcmFnZ2VkOiBhbnk7XG4gICAgcHVibGljICRzdmc6IGFueTtcbiAgICBwdWJsaWMgJGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XG4gICAgcHVibGljIHBvcHVwX3dyYXBwZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIHB1YmxpYyBwb3B1cDogYW55O1xuXG4gICAgcHVibGljIGdldCBtaW5EYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1heERhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHdyYXBwZXI6IGFueSwgdGFza3M6IFRhc2tbXSwgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zZXR1cF93cmFwcGVyKHdyYXBwZXIpO1xuICAgICAgICB0aGlzLnNldHVwX29wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0dXBfdGFza3ModGFza3MpO1xuICAgICAgICAvLyBpbml0aWFsaXplIHdpdGggZGVmYXVsdCB2aWV3IG1vZGVcbiAgICAgICAgdGhpcy5jaGFuZ2Vfdmlld19tb2RlKCk7XG4gICAgICAgIHRoaXMuYmluZF9ldmVudHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX3dyYXBwZXIoZWxlbWVudDogYW55KSB7XG4gICAgICAgIGxldCBzdmdfZWxlbWVudCwgd3JhcHBlcl9lbGVtZW50O1xuXG4gICAgICAgIC8vIENTUyBTZWxlY3RvciBpcyBwYXNzZWRcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGdldCB0aGUgU1ZHRWxlbWVudFxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB3cmFwcGVyX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgc3ZnX2VsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHN2Z19lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJGcmFwcMOpIEdhbnR0IG9ubHkgc3VwcG9ydHMgdXNhZ2Ugb2YgYSBzdHJpbmcgQ1NTIHNlbGVjdG9yLCBIVE1MIERPTSBlbGVtZW50IG9yIFNWRyBET00gZWxlbWVudCBmb3IgdGhlIFxcJ2VsZW1lbnRcXCcgcGFyYW1ldGVyXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdmcgZWxlbWVudFxuICAgICAgICBpZiAoIXN2Z19lbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgaXRcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IGNyZWF0ZVNWRyhcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB3cmFwcGVyX2VsZW1lbnQsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFwiZ2FudHRcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4kc3ZnID0gc3ZnX2VsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLiRzdmcuY2xhc3NMaXN0LmFkZChcImdhbnR0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd3JhcHBlciBlbGVtZW50XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiZ2FudHQtY29udGFpbmVyXCIpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudF9lbGVtZW50ID0gdGhpcy4kc3ZnLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHBhcmVudF9lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuJGNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRzdmcpO1xuXG4gICAgICAgIC8vIHBvcHVwIHdyYXBwZXJcbiAgICAgICAgdGhpcy5wb3B1cF93cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5wb3B1cF93cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJwb3B1cC13cmFwcGVyXCIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cF93cmFwcGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX29wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBfdGFza3ModGFza3M6IGFueSkge1xuICAgICAgICAvLyBwcmVwYXJlIHRhc2tzXG4gICAgICAgIHRoaXMudGFza3MgPSB0YXNrcy5tYXAoKHRhc2s6IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgICAgICAvL3N0YW5kYXJkIGNvbG9ycyBpZiBuZWVkZWRcbiAgICAgICAgICAgIHRhc2suY29sb3IgPSB0YXNrLmNvbG9yIHx8ICcjNzg5MkExJztcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBEYXRlIG9iamVjdHNcbiAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gRGF0ZVV0aWxzLnBhcnNlKHRhc2suc3RhcnQpO1xuICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLnBhcnNlKHRhc2suZW5kKTtcblxuICAgICAgICAgICAgLy8gbWFrZSB0YXNrIGludmFsaWQgaWYgZHVyYXRpb24gdG9vIGxhcmdlXG4gICAgICAgICAgICBpZiAoRGF0ZVV0aWxzLmRpZmYodGFzay5fZW5kLCB0YXNrLl9zdGFydCwgXCJ5ZWFyXCIpID4gMTApIHtcbiAgICAgICAgICAgICAgICB0YXNrLmVuZCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhY2hlIGluZGV4XG4gICAgICAgICAgICB0YXNrLl9pbmRleCA9IGk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5fcm93X2lkID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGFzay5faW5kZXggPSB0YXNrLl9yb3dfaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludmFsaWQgZGF0ZXNcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCAmJiAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gdG9kYXk7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0b2RheSwgMiwgXCJkYXlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCAmJiB0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9lbmQsIC0yLCAnZGF5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXNrLnN0YXJ0ICYmICF0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5hZGQodGFzay5fc3RhcnQsIDIsIFwiZGF5XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBob3VycyBpcyBub3Qgc2V0LCBhc3N1bWUgdGhlIGxhc3QgZGF5IGlzIGZ1bGwgZGF5XG4gICAgICAgICAgICAvLyBlLmc6IDIwMTgtMDktMDkgYmVjb21lcyAyMDE4LTA5LTA5IDIzOjU5OjU5XG4gICAgICAgICAgICBjb25zdCB0YXNrX2VuZF92YWx1ZXMgPSBEYXRlVXRpbHMuZ2V0RGF0ZVZhbHVlcyh0YXNrLl9lbmQpO1xuICAgICAgICAgICAgaWYgKHRhc2tfZW5kX3ZhbHVlcy5zbGljZSgzKS5ldmVyeSgoZCkgPT4gZCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX2VuZCwgMjQsIFwiaG91clwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW52YWxpZCBmbGFnXG4gICAgICAgICAgICBpZiAoIXRhc2suc3RhcnQgfHwgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5pbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRhc2suZGVwZW5kZW5jaWVzID09PSBcInN0cmluZ1wiIHx8ICF0YXNrLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGxldCBkZXBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRhc2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHMgPSB0YXNrLmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGQ6IGFueSkgPT4gZC50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+IGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLmRlcGVuZGVuY2llcyA9IGRlcHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVpZHNcbiAgICAgICAgICAgIGlmICghdGFzay5pZCkge1xuICAgICAgICAgICAgICAgIHRhc2suaWQgPSBnZW5lcmF0ZV9pZCh0YXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0dXBfZGVwZW5kZW5jaWVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF9kZXBlbmRlbmNpZXMoKSB7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jeV9tYXAgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkIG9mIHQuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXSA9IHRoaXMuZGVwZW5kZW5jeV9tYXBbZF0gfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXS5wdXNoKHQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2godGFza3M6IFRhc2tbXSkge1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2Vfdmlld19tb2RlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZV92aWV3X21vZGUobW9kZSA9IHRoaXMub3B0aW9ucy52aWV3TW9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZV92aWV3X3NjYWxlKG1vZGUpO1xuICAgICAgICB0aGlzLnNldHVwX2RhdGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIC8vIGZpcmUgdmlld21vZGVfY2hhbmdlIGV2ZW50XG4gICAgICAgIHRoaXMudHJpZ2dlcl9ldmVudChcIm9uVmlld0NoYW5nZVwiLCBbbW9kZV0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlX3ZpZXdfc2NhbGUodmlld19tb2RlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdNb2RlID0gdmlld19tb2RlO1xuICAgICAgICAvLyB0aGlzLmlzSG91clZpZXcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuSG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgICAgICAvLyB0aGlzLmlzSG91clZpZXcgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5IYWxmRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gMjtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuUXVhcnRlckRheSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLldlZWspIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiA3O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTQwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiAzMDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDEyMDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiAzNjU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxMjA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RhdGVzKCkge1xuICAgICAgICB0aGlzLnNldHVwX2dhbnR0X2RhdGVzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBfZGF0ZV92YWx1ZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2dhbnR0X2RhdGVzKCkge1xuICAgICAgICB0aGlzLl9taW5EYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IG51bGw7XG5cbiAgICAgICAgZm9yIChsZXQgdGFzayBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICAvLyBzZXQgZ2xvYmFsIHN0YXJ0IGFuZCBlbmQgZGF0ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1pbkRhdGUgfHwgdGFzay5zdGFydCA8IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSB0YXNrLnN0YXJ0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1heERhdGUgfHwgdGFzay5lbmQgPiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGFzay5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZWFsTWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgdGhpcy5fcmVhbE1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudmlld01vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5RdWFydGVyRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMTIpLCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMTIsIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSGFsZkRheTpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCBcImRheVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcImRheVwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMyksIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDMsIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5XZWVrOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksIFwibW9udGhcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJ5ZWFyXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuWWVhcjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDIpLCBcInllYXJcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMiwgXCJ5ZWFyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF9kYXRlX3ZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5kYXRlcyA9IFtdO1xuICAgICAgICBsZXQgY3VyX2RhdGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlIChjdXJfZGF0ZSA9PT0gbnVsbCB8fCBjdXJfZGF0ZSA8IHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFjdXJfZGF0ZSkge1xuICAgICAgICAgICAgICAgIGN1cl9kYXRlID0gRGF0ZVV0aWxzLmNsb25lKHRoaXMubWluRGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuWWVhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuYWRkKGN1cl9kYXRlLCAxLCBcInllYXJcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlID0gRGF0ZVV0aWxzLmFkZChjdXJfZGF0ZSwgMSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJfZGF0ZSA9IERhdGVVdGlscy5hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJfZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2hvdXInXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRlcy5wdXNoKGN1cl9kYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY3VyX2RhdGVcIiwgY3VyX2RhdGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImRhdGVzXCIsIHRoaXMuZGF0ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9ldmVudHMoKSB7XG4gICAgICAgIHRoaXMuYmluZF9ncmlkX2NsaWNrKCk7XG4gICAgICAgIHRoaXMuYmluZF9iYXJfZXZlbnRzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZXR1cF9sYXllcnMoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWQoKTtcbiAgICAgICAgdGhpcy5tYWtlX2RhdGVzKCk7XG4gICAgICAgIHRoaXMubWFrZV9iYXJzKCk7XG4gICAgICAgIHRoaXMubWFrZV9hcnJvd3MoKTtcbiAgICAgICAgdGhpcy5tYXBfYXJyb3dzX29uX2JhcnMoKTtcbiAgICAgICAgdGhpcy5zZXRfd2lkdGgoKTtcbiAgICAgICAgdGhpcy5zZXRfc2Nyb2xsX3Bvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF9sYXllcnMoKSB7XG4gICAgICAgIHRoaXMubGF5ZXJzID0ge307XG4gICAgICAgIGNvbnN0IGxheWVycyA9IFtcImdyaWRcIiwgXCJkYXRlXCIsIFwiYXJyb3dcIiwgXCJwcm9ncmVzc1wiLCBcImJhclwiLCBcImRldGFpbHNcIl07XG4gICAgICAgIC8vIG1ha2UgZ3JvdXAgbGF5ZXJzXG4gICAgICAgIGZvciAobGV0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgdGhpcy5sYXllcnNbbGF5ZXJdID0gY3JlYXRlU1ZHKCdnJywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBsYXllcixcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMuJHN2ZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWQoKSB7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX2JhY2tncm91bmQoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfcm93cygpO1xuICAgICAgICB0aGlzLm1ha2VfZ3JpZF9oZWFkZXIoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfaGlnaGxpZ2h0cygpO1xuICAgICAgICB0aGlzLm1ha2VfZ3JpZF90aWNrcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkX2JhY2tncm91bmQoKSB7XG4gICAgICAgIGNvbnN0IGdyaWRfd2lkdGggPSB0aGlzLmRhdGVzLmxlbmd0aCAqIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3QgZGlzdGluY3Rfcm93cyA9IFsuLi5uZXcgU2V0KHRoaXMudGFza3MubWFwKCh4OiBhbnkpID0+IHguX3Jvd19pZCkpXTtcbiAgICAgICAgY29uc3QgZ3JpZF9oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMiArXG4gICAgICAgICAgICAodGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAqXG4gICAgICAgICAgICBkaXN0aW5jdF9yb3dzLmxlbmd0aDtcblxuICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IGdyaWRfd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGdyaWRfaGVpZ2h0LFxuICAgICAgICAgICAgY2xhc3M6IFwiZ3JpZC1iYWNrZ3JvdW5kXCIsXG4gICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgICQuYXR0cih0aGlzLiRzdmcsIHtcbiAgICAgICAgICAgIGhlaWdodDogZ3JpZF9oZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkX3Jvd3MoKSB7XG4gICAgICAgIGNvbnN0IHJvd3NfbGF5ZXIgPSBjcmVhdGVTVkcoXCJnXCIsIHsgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkIH0pO1xuICAgICAgICBjb25zdCBsaW5lc19sYXllciA9IGNyZWF0ZVNWRyhcImdcIiwgeyBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQgfSk7XG5cbiAgICAgICAgY29uc3Qgcm93X3dpZHRoID0gdGhpcy5kYXRlcy5sZW5ndGggKiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IHJvd19oZWlnaHQgPSB0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmc7XG4gICAgICAgIC8vVE9ETzogIGFqdXN0YXIgbyBwb3NpY2lvbmFtZW50byBkYXMgbGluaGFzXG4gICAgICAgIGxldCByb3dfeSA9IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZyAvIDI7XG5cbiAgICAgICAgdGhpcy50YXNrcy5mb3JFYWNoKF8gPT4ge1xuICAgICAgICAgICAgY3JlYXRlU1ZHKFwicmVjdFwiLCB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiByb3dfeSxcbiAgICAgICAgICAgICAgICB3aWR0aDogcm93X3dpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogcm93X2hlaWdodCxcbiAgICAgICAgICAgICAgICBjbGFzczogXCJncmlkLXJvd1wiLFxuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogcm93c19sYXllcixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjcmVhdGVTVkcoXCJsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICB4MTogMCxcbiAgICAgICAgICAgICAgICB5MTogcm93X3kgKyByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIHgyOiByb3dfd2lkdGgsXG4gICAgICAgICAgICAgICAgeTI6IHJvd195ICsgcm93X2hlaWdodCxcbiAgICAgICAgICAgICAgICBjbGFzczogXCJyb3ctbGluZVwiLFxuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogbGluZXNfbGF5ZXIsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcm93X3kgKz0gdGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfZ3JpZF9oZWFkZXIoKSB7XG4gICAgICAgIC8vIGNvbnN0IGFkZElzSG91clZpZXcgPSB0aGlzLmlzSG91clZpZXcgPyAyNSA6IDEwXG4gICAgICAgIGNvbnN0IGhlYWRlcl93aWR0aCA9IHRoaXMuZGF0ZXMubGVuZ3RoICogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBoZWFkZXJfaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIDEwO1xuICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IGhlYWRlcl93aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaGVhZGVyX2hlaWdodCxcbiAgICAgICAgICAgIGNsYXNzOiBcImdyaWQtaGVhZGVyXCIsXG4gICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkX3RpY2tzKCkge1xuICAgICAgICBsZXQgdGlja194ID0gMDtcbiAgICAgICAgbGV0IHRpY2tfeSA9IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZyAvIDI7XG4gICAgICAgIGxldCB0aWNrX2hlaWdodCA9XG4gICAgICAgICAgICAodGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAqXG4gICAgICAgICAgICB0aGlzLnRhc2tzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGxldCBkYXRlIG9mIHRoaXMuZGF0ZXMpIHtcbiAgICAgICAgICAgIGxldCB0aWNrX2NsYXNzID0gXCJ0aWNrXCI7XG4gICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBtb25kYXlcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuRGF5KSAmJiBkYXRlLmdldERhdGUoKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRpY2tfY2xhc3MgKz0gXCIgdGhpY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaWNrIHRpY2sgZm9yIGZpcnN0IHdlZWtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdfaXMoVmlld01vZGUuV2VlaykgJiZcbiAgICAgICAgICAgICAgICBkYXRlLmdldERhdGUoKSA+PSAxICYmXG4gICAgICAgICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPCA4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aWNrX2NsYXNzICs9IFwiIHRoaWNrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGljayB0aWNrcyBmb3IgcXVhcnRlcnNcbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpICYmIGRhdGUuZ2V0TW9udGgoKSAlIDMgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aWNrX2NsYXNzICs9IFwiIHRoaWNrXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGQ6IGBNICR7dGlja194fSAke3RpY2tfeX0gdiAke3RpY2tfaGVpZ2h0fWAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRpY2tfY2xhc3MsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGlja194ICs9XG4gICAgICAgICAgICAgICAgICAgIChEYXRlVXRpbHMuZ2V0RGF5c0luTW9udGgoZGF0ZSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSAvXG4gICAgICAgICAgICAgICAgICAgIDMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWNrX3ggKz0gdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFrZV9ncmlkX2hpZ2hsaWdodHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuRGF5KSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAqXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrcy5sZW5ndGggK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICAgICAgbGV0IHggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRlIG9mIHRoaXMuZGF0ZXMpIHtcblxuICAgICAgICAgICAgICAgIGxldCB5ID0gKHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZykgLyAyO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzVG9kYXkgPSBkYXRlLnRvU3RyaW5nKCkgPT0gRGF0ZVV0aWxzLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgbGV0IGlzV2Vla2VuZCA9IChkYXRlLmdldERheSgpID09IDAgfHwgZGF0ZS5nZXREYXkoKSA9PSA2KTtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJ0b2RheS1oaWdobGlnaHRcIjtcbiAgICAgICAgICAgICAgICAgICAgeSA9ICh0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpIC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBcIndlZWtlbmQtaGlnaGxpZ2h0XCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcnggPSAzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ5ID0gMztcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5IHx8IGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcngsXG4gICAgICAgICAgICAgICAgICAgICAgICByeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB4ICs9IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9kYXRlcygpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmdldF9kYXRlc190b19kcmF3KCk7XG4gICAgICAgIGNvbnN0IGlzSG91clZpZXcgPSB0aGlzLnZpZXdfaXMoW1ZpZXdNb2RlLkhvdXIsIFZpZXdNb2RlLlF1YXJ0ZXJEYXksIFZpZXdNb2RlLkhhbGZEYXldKTtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBkYXRlc1tpXTtcblxuICAgICAgICAgICAgaWYgKGlzSG91clZpZXcgJiYgZGF0ZS5kYXRlID49IHRoaXMuX3JlYWxNaW5EYXRlICYmIGRhdGUuZGF0ZSA8PSB0aGlzLl9yZWFsTWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLmxvd2VyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUubG93ZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBgSCR7Y291bnRlcisrICogdGhpcy5vcHRpb25zLnN0ZXB9YCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidGl0bGUtMVwiLFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgIHg6IGRhdGUubG93ZXJfeCxcbiAgICAgICAgICAgICAgICB5OiBkYXRlLmxvd2VyX3kgKyAyMCxcbiAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGRhdGUubG93ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICBjbGFzczogXCJ0aXRsZS0yXCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRlLnVwcGVyX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdXBwZXJfdGV4dCA9IGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLnVwcGVyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUudXBwZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLnVwcGVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInVwcGVyLXRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG91dC1vZi1ib3VuZCBkYXRlc1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQuZ2V0QkJveCgpLngyID4gdGhpcy5sYXllcnMuZ3JpZC5nZXRCQm94KCkud2lkdGhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfZGF0ZXNfdG9fZHJhdygpIHtcbiAgICAgICAgbGV0IGxhc3RfZGF0ZTogYW55ID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmRhdGVzLm1hcCgoZGF0ZTogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLmdldF9kYXRlX2luZm8oZGF0ZSwgbGFzdF9kYXRlLCBpKTtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9kYXRlX2luZm8oZGF0ZTogRGF0ZSwgbGFzdF9kYXRlOiBEYXRlLCBpOiBhbnkpIHtcbiAgICAgICAgaWYgKCFsYXN0X2RhdGUpIHtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IERhdGVVdGlscy5hZGQoZGF0ZSwgMSwgXCJ5ZWFyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGVfdGV4dCA9IHtcbiAgICAgICAgICAgIGhvdXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGhhbGZEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGRheUxvd2VyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgd2Vla0xvd2VyOiBkYXRlLmdldE1vbnRoKCkgIT09IGxhc3RfZGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRCBNTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgbW9udGhMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIk1NTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgeWVhckxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiWVlZWVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICBxdWFydGVyRGF5VXBwZXI6IGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRCBNTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgID8gZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgZGF5VXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJNTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIHdlZWtVcHBlcjogZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIk1NTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgbW9udGhVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIllZWVlcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgeWVhclVwcGVyOiBkYXRlLmdldEZ1bGxZZWFyKCkgIT09IGxhc3RfZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiWVlZWVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICBob3VyOiBkYXRlLmdldEhvdXJzKCkgIT09IGxhc3RfZGF0ZS5nZXRIb3VycygpXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiSEg6bW1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBEZXNjb250YW5kbyAyMCBwYXJhIGFkY2lvbmFyIHVtYSBzZWd1bmRhIGxpbmhhIGRlIGluZm9ybWHDp8OjbyBubyBjYWJlw6dhbGhvXG4gICAgICAgIGNvbnN0IGJhc2VfcG9zID0ge1xuICAgICAgICAgICAgeDogaSAqIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGxvd2VyX3k6IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgLSAyMCxcbiAgICAgICAgICAgIHVwcGVyX3k6IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgLSAyMCAtIDI1LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHhfcG9zID0ge1xuICAgICAgICAgICAgaG91ckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgaG91clVwcGVyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAyNCAvIDIsXG4gICAgICAgICAgICBxdWFydGVyRGF5TG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBxdWFydGVyRGF5VXBwZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDQgLyAyLFxuICAgICAgICAgICAgaGFsZkRheUxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAyIC8gMixcbiAgICAgICAgICAgIGRheUxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgZGF5VXBwZXI6ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAzMCkgLyAyLFxuICAgICAgICAgICAgd2Vla0xvd2VyOiAwLFxuICAgICAgICAgICAgd2Vla1VwcGVyOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogNCkgLyAyLFxuICAgICAgICAgICAgbW9udGhMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIG1vbnRoVXBwZXI6ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAxMikgLyAyLFxuICAgICAgICAgICAgeWVhckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgeWVhclVwcGVyOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMzApIC8gMixcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXBwZXJfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1VcHBlcmBdLFxuICAgICAgICAgICAgbG93ZXJfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1Mb3dlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeDogYmFzZV9wb3MueCArIHhfcG9zW2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1VcHBlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeTogYmFzZV9wb3MudXBwZXJfeSxcbiAgICAgICAgICAgIGxvd2VyX3g6IGJhc2VfcG9zLnggKyB4X3Bvc1tgJHt0aGlzLm9wdGlvbnMudmlld01vZGV9TG93ZXJgXSxcbiAgICAgICAgICAgIGxvd2VyX3k6IGJhc2VfcG9zLmxvd2VyX3ksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9iYXJzKCkge1xuICAgICAgICB0aGlzLmJhcnMgPSB0aGlzLnRhc2tzLm1hcCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXIgPSBuZXcgQmFyKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuYmFyLmFwcGVuZENoaWxkKGJhci5ncm91cCk7XG4gICAgICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfYXJyb3dzKCkge1xuICAgICAgICB0aGlzLmFycm93cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0YXNrIG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGxldCBhcnJvd3MgPSBbXTtcbiAgICAgICAgICAgIGFycm93cyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodGFza19pZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLmdldF90YXNrKHRhc2tfaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlcGVuZGVuY3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3cgPSBuZXcgQXJyb3coXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJzW2RlcGVuZGVuY3kuX2luZGV4XSwgLy8gZnJvbV90YXNrXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbdGFzay5faW5kZXhdIC8vIHRvX3Rhc2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuYXJyb3cuYXBwZW5kQ2hpbGQoYXJyb3cuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJvdztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7IC8vIGZpbHRlciBmYWxzeSB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuYXJyb3dzID0gdGhpcy5hcnJvd3MuY29uY2F0KGFycm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcF9hcnJvd3Nfb25fYmFycygpIHtcbiAgICAgICAgZm9yIChsZXQgYmFyIG9mIHRoaXMuYmFycykge1xuICAgICAgICAgICAgYmFyLmFycm93cyA9IHRoaXMuYXJyb3dzLmZpbHRlcigoYXJyb3c6IEFycm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cuZnJvbVRhc2sudGFzay5pZCA9PT0gYmFyLnRhc2suaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cudG9UYXNrLnRhc2suaWQgPT09IGJhci50YXNrLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRfd2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cl93aWR0aCA9IHRoaXMuJHN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgYWN0dWFsX3dpZHRoID0gdGhpcy4kc3ZnXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5ncmlkIC5ncmlkLXJvd1wiKVxuICAgICAgICAgICAgLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgICAgICBpZiAoY3VyX3dpZHRoIDwgYWN0dWFsX3dpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdmcuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYWN0dWFsX3dpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0X3Njcm9sbF9wb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50X2VsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRfZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzX2JlZm9yZV9maXJzdF90YXNrID0gRGF0ZVV0aWxzLmRpZmYoXG4gICAgICAgICAgICB0aGlzLmdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpLFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgXCJob3VyXCJcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzY3JvbGxfcG9zID1cbiAgICAgICAgICAgIChob3Vyc19iZWZvcmVfZmlyc3RfdGFzayAvIHRoaXMub3B0aW9ucy5zdGVwKSAqXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIHBhcmVudF9lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxfcG9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9ncmlkX2NsaWNrKCkge1xuICAgICAgICAkLm9uKFxuICAgICAgICAgICAgdGhpcy4kc3ZnLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvcHVwVHJpZ2dlcixcbiAgICAgICAgICAgIFwiLmdyaWQtcm93LCAuZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0X2FsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZV9wb3B1cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9iYXJfZXZlbnRzKCkge1xuICAgICAgICBsZXQgaXNfZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHhfb25fc3RhcnQgPSAwO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfbGVmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfcmlnaHQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBhcmVudF9iYXJfaWQ6IGFueSA9IG51bGw7XG4gICAgICAgIGxldCBiYXJzOiBCYXJbXSA9IFtdO1xuICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gbnVsbDtcblxuICAgICAgICBmdW5jdGlvbiBhY3Rpb25faW5fcHJvZ3Jlc3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNfZHJhZ2dpbmcgfHwgaXNfcmVzaXppbmdfbGVmdCB8fCBpc19yZXNpemluZ19yaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCBcIm1vdXNlZG93blwiLCBcIi5iYXItd3JhcHBlciwgLmhhbmRsZVwiLCAoZTogYW55LCBlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhcl93cmFwcGVyID0gJC5jbG9zZXN0KFwiLmJhci13cmFwcGVyXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICAgICAgaXNfcmVzaXppbmdfbGVmdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmlnaHRcIikpIHtcbiAgICAgICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYmFyLXdyYXBwZXJcIikpIHtcbiAgICAgICAgICAgICAgICBpc19kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhcl93cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgICAgIHhfb25fc3RhcnQgPSBlLm9mZnNldFg7XG5cbiAgICAgICAgICAgIHBhcmVudF9iYXJfaWQgPSBiYXJfd3JhcHBlci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpO1xuICAgICAgICAgICAgY29uc3QgaWRzID0gW1xuICAgICAgICAgICAgICAgIHBhcmVudF9iYXJfaWQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRfYWxsX2RlcGVuZGVudF90YXNrcyhwYXJlbnRfYmFyX2lkKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBiYXJzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0X2JhcihpZCkpO1xuXG4gICAgICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gcGFyZW50X2Jhcl9pZDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5veCA9ICRiYXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICRiYXIub3kgPSAkYmFyLmdldFkoKTtcbiAgICAgICAgICAgICAgICAkYmFyLm93aWR0aCA9ICRiYXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCBcIm1vdXNlbW92ZVwiLCAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFjdGlvbl9pbl9wcm9ncmVzcygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkeCA9IGUub2Zmc2V0WCAtIHhfb25fc3RhcnQ7XG5cbiAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgJGJhciA9IGJhci5lbGVtZW50O1xuICAgICAgICAgICAgICAgICRiYXIuZmluYWxkeCA9IHRoaXMuZ2V0X3NuYXBfcG9zaXRpb24oZHgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZV9wb3B1cCgpO1xuICAgICAgICAgICAgICAgIGlmIChpc19yZXNpemluZ19sZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfYmFyX2lkID09PSBiYXIudGFzay5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAkYmFyLm94ICsgJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkYmFyLm93aWR0aCAtICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAkYmFyLm94ICsgJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzX3Jlc2l6aW5nX3JpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfYmFyX2lkID09PSBiYXIudGFzay5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJGJhci5vd2lkdGggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZUJhclBvc2l0aW9uKHsgeDogJGJhci5veCArICRiYXIuZmluYWxkeCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgbnVsbCk7XG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzX2RyYWdnaW5nIHx8IGlzX3Jlc2l6aW5nX2xlZnQgfHwgaXNfcmVzaXppbmdfcmlnaHQpIHtcbiAgICAgICAgICAgICAgICBiYXJzLmZvckVhY2goKGJhcikgPT4gYmFyLmdyb3VwLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc19kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgaXNfcmVzaXppbmdfbGVmdCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNfcmVzaXppbmdfcmlnaHQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5vbih0aGlzLiRzdmcsIFwibW91c2V1cFwiLCAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gbnVsbDtcbiAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgJGJhciA9IGJhci5lbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghJGJhci5maW5hbGR4KSByZXR1cm47XG4gICAgICAgICAgICAgICAgYmFyLmRhdGVDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgYmFyLnNldEFjdGlvbkNvbXBsZXRlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0X2FsbF9kZXBlbmRlbnRfdGFza3ModGFza19pZDogYW55KSB7XG4gICAgICAgIGxldCBvdXQ6IGFueVtdID0gW107XG4gICAgICAgIGxldCB0b19wcm9jZXNzID0gW3Rhc2tfaWRdO1xuICAgICAgICB3aGlsZSAodG9fcHJvY2Vzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcHMgPSB0b19wcm9jZXNzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjID0gYWNjLmNvbmNhdCh0aGlzLmRlcGVuZGVuY3lfbWFwW2N1cnJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KGRlcHMpO1xuICAgICAgICAgICAgdG9fcHJvY2VzcyA9IGRlcHMuZmlsdGVyKChkOiBhbnkpID0+ICF0b19wcm9jZXNzLmluY2x1ZGVzKGQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXQuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0X3NuYXBfcG9zaXRpb24oZHg6IGFueSkge1xuICAgICAgICBsZXQgb2R4ID0gZHgsXG4gICAgICAgICAgICByZW0sXG4gICAgICAgICAgICBwb3NpdGlvbjtcblxuICAgICAgICBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLkhvdXIpKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyA2KTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDEyID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5XZWVrKSkge1xuICAgICAgICAgICAgcmVtID0gZHggJSAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gNyk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAxNCA/IDAgOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyA3KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAzMCk7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IG9keCAtIHJlbSArIChyZW0gPCB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyA2MCA/IDAgOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAzMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIgPyAwIDogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHVuc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgWy4uLnRoaXMuJHN2Zy5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhci13cmFwcGVyXCIpXS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZpZXdfaXMobW9kZXM6IFZpZXdNb2RlIHwgVmlld01vZGVbXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2Rlcy5zb21lKChtb2RlKSA9PiB0aGlzLm9wdGlvbnMudmlld01vZGUgPT09IG1vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy52aWV3TW9kZSA9PT0gbW9kZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfdGFzayhpZDogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhc2tzLmZpbmQoKHRhc2s6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRhc2suaWQgPT09IGlkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2JhcihpZDogYW55KTogQmFyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFycy5maW5kKChiYXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGJhci50YXNrLmlkID09PSBpZDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dfcG9wdXAob3B0aW9uczogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5wb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cChcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVBvcHVwSHRtbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcHVwLnNob3cob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlX3BvcHVwKCkge1xuICAgICAgICB0aGlzLnBvcHVwICYmIHRoaXMucG9wdXAuaGlkZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyX2V2ZW50KGV2ZW50OiBzdHJpbmcsIGFyZ3M6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zW2V2ZW50XSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zW2V2ZW50XS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0X29sZGVzdF9zdGFydGluZ19kYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrc1xuICAgICAgICAgICAgLm1hcCgodGFzazogYW55KSA9PiB0YXNrLl9zdGFydClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHByZXZfZGF0ZTogYW55LCBjdXJfZGF0ZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIGN1cl9kYXRlIDw9IHByZXZfZGF0ZSA/IGN1cl9kYXRlIDogcHJldl9kYXRlXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuJHN2Zy5pbm5lckhUTUwgPSAnJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlX2lkKHRhc2s6IGFueSkge1xuICAgIHJldHVybiB0YXNrLm5hbWUgKyBcIl9cIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEyKTtcbn1cbiJdfQ==
780
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHbEQsTUFBTSxPQUFPLEtBQUs7SUE0QmQsWUFBWSxPQUFZLEVBQUUsS0FBYSxFQUFFLE9BQWlCO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQWZELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFXTyxhQUFhLENBQUMsT0FBWTtRQUM5QixJQUFJLFdBQVcsRUFBRSxlQUFlLENB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QyxLQUFLO2FBQ1osR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQy9CLE1BQU0sQ0FBQyxDQUFDLFNBQWMsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUN0QyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDL0MsQ0FBQztJQUNWLENBQUM7SUFFTyxLQUFLO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDSjtBQUVELFNBQVMsV0FBVyxDQUFDLElBQVM7SUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVVdGlscyB9IGZyb20gXCIuL3V0aWxzL2RhdGUtdXRpbHNcIjtcbmltcG9ydCB7ICQsIGNyZWF0ZVNWRyB9IGZyb20gXCIuL3V0aWxzL3N2Zy11dGlsc1wiO1xuaW1wb3J0IHsgQmFyIH0gZnJvbSBcIi4vYmFyXCI7XG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuL3BvcHVwXCI7XG5pbXBvcnQgeyBBcnJvdyB9IGZyb20gXCIuL2Fycm93XCI7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcIi4uLy4uL21vZGVscy9vcHRpb25zXCI7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL2dhbnR0LW9wdGlvbnNcIjtcbmltcG9ydCB7IFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL21vZGVscy92aWV3LW1vZGVcIjtcbmltcG9ydCB7IFRhc2ssIEVucmljaGVkVGFzayB9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcblxuZXhwb3J0IGNsYXNzIEdhbnR0IHtcbiAgICBwdWJsaWMgb3B0aW9uczogT3B0aW9ucztcbiAgICBwdWJsaWMgdGFza3M6IEVucmljaGVkVGFza1tdO1xuICAgIHB1YmxpYyBkZXBlbmRlbmN5X21hcDogYW55O1xuXG4gICAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9tYXhEYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX3JlYWxNaW5EYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX3JlYWxNYXhEYXRlOiBEYXRlO1xuXG4gICAgcHVibGljIGRhdGVzOiBhbnk7XG4gICAgcHVibGljIGxheWVyczogYW55O1xuICAgIHB1YmxpYyBiYXJzOiBCYXJbXTtcbiAgICBwdWJsaWMgYXJyb3dzOiBBcnJvd1tdO1xuICAgIHB1YmxpYyBiYXJfYmVpbmdfZHJhZ2dlZDogYW55O1xuICAgIHB1YmxpYyAkc3ZnOiBhbnk7XG4gICAgcHVibGljICRjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIHB1YmxpYyBwb3B1cF93cmFwcGVyOiBIVE1MRGl2RWxlbWVudDtcbiAgICBwdWJsaWMgcG9wdXA6IGFueTtcblxuICAgIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih3cmFwcGVyOiBhbnksIHRhc2tzOiBUYXNrW10sIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfb3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZXR1cF93cmFwcGVyKHdyYXBwZXIpO1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgdmlldyBtb2RlXG4gICAgICAgIHRoaXMuY2hhbmdlX3ZpZXdfbW9kZSgpO1xuICAgICAgICB0aGlzLmJpbmRfZXZlbnRzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF93cmFwcGVyKGVsZW1lbnQ6IGFueSkge1xuICAgICAgICBsZXQgc3ZnX2VsZW1lbnQsIHdyYXBwZXJfZWxlbWVudDtcblxuICAgICAgICAvLyBDU1MgU2VsZWN0b3IgaXMgcGFzc2VkXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIFNWR0VsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgd3JhcHBlcl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgIHN2Z19lbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwic3ZnXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgICAgICAgICBzdmdfZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRnJhcHDDqSBHYW50dCBvbmx5IHN1cHBvcnRzIHVzYWdlIG9mIGEgc3RyaW5nIENTUyBzZWxlY3RvciwgSFRNTCBET00gZWxlbWVudCBvciBTVkcgRE9NIGVsZW1lbnQgZm9yIHRoZSBcXCdlbGVtZW50XFwnIHBhcmFtZXRlclwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3ZnIGVsZW1lbnRcbiAgICAgICAgaWYgKCFzdmdfZWxlbWVudCkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGl0XG4gICAgICAgICAgICB0aGlzLiRzdmcgPSBjcmVhdGVTVkcoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogd3JhcHBlcl9lbGVtZW50LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImdhbnR0XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IHN2Z19lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy4kc3ZnLmNsYXNzTGlzdC5hZGQoXCJnYW50dFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdyYXBwZXIgZWxlbWVudFxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuY2xhc3NMaXN0LmFkZChcImdhbnR0LWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRjb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGggKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50X2VsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgcGFyZW50X2VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy4kY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJHN2Zyk7XG5cbiAgICAgICAgLy8gcG9wdXAgd3JhcHBlclxuICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIuY2xhc3NMaXN0LmFkZChcInBvcHVwLXdyYXBwZXJcIik7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwX3dyYXBwZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBfb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXR1cF90YXNrcyh0YXNrczogYW55KSB7XG4gICAgICAgIC8vIHByZXBhcmUgdGFza3NcbiAgICAgICAgdGhpcy50YXNrcyA9IHRhc2tzLm1hcCgodGFzazogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vc3RhbmRhcmQgY29sb3JzIGlmIG5lZWRlZFxuICAgICAgICAgICAgdGFzay5jb2xvciA9IHRhc2suY29sb3IgfHwgJyM3ODkyQTEnO1xuXG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIERhdGUgb2JqZWN0c1xuICAgICAgICAgICAgdGFzay5fc3RhcnQgPSBEYXRlVXRpbHMucGFyc2UodGFzay5zdGFydCk7XG4gICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMucGFyc2UodGFzay5lbmQpO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHRhc2sgaW52YWxpZCBpZiBkdXJhdGlvbiB0b28gbGFyZ2VcbiAgICAgICAgICAgIGlmIChEYXRlVXRpbHMuZGlmZih0YXNrLl9lbmQsIHRhc2suX3N0YXJ0LCBcInllYXJcIikgPiAxMCkge1xuICAgICAgICAgICAgICAgIHRhc2suZW5kID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FjaGUgaW5kZXhcbiAgICAgICAgICAgIHRhc2suX2luZGV4ID0gaTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXNrLl9yb3dfaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9pbmRleCA9IHRhc2suX3Jvd19pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW52YWxpZCBkYXRlc1xuICAgICAgICAgICAgaWYgKCF0YXNrLnN0YXJ0ICYmICF0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gRGF0ZVV0aWxzLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgdGFzay5fc3RhcnQgPSB0b2RheTtcbiAgICAgICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMuYWRkKHRvZGF5LCAyLCBcImRheVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0YXNrLnN0YXJ0ICYmIHRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fc3RhcnQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX2VuZCwgLTIsICdkYXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhc2suc3RhcnQgJiYgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9zdGFydCwgMiwgXCJkYXlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGhvdXJzIGlzIG5vdCBzZXQsIGFzc3VtZSB0aGUgbGFzdCBkYXkgaXMgZnVsbCBkYXlcbiAgICAgICAgICAgIC8vIGUuZzogMjAxOC0wOS0wOSBiZWNvbWVzIDIwMTgtMDktMDkgMjM6NTk6NTlcbiAgICAgICAgICAgIGNvbnN0IHRhc2tfZW5kX3ZhbHVlcyA9IERhdGVVdGlscy5nZXREYXRlVmFsdWVzKHRhc2suX2VuZCk7XG4gICAgICAgICAgICBpZiAodGFza19lbmRfdmFsdWVzLnNsaWNlKDMpLmV2ZXJ5KChkKSA9PiBkID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5hZGQodGFzay5fZW5kLCAyNCwgXCJob3VyXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbnZhbGlkIGZsYWdcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCB8fCAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmludmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5kZXBlbmRlbmNpZXMgPT09IFwic3RyaW5nXCIgfHwgIXRhc2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAodGFzay5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwcyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZDogYW55KSA9PiBkLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhc2suZGVwZW5kZW5jaWVzID0gZGVwcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdWlkc1xuICAgICAgICAgICAgaWYgKCF0YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5pZCA9IGdlbmVyYXRlX2lkKHRhc2spO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXR1cF9kZXBlbmRlbmNpZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RlcGVuZGVuY2llcygpIHtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcCA9IHt9O1xuICAgICAgICBmb3IgKGxldCB0IG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgb2YgdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwW2RdID0gdGhpcy5kZXBlbmRlbmN5X21hcFtkXSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwW2RdLnB1c2godC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaCh0YXNrczogVGFza1tdKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfdGFza3ModGFza3MpO1xuICAgICAgICB0aGlzLmNoYW5nZV92aWV3X21vZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlX3ZpZXdfbW9kZShtb2RlID0gdGhpcy5vcHRpb25zLnZpZXdNb2RlKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfZ2FudHRfZGF0ZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVfdmlld19zY2FsZShtb2RlKTtcbiAgICAgICAgdGhpcy5zZXR1cF9kYXRlcygpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICAvLyBmaXJlIHZpZXdtb2RlX2NoYW5nZSBldmVudFxuICAgICAgICB0aGlzLnRyaWdnZXJfZXZlbnQoXCJvblZpZXdDaGFuZ2VcIiwgW21vZGVdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZV92aWV3X3NjYWxlKHZpZXdfbW9kZTogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy52aWV3TW9kZSA9IHZpZXdfbW9kZTtcbiAgICAgICAgLy8gdGhpcy5pc0hvdXJWaWV3ID0gZmFsc2U7XG4gICAgICAgIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLkhvdXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgLyAyNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5IYWxmRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gMjtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuUXVhcnRlckRheSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLldlZWspIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiA3O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTQwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiAzMDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDEyMDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiAzNjU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxMjA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RhdGVzKCkge1xuICAgICAgICB0aGlzLnNldHVwX2RhdGVfdmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF9nYW50dF9kYXRlcygpIHtcbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX21heERhdGUgPSBudWxsO1xuXG4gICAgICAgIGZvciAobGV0IHRhc2sgb2YgdGhpcy50YXNrcykge1xuICAgICAgICAgICAgLy8gc2V0IGdsb2JhbCBzdGFydCBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgIGlmICghdGhpcy5taW5EYXRlIHx8IHRhc2suc3RhcnQgPCB0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLnN0YXJ0T2YodGFzay5zdGFydCwgJ2RheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1heERhdGUgfHwgdGFzay5lbmQgPiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGFzay5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZWFsTWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgdGhpcy5fcmVhbE1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudmlld01vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5RdWFydGVyRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gNiksIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyA2LCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLkhhbGZEYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxMiksIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxMiwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5EYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLldlZWs6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJ3ZWVrXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5ZZWFyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcInllYXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RhdGVfdmFsdWVzKCkge1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIGxldCBjdXJfZGF0ZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKGN1cl9kYXRlID09PSBudWxsIHx8IGN1cl9kYXRlIDwgdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICBpZiAoIWN1cl9kYXRlKSB7XG4gICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuY2xvbmUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5ZZWFyKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJfZGF0ZSA9IERhdGVVdGlscy5hZGQoY3VyX2RhdGUsIDEsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuYWRkKGN1cl9kYXRlLCAxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlID0gRGF0ZVV0aWxzLmFkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaG91cidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGVzLnB1c2goY3VyX2RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSAodGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoIC0gMSkgLyB0aGlzLmRhdGVzLmxlbmd0aFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gY29sdW1uV2lkdGggPCA0NSA/IDQ1IDogY29sdW1uV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcImN1cl9kYXRlXCIsIGN1cl9kYXRlKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRlc1wiLCB0aGlzLmRhdGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRfZXZlbnRzKCkge1xuICAgICAgICB0aGlzLmJpbmRfZ3JpZF9jbGljaygpO1xuICAgICAgICB0aGlzLmJpbmRfYmFyX2V2ZW50cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2V0dXBfbGF5ZXJzKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkKCk7XG4gICAgICAgIHRoaXMubWFrZV9kYXRlcygpO1xuICAgICAgICB0aGlzLm1ha2VfYmFycygpO1xuICAgICAgICB0aGlzLm1ha2VfYXJyb3dzKCk7XG4gICAgICAgIHRoaXMubWFwX2Fycm93c19vbl9iYXJzKCk7XG4gICAgICAgIHRoaXMuc2V0X3dpZHRoKCk7XG4gICAgICAgIHRoaXMuc2V0X3Njcm9sbF9wb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBfbGF5ZXJzKCkge1xuICAgICAgICB0aGlzLmxheWVycyA9IHt9O1xuICAgICAgICBjb25zdCBsYXllcnMgPSBbXCJncmlkXCIsIFwiZGF0ZVwiLCBcImFycm93XCIsIFwicHJvZ3Jlc3NcIiwgXCJiYXJcIiwgXCJkZXRhaWxzXCJdO1xuICAgICAgICAvLyBtYWtlIGdyb3VwIGxheWVyc1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMubGF5ZXJzW2xheWVyXSA9IGNyZWF0ZVNWRygnZycsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogbGF5ZXIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLiRzdmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkKCkge1xuICAgICAgICB0aGlzLm1ha2VfZ3JpZF9iYWNrZ3JvdW5kKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX3Jvd3MoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfaGVhZGVyKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX2hpZ2hsaWdodHMoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfdGlja3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfZ3JpZF9iYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgZ3JpZF93aWR0aCA9IHRoaXMuZGF0ZXMubGVuZ3RoICogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGdyaWRfd2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0aW5jdF9yb3dzID0gWy4uLm5ldyBTZXQodGhpcy50YXNrcy5tYXAoKHg6IGFueSkgPT4geC5fcm93X2lkKSldO1xuICAgICAgICBjb25zdCBncmlkX2hlaWdodCA9IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhZGRpbmcgLyAyICtcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpICpcbiAgICAgICAgICAgIGRpc3RpbmN0X3Jvd3MubGVuZ3RoO1xuXG4gICAgICAgIGNyZWF0ZVNWRyhcInJlY3RcIiwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogZ3JpZF93aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZ3JpZF9oZWlnaHQsXG4gICAgICAgICAgICBjbGFzczogXCJncmlkLWJhY2tncm91bmRcIixcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5hdHRyKHRoaXMuJHN2Zywge1xuICAgICAgICAgICAgaGVpZ2h0OiBncmlkX2hlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWRfcm93cygpIHtcbiAgICAgICAgY29uc3Qgcm93c19sYXllciA9IGNyZWF0ZVNWRyhcImdcIiwgeyBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQgfSk7XG4gICAgICAgIGNvbnN0IGxpbmVzX2xheWVyID0gY3JlYXRlU1ZHKFwiZ1wiLCB7IGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCB9KTtcblxuICAgICAgICBjb25zdCByb3dfd2lkdGggPSB0aGlzLmRhdGVzLmxlbmd0aCAqIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3Qgcm93X2hlaWdodCA9IHRoaXMub3B0aW9ucy5iYXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZztcbiAgICAgICAgLy9UT0RPOiAgYWp1c3RhciBvIHBvc2ljaW9uYW1lbnRvIGRhcyBsaW5oYXNcbiAgICAgICAgbGV0IHJvd195ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICB0aGlzLnRhc2tzLmZvckVhY2goXyA9PiB7XG4gICAgICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IHJvd195LFxuICAgICAgICAgICAgICAgIHdpZHRoOiByb3dfd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImdyaWQtcm93XCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiByb3dzX2xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgIHgxOiAwLFxuICAgICAgICAgICAgICAgIHkxOiByb3dfeSArIHJvd19oZWlnaHQsXG4gICAgICAgICAgICAgICAgeDI6IHJvd193aWR0aCxcbiAgICAgICAgICAgICAgICB5Mjogcm93X3kgKyByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInJvdy1saW5lXCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiBsaW5lc19sYXllcixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByb3dfeSArPSB0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkX2hlYWRlcigpIHtcbiAgICAgICAgLy8gY29uc3QgYWRkSXNIb3VyVmlldyA9IHRoaXMuaXNIb3VyVmlldyA/IDI1IDogMTBcbiAgICAgICAgY29uc3QgaGVhZGVyX3dpZHRoID0gdGhpcy5kYXRlcy5sZW5ndGggKiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlYWRlcl9oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICsgMTA7XG4gICAgICAgIGNyZWF0ZVNWRyhcInJlY3RcIiwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogaGVhZGVyX3dpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJfaGVpZ2h0LFxuICAgICAgICAgICAgY2xhc3M6IFwiZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWRfdGlja3MoKSB7XG4gICAgICAgIGxldCB0aWNrX3ggPSAwO1xuICAgICAgICBsZXQgdGlja195ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcbiAgICAgICAgbGV0IHRpY2tfaGVpZ2h0ID1cbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpICpcbiAgICAgICAgICAgIHRoaXMudGFza3MubGVuZ3RoO1xuXG4gICAgICAgIGZvciAobGV0IGRhdGUgb2YgdGhpcy5kYXRlcykge1xuICAgICAgICAgICAgbGV0IHRpY2tfY2xhc3MgPSBcInRpY2tcIjtcbiAgICAgICAgICAgIC8vIHRoaWNrIHRpY2sgZm9yIG1vbmRheVxuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpICYmIGRhdGUuZ2V0RGF0ZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGlja19jbGFzcyArPSBcIiB0aGlja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgZmlyc3Qgd2Vla1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMudmlld19pcyhWaWV3TW9kZS5XZWVrKSAmJlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID49IDEgJiZcbiAgICAgICAgICAgICAgICBkYXRlLmdldERhdGUoKSA8IDhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRpY2tfY2xhc3MgKz0gXCIgdGhpY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaWNrIHRpY2tzIGZvciBxdWFydGVyc1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkgJiYgZGF0ZS5nZXRNb250aCgpICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRpY2tfY2xhc3MgKz0gXCIgdGhpY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaWNrIHRpY2tzIGZvciBob3Vyc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMudmlld19pcyhWaWV3TW9kZS5Ib3VyKSAmJlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0SG91cnMoKSA9PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aWNrX2NsYXNzICs9IFwiIHRoaWNrXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGQ6IGBNICR7dGlja194fSAke3RpY2tfeX0gdiAke3RpY2tfaGVpZ2h0fWAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRpY2tfY2xhc3MsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGlja194ICs9XG4gICAgICAgICAgICAgICAgICAgIChEYXRlVXRpbHMuZ2V0RGF5c0luTW9udGgoZGF0ZSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSAvXG4gICAgICAgICAgICAgICAgICAgIDMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWNrX3ggKz0gdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFrZV9ncmlkX2hpZ2hsaWdodHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuRGF5KSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAqXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrcy5sZW5ndGggK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICAgICAgbGV0IHggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRlIG9mIHRoaXMuZGF0ZXMpIHtcblxuICAgICAgICAgICAgICAgIGxldCB5ID0gKHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZykgLyAyO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzVG9kYXkgPSBkYXRlLnRvU3RyaW5nKCkgPT0gRGF0ZVV0aWxzLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgbGV0IGlzV2Vla2VuZCA9IChkYXRlLmdldERheSgpID09IDAgfHwgZGF0ZS5nZXREYXkoKSA9PSA2KTtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJ0b2RheS1oaWdobGlnaHRcIjtcbiAgICAgICAgICAgICAgICAgICAgeSA9ICh0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpIC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBcIndlZWtlbmQtaGlnaGxpZ2h0XCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcnggPSAzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ5ID0gMztcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5IHx8IGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcngsXG4gICAgICAgICAgICAgICAgICAgICAgICByeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB4ICs9IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9kYXRlcygpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmdldF9kYXRlc190b19kcmF3KCk7XG4gICAgICAgIGNvbnN0IGlzSG91clZpZXcgPSB0aGlzLnZpZXdfaXMoW1ZpZXdNb2RlLkhvdXIsIFZpZXdNb2RlLlF1YXJ0ZXJEYXksIFZpZXdNb2RlLkhhbGZEYXldKTtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBkYXRlc1tpXTtcblxuICAgICAgICAgICAgaWYgKGlzSG91clZpZXcgJiYgZGF0ZS5kYXRlID49IHRoaXMuX3JlYWxNaW5EYXRlICYmIGRhdGUuZGF0ZSA8PSB0aGlzLl9yZWFsTWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLmxvd2VyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUubG93ZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBgSCR7Y291bnRlcisrICogdGhpcy5vcHRpb25zLnN0ZXB9YCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidGl0bGUtMVwiLFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgIHg6IGRhdGUubG93ZXJfeCxcbiAgICAgICAgICAgICAgICB5OiBkYXRlLmxvd2VyX3kgKyAyMCxcbiAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGRhdGUubG93ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICBjbGFzczogXCJ0aXRsZS0yXCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRlLnVwcGVyX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdXBwZXJfdGV4dCA9IGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLnVwcGVyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUudXBwZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLnVwcGVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInVwcGVyLXRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG91dC1vZi1ib3VuZCBkYXRlc1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQuZ2V0QkJveCgpLngyID4gdGhpcy5sYXllcnMuZ3JpZC5nZXRCQm94KCkud2lkdGhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfZGF0ZXNfdG9fZHJhdygpIHtcbiAgICAgICAgbGV0IGxhc3RfZGF0ZTogYW55ID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmRhdGVzLm1hcCgoZGF0ZTogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLmdldF9kYXRlX2luZm8oZGF0ZSwgbGFzdF9kYXRlLCBpKTtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9kYXRlX2luZm8oZGF0ZTogRGF0ZSwgbGFzdF9kYXRlOiBEYXRlLCBpOiBhbnkpIHtcbiAgICAgICAgaWYgKCFsYXN0X2RhdGUpIHtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IERhdGVVdGlscy5hZGQoZGF0ZSwgMSwgXCJ5ZWFyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGVfdGV4dCA9IHtcbiAgICAgICAgICAgIGhvdXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGhhbGZEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGRheUxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRFwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICB3ZWVrTG93ZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRFwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICBtb250aExvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiTU1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICB5ZWFyTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJZWVlZXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogZGF0ZS5nZXREYXRlKCkgIT09IGxhc3RfZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICBoYWxmRGF5VXBwZXI6IChkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA/ICgoKGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkpIHx8IGkgPCAyKVxuICAgICAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIGRheVVwcGVyOiAoKGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkpIHx8IGkgPT09IDApXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiTU1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICB3ZWVrVXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJNTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIG1vbnRoVXBwZXI6IGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gbGFzdF9kYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJZWVlZXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIHllYXJVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIllZWVlcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgaG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkQgTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRGVzY29udGFuZG8gMjAgcGFyYSBhZGNpb25hciB1bWEgc2VndW5kYSBsaW5oYSBkZSBpbmZvcm1hw6fDo28gbm8gY2FiZcOnYWxob1xuICAgICAgICBjb25zdCBiYXNlX3BvcyA9IHtcbiAgICAgICAgICAgIHg6IGkgKiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBsb3dlcl95OiB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0IC0gMjAsXG4gICAgICAgICAgICB1cHBlcl95OiB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0IC0gMjAgLSAyNSxcbiAgICAgICAgfTtcbmRlYnVnZ2VyO1xuICAgICAgICBjb25zdCB4X3BvcyA9IHtcbiAgICAgICAgICAgIGhvdXJMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIGhvdXJVcHBlcjogKHRoaXMuZGF0ZXMubGVuZ3RoIDwgMTQpID8gKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCkgOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMjQgLyAyKSxcbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogNCAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5VXBwZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDIgLyAyLFxuICAgICAgICAgICAgZGF5TG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBkYXlVcHBlcjogKHRoaXMuZGF0ZXMubGVuZ3RoIDwgMTUpID8gKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCkgOiAoKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDMwKSAvIDIpLFxuICAgICAgICAgICAgd2Vla0xvd2VyOiAwLFxuICAgICAgICAgICAgd2Vla1VwcGVyOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogNCkgLyAyLFxuICAgICAgICAgICAgbW9udGhMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIG1vbnRoVXBwZXI6ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAxMikgLyAyLFxuICAgICAgICAgICAgeWVhckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgeWVhclVwcGVyOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMzApIC8gMixcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXBwZXJfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1VcHBlcmBdLFxuICAgICAgICAgICAgbG93ZXJfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1Mb3dlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeDogYmFzZV9wb3MueCArIHhfcG9zW2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1VcHBlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeTogYmFzZV9wb3MudXBwZXJfeSxcbiAgICAgICAgICAgIGxvd2VyX3g6IGJhc2VfcG9zLnggKyB4X3Bvc1tgJHt0aGlzLm9wdGlvbnMudmlld01vZGV9TG93ZXJgXSxcbiAgICAgICAgICAgIGxvd2VyX3k6IGJhc2VfcG9zLmxvd2VyX3ksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9iYXJzKCkge1xuICAgICAgICB0aGlzLmJhcnMgPSB0aGlzLnRhc2tzLm1hcCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXIgPSBuZXcgQmFyKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuYmFyLmFwcGVuZENoaWxkKGJhci5ncm91cCk7XG4gICAgICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfYXJyb3dzKCkge1xuICAgICAgICB0aGlzLmFycm93cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0YXNrIG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGxldCBhcnJvd3MgPSBbXTtcbiAgICAgICAgICAgIGFycm93cyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodGFza19pZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLmdldF90YXNrKHRhc2tfaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlcGVuZGVuY3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3cgPSBuZXcgQXJyb3coXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJzW2RlcGVuZGVuY3kuX2luZGV4XSwgLy8gZnJvbV90YXNrXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbdGFzay5faW5kZXhdIC8vIHRvX3Rhc2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuYXJyb3cuYXBwZW5kQ2hpbGQoYXJyb3cuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJvdztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7IC8vIGZpbHRlciBmYWxzeSB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuYXJyb3dzID0gdGhpcy5hcnJvd3MuY29uY2F0KGFycm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcF9hcnJvd3Nfb25fYmFycygpIHtcbiAgICAgICAgZm9yIChsZXQgYmFyIG9mIHRoaXMuYmFycykge1xuICAgICAgICAgICAgYmFyLmFycm93cyA9IHRoaXMuYXJyb3dzLmZpbHRlcigoYXJyb3c6IEFycm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cuZnJvbVRhc2sudGFzay5pZCA9PT0gYmFyLnRhc2suaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cudG9UYXNrLnRhc2suaWQgPT09IGJhci50YXNrLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRfd2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cl93aWR0aCA9IHRoaXMuJHN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgYWN0dWFsX3dpZHRoID0gdGhpcy4kc3ZnXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5ncmlkIC5ncmlkLXJvd1wiKVxuICAgICAgICAgICAgLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgICAgICBpZiAoY3VyX3dpZHRoIDwgYWN0dWFsX3dpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdmcuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYWN0dWFsX3dpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0X3Njcm9sbF9wb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50X2VsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRfZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzX2JlZm9yZV9maXJzdF90YXNrID0gRGF0ZVV0aWxzLmRpZmYoXG4gICAgICAgICAgICB0aGlzLmdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpLFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgXCJob3VyXCJcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzY3JvbGxfcG9zID1cbiAgICAgICAgICAgIChob3Vyc19iZWZvcmVfZmlyc3RfdGFzayAvIHRoaXMub3B0aW9ucy5zdGVwKSAqXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIHBhcmVudF9lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxfcG9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9ncmlkX2NsaWNrKCkge1xuICAgICAgICAkLm9uKFxuICAgICAgICAgICAgdGhpcy4kc3ZnLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvcHVwVHJpZ2dlcixcbiAgICAgICAgICAgIFwiLmdyaWQtcm93LCAuZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0X2FsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZV9wb3B1cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9iYXJfZXZlbnRzKCkge1xuICAgICAgICBsZXQgaXNfZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHhfb25fc3RhcnQgPSAwO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfbGVmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfcmlnaHQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBhcmVudF9iYXJfaWQ6IGFueSA9IG51bGw7XG4gICAgICAgIGxldCBiYXJzOiBCYXJbXSA9IFtdO1xuICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gbnVsbDtcblxuICAgICAgICBmdW5jdGlvbiBhY3Rpb25faW5fcHJvZ3Jlc3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNfZHJhZ2dpbmcgfHwgaXNfcmVzaXppbmdfbGVmdCB8fCBpc19yZXNpemluZ19yaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCBcIm1vdXNlZG93blwiLCBcIi5iYXItd3JhcHBlciwgLmhhbmRsZVwiLCAoZTogYW55LCBlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhcl93cmFwcGVyID0gJC5jbG9zZXN0KFwiLmJhci13cmFwcGVyXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICAgICAgaXNfcmVzaXppbmdfbGVmdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmlnaHRcIikpIHtcbiAgICAgICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYmFyLXdyYXBwZXJcIikgJiYgdGhpcy5vcHRpb25zLmFsbG93TW92ZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpc19kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhcl93cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgICAgIHhfb25fc3RhcnQgPSBlLm9mZnNldFg7XG5cbiAgICAgICAgICAgIHBhcmVudF9iYXJfaWQgPSBiYXJfd3JhcHBlci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpO1xuICAgICAgICAgICAgY29uc3QgaWRzID0gW1xuICAgICAgICAgICAgICAgIHBhcmVudF9iYXJfaWQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRfYWxsX2RlcGVuZGVudF90YXNrcyhwYXJlbnRfYmFyX2lkKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBiYXJzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0X2JhcihpZCkpO1xuXG4gICAgICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gcGFyZW50X2Jhcl9pZDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5veCA9ICRiYXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICRiYXIub3kgPSAkYmFyLmdldFkoKTtcbiAgICAgICAgICAgICAgICAkYmFyLm93aWR0aCA9ICRiYXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgJC5vbih0aGlzLiRzdmcsIFwibW91c2Vtb3ZlXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uX2luX3Byb2dyZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGR4ID0gZS5vZmZzZXRYIC0geF9vbl9zdGFydDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5maW5hbGR4ID0gdGhpcy5nZXRfc25hcF9wb3NpdGlvbihkeCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlX3BvcHVwKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzX3Jlc2l6aW5nX2xlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudF9iYXJfaWQgPT09IGJhci50YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRiYXIub3dpZHRoIC0gJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfcmVzaXppbmdfcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudF9iYXJfaWQgPT09IGJhci50YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkYmFyLm93aWR0aCArICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc19kcmFnZ2luZykge1xuICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oeyB4OiAkYmFyLm94ICsgJGJhci5maW5hbGR4IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBudWxsKTtcblxuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc19kcmFnZ2luZyB8fCBpc19yZXNpemluZ19sZWZ0IHx8IGlzX3Jlc2l6aW5nX3JpZ2h0IHx8ICF0aGlzLm9wdGlvbnMuYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiBiYXIuZ3JvdXAuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzX2RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpc19yZXNpemluZ19sZWZ0ID0gZmFsc2U7XG4gICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICAkLm9uKHRoaXMuJHN2ZywgXCJtb3VzZXVwXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBudWxsO1xuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCEkYmFyLmZpbmFsZHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICBiYXIuZGF0ZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICBiYXIuc2V0QWN0aW9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfYWxsX2RlcGVuZGVudF90YXNrcyh0YXNrX2lkOiBhbnkpIHtcbiAgICAgICAgbGV0IG91dDogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IHRvX3Byb2Nlc3MgPSBbdGFza19pZF07XG4gICAgICAgIHdoaWxlICh0b19wcm9jZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVwcyA9IHRvX3Byb2Nlc3MucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KHRoaXMuZGVwZW5kZW5jeV9tYXBbY3Vycl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQoZGVwcyk7XG4gICAgICAgICAgICB0b19wcm9jZXNzID0gZGVwcy5maWx0ZXIoKGQ6IGFueSkgPT4gIXRvX3Byb2Nlc3MuaW5jbHVkZXMoZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dC5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfc25hcF9wb3NpdGlvbihkeDogYW55KSB7XG4gICAgICAgIGxldCBvZHggPSBkeCxcbiAgICAgICAgICAgIHJlbSxcbiAgICAgICAgICAgIHBvc2l0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuSG91cikpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYpO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMTIgPyAwIDogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gNik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLldlZWspKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyA3KTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDE0ID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDMwKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYwID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDMwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMiA/IDAgOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICBbLi4udGhpcy4kc3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFyLXdyYXBwZXJcIildLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlld19pcyhtb2RlczogVmlld01vZGUgfCBWaWV3TW9kZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVzLnNvbWUoKG1vZGUpID0+IHRoaXMub3B0aW9ucy52aWV3TW9kZSA9PT0gbW9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdNb2RlID09PSBtb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF90YXNrKGlkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3MuZmluZCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGFzay5pZCA9PT0gaWQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfYmFyKGlkOiBhbnkpOiBCYXIge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXJzLmZpbmQoKGJhcjogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFyLnRhc2suaWQgPT09IGlkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd19wb3B1cChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwKFxuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBfd3JhcHBlcixcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tUG9wdXBIdG1sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZV9wb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cCAmJiB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlcl9ldmVudChldmVudDogc3RyaW5nLCBhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tldmVudF0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1tldmVudF0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3NcbiAgICAgICAgICAgIC5tYXAoKHRhc2s6IGFueSkgPT4gdGFzay5fc3RhcnQpXG4gICAgICAgICAgICAucmVkdWNlKChwcmV2X2RhdGU6IGFueSwgY3VyX2RhdGU6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBjdXJfZGF0ZSA8PSBwcmV2X2RhdGUgPyBjdXJfZGF0ZSA6IHByZXZfZGF0ZVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyKCkge1xuICAgICAgICB0aGlzLiRzdmcuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZV9pZCh0YXNrOiBhbnkpIHtcbiAgICByZXR1cm4gdGFzay5uYW1lICsgXCJfXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMik7XG59XG4iXX0=