@sbb-esta/lyne-elements-dev 5.0.0-next.3-dev.1781073244 → 5.0.1-dev.1781208601

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.
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../calendar-day.component-DrMWf6-w.js";
1
+ import { t as e } from "../../calendar-day.component-3tlW6Ba5.js";
2
2
  export { e as SbbCalendarDayElement };
@@ -82,7 +82,7 @@ var s = ".sbb-calendar-day{justify-content:var(--sbb-calendar-day-justify-conten
82
82
  this.disabled = t || n, this.internals.ariaDisabled = String(this.disabled), this.toggleState("crossed-out", t && !n);
83
83
  }
84
84
  _isActiveDate(e) {
85
- return e?.(this.value) ?? !0;
85
+ return e && this.value ? e(this.value) : !0;
86
86
  }
87
87
  _isDayInRange(e, t) {
88
88
  return !e && !t ? !0 : this.dateAdapter.sameDate(this.value, this.dateAdapter.clampDate(this.value, e, t));
package/calendar.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./calendar-day.component-DrMWf6-w.js";
1
+ import { t as e } from "./calendar-day.component-3tlW6Ba5.js";
2
2
  import { SbbCalendarMonthElement as t } from "./calendar/calendar-month/calendar-month.component.js";
3
3
  import { SbbCalendarYearElement as n } from "./calendar/calendar-year/calendar-year.component.js";
4
4
  import { SbbCalendarWeekdayElement as r } from "./calendar/calendar-weekday/calendar-weekday.component.js";
package/calendar.pure.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./calendar-day.component-DrMWf6-w.js";
1
+ import { t as e } from "./calendar-day.component-3tlW6Ba5.js";
2
2
  import { SbbCalendarMonthElement as t } from "./calendar/calendar-month/calendar-month.component.js";
3
3
  import { SbbCalendarYearElement as n } from "./calendar/calendar-year/calendar-year.component.js";
4
4
  import { SbbCalendarWeekdayElement as r } from "./calendar/calendar-weekday/calendar-weekday.component.js";
@@ -74814,7 +74814,7 @@
74814
74814
  "kind": "field",
74815
74815
  "name": "dateFilter",
74816
74816
  "type": {
74817
- "text": "((date: T | null) => boolean) | null"
74817
+ "text": "((date: T) => boolean) | null"
74818
74818
  },
74819
74819
  "privacy": "public",
74820
74820
  "default": "null",
@@ -77025,7 +77025,7 @@
77025
77025
  {
77026
77026
  "name": "date-filter",
77027
77027
  "type": {
77028
- "text": "((date: T | null) => boolean) | null"
77028
+ "text": "((date: T) => boolean) | null"
77029
77029
  },
77030
77030
  "default": "null",
77031
77031
  "description": "A function used to filter out dates.",
@@ -77246,7 +77246,7 @@
77246
77246
  {
77247
77247
  "name": "dateFilter",
77248
77248
  "type": {
77249
- "text": "((date: T | null) => boolean) | null"
77249
+ "text": "((date: T) => boolean) | null"
77250
77250
  }
77251
77251
  }
77252
77252
  ]
@@ -67,7 +67,7 @@ export declare class SbbCalendarElement<T = Date> extends SbbCalendarElement_bas
67
67
  get value(): T | T[] | null;
68
68
  private accessor _value;
69
69
  /** A function used to filter out dates. */
70
- accessor dateFilter: ((date: T | null) => boolean) | null;
70
+ accessor dateFilter: ((date: T) => boolean) | null;
71
71
  /**
72
72
  * Set this with the format `YYYY-MM` to limit the calendar to a specific month,
73
73
  * and prevent navigation to other months.
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/calendar/calendar/calendar.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calendar.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements/calendar/calendar/calendar.component.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { t as SbbCalendarDayElement } from "../../calendar-day.component-Zky9Z-Fq.js";
1
+ import { t as SbbCalendarDayElement } from "../../calendar-day.component-DS2H_TP3.js";
2
2
  export { SbbCalendarDayElement };
@@ -114,7 +114,7 @@ var SbbCalendarDayElement = (() => {
114
114
  this.toggleState("crossed-out", isFilteredOut && !isOutOfRange);
115
115
  }
116
116
  _isActiveDate(dateFilter) {
117
- return dateFilter?.(this.value) ?? true;
117
+ return dateFilter && this.value ? dateFilter(this.value) : true;
118
118
  }
119
119
  _isDayInRange(min, max) {
120
120
  if (!min && !max) return true;
@@ -136,4 +136,4 @@ var SbbCalendarDayElement = (() => {
136
136
  //#endregion
137
137
  export { SbbCalendarDayElement as t };
138
138
 
139
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LmNvbXBvbmVudC1aa3k5Wi1GcS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2FsZW5kYXIvY2FsZW5kYXItZGF5L2NhbGVuZGFyLWRheS5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci1kYXkvY2FsZW5kYXItZGF5LmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG4uc2JiLWNhbGVuZGFyLWRheSB7XG4gIGp1c3RpZnktY29udGVudDogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1qdXN0aWZ5LWNvbnRlbnQpO1xufVxuXG4uc2JiLWNhbGVuZGFyLWRheV9fdmFsdWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IHZhcigtLXNiYi1jYWxlbmRhci1kYXktdmFsdWUtaGVpZ2h0KTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnNiYi1jYWxlbmRhci1kYXlfX2V4dHJhIHtcbiAgZGlzcGxheTogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1leHRyYS1kaXNwbGF5KTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItY2FsZW5kYXItZGF5LWV4dHJhLWhlaWdodCk7XG59XG5cbjo6c2xvdHRlZCgqKSB7XG4gIGhlaWdodDogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1leHRyYS1oZWlnaHQpO1xufVxuIiwiaW1wb3J0IHsgdHlwZSBDU1NSZXN1bHRHcm91cCwgaHRtbCwgdHlwZSBUZW1wbGF0ZVJlc3VsdCwgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJDYWxlbmRhckVsZW1lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9jb21tb24vY2FsZW5kYXItY2VsbC1iYXNlLWVsZW1lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jYWxlbmRhci1kYXkuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgc2luZ2xlIGRheSBjZWxsIGluIHRoZSBgc2JiLWNhbGVuZGFyYCBjb21wb25lbnQuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgc29tZSBjdXN0b20gY29udGVudCB0byB0aGUgZGF5LlxuICovXG5leHBvcnQgY2xhc3MgU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jYWxlbmRhci1kYXknO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIG92ZXJyaWRlIHNldCBzbG90KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlci5zbG90ID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgc2xvdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXBlci5zbG90O1xuICB9XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBjYWxlbmRhci1kYXkgZWxlbWVudC4gKi9cbiAgQHN0YXRlKClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGRhdGU7XG4gICAgICBjb25zdCBpc1RvZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLmRhdGVBZGFwdGVyLnRvZGF5KCkpO1xuICAgICAgdGhpcy50b2dnbGVTdGF0ZSgnY3VycmVudCcsIGlzVG9kYXkpO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYUN1cnJlbnQgPSBpc1RvZGF5ID8gJ2RhdGUnIDogbnVsbDtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFMYWJlbCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0QWNjZXNzaWJpbGl0eUZvcm1hdERhdGUoZGF0ZSk7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB0aGlzLnNldERpc2FibGVkRmlsdGVyZWRTdGF0ZShwYXJlbnQpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUocGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy50YWJJbmRleCA9IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBkYXkgY2VsbCB3aXRoaW4gdGhlIGBzYmItY2FsZW5kYXJgLFxuICAgKiBvciwgaWYgZXh0cmEgY29udGVudCBpcyBuZWVkZWQsIGl0IGNhbiBiZSBzbG90dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldFBhcmVudCgpOiBTYmJDYWxlbmRhckVsZW1lbnQ8VD4gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jbG9zZXN0Py48U2JiQ2FsZW5kYXJFbGVtZW50PFQ+Pignc2JiLWNhbGVuZGFyJykgPz9cbiAgICAgICh0aGlzLmdldFJvb3ROb2RlPy4oKSBhcyBTaGFkb3dSb290KT8uaG9zdD8uY2xvc2VzdDxTYmJDYWxlbmRhckVsZW1lbnQ8VD4+KCdzYmItY2FsZW5kYXInKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U2VsZWN0ZWRTdGF0ZShwYXJlbnQ6IFNiYkNhbGVuZGFyRWxlbWVudDxUPik6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gcGFyZW50Lm11bHRpcGxlXG4gICAgICA/IChwYXJlbnQudmFsdWUgYXMgRGF0ZVtdKS5zb21lKChzZWxEYXkpID0+IHRoaXMuZGF0ZUFkYXB0ZXIuc2FtZURhdGUodGhpcy52YWx1ZSwgc2VsRGF5KSlcbiAgICAgIDogISFwYXJlbnQudmFsdWUgJiYgdGhpcy5kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLnZhbHVlLCBwYXJlbnQudmFsdWUpID09PSAwO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ3NlbGVjdGVkJywgc2VsZWN0ZWQpO1xuICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFQcmVzc2VkID0gU3RyaW5nKHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREaXNhYmxlZEZpbHRlcmVkU3RhdGUocGFyZW50OiBTYmJDYWxlbmRhckVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzQWN0aXZlRGF0ZShwYXJlbnQuZGF0ZUZpbHRlcik7XG4gICAgY29uc3QgaXNPdXRPZlJhbmdlID0gIXRoaXMuX2lzRGF5SW5SYW5nZShwYXJlbnQubWluLCBwYXJlbnQubWF4KTtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNGaWx0ZXJlZE91dCB8fCBpc091dE9mUmFuZ2U7XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gU3RyaW5nKHRoaXMuZGlzYWJsZWQpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2Nyb3NzZWQtb3V0JywgaXNGaWx0ZXJlZE91dCAmJiAhaXNPdXRPZlJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQWN0aXZlRGF0ZShkYXRlRmlsdGVyOiAoKGRhdGU6IFQgfCBudWxsKSA9PiBib29sZWFuKSB8IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZUZpbHRlcj8uKHRoaXMudmFsdWUpID8/IHRydWU7XG4gIH1cblxuICBwcml2YXRlIF9pc0RheUluUmFuZ2UobWluOiBUIHwgbnVsbCwgbWF4OiBUIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghbWluICYmICFtYXgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRlQWRhcHRlci5zYW1lRGF0ZSh0aGlzLnZhbHVlLCB0aGlzLmRhdGVBZGFwdGVyLmNsYW1wRGF0ZSh0aGlzLnZhbHVlLCBtaW4sIG1heCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlU2xvdGNoYW5nZShlOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFEZXNjcmliZWRCeUVsZW1lbnRzID0gKGUudGFyZ2V0IGFzIEhUTUxTbG90RWxlbWVudCkuYXNzaWduZWRFbGVtZW50cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGAgPHNwYW4gY2xhc3M9XCJzYmItY2FsZW5kYXItZGF5X192YWx1ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAke3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLnZhbHVlKX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2JiLWNhbGVuZGFyLWRheV9fZXh0cmFcIj5cbiAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHsoZXZlbnQ6IEV2ZW50KSA9PiB0aGlzLl9oYW5kbGVTbG90Y2hhbmdlKGV2ZW50KX0+PC9zbG90PlxuICAgICAgPC9zcGFuPmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1jYWxlbmRhci1kYXknOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQ2FhLCtCQUFxQjttQkFBbUI7Ozs7Y0FBeEMsOEJBQXdDLFlBQTZCOzs7R0FpQ3hFLEtBQUEsVUFqQ0csa0JBQUEsTUFBQSwwQkFBQSxHQWlDZ0I7RUF5RDdCOzs7MkJBdEZHLFNBQVEsQ0FBRTs0QkFVVixNQUFLLENBQUU7R0FUUixhQUFBLE1BQUEsTUFBQSxzQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFVBQUE7S0FBQSxNQUFBLEtBQUEsVUFBQTtNQUFBLElBQW9CLE9BQUk7S0FBQTtJQUFBO0lBQUEsVUFBQTtHQUFBLEdBQUEsTUFBQSwwQkFBQTtHQVV4QixhQUFBLE1BQUEsTUFBQSx1QkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFdBQUE7S0FBQSxNQUFBLEtBQUEsVUFBQTtNQUFBLElBQVcsUUFBSztLQUFBO0lBQUE7SUFBQSxVQUFBO0dBQUEsR0FBQSxNQUFBLDBCQUFBOzs7Ozs7Ozs7R0FkZ0IsS0FBQSxjQUFzQjtFQUFtQjs7R0FDbEQsS0FB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
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LmNvbXBvbmVudC1EUzJIX1RQMy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvY2FsZW5kYXIvY2FsZW5kYXItZGF5L2NhbGVuZGFyLWRheS5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci1kYXkvY2FsZW5kYXItZGF5LmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG4uc2JiLWNhbGVuZGFyLWRheSB7XG4gIGp1c3RpZnktY29udGVudDogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1qdXN0aWZ5LWNvbnRlbnQpO1xufVxuXG4uc2JiLWNhbGVuZGFyLWRheV9fdmFsdWUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IHZhcigtLXNiYi1jYWxlbmRhci1kYXktdmFsdWUtaGVpZ2h0KTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnNiYi1jYWxlbmRhci1kYXlfX2V4dHJhIHtcbiAgZGlzcGxheTogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1leHRyYS1kaXNwbGF5KTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItY2FsZW5kYXItZGF5LWV4dHJhLWhlaWdodCk7XG59XG5cbjo6c2xvdHRlZCgqKSB7XG4gIGhlaWdodDogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1leHRyYS1oZWlnaHQpO1xufVxuIiwiaW1wb3J0IHsgdHlwZSBDU1NSZXN1bHRHcm91cCwgaHRtbCwgdHlwZSBUZW1wbGF0ZVJlc3VsdCwgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJDYWxlbmRhckVsZW1lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9jb21tb24vY2FsZW5kYXItY2VsbC1iYXNlLWVsZW1lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9jYWxlbmRhci1kYXkuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgc2luZ2xlIGRheSBjZWxsIGluIHRoZSBgc2JiLWNhbGVuZGFyYCBjb21wb25lbnQuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgc29tZSBjdXN0b20gY29udGVudCB0byB0aGUgZGF5LlxuICovXG5leHBvcnQgY2xhc3MgU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jYWxlbmRhci1kYXknO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIG92ZXJyaWRlIHNldCBzbG90KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlci5zbG90ID0gdmFsdWU7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgc2xvdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXBlci5zbG90O1xuICB9XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBjYWxlbmRhci1kYXkgZWxlbWVudC4gKi9cbiAgQHN0YXRlKClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCB8IG51bGwpIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGRhdGU7XG4gICAgICBjb25zdCBpc1RvZGF5ID0gdGhpcy5kYXRlQWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLmRhdGVBZGFwdGVyLnRvZGF5KCkpO1xuICAgICAgdGhpcy50b2dnbGVTdGF0ZSgnY3VycmVudCcsIGlzVG9kYXkpO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYUN1cnJlbnQgPSBpc1RvZGF5ID8gJ2RhdGUnIDogbnVsbDtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFMYWJlbCA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0QWNjZXNzaWJpbGl0eUZvcm1hdERhdGUoZGF0ZSk7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB0aGlzLnNldERpc2FibGVkRmlsdGVyZWRTdGF0ZShwYXJlbnQpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUocGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy50YWJJbmRleCA9IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBkYXkgY2VsbCB3aXRoaW4gdGhlIGBzYmItY2FsZW5kYXJgLFxuICAgKiBvciwgaWYgZXh0cmEgY29udGVudCBpcyBuZWVkZWQsIGl0IGNhbiBiZSBzbG90dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldFBhcmVudCgpOiBTYmJDYWxlbmRhckVsZW1lbnQ8VD4gfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jbG9zZXN0Py48U2JiQ2FsZW5kYXJFbGVtZW50PFQ+Pignc2JiLWNhbGVuZGFyJykgPz9cbiAgICAgICh0aGlzLmdldFJvb3ROb2RlPy4oKSBhcyBTaGFkb3dSb290KT8uaG9zdD8uY2xvc2VzdDxTYmJDYWxlbmRhckVsZW1lbnQ8VD4+KCdzYmItY2FsZW5kYXInKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U2VsZWN0ZWRTdGF0ZShwYXJlbnQ6IFNiYkNhbGVuZGFyRWxlbWVudDxUPik6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gcGFyZW50Lm11bHRpcGxlXG4gICAgICA/IChwYXJlbnQudmFsdWUgYXMgRGF0ZVtdKS5zb21lKChzZWxEYXkpID0+IHRoaXMuZGF0ZUFkYXB0ZXIuc2FtZURhdGUodGhpcy52YWx1ZSwgc2VsRGF5KSlcbiAgICAgIDogISFwYXJlbnQudmFsdWUgJiYgdGhpcy5kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLnZhbHVlLCBwYXJlbnQudmFsdWUpID09PSAwO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ3NlbGVjdGVkJywgc2VsZWN0ZWQpO1xuICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFQcmVzc2VkID0gU3RyaW5nKHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREaXNhYmxlZEZpbHRlcmVkU3RhdGUocGFyZW50OiBTYmJDYWxlbmRhckVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzQWN0aXZlRGF0ZShwYXJlbnQuZGF0ZUZpbHRlcik7XG4gICAgY29uc3QgaXNPdXRPZlJhbmdlID0gIXRoaXMuX2lzRGF5SW5SYW5nZShwYXJlbnQubWluLCBwYXJlbnQubWF4KTtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNGaWx0ZXJlZE91dCB8fCBpc091dE9mUmFuZ2U7XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYURpc2FibGVkID0gU3RyaW5nKHRoaXMuZGlzYWJsZWQpO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2Nyb3NzZWQtb3V0JywgaXNGaWx0ZXJlZE91dCAmJiAhaXNPdXRPZlJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQWN0aXZlRGF0ZShkYXRlRmlsdGVyOiAoKGRhdGU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRlRmlsdGVyICYmIHRoaXMudmFsdWUgPyBkYXRlRmlsdGVyKHRoaXMudmFsdWUpIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShtaW46IFQgfCBudWxsLCBtYXg6IFQgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFtaW4gJiYgIW1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGVBZGFwdGVyLnNhbWVEYXRlKHRoaXMudmFsdWUsIHRoaXMuZGF0ZUFkYXB0ZXIuY2xhbXBEYXRlKHRoaXMudmFsdWUsIG1pbiwgbWF4KSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVTbG90Y2hhbmdlKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMgPSAoZS50YXJnZXQgYXMgSFRNTFNsb3RFbGVtZW50KS5hc3NpZ25lZEVsZW1lbnRzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyVGVtcGxhdGUoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYCA8c3BhbiBjbGFzcz1cInNiYi1jYWxlbmRhci1kYXlfX3ZhbHVlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICR7dGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMudmFsdWUpfVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzYmItY2FsZW5kYXItZGF5X19leHRyYVwiPlxuICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0keyhldmVudDogRXZlbnQpID0+IHRoaXMuX2hhbmRsZVNsb3RjaGFuZ2UoZXZlbnQpfT48L3Nsb3Q+XG4gICAgICA8L3NwYW4+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWNhbGVuZGFyLWRheSc6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lDYWEsK0JBQXFCO21CQUFtQjs7OztjQUF4Qyw4QkFBd0MsWUFBNkI7OztHQWlDeEUsS0FBQSxVQWpDRyxrQkFBQSxNQUFBLDBCQUFBLEdBaUNnQjtFQXlEN0I7OzsyQkF0RkcsU0FBUSxDQUFFOzRCQVVWLE1BQUssQ0FBRTtHQVRSLGFBQUEsTUFBQSxNQUFBLHNCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsVUFBQTtLQUFBLE1BQUEsS0FBQSxVQUFBO01BQUEsSUFBb0IsT0FBSTtLQUFBO0lBQUE7SUFBQSxVQUFBO0dBQUEsR0FBQSxNQUFBLDBCQUFBO0dBVXhCLGFBQUEsTUFBQSxNQUFBLHVCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsV0FBQTtLQUFBLE1BQUEsS0FBQSxVQUFBO01BQUEsSUFBVyxRQUFLO0tBQUE7SUFBQTtJQUFBLFVBQUE7R0FBQSxHQUFBLE1BQUEsMEJBQUE7Ozs7Ozs7OztHQWRnQixLQUFBLGNBQXNC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
@@ -1396,4 +1396,4 @@ var SbbCalendarElement = (() => {
1396
1396
  //#endregion
1397
1397
  export { SbbDateSelectedEvent as n, SbbMonthChangeEvent as r, SbbCalendarElement as t };
1398
1398
 
1399
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LUJtQjhIb1p0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBXZSBhZGQgd2lkdGggZGVmaW5pdGlvbiB0byBob3N0LCB0byBtYWtlIG92ZXJ3cml0aW5nIGVhc3kgZm9yIGNvbnN1bWVycy5cbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG5cbiAgLy8gU2V0IHRoZSBsaW5lLWhlaWdodCBmb3IgYWRqYWNlbnQgZWxlbWVudHMgaW4gb3JkZXIgdG8gcHJldmVudCBmcm9tIGluZmx1ZW5jZSBvZiBhIGNvbnN1bWVyLXNldCBsaW5lLWhlaWdodC5cbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpO1xufVxuXG46aG9zdCg6c3RhdGUoZW5oYW5jZWQpKSB7XG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fd3JhcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbjppcyguc2JiLWNhbGVuZGFyX195ZWFyLXZpZXcsIC5zYmItY2FsZW5kYXJfX21vbnRoLXZpZXcpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xufVxuXG4uc2JiLWNhbGVuZGFyX19kYXktdmlldyB7XG4gIDpob3N0KDpub3QoOnN0YXRlKHZpZXctZGF5KSkpICYge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxufVxuXG4uc2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLWdhcCk7XG4gIGhlaWdodDogdmFyKC0tc2JiLXNpemUtZWxlbWVudC14cyk7XG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTR4KTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyIHNwYW4ge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbiAgY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLXZpZXctY2hhbmdlLWNvbG9yKTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fY29udHJvbCB7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIGZsZXg6IDAgMDtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUgOmlzKHRoZWFkLCB0Ym9keSkge1xuICAvLyBEZXBlbmRpbmcgd2hlcmUgaW4gdGhlIERPTSBpdCdzIHVzZWQsIGl0J3MgcG9zc2libGUgdGhhdCBicm93c2VyIGRlZmF1bHRzIHNldCB0ZXh0LWFsaWduIHRvIGxlZnQuXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwsXG4uc2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbCB7XG4gIHdpZHRoOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKTtcbiAgbWluLXdpZHRoOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKTtcbiAgY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1oZWFkZXItY29sb3IpO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcblxuICA6aG9zdCg6bm90KFttdWx0aXBsZV0pKSAmIHtcbiAgICBoZWlnaHQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpO1xuICB9XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsIHtcbiAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXBhZGRpbmctYmxvY2stZW5kKTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2JiLWNhbGVuZGFyX19kYXktY2VsbCB7XG4gIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1wYWRkaW5nLWJsb2NrLWVuZCk7XG59XG5cbnNiYi1jYWxlbmRhci1kYXkge1xuICA6aG9zdCg6bm90KDpzdGF0ZShlbmhhbmNlZCkpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgLS1zYmItY2FsZW5kYXItZGF5LWhlaWdodDogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1zaXplKTtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktZXh0cmEtZGlzcGxheTogbm9uZTtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktdmFsdWUtaGVpZ2h0OiB1bnNldDtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJTZWNvbmRhcnlCdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vLi4vYnV0dG9uLnB1cmUudHMnO1xuaW1wb3J0IHtcbiAgYnV0dG9uUmVzZXRTdHlsZXMsXG4gIHR5cGUgRGF0ZUFkYXB0ZXIsXG4gIGRlZmF1bHREYXRlQWRhcHRlcixcbiAgZm9yY2VUeXBlLFxuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIGhhbmRsZURpc3RpbmN0Q2hhbmdlLFxuICBpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uLFxuICBpMThuQ2FsZW5kYXJXZWVrTnVtYmVyLFxuICBpMThuTmV4dE1vbnRoLFxuICBpMThuTmV4dFllYXIsXG4gIGkxOG5OZXh0WWVhclJhbmdlLFxuICBpMThuUHJldmlvdXNNb250aCxcbiAgaTE4blByZXZpb3VzWWVhcixcbiAgaTE4blByZXZpb3VzWWVhclJhbmdlLFxuICBpMThuWWVhck1vbnRoU2VsZWN0aW9uLFxuICBpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQsXG4gIE1PTkRBWSxcbiAgcGxhaW5EYXRlLFxuICByZWFkQ29uZmlnLFxuICBTYmJFbGVtZW50LFxuICB0eXBlIFNiYkVsZW1lbnRUeXBlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG4gIHNjcmVlblJlYWRlck9ubHlTdHlsZXMsXG4gIFRIVVJTREFZLFxuICBUVUVTREFZLFxuICBXRURORVNEQVksXG59IGZyb20gJy4uLy4uL2NvcmUudHMnO1xuaW1wb3J0IHsgU2JiSWNvbkVsZW1lbnQgfSBmcm9tICcuLi8uLi9pY29uLnB1cmUudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJEYXlFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItZGF5L2NhbGVuZGFyLWRheS5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJNb250aEVsZW1lbnQgfSBmcm9tICcuLi9jYWxlbmRhci1tb250aC9jYWxlbmRhci1tb250aC5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJXZWVrZGF5RWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLXdlZWtkYXkvY2FsZW5kYXItd2Vla2RheS5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJXZWVrbnVtYmVyRWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLXdlZWtudW1iZXIvY2FsZW5kYXItd2Vla251bWJlci5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJZZWFyRWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLXllYXIvY2FsZW5kYXIteWVhci5jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvbW1vbi9jYWxlbmRhci1jZWxsLWJhc2UtZWxlbWVudC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NhbGVuZGFyLnNjc3M/aW5saW5lJztcblxuY29uc3QgREFZU19QRVJfUk9XOiBudW1iZXIgPSA3O1xuY29uc3QgTU9OVEhTX1BFUl9ST1c6IG51bWJlciA9IDQ7XG5jb25zdCBZRUFSU19QRVJfUk9XOiBudW1iZXIgPSA0O1xuY29uc3QgTU9OVEhTX1BFUl9QQUdFOiBudW1iZXIgPSAxMjtcbmNvbnN0IFlFQVJTX1BFUl9QQUdFOiBudW1iZXIgPSAyNDtcblxuZXhwb3J0IGNsYXNzIFNiYk1vbnRoQ2hhbmdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlOiByZWFkb25seSBEYXlbXTtcblxuICBwdWJsaWMgZ2V0IHJhbmdlKCk6IHJlYWRvbmx5IERheVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IocmFuZ2U6IHJlYWRvbmx5IERheVtdKSB7XG4gICAgc3VwZXIoJ21vbnRoY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLl9yYW5nZSA9IE9iamVjdC5mcmVlemUocmFuZ2UgfHwgW10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTYmJEYXRlU2VsZWN0ZWRFdmVudDxUPiBleHRlbmRzIEV2ZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZVNlbGVjdGVkOiBSZWFkb25seTxUIHwgVFtdPjtcblxuICBwdWJsaWMgZ2V0IGRhdGVTZWxlY3RlZCgpOiBSZWFkb25seTxUIHwgVFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVTZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRlczogVCB8IFRbXSkge1xuICAgIHN1cGVyKCdkYXRlc2VsZWN0ZWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pO1xuICAgIHRoaXMuX2RhdGVTZWxlY3RlZCA9IE9iamVjdC5mcmVlemUoZGF0ZXMpO1xuICB9XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBuZWVkZWQgaW4geWVhciBhbmQgbW9udGggdmlld3MgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgbmV4dCBlbGVtZW50IGluIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gKlxuICogVGhlIGNlbGwncyBpbmRleCBhbmQgdGhlIGVsZW1lbnQncyBpbmRleCBpbiBpdHMgbW9udGggLyB5ZWFyIGJhdGNoIG11c3QgYmUgZGlzdGluZ3Vpc2hlZDpcbiAqIHRoZSBmaXJzdCBpcyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5IG9mIGFsbCB0aGUgcmVuZGVyZWQgY2VsbHMsIHdoaWxlIHRoZSBzZWNvbmQgaXMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyB0YWJsZS5cbiAqIEluIG5vbi13aWRlIG1vZGUsIHRoZSB3dG8gYXJlIHRoZSBzYW1lLCB3aGlsZSBpbiB3aWRlIG1vZGUgdGhlIGNlbGwncyBpbmRleCBjYW4gZ28gZnJvbSAwIHRvIDQ3IGZvciB5ZWFycyBhbmQgZnJvbSAwIHRvIDIzIGZvciBtb250aHMsXG4gKiB3aGlsZSB0aGUgZWxlbWVudCBpbmRleCBnb2VzIGZyb20gMCB0bywgcmVzcGVjdGl2ZWx5LCAyMyBhbmQgMTEuXG4gKi9cbmludGVyZmFjZSBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvbk1vbnRoWWVhclZpZXdzUGFyYW1ldGVycyB7XG4gIC8qKiBUaGUgZWxlbWVudCBpbmRleCB3aXRoaW4gaXRzIHllYXIgb3IgbW9udGggcmFuZ2UuICovXG4gIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBJbiB3aWRlIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2Vjb25kIHBhbmVsLCBvciwgYWx0ZXJuYXRpdmVseSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZmlyc3QgcGFuZWwuICovXG4gIG9mZnNldEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgZWxlbWVudCB3aXRoaW4gdGhlIGVsZW1lbnQncyBtb250aCAob3IgeWVhciByYW5nZSkuICovXG4gIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBjZWxscyBkaXNwbGF5ZWQgaW4gYSBzaW5nbGUgcm93LCBkZXBlbmRpbmcgb24gdGhlIHJlbmRlcmVkIHZpZXcuICovXG4gIHZlcnRpY2FsT2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF5PFQgPSBEYXRlPiB7XG4gIC8qKiBEYXRlIGFzIElTTyBzdHJpbmcuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIGRheVZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IHN0cmluZztcbiAgeWVhclZhbHVlOiBzdHJpbmc7XG4gIGRhdGVWYWx1ZTogVDtcbiAgd2Vla1ZhbHVlOiBudW1iZXI7XG4gIHdlZWtEYXlWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoQ2VsbCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNhbGVuZGFyIHdoaWNoIGFsbG93cyBjaG9vc2luZyBhIGRhdGUuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY3VzdG9taXplZCBgc2JiLWNhbGVuZGFyLWRheWAgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJDYWxlbmRhckVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItY2FsZW5kYXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbXG4gICAgU2JiQ2FsZW5kYXJEYXlFbGVtZW50LFxuICAgIFNiYkNhbGVuZGFyTW9udGhFbGVtZW50LFxuICAgIFNiYkNhbGVuZGFyV2Vla2RheUVsZW1lbnQsXG4gICAgU2JiQ2FsZW5kYXJXZWVrbnVtYmVyRWxlbWVudCxcbiAgICBTYmJDYWxlbmRhclllYXJFbGVtZW50LFxuICAgIFNiYkljb25FbGVtZW50LFxuICAgIFNiYlNlY29uZGFyeUJ1dHRvbkVsZW1lbnQsXG4gIF07XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtcbiAgICBidXR0b25SZXNldFN0eWxlcyxcbiAgICBzY3JlZW5SZWFkZXJPbmx5U3R5bGVzLFxuICAgIHVuc2FmZUNTUyhzdHlsZSksXG4gIF07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRhdGVzZWxlY3RlZDogJ2RhdGVzZWxlY3RlZCcsXG4gICAgbW9udGhjaGFuZ2U6ICdtb250aGNoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgbW9udGhzIHRvIGRpc3BsYXkgaW4gdGhpcyBjYWxlbmRhci5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFtb3VudDogbnVtYmVyID0gMTtcblxuICAvKiogVGhlIGluaXRpYWwgdmlldyBvZiB0aGUgY2FsZW5kYXIgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBvcGVuaW5nLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgdmlldzogJ2RheScgfCAnbW9udGgnIHwgJ3llYXInID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIEFjY2VwdHMgYSBkYXRlIG9iamVjdCBvciBudWxsLlxuICAgKiBBY2NlcHRzIGFuIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiAyMDI0LTEyLTI0KSBhcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBAcGxhaW5EYXRlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIG1pbjogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBBY2NlcHRzIGEgZGF0ZSBvYmplY3Qgb3IgbnVsbC5cbiAgICogQWNjZXB0cyBhbiBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcgKGUuZy4gMjAyNC0xMi0yNCkgYXMgYXR0cmlidXRlLlxuICAgKi9cbiAgQHBsYWluRGF0ZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBtYXg6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgYWxsb3dzIGZvciBtdWx0aXBsZSBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBoYW5kbGVEaXN0aW5jdENoYW5nZSgoZTogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHNlbGVjdGVkIGRhdGU6IGFjY2VwdHMgYSBkYXRlIG9iamVjdCwgb3IsIGlmIGBtdWx0aXBsZWAsIGFuIGFycmF5IG9mIGRhdGVzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCB8IFRbXSB8IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVcbiAgICAgICAgLm1hcCgoZGF0ZUxpa2U6IFQpID0+XG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGVMaWtlKSksXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoZGF0ZTogVCB8IG51bGwpOiBkYXRlIGlzIFQgPT4gZGF0ZSAhPT0gbnVsbClcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGF0ZTogVCkgPT5cbiAgICAgICAgICAgICF0aGlzLl9pc0RheUluUmFuZ2UodGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGRhdGUpKSB8fCB0aGlzLl9kYXRlRmlsdGVyKGRhdGUpLFxuICAgICAgICApXG4gICAgICAgIC5zb3J0KHRoaXMuX3NvcnREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSksXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICAhIXNlbGVjdGVkRGF0ZSAmJlxuICAgICAgICAoIXRoaXMuX2lzRGF5SW5SYW5nZSh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoc2VsZWN0ZWREYXRlKSkgfHxcbiAgICAgICAgICB0aGlzLl9kYXRlRmlsdGVyKHNlbGVjdGVkRGF0ZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBzZWxlY3RlZERhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IFRbXSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF92YWx1ZTogVCB8IFRbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIG91dCBkYXRlcy4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0ZS1maWx0ZXInIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkYXRlRmlsdGVyOiAoKGRhdGU6IFQgfCBudWxsKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB3aXRoIHRoZSBmb3JtYXQgYFlZWVktTU1gIHRvIGxpbWl0IHRoZSBjYWxlbmRhciB0byBhIHNwZWNpZmljIG1vbnRoLFxuICAgKiBhbmQgcHJldmVudCBuYXZpZ2F0aW9uIHRvIG90aGVyIG1vbnRocy5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmaXhlZC1tb250aCcgfSlcbiAgcHVibGljIHNldCBmaXhlZE1vbnRoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtYXRjaCA9IHZhbHVlID8gdmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezJ9KSQvKSA6IG51bGw7XG4gICAgdGhpcy5fZml4ZWRNb250aCA9IG1hdGNoXG4gICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoTnVtYmVyKG1hdGNoWzFdKSwgTnVtYmVyKG1hdGNoWzJdKSwgMSlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGZpeGVkTW9udGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZml4ZWRNb250aFxuICAgICAgPyB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fZml4ZWRNb250aCkuc3BsaXQoJy0nKS5zbGljZSgwLCAyKS5qb2luKCctJylcbiAgICAgIDogJyc7XG4gIH1cbiAgcHJpdmF0ZSBfZml4ZWRNb250aDogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUaGUgb3JpZW50YXRpb24gb2YgZGF5cyBpbiB0aGUgY2FsZW5kYXIuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID1cbiAgICAnaG9yaXpvbnRhbCc7XG5cbiAgLyoqIFdoZXRoZXIgaXQgaGFzIHRvIGRpc3BsYXkgdGhlIHdlZWsgbnVtYmVycyBpbiBhZGRpdGlvbiB0byB3ZWVrIGRheXMuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICd3ZWVrLW51bWJlcnMnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciB3ZWVrTnVtYmVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxUPiA9IHJlYWRDb25maWcoKS5kYXRldGltZT8uZGF0ZUFkYXB0ZXIgPz8gZGVmYXVsdERhdGVBZGFwdGVyO1xuXG4gIC8qKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkYXRlLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9hY3RpdmVEYXRlOiBUID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcblxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9jYWxlbmRhclZpZXc6IFNiYkNhbGVuZGFyRWxlbWVudFsndmlldyddID0gJ2RheSc7XG5cbiAgLyoqIEEgbGlzdCBvZiBkYXlzLCBpbiB0d28gZm9ybWF0cyAobG9uZyBhbmQgc2luZ2xlIGNoYXIpLiAqL1xuICBwcml2YXRlIF93ZWVrZGF5cyE6IFdlZWtkYXlbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cbiAgcHJpdmF0ZSBfd2Vla3M6IERheTxUPltdW11bXSA9IFtdO1xuXG4gIC8qKiBUaGUgZmlyc3QgdmlzaWJsZSBkYXkgaW4gdGhlIGNhbGVuZGFyLiAqL1xuICBwcml2YXRlIF9maXJzdFZpc2libGVEYXk6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBUaGUgbGFzdCB2aXNpYmxlIGRheSBpbiB0aGUgY2FsZW5kYXIuICovXG4gIHByaXZhdGUgX2xhc3RWaXNpYmxlRGF5OiBzdHJpbmcgPSAnJztcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgbW9udGhzLiAqL1xuICBwcml2YXRlIF9tb250aHMhOiBNb250aENlbGxbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB5ZWFycy4gKi9cbiAgcHJpdmF0ZSBfeWVhcnMhOiBudW1iZXJbXVtdO1xuXG4gIC8qKiBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgbW9udGggbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuICovXG4gIHByaXZhdGUgX21vbnRoTmFtZXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuXG4gIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB3ZWVrcycgbnVtYmVycyBmb3IgdGhlIGN1cnJlbnQgbW9udGguICovXG4gIHByaXZhdGUgX3dlZWtOdW1iZXJzITogbnVtYmVyW11bXTtcblxuICBwcml2YXRlIF9lbmhhbmNlZFZhcmlhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQSBsaXN0IG9mIGNhbGVuZGFyJ3MgY2VsbHMgY29ycmVzcG9uZGluZyB0byBkYXlzLCBtb250aHMgb3IgeWVhcnMgZGVwZW5kaW5nIG9uIHRoZSB2aWV3LiAqL1xuICBwcml2YXRlIGdldCBfY2VsbHMoKTogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb208U2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4+KFxuICAgICAgKHRoaXMuX2NhbGVuZGFyVmlldyA9PT0gJ2RheSdcbiAgICAgICAgPyAoQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Nsb3QnKSkuZmxhdE1hcCgoZTogSFRNTFNsb3RFbGVtZW50KSA9PlxuICAgICAgICAgICAgZS5hc3NpZ25lZEVsZW1lbnRzKHsgZmxhdHRlbjogdHJ1ZSB9KSxcbiAgICAgICAgICApIGFzIFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdKVxuICAgICAgICA6IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvckFsbDxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPj4oXG4gICAgICAgICAgICBgc2JiLWNhbGVuZGFyLSR7dGhpcy5fY2FsZW5kYXJWaWV3fWAsXG4gICAgICAgICAgKSkgPz8gW10sXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUaGUgY2hvc2VuIHllYXIgaW4gdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2Nob3NlblllYXI/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBjaG9zZW4gbW9udGggaW4gdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2Nob3Nlbk1vbnRoPzogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBzaG91bGQgYmUgcmVzZXQgb24gZm9jdXNDZWxsLiAqL1xuICBwcml2YXRlIF9yZXNldEZvY3VzID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgYW4gZWxlbWVudCBpbnNpZGUgdGhlIGNhbGVuZGFyIGlzIGN1cnJlbnRseSBmb2N1c2VkLiAqL1xuICBwcml2YXRlIF9jb250YWluaW5nRm9jdXMgPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYXN0U2VsZWN0aW9uOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBhY2Nlc3NvciBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcykud2l0aEhhbmRsZXIoKCkgPT4ge1xuICAgIHRoaXMuX21vbnRoTmFtZXMgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gIH0pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NyZWF0ZU1vbnRoUm93cygpO1xuICAgIHRoaXMuX3NldFdlZWtkYXlzKCk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyYWNrIHRoZSBmb2N1cyBhcyB3ZSBzaG91bGQgb25seSB0YWtlIGZvY3VzIGludG8gdGhlIGNhbGVuZGFyLCB3aGVuIHRoZVxuICAgIC8vIGZvY3VzIHdhcyBvbmNlIHNldCBpbnRvIHRoZSBjYWxlbmRhci5cbiAgICAvLyBGb3Igc2hhZG93IERPTSBjb21wYXRpYmlsaXR5IHdlIG5lZWQgdG8gdHJhY2sgdGhpcyBwcm9ncmFtbWF0aWNhbGx5LlxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsICgpID0+ICh0aGlzLl9jb250YWluaW5nRm9jdXMgPSB0cnVlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsICgpID0+ICh0aGlzLl9jb250YWluaW5nRm9jdXMgPSBmYWxzZSkpO1xuICAgIGNvbnN0IHJlc29sdmVEYXkgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCB8IEtleWJvYXJkRXZlbnQpOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4gfCBudWxsID0+XG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0PFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPj4oJ3NiYi1jYWxlbmRhci1kYXknKSA/P1xuICAgICAgZXZlbnRcbiAgICAgICAgLmNvbXBvc2VkUGF0aCgpXG4gICAgICAgIC5maW5kKFxuICAgICAgICAgIChlKTogZSBpcyBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4gPT4gKGUgYXMgSFRNTEVsZW1lbnQpLmxvY2FsTmFtZSA9PT0gJ3NiYi1jYWxlbmRhci1kYXknLFxuICAgICAgICApID8/XG4gICAgICBudWxsO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRheSA9IHJlc29sdmVEYXkoZXZlbnQpO1xuICAgICAgaWYgKGRheSkge1xuICAgICAgICB0aGlzLl9zZWxlY3REYXRlKGRheS52YWx1ZSEsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRheSA9IHJlc29sdmVEYXkoZXZlbnQpO1xuICAgICAgaWYgKGRheSkge1xuICAgICAgICB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50LCBkYXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+ICh0aGlzLl9sYXN0U2VsZWN0aW9uID0gbnVsbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc29ydERhdGUgPSAoYTogVCwgYjogVCk6IG51bWJlciA9PiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShhLCBiKTtcblxuICBwcml2YXRlIF9kYXRlRmlsdGVyKGRhdGU6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlRmlsdGVyPy4oZGF0ZSkgPz8gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGFjdGl2ZSBtb250aCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBzdGF0ZSBvZiB0aGUgY2FsZW5kYXIuICovXG4gIHB1YmxpYyByZXNldFBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KCk7XG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5yZXNldFBvc2l0aW9uKCk7XG4gICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCdzbG90Y2hhbmdlJywgdGhpcy5fb25TbG90Q2hhbmdlLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9vblNsb3RDaGFuZ2UsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG92ZXJyaWRlIGZvcm1SZXNldENhbGxiYWNrKCk6IHZvaWQge31cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBvdmVycmlkZSBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIHJlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIGlmIChyZWFzb24gPT09ICdhdXRvY29tcGxldGUnIHx8IHN0YXRlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdG9yZSA9ICh2YWx1ZTogc3RyaW5nIHwgVCB8IG51bGwpOiBUIHwgbnVsbCA9PlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSByZXN0b3JlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRGb3JtRGF0YShzdGF0ZSBhcyBGb3JtRGF0YSkudGhlbihcbiAgICAgICAgICAoYXJyYXkpID0+ICh0aGlzLnZhbHVlID0gYXJyYXkubWFwKHJlc3RvcmUpLmZpbHRlcigoZGF0ZSk6IGRhdGUgaXMgVCA9PiBkYXRlICE9IG51bGwpKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnRyeSA9IHN0YXRlLmdldCh0aGlzLm5hbWUpO1xuICAgICAgaWYgKGVudHJ5IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICBlbnRyeS50ZXh0KCkudGhlbigodGV4dCkgPT4gKHRoaXMudmFsdWUgPSByZXN0b3JlKEpTT04ucGFyc2UodGV4dCkpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gcmVzdG9yZShlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcmVhZEZvcm1EYXRhKGZvcm1EYXRhOiBGb3JtRGF0YSk6IFByb21pc2U8VFtdPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZm9ybURhdGFcbiAgICAgICAgLmdldEFsbCh0aGlzLm5hbWUpXG4gICAgICAgIC5tYXAoYXN5bmMgKGVudHJ5KSA9PlxuICAgICAgICAgIGVudHJ5IGluc3RhbmNlb2YgQmxvYiA/IEpTT04ucGFyc2UoYXdhaXQgZW50cnkudGV4dCgpKSA6IChlbnRyeSBhcyBUKSxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgdGhpcy5fZm9jdXNDZWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Ftb3VudCcpIHx8XG4gICAgICBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ29yaWVudGF0aW9uJykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnZml4ZWRNb250aCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2aWV3JykpIHtcbiAgICAgIHRoaXMuX3NldENob3NlblllYXIoKTtcbiAgICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY2FsZW5kYXJWaWV3ID0gdGhpcy52aWV3O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZXF1ZXN0VXBkYXRlKFxuICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICBvbGRWYWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24sXG4gICk6IHZvaWQge1xuICAgIHN1cGVyLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfY2FsZW5kYXJWaWV3Jykge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgdmlldy0ke29sZFZhbHVlfWApO1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChgdmlldy0ke3RoaXMuX2NhbGVuZGFyVmlld31gKTtcbiAgICAgIGlmICh0aGlzLl9jb250YWluaW5nRm9jdXMpIHtcbiAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgLy8gVGhlIGNhbGVuZGFyIG5lZWRzIHRvIGNhbGN1bGF0ZSB0YWItaW5kZXhlcyBvbiBmaXJzdCByZW5kZXIsXG4gICAgLy8gYW5kIGV2ZXJ5IHRpbWUgYSBkYXRlIGlzIHNlbGVjdGVkIG9yIHRoZSBtb250aCB2aWV3IGNoYW5nZXMuXG4gICAgdGhpcy5fc2V0VGFiSW5kZXgoKTtcblxuICAgIC8vIFdoZW4gY2hhbmdpbmcgdmlldyB0byB5ZWFyL21vbnRoLCB0aGUgdGFiaW5kZXggaXMgY2hhbmdlZCwgYnV0IHRoZSBmb2N1c2VkIGVsZW1lbnQgaXMgZ2V0dGluZyBsb3N0LlxuICAgIC8vIFdlIG5lZWQgdG8gY2FsbCBgX2ZvY3VzQ2VsbCgpYCBtZXRob2QgZXhwbGljaXRseSB0byBjb3JyZWN0bHkgc2V0IHRoZSBmb2N1cy5cbiAgICB0aGlzLl9mb2N1c0NlbGwoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uU2xvdENoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9lbmhhbmNlZFZhcmlhbnQgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLnNvbWUoXG4gICAgICAoYykgPT4gYy5sb2NhbE5hbWUgPT09ICdzYmItY2FsZW5kYXItZGF5JyxcbiAgICApO1xuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ2VuaGFuY2VkJywgdGhpcy5fZW5oYW5jZWRWYXJpYW50KTtcbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYF92YWx1ZWAgc3RhdGUgc2hvdWxkIGJlIGFkYXB0ZWQgd2hlbiB0aGUgYG11bHRpcGxlYCBwcm9wZXJ0eSBjaGFuZ2VzOlxuICAgKiAgIC0gaWYgaXQgY2hhbmdlcyB0byB0cnVlLCB0aGUgJ192YWx1ZScgaXMgc2V0IHRvIGFuIGFycmF5O1xuICAgKiAgIC0gaWYgaXQgY2hhbmdlcyB0byBmYWxzZSwgdGhlIGZpcnN0IGF2YWlsYWJsZSBvcHRpb24gaXMgc2V0IGFzICd2YWx1ZScgb3RoZXJ3aXNlIGl0J3Mgc2V0IHRvIG51bGwuXG4gICAqL1xuICBwcml2YXRlIF9vbk11bHRpcGxlQ2hhbmdlZChpc011bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodGhpcy5fdmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3ZhbHVlID8gW3RoaXMuX3ZhbHVlIGFzIFRdIDogW107XG4gICAgfVxuICAgIGlmICghaXNNdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuX3ZhbHVlKSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSAodGhpcy5fdmFsdWUgYXMgVFtdKS5sZW5ndGggPyAodGhpcy5fdmFsdWUgYXMgVFtdKVswXSA6IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQuICovXG4gIHByaXZhdGUgX2luaXQoYWN0aXZlRGF0ZT86IFQpOiB2b2lkIHtcbiAgICAvLyBEdWUgdG8gaXRzIGNvbXBsZXhpdHksIHRoZSBjYWxlbmRhciBpcyBvbmx5IGluaXRpYWxpemVkIG9uIGNsaWVudCBzaWRlXG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmh5ZHJhdGlvbkNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5faW5pdCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5fYXNzaWduQWN0aXZlRGF0ZShhY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLl9maXhlZE1vbnRoID8/IHRoaXMuX2FjdGl2ZURhdGU7XG4gICAgY29uc3QgYW1vdW50ID0gdGhpcy5hbW91bnQgPCAxID8gMSA6IHRoaXMuYW1vdW50O1xuICAgIHRoaXMuX3dlZWtzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogYW1vdW50IH0sIChfLCBpKSA9PlxuICAgICAgdGhpcy5fY3JlYXRlV2Vla1Jvd3ModGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoc3RhcnREYXRlLCBpKSksXG4gICAgKTtcbiAgICBjb25zdCBkYXRlRnJvbUZpcnN0TW9udGggPSB0aGlzLl93ZWVrc1swXVswXVswXS5kYXRlVmFsdWU7XG4gICAgdGhpcy5fZmlyc3RWaXNpYmxlRGF5ID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlRnJvbUZpcnN0TW9udGgpLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlRnJvbUZpcnN0TW9udGgpLFxuICAgICAgICAxLFxuICAgICAgKSEsXG4gICAgKTtcbiAgICBjb25zdCBkYXRlRnJvbUxhc3RNb250aCA9IHRoaXMuX3dlZWtzW2Ftb3VudCAtIDFdWzBdWzBdLmRhdGVWYWx1ZTtcbiAgICB0aGlzLl9sYXN0VmlzaWJsZURheSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZUZyb21MYXN0TW9udGgpLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlRnJvbUxhc3RNb250aCksXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKGRhdGVGcm9tTGFzdE1vbnRoKSxcbiAgICAgICkhLFxuICAgICk7XG5cbiAgICB0aGlzLl95ZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKCk7XG4gICAgdGhpcy5fd2Vla051bWJlcnMgPSB0aGlzLl93ZWVrcy5tYXAoKHdlZWspID0+XG4gICAgICB3ZWVrXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSlcbiAgICAgICAgLm1hcCgoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUpXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSksXG4gICAgKTtcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKiogRm9jdXNlcyBvbiBhIGRheSBjZWxsIHByaW9yaXRpemluZyB0aGUgc2VsZWN0ZWQgZGF5LCB0aGUgY3VycmVudCBkYXksIGFuZCBsYXN0bHksIHRoZSBmaXJzdCBzZWxlY3RhYmxlIGRheS4gKi9cbiAgcHJpdmF0ZSBfZm9jdXNDZWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZXNldEZvY3VzKSB7XG4gICAgICB0aGlzLl9nZXRGaXJzdEZvY3VzYWJsZSgpPy5mb2N1cygpO1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBhcnJheSBvZiB3ZWVrZGF5cy4gKi9cbiAgcHJpdmF0ZSBfc2V0V2Vla2RheXMoKTogdm9pZCB7XG4gICAgY29uc3QgbmFycm93V2Vla2RheXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ25hcnJvdycpO1xuICAgIGNvbnN0IGxvbmdXZWVrZGF5czogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbG9uZycpO1xuICAgIGNvbnN0IHdlZWtkYXlzOiBXZWVrZGF5W10gPSBsb25nV2Vla2RheXMubWFwKChsb25nOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gKHtcbiAgICAgIGxvbmcsXG4gICAgICBuYXJyb3c6IG5hcnJvd1dlZWtkYXlzW2ldLFxuICAgIH0pKTtcblxuICAgIC8vIFJvdGF0ZXMgdGhlIGxhYmVscyBmb3IgZGF5cyBvZiB0aGUgd2VlayBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgY29uc3QgZmlyc3REYXlPZldlZWs6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgdGhpcy5fd2Vla2RheXMgPSB3ZWVrZGF5cy5zbGljZShmaXJzdERheU9mV2VlaykuY29uY2F0KHdlZWtkYXlzLnNsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBhbG9uZyB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24gYW5kIHNldHMgdGhlIHBhcmFtZXRlcnMgdXNlZCBpbiBrZXlib2FyZCBuYXZpZ2F0aW9uLiAqL1xuICBwcml2YXRlIF9jcmVhdGVXZWVrUm93cyh2YWx1ZTogVCk6IERheTxUPltdW10ge1xuICAgIGNvbnN0IGRheXNJbk1vbnRoOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXROdW1EYXlzSW5Nb250aCh2YWx1ZSk7XG4gICAgY29uc3Qgd2Vla09mZnNldDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3RXZWVrT2Zmc2V0KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICA/IHRoaXMuX2NyZWF0ZVdlZWtSb3dzSG9yaXpvbnRhbCh2YWx1ZSwgZGF5c0luTW9udGgsIHdlZWtPZmZzZXQpXG4gICAgICA6IHRoaXMuX2NyZWF0ZVdlZWtSb3dzVmVydGljYWwodmFsdWUsIGRheXNJbk1vbnRoLCB3ZWVrT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByb3dzIGZvciBlYWNoIHdlZWsgaW4gb3JpZW50YXRpb249J2hvcml6b250YWwnLlxuICAgKlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBkYXlzIG9mIHRoZSBtb250aHMsIGNyZWF0ZXMgYSBEYXkgb2JqZWN0IGZvciBlYWNoIGFuZCBwdXNoZXMgaXQgaW50byBhbmQgYXJyYXkuXG4gICAqIEVhY2ggc2V2ZW4gZGF5cyAoY29uc2lkZXJpbmcgdGhlIG9mZnNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtb250aCkgcmVzdGFydHMgZnJvbSBhbiBlbXB0eSBhcnJheS5cbiAgICpcbiAgICogVGhlIHJlc3VsdCBpcyBhIG1hdHJpeCBpbiB3aGljaCBldmVyeSByb3cgaXMgYSB3ZWVrIChvciBwYXJ0IG9mIGl0LCBjb25zaWRlcmluZyBvZmZzZXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3NIb3Jpem9udGFsKHZhbHVlOiBULCBkYXlzSW5Nb250aDogbnVtYmVyLCB3ZWVrT2Zmc2V0OiBudW1iZXIpOiBEYXk8VD5bXVtdIHtcbiAgICBjb25zdCB3ZWVrczogRGF5PFQ+W11bXSA9IFtbXV07XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh0aGlzLl9tYXBEYXRlVG9EYXkoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2Vla3M7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcm93cyBmb3IgZWFjaCB3ZWVrIGluIG9yaWVudGF0aW9uPSd2ZXJ0aWNhbCcuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBtYXRyaXggd2l0aCBzZXZlbiBlbXB0eSByb3dzLlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBkYXlzIG9mIHRoZSBtb250aHMsIGNyZWF0ZXMgYSBEYXkgb2JqZWN0IGZvciBlYWNoXG4gICAqIGFuZCBwdXNoZXMgaXQgaW50byB0aGUgY29ycmVjdCBhcnJheSBjb25zaWRlcmluZyB0aGUgb2Zmc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1vbnRoLlxuICAgKiBFYWNoIHNldmVuIGRheXMgKGluY2x1ZGluZyBvZmZzZXQpIHJlc3RhcnRzIGZyb20gdGhlIGZpcnN0LlxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGEgbWF0cml4IGluIHdoaWNoIGV2ZXJ5IHJvdyBpcyBhIHNldCBvZiB3ZWVrZGF5cywgc286XG4gICAqIC0gcm93IDA6IGFsbCB0aGUgTW9uZGF5cztcbiAgICogLSByb3cgMTogYWxsIHRoZSBUdWVzZGF5cztcbiAgICogLSAuLi5cbiAgICogLSByb3cgNzogYWxsIHRoZSBTdW5kYXlzLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3NWZXJ0aWNhbCh2YWx1ZTogVCwgZGF5c0luTW9udGg6IG51bWJlciwgd2Vla09mZnNldDogbnVtYmVyKTogRGF5PFQ+W11bXSB7XG4gICAgY29uc3Qgd2Vla3M6IERheTxUPltdW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX1BFUl9ST1cgfSwgKCkgPT4gW10pO1xuICAgIGZvciAobGV0IGkgPSAwLCBjZWxsID0gd2Vla09mZnNldDsgaSA8IGRheXNJbk1vbnRoOyBpKyssIGNlbGwrKykge1xuICAgICAgaWYgKGNlbGwgPT09IERBWVNfUEVSX1JPVykge1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3NbY2VsbF0ucHVzaCh0aGlzLl9tYXBEYXRlVG9EYXkoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2Vla3M7XG4gIH1cblxuICBwcml2YXRlIF9tYXBEYXRlVG9EYXkoZGF0ZTogVCk6IERheTxUPiB7XG4gICAgY29uc3QgaXNvRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShkYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGlzb0RhdGUsXG4gICAgICBkYXRlVmFsdWU6IGRhdGUsXG4gICAgICBkYXlWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUoZGF0ZSkpLFxuICAgICAgbW9udGhWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpKSxcbiAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgLy8gVE9ETzogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGlzLCBieSBrZWVwaW5nIHRyYWNrIG9mIHRoZVxuICAgICAgLy8gd2VlayBudW1iZXIgd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGRheXMuXG4gICAgICB3ZWVrVmFsdWU6IHRoaXMuX2dldFdlZWsoZGF0ZSksXG4gICAgICB3ZWVrRGF5VmFsdWU6IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2VlayhkYXRlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0V2VlayhkYXRlOiBUKTogbnVtYmVyIHtcbiAgICBjb25zdCBmaXJzdERheU9mWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKSwgMSwgMSk7XG4gICAgY29uc3Qgd2Vla2RheSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2VlayhmaXJzdERheU9mWWVhcik7XG5cbiAgICBsZXQgd2Vla0luZGV4ID0gW01PTkRBWSwgVFVFU0RBWSwgV0VETkVTREFZLCBUSFVSU0RBWV0uaW5jbHVkZXMod2Vla2RheSkgPyAxIDogMDtcbiAgICBsZXQgd2Vla1N0YXJ0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgZmlyc3REYXlPZlllYXIsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoZmlyc3REYXlPZlllYXIpICogLTEsXG4gICAgKTtcbiAgICB3aGlsZSAodGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUod2Vla1N0YXJ0LCBkYXRlKSA8PSAwKSB7XG4gICAgICBjb25zdCB3ZWVrRW5kID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHdlZWtTdGFydCwgNik7XG4gICAgICBpZiAodGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgd2Vla0VuZCkgPD0gMCkge1xuICAgICAgICByZXR1cm4gd2Vla0luZGV4ID4gMFxuICAgICAgICAgID8gd2Vla0luZGV4XG4gICAgICAgICAgOiB0aGlzLl9nZXRXZWVrKHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdERheU9mWWVhciwgLTEpKTtcbiAgICAgIH1cbiAgICAgIHdlZWtTdGFydCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh3ZWVrU3RhcnQsIERBWVNfUEVSX1JPVyk7XG4gICAgICB3ZWVrSW5kZXgrKztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBkYXRlIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIC8qKiBGb3JjZSB0aGUgY29udmVyc2lvbiB0byBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcuICovXG4gIHByaXZhdGUgX21hcFZhbHVlVG9JU09EYXRlKHZhbHVlOiBzdHJpbmcgfCBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKHZhbHVlIGFzIFQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIHRoZSBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTW9udGhSb3dzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoczogTW9udGhDZWxsW10gPSBuZXcgQXJyYXkoMTIpLmZpbGwobnVsbCkubWFwKFxuICAgICAgKF8sIGk6IG51bWJlcik6IE1vbnRoQ2VsbCA9PiAoe1xuICAgICAgICB2YWx1ZTogU3RyaW5nKGkgKyAxKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aENlbGxbXVtdID0gW107XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgbW9udGhBcnJheS5wdXNoKG1vbnRocy5zbGljZShNT05USFNfUEVSX1JPVyAqIGksIE1PTlRIU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICB0aGlzLl9tb250aHMgPSBtb250aEFycmF5O1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyUm93cygpOiBudW1iZXJbXVtdIHtcbiAgICBjb25zdCBzdGFydFZhbHVlWWVhclZpZXc6IG51bWJlciA9IHRoaXMuX2dldFN0YXJ0VmFsdWVZZWFyVmlldygpO1xuICAgIGNvbnN0IGFsbFllYXJzOiBudW1iZXJbXSA9IG5ldyBBcnJheShZRUFSU19QRVJfUEFHRSlcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpOiBudW1iZXIpID0+IHN0YXJ0VmFsdWVZZWFyVmlldyArIGkpO1xuICAgIGNvbnN0IHJvd3M6IG51bWJlciA9IFlFQVJTX1BFUl9QQUdFIC8gWUVBUlNfUEVSX1JPVztcbiAgICBjb25zdCB5ZWFyQXJyYXk6IG51bWJlcltdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB5ZWFyQXJyYXkucHVzaChhbGxZZWFycy5zbGljZShZRUFSU19QRVJfUk9XICogaSwgWUVBUlNfUEVSX1JPVyAqIChpICsgMSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHllYXJBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBmaXJzdCB5ZWFyIHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgeWVhciBzZWxlY3Rpb24gcGFuZWwuXG4gICAqIElmIGBtaW5EYXRlYCBhbmQgYG1heERhdGVgIGFyZSBib3RoIG51bGwsIHRoZSBzdGFydGluZyB5ZWFyIGlzIGNhbGN1bGF0ZWQgYXNcbiAgICogdGhlIG11bHRpcGxlIG9mIFlFQVJTX1BFUl9QQUdFIGNsb3Nlc3QgdG8gYW5kIGxlc3MgdGhhbiBhY3RpdmVEYXRlLFxuICAgKiBlLmcuLCB3aXRoIGBZRUFSU19QRVJfUEFHRWAgPSAyNCBhbmQgYGFjdGl2ZURhdGVgID0gMjAyMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDIwMTYgKDI0ICogODMpLFxuICAgKiB3aGlsZSB3aXRoIGBhY3RpdmVEYXRlYCA9IDIwMDAsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxOTkyICgyNCAqIDgyKS5cbiAgICogSWYgYG1pbkRhdGVgIGlzIG5vdCBudWxsLCBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXI7IGlmIGBtYXhEYXRlYCBpcyBub3QgbnVsbCxcbiAgICogaXQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB5ZWFyIG1pbnVzIGBZRUFSU19QRVJfUEFHRWAsIHNvIHRoYXQgdGhlIGBtYXhEYXRlYCBpcyB0aGUgbGFzdCByZW5kZXJlZCB5ZWFyLlxuICAgKiBJZiBib3RoIGFyZSBub3QgbnVsbCwgYG1heERhdGVgIGhhcyBwcmlvcml0eSBvdmVyIGBtaW5EYXRlYC5cbiAgICovXG4gIHByaXZhdGUgX2dldFN0YXJ0VmFsdWVZZWFyVmlldygpOiBudW1iZXIge1xuICAgIGxldCBzdGFydGluZ1llYXIgPSAwO1xuICAgIGlmICh0aGlzLm1heCkge1xuICAgICAgc3RhcnRpbmdZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1heCkgLSBZRUFSU19QRVJfUEFHRSArIDE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbikge1xuICAgICAgc3RhcnRpbmdZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbik7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZVllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpO1xuICAgIHJldHVybiAoXG4gICAgICBhY3RpdmVZZWFyIC1cbiAgICAgICgoKChhY3RpdmVZZWFyIC0gc3RhcnRpbmdZZWFyKSAlIFlFQVJTX1BFUl9QQUdFKSArIFlFQVJTX1BFUl9QQUdFKSAlIFlFQVJTX1BFUl9QQUdFKVxuICAgICk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIGRhdGUgaXMgd2l0aGluIHRoZSBtaW4tbWF4IHJhbmdlLiAqL1xuICBwcml2YXRlIF9pc0RheUluUmFuZ2UoZGF0ZVN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1pbiAmJiAhdGhpcy5tYXgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZVN0cmluZykhO1xuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLl9kYXRlQWRhcHRlci5jbGFtcERhdGUoZGF0ZSwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gIH1cblxuICAvKiogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGUgYW5kIHNldHMgaXQgaW50ZXJuYWxseS4gKi9cbiAgcHJpdmF0ZSBfc2VsZWN0RGF0ZShkYXk6IFQsIGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGEgcmFuZ2UgaXMgc2VsZWN0ZWQgdmlhIFNoaWZ0LCBhIHRleHQgc2VsZWN0aW9uIHJhbmdlIHdpbGwgYmUgYWN0aXZlLlxuICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgaXQgdG8gYXZvaWQgaGF2aW5nIGEgdGV4dCBzZWxlY3Rpb24gb24gdG9wIG9mIHRoZSBjYWxlbmRhciBjZWxscyxcbiAgICAgIC8vIHdoaWNoIHdvdWxkIGNyZWF0ZSBhIGNvbmZ1c2luZyBVWC5cbiAgICAgIC8vIFRoaXMgYWxzbyBtdXN0IGJlIHZlcnkgZWFybHkgaW4gdGhlIGV2ZW50IGhhbmRsZXIsIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgZmxhc2hcbiAgICAgIC8vIG9mIHNlbGVjdGlvbi5cbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBsZXQgc2VsZWN0ZWQgPSAhdGhpcy5fdmFsdWUgPyBbXSA6IEFycmF5LmlzQXJyYXkodGhpcy5fdmFsdWUpID8gdGhpcy5fdmFsdWUgOiBbdGhpcy5fdmFsdWVdO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZFNlbGVjdGVkID0gc2VsZWN0ZWQubWFwKChzKSA9PiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEocykpO1xuICAgICAgaWYgKFxuICAgICAgICBldmVudC5zaGlmdEtleSAmJlxuICAgICAgICB0aGlzLl9sYXN0U2VsZWN0aW9uICYmXG4gICAgICAgIHNlcmlhbGl6ZWRTZWxlY3RlZC5pbmNsdWRlcyh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fbGFzdFNlbGVjdGlvbikpICYmXG4gICAgICAgICFzZXJpYWxpemVkU2VsZWN0ZWQuaW5jbHVkZXModGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGRheSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fbGFzdFNlbGVjdGlvbiwgZGF5KSA8IDAgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IHJhbmdlOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuX2xhc3RTZWxlY3Rpb247XG4gICAgICAgIHdoaWxlICghdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUoY3VycmVudCwgZGF5KSkge1xuICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoY3VycmVudCwgb2Zmc2V0KSE7XG4gICAgICAgICAgY29uc3Qgc2VyaWFsaXplZEN1cnJlbnQgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoY3VycmVudCk7XG4gICAgICAgICAgaWYgKCFzZXJpYWxpemVkU2VsZWN0ZWQuaW5jbHVkZXMoc2VyaWFsaXplZEN1cnJlbnQpKSB7XG4gICAgICAgICAgICByYW5nZS5wdXNoKHNlcmlhbGl6ZWRDdXJyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLl9tZXJnZURhdGVzKHJhbmdlLCBzZXJpYWxpemVkU2VsZWN0ZWQpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZC5zb21lKChzZWwpID0+IHRoaXMuX2RhdGVBZGFwdGVyLnNhbWVEYXRlKHNlbCwgZGF5KSkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZC5maWx0ZXIoKHNlbCkgPT4gIXRoaXMuX2RhdGVBZGFwdGVyLnNhbWVEYXRlKHNlbCwgZGF5KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZCA9IFsuLi5zZWxlY3RlZCwgZGF5XS5zb3J0KHRoaXMuX3NvcnREYXRlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbGFzdFNlbGVjdGlvbiA9IGRheTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gc2VsZWN0ZWQ7XG4gICAgICB0aGlzLl9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQodGhpcy5fdmFsdWUubWFwKChlKSA9PiB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShlKSEpKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl92YWx1ZSB8fCB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl92YWx1ZSBhcyBULCBkYXkpICE9PSAwKSB7XG4gICAgICAvLyBJbiBzaW5nbGUgc2VsZWN0aW9uLCBjaGVjayBpZiB0aGUgZGF5IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgIHRoaXMuX3ZhbHVlID0gZGF5O1xuICAgICAgdGhpcy5fZW1pdERhdGVTZWxlY3RlZEV2ZW50KHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSkhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG11bHRpcGxlIGRhdGVzIHNlbGVjdGlvbiB2aWEgd2Vla051bWJlciAvIHdlZWtEYXkgYnV0dG9uczpcbiAgICogLSBpZiBDbWQgb3IgQ3RybCBhcmUgcHJlc3NlZCwgYWRkIHRoZSBuZXcgZGF0ZSB0byB0aGUgY3VycmVudCBvbmVzO1xuICAgKiAtIGlmIG5vdCxcbiAgICogICAgIC0gaWYgdGhlIG5ldyBkYXRlcyBhcmUgdGhlIHNhbWUgb2YgdGhlIGN1cnJlbnQgb25lcywgaXQgbWVhbnMgdGhhdCB0aGUgc2FtZSBidXR0b24gaGFzIGJlZW4gY2xpY2tlZCB0d2ljZSwgc28gZG8gbm90aGluZztcbiAgICogICAgIC0gaWYgbm90LCB0aGUgc2VsZWN0ZWQgZGF0ZXMgYXJlIHRoZSBuZXcgb25lcy5cbiAgICovXG4gIHByaXZhdGUgX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5czogRGF5PFQ+W10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX21lcmdlRGF0ZXMoZGF5cy5tYXAoKGUpID0+IGUudmFsdWUpKTtcbiAgICB0aGlzLl9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQodGhpcy5fdmFsdWUubWFwKChlKSA9PiB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShlKSEpKTtcbiAgfVxuXG4gIHByaXZhdGUgX21lcmdlRGF0ZXMoZGF0ZXM6IHN0cmluZ1tdLCBzZWxlY3RlZD86IHN0cmluZ1tdKTogVFtdIHtcbiAgICBzZWxlY3RlZCA/Pz0gKHRoaXMuX3ZhbHVlIGFzIFRbXSkubWFwKChzKSA9PiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEocykpO1xuICAgIC8vIEZpbHRlciBkaXNhYmxlZCBkYXlzIGJ5IG1hdGNoaW5nIHRoZSBwcm92aWRlZCBgZGF0ZXNgIHBhcmFtZXRlciBhZ2FpbnN0IHRoZSBlbmFibGVkIGNlbGxzLlxuICAgIC8vIFNpbmNlIHRoZSBidXR0b25zJyB2YWx1ZSBpcyBzZXQgdG8gdGhlIERheSdzIGludGVyZmFjZSB2YWx1ZSAoSVNPIHN0cmluZyksIHRoZXJlJ3Mgbm8gbmVlZCB0byBkZXNlcmlhbGl6ZSBpdC5cbiAgICBjb25zdCBlbmFibGVkRGF5czogc3RyaW5nW10gPSAodGhpcy5fY2VsbHMgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+W10pXG4gICAgICAuZmlsdGVyKChlKSA9PiAhZS5kaXNhYmxlZClcbiAgICAgIC5tYXAoKGUpID0+IHRoaXMuX21hcFZhbHVlVG9JU09EYXRlKGUudmFsdWUhKSk7XG4gICAgY29uc3QgZGF5c1RvQWRkOiBzdHJpbmdbXSA9IGRhdGVzLmZpbHRlcigoaXNvRGF0ZSkgPT4gZW5hYmxlZERheXMuaW5jbHVkZXMoaXNvRGF0ZSkpO1xuXG4gICAgLy8gSW4gY2FzZSBvZiBtdWx0aXBsZSBzZWxlY3Rpb24sIG5ld2x5IGFkZGVkIGRheXMgbXVzdCBiZSBhZGRlZCB0byB0aGVcbiAgICAvLyBleGlzdGluZyBvbmVzLCB3aXRob3V0IGR1cGxpY2F0aW9uLlxuICAgIC8vIElmIHRoZSBkYXlzIHRvIGFkZCBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0ZWQgb25lcywgdGhlIHNldFxuICAgIC8vIG11c3QgYmUgZW1wdGllZC5cbiAgICBpZiAoZGF5c1RvQWRkLmV2ZXJ5KChkYXk6IHN0cmluZykgPT4gc2VsZWN0ZWQhLmluY2x1ZGVzKGRheSkpKSB7XG4gICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkLmZpbHRlcigoZGF5OiBzdHJpbmcpID0+ICFkYXlzVG9BZGQuaW5jbHVkZXMoZGF5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkID0gWy4uLnNlbGVjdGVkLCAuLi5kYXlzVG9BZGRdLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkLm1hcCgocykgPT4gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUocykhKS5zb3J0KHRoaXMuX3NvcnREYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgZGF0ZXNlbGVjdGVkIGV2ZW50IGdpdmVuIHRoZSBkZXRhaWwgKGFzIFQgb3IgVFtdIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGlwbGUgZmxhZykuXG4gICAqIEZJWE1FOiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgYXBwZWFycyBhcyBldmVudCBuYW1lIGluIHRoZSByZWFkbWVcbiAgICogIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0IGxpYnJhcnkuXG4gICAqICBodHRwczovL2dpdGh1Yi5jb20vb3Blbi13Yy9jdXN0b20tZWxlbWVudHMtbWFuaWZlc3QvaXNzdWVzLzE0OVxuICAgKi9cbiAgcHJpdmF0ZSBfZW1pdERhdGVTZWxlY3RlZEV2ZW50KGRhdGVzZWxlY3RlZDogVCB8IFRbXSk6IHZvaWQge1xuICAgIC8qKiBAdHlwZSB7U2JiRGF0ZVNlbGVjdGVkRXZlbnQ8VD59IEV2ZW50IGVtaXR0ZWQgb24gZGF0ZSBzZWxlY3Rpb24uICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTYmJEYXRlU2VsZWN0ZWRFdmVudDxUPihkYXRlc2VsZWN0ZWQpKTtcblxuICAgIC8qKiBAdHlwZSB7SW5wdXRFdmVudH0gRXZlbnQgZW1pdHRlZCBvbiB1c2VyIHNlbGVjdGlvbi4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgLyoqIEB0eXBlIHtFdmVudH0gRXZlbnQgZW1pdHRlZCBvbiB1c2VyIHNlbGVjdGlvbi4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdE1vbnRoQ2hhbmdlKCk6IHZvaWQge1xuICAgIC8vIEZJWE1FOiB0aGUgbmFtZSBvZiB0aGlzIHZhcmlhYmxlIGFwcGVhcnMgYXMgZXZlbnQgbmFtZSBpbiB0aGUgcmVhZG1lXG4gICAgLy8gIGR1ZSB0byBhIGJ1ZyBpbiB0aGUgY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0IGxpYnJhcnkuXG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXdjL2N1c3RvbS1lbGVtZW50cy1tYW5pZmVzdC9pc3N1ZXMvMTQ5XG4gICAgY29uc3QgbW9udGhjaGFuZ2UgPSB0aGlzLl93ZWVrcy5mbGF0KDIpLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSkgYXMgRGF5W107XG4gICAgLyoqXG4gICAgICogQHR5cGUge1NiYk1vbnRoQ2hhbmdlRXZlbnR9XG4gICAgICogRW1pdHMgd2hlbiB0aGUgbW9udGggY2hhbmdlcy5cbiAgICAgKiBUaGUgYHJhbmdlYCBwcm9wZXJ0eSBjb250YWlucyB0aGUgZGF5cyBhcnJheSBvZiB0aGUgY2hvc2VuIG1vbnRoLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgU2JiTW9udGhDaGFuZ2VFdmVudChtb250aGNoYW5nZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0Q2hvc2VuWWVhcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWV3ID09PSAnbW9udGgnKSB7XG4gICAgICBsZXQgc2VsZWN0ZWREYXRlOiBUIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgc2VsZWN0ZWREYXRlID0gKHRoaXMudmFsdWUgYXMgVFtdKS5hdCgtMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3RlZERhdGUgPSB0aGlzLnZhbHVlIGFzIFQ7XG4gICAgICB9XG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihzZWxlY3RlZERhdGUgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Nob3NlblllYXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduQWN0aXZlRGF0ZShkYXRlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNsYW1wRGF0ZShkYXRlLCB0aGlzLm1pbiwgdGhpcy5tYXgpITtcbiAgfVxuXG4gIC8qKiBHb2VzIHRvIHRoZSBtb250aCBpZGVudGlmaWVkIGJ5IHRoZSBzaGlmdC4gKi9cbiAgcHJpdmF0ZSBfZ29Ub0RpZmZlcmVudE1vbnRoKG1vbnRoczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdCh0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCBtb250aHMpKTtcbiAgICB0aGlzLl9lbWl0TW9udGhDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRZZWFyKHllYXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyISArPSB5ZWFycztcbiAgICAvLyBDYW4ndCB1c2UgYF9hc3NpZ25BY3RpdmVEYXRlKC4uLilgIGhlcmUsIGJlY2F1c2UgaXQgd2lsbCBzZXQgaXQgdG8gbWluL21heCB2YWx1ZSBpZiBhcmd1bWVudCBpcyBvdXQgb2YgcmFuZ2VcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgIHRoaXMuX2Nob3NlblllYXIhLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICk7XG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ29Ub0RpZmZlcmVudFllYXJSYW5nZSh5ZWFyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdCh0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhclllYXJzKHRoaXMuX2FjdGl2ZURhdGUsIHllYXJzKSk7XG4gIH1cblxuICBwcml2YXRlIF9wcmV2RGlzYWJsZWQocHJldkRhdGU6IFQpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShwcmV2RGF0ZSwgdGhpcy5taW4pIDwgMDtcbiAgfVxuXG4gIHByaXZhdGUgX25leHREaXNhYmxlZChuZXh0RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tYXgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKG5leHREYXRlLCB0aGlzLm1heCkgPiAwO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJwcmV2aW91cyBtb250aFwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgX3ByZXZpb3VzTW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoXG4gICAgICB0aGlzLl9hY3RpdmVEYXRlLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSAqIC0xLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXZEaXNhYmxlZChwcmV2TW9udGgpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJuZXh0IG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfbmV4dE1vbnRoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgbGV0IG5leHRNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKFxuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSxcbiAgICAgIHRoaXMuYW1vdW50IDwgMSA/IDEgOiB0aGlzLmFtb3VudCxcbiAgICApO1xuICAgIG5leHRNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKG5leHRNb250aCksXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChuZXh0TW9udGgpLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dE1vbnRoKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwicHJldmlvdXMgeWVhclwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgX3ByZXZpb3VzWWVhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSkgLSAxLFxuICAgICAgMTIsXG4gICAgICAzMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJuZXh0IHllYXJcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0WWVhckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSkgKyAodGhpcy5hbW91bnQgPCAxID8gMSA6IHRoaXMuYW1vdW50KSxcbiAgICAgIDEsXG4gICAgICAxLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX25leHREaXNhYmxlZChuZXh0WWVhcik7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIHllYXJcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHllYXIgdmlldy4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5feWVhcnNbMF1bMF0gLSAxLCAxMiwgMzEpO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJuZXh0IHllYXJcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkIGluIHllYXIgdmlldy4gKi9cbiAgcHJpdmF0ZSBfbmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxhc3RZZWFyID0gdGhpcy5feWVhcnMuZmxhdCgyKS5hdCgtMSkhO1xuICAgIGNvbnN0IG5leHRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShsYXN0WWVhciArIDEsIDEsIDEpO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlVGFibGVCbHVyKGV2ZW50VGFyZ2V0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChldmVudFRhcmdldD8ubG9jYWxOYW1lICE9PSAnc2JiLWNhbGVuZGFyLWRheScpIHtcbiAgICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgQXJyYXkuZnJvbSh0aGlzLl9jZWxscy5maWx0ZXIoKGUpID0+IGUudGFiSW5kZXggPT09IDApID8/IFtdKS5mb3JFYWNoKFxuICAgICAgKGRheSkgPT4gKGRheS50YWJJbmRleCA9IC0xKSxcbiAgICApO1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKTtcbiAgICBpZiAoZmlyc3RGb2N1c2FibGUpIHtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlLnRhYkluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiogR2V0IHRoZSBlbGVtZW50IGluIHRoZSBjYWxlbmRhciB0byBhc3NpZ24gZm9jdXMuICovXG4gIHByaXZhdGUgX2dldEZpcnN0Rm9jdXNhYmxlKCk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX2NhbGVuZGFyVmlldyA9PT0gJ2RheScpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3JDdXJyZW50ID1cbiAgICAgICAgdGhpcy5fY2VsbHMuZmluZCgoZSkgPT4gZS5tYXRjaGVzKCc6c3RhdGUoc2VsZWN0ZWQpJykpID8/XG4gICAgICAgIHRoaXMuX2NlbGxzLmZpbmQoKGUpID0+IGUubWF0Y2hlcygnOnN0YXRlKGN1cnJlbnQpJykpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JDdXJyZW50ICYmICFzZWxlY3RlZE9yQ3VycmVudC5kaXNhYmxlZFxuICAgICAgICA/IHNlbGVjdGVkT3JDdXJyZW50XG4gICAgICAgIDogdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGVEYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPckN1cnJlbnQgPVxuICAgICAgICB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I8U2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4+KFxuICAgICAgICAgIGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9OnN0YXRlKHNlbGVjdGVkKWAsXG4gICAgICAgICkgPz9cbiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+PihcbiAgICAgICAgICBgc2JiLWNhbGVuZGFyLSR7dGhpcy5fY2FsZW5kYXJWaWV3fTpzdGF0ZShjdXJyZW50KWAsXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPckN1cnJlbnQgJiYgIXNlbGVjdGVkT3JDdXJyZW50LmRpc2FibGVkXG4gICAgICAgID8gc2VsZWN0ZWRPckN1cnJlbnRcbiAgICAgICAgOiB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3I8U2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4+KFxuICAgICAgICAgICAgYHNiYi1jYWxlbmRhci0ke3RoaXMuX2NhbGVuZGFyVmlld306bm90KFtkaXNhYmxlZF0pYCxcbiAgICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBgZGF5YCB2aWV3IGluIGB2ZXJ0aWNhbGAgb3JpZW50YXRpb24sXG4gICAqIGlmIHRoZSBmaXJzdCBvZiB0aGUgbW9udGggaXMgbm90IGEgTW9uZGF5LCBpdCBpcyBub3QgdGhlIGZpcnN0IHJlbmRlcmVkIGVsZW1lbnQgaW4gdGhlIHRhYmxlLFxuICAgKiBzbyBgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCdzYmItY2FsZW5kYXItZGF5Om5vdChbZGlzYWJsZWRdKScpYCB3aWxsIHJldHVybiBhIHdyb25nIHZhbHVlLlxuICAgKlxuICAgKiBUbyBzb2x2ZSB0aGlzLCB0aGUgZWxlbWVudCB3aXRoIHRoZSBsb3dlc3QgYHZhbHVlYCBpcyB0YWtlbiAoSVNPIFN0cmluZyBhcmUgb3JkZXJlZCkuXG4gICAqL1xuICBwcml2YXRlIF9nZXRGaXJzdEZvY3VzYWJsZURheSgpOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4gfCBudWxsIHtcbiAgICBjb25zdCBjZWxscyA9IHRoaXMuX2NlbGxzIGFzIFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdO1xuICAgIGNvbnN0IGRheXNJblZpZXcgPSBjZWxscy5maWx0ZXIoKGUpID0+ICFlLmRpc2FibGVkKTtcbiAgICBpZiAoIWRheXNJblZpZXcgfHwgZGF5c0luVmlldy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSBkYXlzSW5WaWV3XG4gICAgICAgIC5tYXAoKGUpOiBzdHJpbmcgPT4gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGUudmFsdWUhIGFzIFQpKVxuICAgICAgICAuc29ydCgpWzBdO1xuICAgICAgcmV0dXJuIGNlbGxzLmZpbmQoKGUpID0+IGUubWF0Y2hlcyhgW3Nsb3Q9XCIke2ZpcnN0RWxlbWVudH1cIl1gKSkhID8/IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZGF5PzogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+KTogdm9pZCB7XG4gICAgaWYgKGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZChldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIC8vIEdldHMgdGhlIGN1cnJlbnRseSByZW5kZXJlZCB0YWJsZSdzIGNlbGw7XG4gICAgLy8gdGhleSBjb3VsZCBiZSBkYXlzLCBtb250aHMgb3IgeWVhcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZpZXcuXG4gICAgY29uc3Qgb3JpZ2luID0gZGF5ID8/IChldmVudC50YXJnZXQgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+KTtcbiAgICBjb25zdCBjZWxscyA9IHRoaXMuX2NlbGxzO1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBjZWxscy5pbmRleE9mKG9yaWdpbik7XG4gICAgbGV0IG5leHRFbDogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD47XG4gICAgaWYgKGRheSkge1xuICAgICAgbmV4dEVsID0gdGhpcy5fbmF2aWdhdGVCeUtleWJvYXJkRGF5VmlldyhcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBjZWxscyBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD5bXSxcbiAgICAgICAgdGhpcy5fbWFwRGF0ZVRvRGF5KGRheS52YWx1ZSEgYXMgVCksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0RWwgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoZXZlbnQsIGluZGV4LCBjZWxscyk7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUVsID0gKHRoaXMuX2VuaGFuY2VkVmFyaWFudCA/IGRvY3VtZW50IDogdGhpcy5zaGFkb3dSb290ISlcbiAgICAgIC5hY3RpdmVFbGVtZW50IGFzIFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+O1xuICAgIGlmIChuZXh0RWwgIT09IGFjdGl2ZUVsKSB7XG4gICAgICBuZXh0RWwudGFiSW5kZXggPSAwO1xuICAgICAgbmV4dEVsLmZvY3VzKCk7XG5cbiAgICAgIGlmIChjZWxscy5pbmNsdWRlcyhhY3RpdmVFbCkpIHtcbiAgICAgICAgYWN0aXZlRWwudGFiSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmREYXlWaWV3KFxuICAgIGV2dDogS2V5Ym9hcmRFdmVudCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD5bXSxcbiAgICBkYXk6IERheTxUPixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+IHtcbiAgICBjb25zdCBhcnJvd3NPZmZzZXQgPVxuICAgICAgdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8geyBsZWZ0UmlnaHQ6IDEsIHVwRG93bjogREFZU19QRVJfUk9XIH1cbiAgICAgICAgOiB7IGxlZnRSaWdodDogREFZU19QRVJfUk9XLCB1cERvd246IDEgfTtcblxuICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dzKGNlbGxzLCBpbmRleCwgZGF5LmRhdGVWYWx1ZSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dzKGNlbGxzLCBpbmRleCwgZGF5LmRhdGVWYWx1ZSwgLWFycm93c09mZnNldC5sZWZ0UmlnaHQpO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dzKGNlbGxzLCBpbmRleCwgZGF5LmRhdGVWYWx1ZSwgYXJyb3dzT2Zmc2V0LmxlZnRSaWdodCk7XG4gICAgICBjYXNlICdQYWdlVXAnOiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdE9mV2VlazogbnVtYmVyID0gK2RheS5kYXlWYWx1ZSAlIERBWVNfUEVSX1JPVyB8fCBEQVlTX1BFUl9ST1c7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IGZpcnN0T2ZXZWVrIC0gK2RheS5kYXlWYWx1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVBhZ2VVcERvd24oY2VsbHMsIGluZGV4LCBkYXksIGRlbHRhLCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvZmZzZXRGb3JWZXJ0aWNhbDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3RXZWVrT2Zmc2V0KGRheS5kYXRlVmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHdlZWtOdW1iZXI6IG51bWJlciA9IE1hdGguY2VpbCgoK2RheS5kYXlWYWx1ZSArIG9mZnNldEZvclZlcnRpY2FsKSAvIERBWVNfUEVSX1JPVyk7XG4gICAgICAgICAgY29uc3QgZmlyc3RPZldlZWs6IG51bWJlciA9ICh3ZWVrTnVtYmVyIC0gMSkgKiBEQVlTX1BFUl9ST1cgLSBvZmZzZXRGb3JWZXJ0aWNhbCArIDE7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IGZpcnN0T2ZXZWVrIC0gK2RheS5kYXlWYWx1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVBhZ2VVcERvd24oY2VsbHMsIGluZGV4LCBkYXksIGRlbHRhLCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnUGFnZURvd24nOiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjb25zdCBtb250aEluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gMSA6ICtkYXkubW9udGhWYWx1ZSArIDE7XG4gICAgICAgICAgY29uc3QgeWVhckluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gK2RheS55ZWFyVmFsdWUgKyAxIDogK2RheS55ZWFyVmFsdWU7XG4gICAgICAgICAgY29uc3QgZmlyc3ROZXh0TW9udGg6IFQgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHllYXJJbkJvdW5kcywgbW9udGhJbkJvdW5kcywgMSk7XG4gICAgICAgICAgY29uc3QgbGFzdE9mTW9udGg6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUoXG4gICAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZmlyc3ROZXh0TW9udGgsIC0xKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRlbHRhOiBudW1iZXIgPVxuICAgICAgICAgICAgTWF0aC50cnVuYygobGFzdE9mTW9udGggLSArZGF5LmRheVZhbHVlISkgLyBEQVlTX1BFUl9ST1cpICogREFZU19QRVJfUk9XO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvZmZzZXRGb3JWZXJ0aWNhbDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3RXZWVrT2Zmc2V0KGRheS5kYXRlVmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHdlZWtOdW1iZXI6IG51bWJlciA9IE1hdGguY2VpbCgoK2RheS5kYXlWYWx1ZSArIG9mZnNldEZvclZlcnRpY2FsKSAvIERBWVNfUEVSX1JPVyk7XG4gICAgICAgICAgY29uc3QgbGFzdE9mV2VlazogbnVtYmVyID0gd2Vla051bWJlciAqIERBWVNfUEVSX1JPVyAtIG9mZnNldEZvclZlcnRpY2FsO1xuICAgICAgICAgIGNvbnN0IGRlbHRhOiBudW1iZXIgPSBsYXN0T2ZXZWVrIC0gK2RheS5kYXlWYWx1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVBhZ2VVcERvd24oY2VsbHMsIGluZGV4LCBkYXksIGRlbHRhLCAtYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgJ0hvbWUnOiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5Rmlyc3QoY2VsbHMsIGluZGV4LCBkYXksIDEpO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW5kJzoge1xuICAgICAgICBjb25zdCBtb250aEluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gMSA6ICtkYXkubW9udGhWYWx1ZSArIDE7XG4gICAgICAgIGNvbnN0IHllYXJJbkJvdW5kcyA9ICtkYXkubW9udGhWYWx1ZSArIDEgPiAxMiA/ICtkYXkueWVhclZhbHVlICsgMSA6ICtkYXkueWVhclZhbHVlO1xuICAgICAgICBjb25zdCBmaXJzdE5leHRNb250aDogVCA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhckluQm91bmRzLCBtb250aEluQm91bmRzLCAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlMYXN0KGNlbGxzLCBpbmRleCwgZmlyc3ROZXh0TW9udGgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc0RheU91dE9mVmlldyhkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZSA8IHRoaXMuX2ZpcnN0VmlzaWJsZURheSB8fCBkYXRlID4gdGhpcy5fbGFzdFZpc2libGVEYXk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGF5QXJyb3dzKFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD5bXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGU6IFQsXG4gICAgZGVsdGE6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF0ZSwgZGVsdGEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dzKGNlbGxzLCBpbmRleCwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobmV3RGF0ZVZhbHVlKSEsIGRlbHRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERheVBhZ2VVcERvd24oXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF5OiBEYXk8VD4sXG4gICAgZGVsdGE6IG51bWJlcixcbiAgICBkZWx0YUlmRGlzYWJsZWQ6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF5LmRhdGVWYWx1ZSwgZGVsdGEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEgKyBkZWx0YUlmRGlzYWJsZWQsIGRlbHRhSWZEaXNhYmxlZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlGaXJzdChcbiAgICBjZWxsczogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXk6IERheTxUPixcbiAgICBkYXRlOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPiB7XG4gICAgY29uc3QgbmV3RGF0ZVZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSgrZGF5LnllYXJWYWx1ZSwgK2RheS5tb250aFZhbHVlLCBkYXRlKSxcbiAgICApO1xuICAgIGlmICh0aGlzLl9pc0RheU91dE9mVmlldyhuZXdEYXRlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgICBjb25zdCBuZXh0Q2VsbCA9IGNlbGxzLmZpbmQoKGUpID0+IHRoaXMuX21hcFZhbHVlVG9JU09EYXRlKGUudmFsdWUhKSA9PT0gbmV3RGF0ZVZhbHVlKTtcbiAgICBpZiAoIW5leHRDZWxsIHx8IG5leHRDZWxsLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZERheUZpcnN0KGNlbGxzLCBpbmRleCwgZGF5LCBkYXRlICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlMYXN0KFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD5bXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZpcnN0TmV4dE1vbnRoOiBULFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4ge1xuICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdE5leHRNb250aCwgLTEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5TGFzdChjZWxscywgaW5kZXgsIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKG5ld0RhdGVWYWx1ZSkhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdG8sIGJhc2VkIG9uIGEgbGlzdCBvZiBlbGVtZW50cyAod2hpY2ggY2FuIGJlIHBvdGVudGlhbGx5IGRpc2FibGVkKSxcbiAgICogdGhlIGtleWJvYXJkIGlucHV0IGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAgICogSW4gdGhlIGRheSB2aWV3LCB0aGUgYGRheT86IERheWAgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgY2FsY3VsYXRpb24sXG4gICAqIHdoaWxlIGluIG1vbnRoIGFuZCB5ZWFyIHZpZXcgaXQncyBub3QgZHVlIHRvIHRoZSBmaXhlZCBhbW91bnQgb2YgcmVuZGVyZWQgY2VsbHMuXG4gICAqL1xuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+W10sXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgfTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25Nb250aFllYXJWaWV3c1BhcmFtZXRlcnMgPVxuICAgICAgdGhpcy5fY2FsY3VsYXRlUGFyYW1ldGVyc0ZvcktleWJvYXJkTmF2aWdhdGlvbihpbmRleCwgdGhpcy5fY2FsZW5kYXJWaWV3ID09PSAneWVhcicpO1xuXG4gICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIC0xKTtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAxKTtcbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZEZpcnN0KGNlbGxzLCBvZmZzZXRGb3JXaWRlTW9kZSk7XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZEZpcnN0T25Db2x1bW4oXG4gICAgICAgICAgY2VsbHMsXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGUsXG4gICAgICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgICAgICk7XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdE9uQ29sdW1uKGNlbGxzLCBpbmRleCwgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLCB2ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZExhc3QoY2VsbHMsIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSAtIDEpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGFyYW1ldGVycyBuZWVkZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbiB5ZWFyIGFuZCBtb250aCB2aWV3LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIHN0YXJ0aW5nIGVsZW1lbnQncyBpbmRleCBpbiB0aGUgY2VsbCBhcnJheS5cbiAgICogQHBhcmFtIGlzWWVhclZpZXcgV2hldGhlciB0aGUgZGlzcGxheWVkIGB2aWV3YCBpcyB0aGUgeWVhciBvbmUuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaXNZZWFyVmlldzogYm9vbGVhbixcbiAgKTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25Nb250aFllYXJWaWV3c1BhcmFtZXRlcnMge1xuICAgIGNvbnN0IGVsZW1lbnRzUGVyUGFnZSA9IGlzWWVhclZpZXcgPyBZRUFSU19QRVJfUEFHRSA6IE1PTlRIU19QRVJfUEFHRTtcbiAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9IE1hdGgudHJ1bmMoaW5kZXggLyBlbGVtZW50c1BlclBhZ2UpICogZWxlbWVudHNQZXJQYWdlO1xuICAgIGNvbnN0IGluZGV4SW5WaWV3OiBudW1iZXIgPSBvZmZzZXQgPT09IDAgPyBpbmRleCA6IGluZGV4IC0gZWxlbWVudHNQZXJQYWdlO1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbE9mZnNldDogaXNZZWFyVmlldyA/IFlFQVJTX1BFUl9ST1cgOiBNT05USFNfUEVSX1JPVyxcbiAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBpbmRleEluVmlldyxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlOiBpbmRleCAtIGluZGV4SW5WaWV3LFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBvZmZzZXQgPT09IDAgPyBlbGVtZW50c1BlclBhZ2UgOiBlbGVtZW50c1BlclBhZ2UgKiAyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBwcm92aWRlZCBhcnJheSBzdGFydGluZyBmcm9tIGBpbmRleGAgYnkgYWRkaW5nIGBkZWx0YWAuXG4gICAqIElmIHRoZSBmb3VuZCBlbGVtZW50IGlzIGRpc2FibGVkLCBpdCBjb250aW51ZXMgYWRkaW5nIGBkZWx0YWAgdW50aWwgaXQgZmluZHMgYW4gZW5hYmxlZCBvbmUgaW4gdGhlIGFycmF5IGJvdW5kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmROZXh0KFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkZWx0YTogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPiB7XG4gICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgZGVsdGE7XG4gICAgd2hpbGUgKG5leHRJbmRleCA8IGRheXMubGVuZ3RoICYmIGRheXNbbmV4dEluZGV4XT8uZGlzYWJsZWQpIHtcbiAgICAgIG5leHRJbmRleCArPSBkZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNbbmV4dEluZGV4XSA/PyBkYXlzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3QoXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSxcbiAgICBmaXJzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgICByZXR1cm4gIWRheXNbZmlyc3RPZkN1cnJlbnRNb250aF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBmaXJzdE9mQ3VycmVudE1vbnRoLCAxKTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRMYXN0KFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+W10sXG4gICAgbGFzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgICByZXR1cm4gIWRheXNbbGFzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2xhc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbGFzdE9mQ3VycmVudE1vbnRoLCAtMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgZmlyc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBzYW1lIGNvbHVtbiBvZiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPiB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gKGluZGV4ICUgdmVydGljYWxPZmZzZXQpICsgb2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdE9uQ29sdW1uKFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPiB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBNYXRoLnRydW5jKChvZmZzZXQgLSBpbmRleCAtIDEpIC8gdmVydGljYWxPZmZzZXQpICogdmVydGljYWxPZmZzZXQ7XG4gICAgcmV0dXJuICFkYXlzW25leHRJbmRleF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tuZXh0SW5kZXhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIG5leHRJbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q2FsZW5kYXJWaWV3QW5kRW1pdE1vbnRoQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3KCk7XG4gICAgdGhpcy5fZW1pdE1vbnRoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldENhbGVuZGFyVmlldygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGFpbmluZ0ZvY3VzKSB7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9XG4gICAgICAodGhpcy5tdWx0aXBsZSA/ICh0aGlzLl92YWx1ZSBhcyBUW10pLmF0KC0xKSA6ICh0aGlzLl92YWx1ZSBhcyBUKSkgPz9cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLnRvZGF5KCk7XG4gICAgdGhpcy5fc2V0Q2hvc2VuWWVhcigpO1xuICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLnZpZXc7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgY2FsZW5kYXIgdGFibGUgZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZShcbiAgICB3ZWVrczogRGF5PFQ+W11bXSxcbiAgICB3ZWVrTnVtYmVyczogbnVtYmVyW10sXG4gICAgZmlyc3Q6IGJvb2xlYW4sXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBmaXJzdERheSA9IHdlZWtzWzBdWzBdLmRhdGVWYWx1ZTtcbiAgICBjb25zdCBtb250aExhYmVsID0gYCR7XG4gICAgICB0aGlzLl9tb250aE5hbWVzW3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGZpcnN0RGF5KSAtIDFdXG4gICAgfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZmlyc3REYXkpfWA7XG4gICAgY29uc3Qgd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzOiBEYXk8VD5bXSA9IHdlZWtzLmZsYXQoKTtcbiAgICBjb25zdCB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla0RheXM6IERheTxUPltdID0gd2Vla3MuZmxhdCgpO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtd3JhcHBlciBzYmItY2FsZW5kYXJfX2RheS12aWV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuPiR7bW9udGhMYWJlbH08L3NwYW4+ICR7Zmlyc3QgPyB0aGlzLl9jcmVhdGVEYXlUYWJsZUNvbnRyb2xzKG1vbnRoTGFiZWwpIDogbm90aGluZ31cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgICAgQGZvY3Vzb3V0PSR7KGV2ZW50OiBGb2N1c0V2ZW50KSA9PlxuICAgICAgICAgICAgdGhpcy5faGFuZGxlVGFibGVCbHVyKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpfVxuICAgICAgICA+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICAgICAgICA/IGh0bWxgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbFwiPjwvdGg+YFxuICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgJHt0aGlzLl93ZWVrZGF5cy5tYXAoXG4gICAgICAgICAgICAgICAgKHdlZWtEYXk6IFdlZWtkYXksIGluZGV4OiBudW1iZXIpID0+IGh0bWxgXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICR7dGhpcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7d2Vla0RheX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBTdW5kYXlzIGhhdmUgaW5kZXggNywgd2hpbGUgdGhlaXIgd2Vla0RheVZhbHVlIGlzIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXM6IERheTxUPltdID0gd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtEYXlzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRheTogRGF5PFQ+KSA9PiBkYXkud2Vla0RheVZhbHVlID09PSAoaW5kZXggKyAxKSAlIDcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLXdlZWtkYXk+XG4gICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgOiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3dlZWtEYXkubG9uZ308L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7d2Vla0RheS5uYXJyb3d9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAke3dlZWtzLm1hcCgod2VlazogRGF5PFQ+W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dPZmZzZXQ6IG51bWJlciA9IERBWVNfUEVSX1JPVyAtIHdlZWsubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgZmlyc3RSb3dPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgJHt0aGlzLndlZWtOdW1iZXJzXG4gICAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrTnVtYmVyc1swXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrTnVtYmVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUgPT09IHdlZWtOdW1iZXJzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKGRheXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JHtgJHtpMThuQ2FsZW5kYXJXZWVrTnVtYmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3dlZWtOdW1iZXJzWzBdfWB9PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7d2Vla051bWJlcnNbMF19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAgICAgJHtbLi4uQXJyYXkoZmlyc3RSb3dPZmZzZXQpLmtleXMoKV0ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICgpID0+IGh0bWxgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+PC90ZD5gLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWspfVxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy53ZWVrTnVtYmVyc1xuICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7d2Vla051bWJlcnNbcm93SW5kZXhdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXM6IERheTxUPltdID0gd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRheTogRGF5PFQ+KSA9PiBkYXkud2Vla1ZhbHVlID09PSB3ZWVrTnVtYmVyc1tyb3dJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLXdlZWtudW1iZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcnNbcm93SW5kZXhdfWB9PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyc1tyb3dJbmRleF19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWspfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBpbiBvcmllbnRhdGlvbj0ndmVydGljYWwnLiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZVZlcnRpY2FsKFxuICAgIHdlZWtzOiBEYXk8VD5bXVtdLFxuICAgIHdlZWtOdW1iZXJzOiBudW1iZXJbXSxcbiAgICBmaXJzdDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gd2Vla3NbMF1bMF0uZGF0ZVZhbHVlO1xuICAgIGNvbnN0IG1vbnRoTGFiZWwgPSBgJHtcbiAgICAgIHRoaXMuX21vbnRoTmFtZXNbdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZmlyc3REYXkpIC0gMV1cbiAgICB9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmaXJzdERheSl9YDtcbiAgICBjb25zdCBhY3RpdmVEYXRlID0gd2Vla3NbMF1bMF0uZGF0ZVZhbHVlO1xuICAgIGNvbnN0IHdlZWtPZmZzZXQgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoYWN0aXZlRGF0ZSA/PyB0aGlzLl9hY3RpdmVEYXRlKTtcbiAgICBjb25zdCB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnM6IERheTxUPltdID0gd2Vla3MuZmxhdCgpO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtd3JhcHBlciBzYmItY2FsZW5kYXJfX2RheS12aWV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuPiR7bW9udGhMYWJlbH08L3NwYW4+ICR7Zmlyc3QgPyB0aGlzLl9jcmVhdGVEYXlUYWJsZUNvbnRyb2xzKG1vbnRoTGFiZWwpIDogbm90aGluZ31cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgICAgQGZvY3Vzb3V0PSR7KGV2ZW50OiBGb2N1c0V2ZW50KSA9PlxuICAgICAgICAgICAgdGhpcy5faGFuZGxlVGFibGVCbHVyKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpfVxuICAgICAgICA+XG4gICAgICAgICAgJHt0aGlzLndlZWtOdW1iZXJzXG4gICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAke3dlZWtOdW1iZXJzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAod2Vla051bWJlcjogbnVtYmVyKSA9PiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItd2Vla251bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtOdW1iZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUgPT09IHdlZWtOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLXdlZWtudW1iZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcn1gfTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7d2Vla051bWJlcn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICBgXG4gICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgJHt3ZWVrcy5tYXAoKHdlZWs6IERheTxUPltdLCByb3dJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHdlZWtkYXkgPSB0aGlzLl93ZWVrZGF5c1tyb3dJbmRleF07XG4gICAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwtdmVydGljYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMod2Vlayl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3dlZWtkYXkubmFycm93fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NiYi1jYWxlbmRhci13ZWVrZGF5PlxuICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHt3ZWVrZGF5Lmxvbmd9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtkYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgJHtyb3dJbmRleCA8IHdlZWtPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiPjwvdGQ+YFxuICAgICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWspfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlQ29udHJvbHMobW9udGhMYWJlbDogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpeGVkTW9udGhcbiAgICAgID8gW11cbiAgICAgIDogW1xuICAgICAgICAgIHRoaXMuX2dldEFycm93KFxuICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKC0xKSxcbiAgICAgICAgICAgIGkxOG5QcmV2aW91c01vbnRoW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNNb250aERpc2FibGVkKCksXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50TW9udGgoMSksXG4gICAgICAgICAgICBpMThuTmV4dE1vbnRoW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgICAgdGhpcy5fbmV4dE1vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuX2dldEFycm93KFxuICAgICAgICAgICAgJ3VwJyxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyVmlldyA9ICd5ZWFyJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBgJHtpMThuWWVhck1vbnRoU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke21vbnRoTGFiZWx9YCxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGNlbGxzIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5Q2VsbHMod2VlazogRGF5PFQ+W10pOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gd2Vlay5tYXAoKGRheTogRGF5PFQ+KSA9PiB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhIHNiYi1jYWxlbmRhcl9fZGF5LWNlbGxcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPSR7ZGF5LnZhbHVlfT5cbiAgICAgICAgICAgIDxzYmItY2FsZW5kYXItZGF5IHNsb3Q9JHtkYXkudmFsdWV9Pjwvc2JiLWNhbGVuZGFyLWRheT5cbiAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgIDwvdGQ+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyTW9udGhWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLXdyYXBwZXIgc2JiLWNhbGVuZGFyX19tb250aC12aWV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuPiR7dGhpcy5fY2hvc2VuWWVhcn08L3NwYW4+XG4gICAgICAgICAgJHt0aGlzLl9maXhlZE1vbnRoXG4gICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyKC0xKSxcbiAgICAgICAgICAgICAgICAgIGkxOG5QcmV2aW91c1llYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJEaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXIoMSksXG4gICAgICAgICAgICAgICAgICBpMThuTmV4dFllYXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0WWVhckRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAgICAgICAgICdkb3duJyxcbiAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3QW5kRW1pdE1vbnRoQ2hhbmdlKCksXG4gICAgICAgICAgICAgICAgICBpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF19XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCIgcm9sZT1cInN0YXR1c1wiPiR7dGhpcy5fY2hvc2VuWWVhcn08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCI+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgJHt0aGlzLl9tb250aHMubWFwKFxuICAgICAgICAgICAgICAocm93OiBNb250aENlbGxbXSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAke3Jvdy5tYXAoKG1vbnRoOiBNb250aENlbGwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLW1vbnRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fY2hvc2VuWWVhcn0tJHttb250aC52YWx1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTW9udGhTZWxlY3Rpb24obW9udGgubW9udGhWYWx1ZSwgdGhpcy5fY2hvc2VuWWVhciEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAa2V5ZG93bj0keyhldnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZ0KX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLW1vbnRoPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBTZWxlY3QgdGhlIG1vbnRoIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfb25Nb250aFNlbGVjdGlvbihtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IG1vbnRoO1xuICAgIHRoaXMuX2NhbGVuZGFyVmlldyA9ICdkYXknO1xuICAgIHRoaXMuX2luaXQoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB5ZWFyLFxuICAgICAgICB0aGlzLl9jaG9zZW5Nb250aCxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9lbWl0TW9udGhDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgdGhlIHZpZXcgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyWWVhclZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGZpcnN0WWVhcjogbnVtYmVyID0gdGhpcy5feWVhcnMuZmxhdCgyKVswXTtcbiAgICBjb25zdCBsYXN0WWVhckFycmF5OiBudW1iZXJbXSA9IHRoaXMuX3llYXJzLmF0KC0xKSEuZmxhdCgpO1xuICAgIGNvbnN0IGxhc3RZZWFyOiBudW1iZXIgPSBsYXN0WWVhckFycmF5W2xhc3RZZWFyQXJyYXkubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgeWVhckxhYmVsID0gYCR7Zmlyc3RZZWFyfSAtICR7bGFzdFllYXJ9YDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLXdyYXBwZXIgc2JiLWNhbGVuZGFyX195ZWFyLXZpZXdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4+JHt5ZWFyTGFiZWx9PC9zcGFuPlxuICAgICAgICAgICR7dGhpcy5fZml4ZWRNb250aFxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKC1ZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgICAgICAgICBpMThuUHJldmlvdXNZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgICAgICAgICBpMThuTmV4dFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0WWVhclJhbmdlRGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dldEFycm93KFxuICAgICAgICAgICAgICAgICAgJ2Rvd24nLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fcmVzZXRDYWxlbmRhclZpZXdBbmRFbWl0TW9udGhDaGFuZ2UoKSxcbiAgICAgICAgICAgICAgICAgIGkxOG5DYWxlbmRhckRhdGVTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIiByb2xlPVwic3RhdHVzXCI+JHt5ZWFyTGFiZWx9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICR7dGhpcy5feWVhcnMubWFwKFxuICAgICAgICAgICAgICAocm93OiBudW1iZXJbXSkgPT5cbiAgICAgICAgICAgICAgICBodG1sYCA8dHI+XG4gICAgICAgICAgICAgICAgICAke3Jvdy5tYXAoKHllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXIteWVhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHtTdHJpbmcoeWVhcil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9vblllYXJTZWxlY3Rpb24oeWVhcil9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NiYi1jYWxlbmRhci15ZWFyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L3RyPmAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIFNlbGVjdCB0aGUgeWVhciBhbmQgY2hhbmdlIHRoZSB2aWV3IHRvIG1vbnRoIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfb25ZZWFyU2VsZWN0aW9uKHllYXI6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Nob3NlblllYXIgPSB5ZWFyO1xuICAgIHRoaXMuX2NhbGVuZGFyVmlldyA9ICdtb250aCc7XG4gICAgdGhpcy5fYXNzaWduQWN0aXZlRGF0ZShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHRoaXMuX2Nob3NlblllYXIsXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGJ1dHRvbiBhcnJvdyBmb3IgYWxsIHRoZSB2aWV3cy4gKi9cbiAgcHJpdmF0ZSBfZ2V0QXJyb3coXG4gICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIHwgJ2Rvd24nIHwgJ3VwJyxcbiAgICBjbGljazogKCkgPT4gdm9pZCxcbiAgICBhcmlhTGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbFwiXG4gICAgICBzaXplPVwic1wiXG4gICAgICBpY29uLW5hbWU9XCJjaGV2cm9uLXNtYWxsLSR7ZGlyZWN0aW9ufS1zbWFsbFwiXG4gICAgICBhcmlhLWxhYmVsPSR7YXJpYUxhYmVsfVxuICAgICAgQGNsaWNrPSR7Y2xpY2t9XG4gICAgICA/ZGlzYWJsZWQ9JHtkaXNhYmxlZH1cbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB8IHR5cGVvZiBub3RoaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NhbGVuZGFyVmlldykge1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJZZWFyVmlldygpO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTW9udGhWaWV3KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbm90aGluZztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBpZiAoaXNTZXJ2ZXIgfHwgdGhpcy5oeWRyYXRpb25SZXF1aXJlZCkge1xuICAgICAgLy8gVE9ETzogV2UgZGlzYWJsZSBTU1IgZm9yIGNhbGVuZGFyIGZvciBub3cuIEZpZ3VyZSBvdXQsIGlmIHRoZXJlIGlzIGEgd2F5XG4gICAgICAvLyB0byBlbmFibGUgaXQsIHdoaWxlIGNvbnNpZGVyaW5nIGkxOG4gYW5kIGRhdGUgaW5mb3JtYXRpb24uXG4gICAgICByZXR1cm4gaHRtbGAke25vdGhpbmd9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX193cmFwcGVyXCI+XG4gICAgICAke3RoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHRoaXMuX3dlZWtzLm1hcCgod2Vla3MsIGkpID0+IHRoaXMuX2NyZWF0ZURheVRhYmxlKHdlZWtzLCB0aGlzLl93ZWVrTnVtYmVyc1tpXSwgaSA9PT0gMCkpXG4gICAgICAgIDogdGhpcy5fd2Vla3MubWFwKCh3ZWVrcywgaSkgPT5cbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURheVRhYmxlVmVydGljYWwod2Vla3MsIHRoaXMuX3dlZWtOdW1iZXJzW2ldLCBpID09PSAwKSxcbiAgICAgICAgICApfVxuICAgICAgJHt0aGlzLl9nZXRWaWV3KCl9XG4gICAgPC9kaXY+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWNhbGVuZGFyJzogU2JiQ2FsZW5kYXJFbGVtZW50O1xuICB9XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBtb250aGNoYW5nZTogU2JiTW9udGhDaGFuZ2VFdmVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUNxREEsSUFBTSxlQUF1QjtBQUM3QixJQUFNLGlCQUF5QjtBQUMvQixJQUFNLGdCQUF3QjtBQUM5QixJQUFNLGtCQUEwQjtBQUNoQyxJQUFNLGlCQUF5QjtBQUUvQixJQUFhLHNCQUFiLGNBQXlDLE1BQUs7Q0FHNUMsSUFBVyxRQUFLO0VBQ2QsT0FBTyxLQUFLO0NBQ2Q7Q0FFQSxZQUFtQixPQUFxQjtFQUN0QyxNQUFNLGVBQWU7R0FBRSxTQUFTO0dBQU0sVUFBVTtFQUFJLENBQUU7RUFDdEQsS0FBSyxTQUFTLE9BQU8sT0FBTyxTQUFTLENBQUEsQ0FBRTtDQUN6Qzs7QUFHRixJQUFhLHVCQUFiLGNBQTZDLE1BQUs7Q0FHaEQsSUFBVyxlQUFZO0VBQ3JCLE9BQU8sS0FBSztDQUNkO0NBRUEsWUFBbUIsT0FBYztFQUMvQixNQUFNLGdCQUFnQjtHQUFFLFNBQVM7R0FBTSxVQUFVO0VBQUksQ0FBRTtFQUN2RCxLQUFLLGdCQUFnQixPQUFPLE9BQU8sS0FBSztDQUMxQzs7Ozs7OztJQWdEVyw0QkFBa0I7bUJBQW1CLHVCQUF1QixVQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBQXRFLDJCQUFxQyxZQUFrQzs7O3lCQXdCakYsVUFBUyxHQUNULFNBQVMsRUFBRSxNQUFNLE9BQU0sQ0FBRSxD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
1399
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LUJtQjhIb1p0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBXZSBhZGQgd2lkdGggZGVmaW5pdGlvbiB0byBob3N0LCB0byBtYWtlIG92ZXJ3cml0aW5nIGVhc3kgZm9yIGNvbnN1bWVycy5cbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG5cbiAgLy8gU2V0IHRoZSBsaW5lLWhlaWdodCBmb3IgYWRqYWNlbnQgZWxlbWVudHMgaW4gb3JkZXIgdG8gcHJldmVudCBmcm9tIGluZmx1ZW5jZSBvZiBhIGNvbnN1bWVyLXNldCBsaW5lLWhlaWdodC5cbiAgbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpO1xufVxuXG46aG9zdCg6c3RhdGUoZW5oYW5jZWQpKSB7XG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fd3JhcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbjppcyguc2JiLWNhbGVuZGFyX195ZWFyLXZpZXcsIC5zYmItY2FsZW5kYXJfX21vbnRoLXZpZXcpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xufVxuXG4uc2JiLWNhbGVuZGFyX19kYXktdmlldyB7XG4gIDpob3N0KDpub3QoOnN0YXRlKHZpZXctZGF5KSkpICYge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxufVxuXG4uc2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLWdhcCk7XG4gIGhlaWdodDogdmFyKC0tc2JiLXNpemUtZWxlbWVudC14cyk7XG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTR4KTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyIHNwYW4ge1xuICBmbGV4OiAxIDEgYXV0bztcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbiAgY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLXZpZXctY2hhbmdlLWNvbG9yKTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fY29udHJvbCB7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIGZsZXg6IDAgMDtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUgOmlzKHRoZWFkLCB0Ym9keSkge1xuICAvLyBEZXBlbmRpbmcgd2hlcmUgaW4gdGhlIERPTSBpdCdzIHVzZWQsIGl0J3MgcG9zc2libGUgdGhhdCBicm93c2VyIGRlZmF1bHRzIHNldCB0ZXh0LWFsaWduIHRvIGxlZnQuXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwsXG4uc2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbCB7XG4gIHdpZHRoOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKTtcbiAgbWluLXdpZHRoOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKTtcbiAgY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1oZWFkZXItY29sb3IpO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcblxuICA6aG9zdCg6bm90KFttdWx0aXBsZV0pKSAmIHtcbiAgICBoZWlnaHQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpO1xuICB9XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsIHtcbiAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXBhZGRpbmctYmxvY2stZW5kKTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2JiLWNhbGVuZGFyX19kYXktY2VsbCB7XG4gIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1wYWRkaW5nLWJsb2NrLWVuZCk7XG59XG5cbnNiYi1jYWxlbmRhci1kYXkge1xuICA6aG9zdCg6bm90KDpzdGF0ZShlbmhhbmNlZCkpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgLS1zYmItY2FsZW5kYXItZGF5LWhlaWdodDogdmFyKC0tc2JiLWNhbGVuZGFyLWRheS1zaXplKTtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktZXh0cmEtZGlzcGxheTogbm9uZTtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktdmFsdWUtaGVpZ2h0OiB1bnNldDtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJTZWNvbmRhcnlCdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vLi4vYnV0dG9uLnB1cmUudHMnO1xuaW1wb3J0IHtcbiAgYnV0dG9uUmVzZXRTdHlsZXMsXG4gIHR5cGUgRGF0ZUFkYXB0ZXIsXG4gIGRlZmF1bHREYXRlQWRhcHRlcixcbiAgZm9yY2VUeXBlLFxuICB0eXBlIEZvcm1SZXN0b3JlUmVhc29uLFxuICB0eXBlIEZvcm1SZXN0b3JlU3RhdGUsXG4gIGhhbmRsZURpc3RpbmN0Q2hhbmdlLFxuICBpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uLFxuICBpMThuQ2FsZW5kYXJXZWVrTnVtYmVyLFxuICBpMThuTmV4dE1vbnRoLFxuICBpMThuTmV4dFllYXIsXG4gIGkxOG5OZXh0WWVhclJhbmdlLFxuICBpMThuUHJldmlvdXNNb250aCxcbiAgaTE4blByZXZpb3VzWWVhcixcbiAgaTE4blByZXZpb3VzWWVhclJhbmdlLFxuICBpMThuWWVhck1vbnRoU2VsZWN0aW9uLFxuICBpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQsXG4gIE1PTkRBWSxcbiAgcGxhaW5EYXRlLFxuICByZWFkQ29uZmlnLFxuICBTYmJFbGVtZW50LFxuICB0eXBlIFNiYkVsZW1lbnRUeXBlLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG4gIHNjcmVlblJlYWRlck9ubHlTdHlsZXMsXG4gIFRIVVJTREFZLFxuICBUVUVTREFZLFxuICBXRURORVNEQVksXG59IGZyb20gJy4uLy4uL2NvcmUudHMnO1xuaW1wb3J0IHsgU2JiSWNvbkVsZW1lbnQgfSBmcm9tICcuLi8uLi9pY29uLnB1cmUudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJEYXlFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItZGF5L2NhbGVuZGFyLWRheS5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJNb250aEVsZW1lbnQgfSBmcm9tICcuLi9jYWxlbmRhci1tb250aC9jYWxlbmRhci1tb250aC5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJXZWVrZGF5RWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLXdlZWtkYXkvY2FsZW5kYXItd2Vla2RheS5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJXZWVrbnVtYmVyRWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLXdlZWtudW1iZXIvY2FsZW5kYXItd2Vla251bWJlci5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiQ2FsZW5kYXJZZWFyRWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLXllYXIvY2FsZW5kYXIteWVhci5jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB9IGZyb20gJy4uL2NvbW1vbi9jYWxlbmRhci1jZWxsLWJhc2UtZWxlbWVudC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NhbGVuZGFyLnNjc3M/aW5saW5lJztcblxuY29uc3QgREFZU19QRVJfUk9XOiBudW1iZXIgPSA3O1xuY29uc3QgTU9OVEhTX1BFUl9ST1c6IG51bWJlciA9IDQ7XG5jb25zdCBZRUFSU19QRVJfUk9XOiBudW1iZXIgPSA0O1xuY29uc3QgTU9OVEhTX1BFUl9QQUdFOiBudW1iZXIgPSAxMjtcbmNvbnN0IFlFQVJTX1BFUl9QQUdFOiBudW1iZXIgPSAyNDtcblxuZXhwb3J0IGNsYXNzIFNiYk1vbnRoQ2hhbmdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlOiByZWFkb25seSBEYXlbXTtcblxuICBwdWJsaWMgZ2V0IHJhbmdlKCk6IHJlYWRvbmx5IERheVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3IocmFuZ2U6IHJlYWRvbmx5IERheVtdKSB7XG4gICAgc3VwZXIoJ21vbnRoY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KTtcbiAgICB0aGlzLl9yYW5nZSA9IE9iamVjdC5mcmVlemUocmFuZ2UgfHwgW10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTYmJEYXRlU2VsZWN0ZWRFdmVudDxUPiBleHRlbmRzIEV2ZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0ZVNlbGVjdGVkOiBSZWFkb25seTxUIHwgVFtdPjtcblxuICBwdWJsaWMgZ2V0IGRhdGVTZWxlY3RlZCgpOiBSZWFkb25seTxUIHwgVFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVTZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRlczogVCB8IFRbXSkge1xuICAgIHN1cGVyKCdkYXRlc2VsZWN0ZWQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pO1xuICAgIHRoaXMuX2RhdGVTZWxlY3RlZCA9IE9iamVjdC5mcmVlemUoZGF0ZXMpO1xuICB9XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBuZWVkZWQgaW4geWVhciBhbmQgbW9udGggdmlld3MgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgbmV4dCBlbGVtZW50IGluIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gKlxuICogVGhlIGNlbGwncyBpbmRleCBhbmQgdGhlIGVsZW1lbnQncyBpbmRleCBpbiBpdHMgbW9udGggLyB5ZWFyIGJhdGNoIG11c3QgYmUgZGlzdGluZ3Vpc2hlZDpcbiAqIHRoZSBmaXJzdCBpcyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5IG9mIGFsbCB0aGUgcmVuZGVyZWQgY2VsbHMsIHdoaWxlIHRoZSBzZWNvbmQgaXMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyB0YWJsZS5cbiAqIEluIG5vbi13aWRlIG1vZGUsIHRoZSB3dG8gYXJlIHRoZSBzYW1lLCB3aGlsZSBpbiB3aWRlIG1vZGUgdGhlIGNlbGwncyBpbmRleCBjYW4gZ28gZnJvbSAwIHRvIDQ3IGZvciB5ZWFycyBhbmQgZnJvbSAwIHRvIDIzIGZvciBtb250aHMsXG4gKiB3aGlsZSB0aGUgZWxlbWVudCBpbmRleCBnb2VzIGZyb20gMCB0bywgcmVzcGVjdGl2ZWx5LCAyMyBhbmQgMTEuXG4gKi9cbmludGVyZmFjZSBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvbk1vbnRoWWVhclZpZXdzUGFyYW1ldGVycyB7XG4gIC8qKiBUaGUgZWxlbWVudCBpbmRleCB3aXRoaW4gaXRzIHllYXIgb3IgbW9udGggcmFuZ2UuICovXG4gIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBJbiB3aWRlIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2Vjb25kIHBhbmVsLCBvciwgYWx0ZXJuYXRpdmVseSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZmlyc3QgcGFuZWwuICovXG4gIG9mZnNldEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIGxhc3QgZWxlbWVudCB3aXRoaW4gdGhlIGVsZW1lbnQncyBtb250aCAob3IgeWVhciByYW5nZSkuICovXG4gIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBjZWxscyBkaXNwbGF5ZWQgaW4gYSBzaW5nbGUgcm93LCBkZXBlbmRpbmcgb24gdGhlIHJlbmRlcmVkIHZpZXcuICovXG4gIHZlcnRpY2FsT2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF5PFQgPSBEYXRlPiB7XG4gIC8qKiBEYXRlIGFzIElTTyBzdHJpbmcuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIGRheVZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IHN0cmluZztcbiAgeWVhclZhbHVlOiBzdHJpbmc7XG4gIGRhdGVWYWx1ZTogVDtcbiAgd2Vla1ZhbHVlOiBudW1iZXI7XG4gIHdlZWtEYXlWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoQ2VsbCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGNhbGVuZGFyIHdoaWNoIGFsbG93cyBjaG9vc2luZyBhIGRhdGUuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY3VzdG9taXplZCBgc2JiLWNhbGVuZGFyLWRheWAgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJDYWxlbmRhckVsZW1lbnQ8VCA9IERhdGU+IGV4dGVuZHMgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItY2FsZW5kYXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbXG4gICAgU2JiQ2FsZW5kYXJEYXlFbGVtZW50LFxuICAgIFNiYkNhbGVuZGFyTW9udGhFbGVtZW50LFxuICAgIFNiYkNhbGVuZGFyV2Vla2RheUVsZW1lbnQsXG4gICAgU2JiQ2FsZW5kYXJXZWVrbnVtYmVyRWxlbWVudCxcbiAgICBTYmJDYWxlbmRhclllYXJFbGVtZW50LFxuICAgIFNiYkljb25FbGVtZW50LFxuICAgIFNiYlNlY29uZGFyeUJ1dHRvbkVsZW1lbnQsXG4gIF07XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtcbiAgICBidXR0b25SZXNldFN0eWxlcyxcbiAgICBzY3JlZW5SZWFkZXJPbmx5U3R5bGVzLFxuICAgIHVuc2FmZUNTUyhzdHlsZSksXG4gIF07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRhdGVzZWxlY3RlZDogJ2RhdGVzZWxlY3RlZCcsXG4gICAgbW9udGhjaGFuZ2U6ICdtb250aGNoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgbW9udGhzIHRvIGRpc3BsYXkgaW4gdGhpcyBjYWxlbmRhci5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFtb3VudDogbnVtYmVyID0gMTtcblxuICAvKiogVGhlIGluaXRpYWwgdmlldyBvZiB0aGUgY2FsZW5kYXIgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBvcGVuaW5nLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgdmlldzogJ2RheScgfCAnbW9udGgnIHwgJ3llYXInID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIEFjY2VwdHMgYSBkYXRlIG9iamVjdCBvciBudWxsLlxuICAgKiBBY2NlcHRzIGFuIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiAyMDI0LTEyLTI0KSBhcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBAcGxhaW5EYXRlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIG1pbjogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBBY2NlcHRzIGEgZGF0ZSBvYmplY3Qgb3IgbnVsbC5cbiAgICogQWNjZXB0cyBhbiBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcgKGUuZy4gMjAyNC0xMi0yNCkgYXMgYXR0cmlidXRlLlxuICAgKi9cbiAgQHBsYWluRGF0ZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBtYXg6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgYWxsb3dzIGZvciBtdWx0aXBsZSBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBoYW5kbGVEaXN0aW5jdENoYW5nZSgoZTogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHNlbGVjdGVkIGRhdGU6IGFjY2VwdHMgYSBkYXRlIG9iamVjdCwgb3IsIGlmIGBtdWx0aXBsZWAsIGFuIGFycmF5IG9mIGRhdGVzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogVCB8IFRbXSB8IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVcbiAgICAgICAgLm1hcCgoZGF0ZUxpa2U6IFQpID0+XG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGVMaWtlKSksXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoZGF0ZTogVCB8IG51bGwpOiBkYXRlIGlzIFQgPT4gZGF0ZSAhPT0gbnVsbClcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGF0ZTogVCkgPT5cbiAgICAgICAgICAgICF0aGlzLl9pc0RheUluUmFuZ2UodGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGRhdGUpKSB8fCB0aGlzLl9kYXRlRmlsdGVyKGRhdGUpLFxuICAgICAgICApXG4gICAgICAgIC5zb3J0KHRoaXMuX3NvcnREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSksXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICAhIXNlbGVjdGVkRGF0ZSAmJlxuICAgICAgICAoIXRoaXMuX2lzRGF5SW5SYW5nZSh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoc2VsZWN0ZWREYXRlKSkgfHxcbiAgICAgICAgICB0aGlzLl9kYXRlRmlsdGVyKHNlbGVjdGVkRGF0ZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBzZWxlY3RlZERhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVCB8IFRbXSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF92YWx1ZTogVCB8IFRbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBBIGZ1bmN0aW9uIHVzZWQgdG8gZmlsdGVyIG91dCBkYXRlcy4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZGF0ZS1maWx0ZXInIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBkYXRlRmlsdGVyOiAoKGRhdGU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHdpdGggdGhlIGZvcm1hdCBgWVlZWS1NTWAgdG8gbGltaXQgdGhlIGNhbGVuZGFyIHRvIGEgc3BlY2lmaWMgbW9udGgsXG4gICAqIGFuZCBwcmV2ZW50IG5hdmlnYXRpb24gdG8gb3RoZXIgbW9udGhzLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZpeGVkLW1vbnRoJyB9KVxuICBwdWJsaWMgc2V0IGZpeGVkTW9udGgodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG1hdGNoID0gdmFsdWUgPyB2YWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7Mn0pJC8pIDogbnVsbDtcbiAgICB0aGlzLl9maXhlZE1vbnRoID0gbWF0Y2hcbiAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShOdW1iZXIobWF0Y2hbMV0pLCBOdW1iZXIobWF0Y2hbMl0pLCAxKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgZml4ZWRNb250aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maXhlZE1vbnRoXG4gICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLl9maXhlZE1vbnRoKS5zcGxpdCgnLScpLnNsaWNlKDAsIDIpLmpvaW4oJy0nKVxuICAgICAgOiAnJztcbiAgfVxuICBwcml2YXRlIF9maXhlZE1vbnRoOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBvcmllbnRhdGlvbiBvZiBkYXlzIGluIHRoZSBjYWxlbmRhci4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPVxuICAgICdob3Jpem9udGFsJztcblxuICAvKiogV2hldGhlciBpdCBoYXMgdG8gZGlzcGxheSB0aGUgd2VlayBudW1iZXJzIGluIGFkZGl0aW9uIHRvIHdlZWsgZGF5cy4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3dlZWstbnVtYmVycycsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIHdlZWtOdW1iZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPFQ+ID0gcmVhZENvbmZpZygpLmRhdGV0aW1lPy5kYXRlQWRhcHRlciA/PyBkZWZhdWx0RGF0ZUFkYXB0ZXI7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRhdGUuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2FjdGl2ZURhdGU6IFQgPSB0aGlzLl9kYXRlQWRhcHRlci50b2RheSgpO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2NhbGVuZGFyVmlldzogU2JiQ2FsZW5kYXJFbGVtZW50Wyd2aWV3J10gPSAnZGF5JztcblxuICAvKiogQSBsaXN0IG9mIGRheXMsIGluIHR3byBmb3JtYXRzIChsb25nIGFuZCBzaW5nbGUgY2hhcikuICovXG4gIHByaXZhdGUgX3dlZWtkYXlzITogV2Vla2RheVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgZGF0ZXMgb2YgdGhlIG1vbnRoLiAqL1xuICBwcml2YXRlIF93ZWVrczogRGF5PFQ+W11bXVtdID0gW107XG5cbiAgLyoqIFRoZSBmaXJzdCB2aXNpYmxlIGRheSBpbiB0aGUgY2FsZW5kYXIuICovXG4gIHByaXZhdGUgX2ZpcnN0VmlzaWJsZURheTogc3RyaW5nID0gJyc7XG5cbiAgLyoqIFRoZSBsYXN0IHZpc2libGUgZGF5IGluIHRoZSBjYWxlbmRhci4gKi9cbiAgcHJpdmF0ZSBfbGFzdFZpc2libGVEYXk6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyBtb250aHMuICovXG4gIHByaXZhdGUgX21vbnRocyE6IE1vbnRoQ2VsbFtdW107XG5cbiAgLyoqIEdyaWQgb2YgY2FsZW5kYXIgY2VsbHMgcmVwcmVzZW50aW5nIHllYXJzLiAqL1xuICBwcml2YXRlIF95ZWFycyE6IG51bWJlcltdW107XG5cbiAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBtb250aCBuYW1lcyBpbiB0aGUgY3VycmVudCBsYW5ndWFnZS4gKi9cbiAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG5cbiAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHdlZWtzJyBudW1iZXJzIGZvciB0aGUgY3VycmVudCBtb250aC4gKi9cbiAgcHJpdmF0ZSBfd2Vla051bWJlcnMhOiBudW1iZXJbXVtdO1xuXG4gIHByaXZhdGUgX2VuaGFuY2VkVmFyaWFudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGxpc3Qgb2YgY2FsZW5kYXIncyBjZWxscyBjb3JyZXNwb25kaW5nIHRvIGRheXMsIG1vbnRocyBvciB5ZWFycyBkZXBlbmRpbmcgb24gdGhlIHZpZXcuICovXG4gIHByaXZhdGUgZ2V0IF9jZWxscygpOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbTxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPj4oXG4gICAgICAodGhpcy5fY2FsZW5kYXJWaWV3ID09PSAnZGF5J1xuICAgICAgICA/IChBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpKS5mbGF0TWFwKChlOiBIVE1MU2xvdEVsZW1lbnQpID0+XG4gICAgICAgICAgICBlLmFzc2lnbmVkRWxlbWVudHMoeyBmbGF0dGVuOiB0cnVlIH0pLFxuICAgICAgICAgICkgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+W10pXG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsPFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+PihcbiAgICAgICAgICAgIGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9YCxcbiAgICAgICAgICApKSA/PyBbXSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFRoZSBjaG9zZW4geWVhciBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuWWVhcj86IG51bWJlcjtcblxuICAvKiogVGhlIGNob3NlbiBtb250aCBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuTW9udGg/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZvY3VzIHNob3VsZCBiZSByZXNldCBvbiBmb2N1c0NlbGwuICovXG4gIHByaXZhdGUgX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcblxuICAvKiogV2hldGhlciBhbiBlbGVtZW50IGluc2lkZSB0aGUgY2FsZW5kYXIgaXMgY3VycmVudGx5IGZvY3VzZWQuICovXG4gIHByaXZhdGUgX2NvbnRhaW5pbmdGb2N1cyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xhc3RTZWxlY3Rpb246IFQgfCBudWxsID0gbnVsbDtcblxuICBAc3RhdGUoKVxuICBwcml2YXRlIGFjY2Vzc29yIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKS53aXRoSGFuZGxlcigoKSA9PiB7XG4gICAgdGhpcy5fbW9udGhOYW1lcyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKTtcbiAgICB0aGlzLl9jcmVhdGVNb250aFJvd3MoKTtcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gICAgdGhpcy5fc2V0V2Vla2RheXMoKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gdHJhY2sgdGhlIGZvY3VzIGFzIHdlIHNob3VsZCBvbmx5IHRha2UgZm9jdXMgaW50byB0aGUgY2FsZW5kYXIsIHdoZW4gdGhlXG4gICAgLy8gZm9jdXMgd2FzIG9uY2Ugc2V0IGludG8gdGhlIGNhbGVuZGFyLlxuICAgIC8vIEZvciBzaGFkb3cgRE9NIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byB0cmFjayB0aGlzIHByb2dyYW1tYXRpY2FsbHkuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKCkgPT4gKHRoaXMuX2NvbnRhaW5pbmdGb2N1cyA9IHRydWUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgKCkgPT4gKHRoaXMuX2NvbnRhaW5pbmdGb2N1cyA9IGZhbHNlKSk7XG4gICAgY29uc3QgcmVzb2x2ZURheSA9IChldmVudDogUG9pbnRlckV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPiB8IG51bGwgPT5cbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3Q8U2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+Pignc2JiLWNhbGVuZGFyLWRheScpID8/XG4gICAgICBldmVudFxuICAgICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgKGUpOiBlIGlzIFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPiA9PiAoZSBhcyBIVE1MRWxlbWVudCkubG9jYWxOYW1lID09PSAnc2JiLWNhbGVuZGFyLWRheScsXG4gICAgICAgICkgPz9cbiAgICAgIG51bGw7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gcmVzb2x2ZURheShldmVudCk7XG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdERhdGUoZGF5LnZhbHVlISwgZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gcmVzb2x2ZURheShldmVudCk7XG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQsIGRheSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4gKHRoaXMuX2xhc3RTZWxlY3Rpb24gPSBudWxsKSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9zb3J0RGF0ZSA9IChhOiBULCBiOiBUKTogbnVtYmVyID0+IHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKGEsIGIpO1xuXG4gIHByaXZhdGUgX2RhdGVGaWx0ZXIoZGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXI/LihkYXRlKSA/PyB0cnVlO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRDYWxlbmRhclZpZXcoKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9vblNsb3RDaGFuZ2UsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2hhZG93Um9vdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX29uU2xvdENoYW5nZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7fVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIG92ZXJyaWRlIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHJlYXNvbiA9PT0gJ2F1dG9jb21wbGV0ZScgfHwgc3RhdGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN0b3JlID0gKHZhbHVlOiBzdHJpbmcgfCBUIHwgbnVsbCk6IFQgfCBudWxsID0+XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHJlc3RvcmUoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5fcmVhZEZvcm1EYXRhKHN0YXRlIGFzIEZvcm1EYXRhKS50aGVuKFxuICAgICAgICAgIChhcnJheSkgPT4gKHRoaXMudmFsdWUgPSBhcnJheS5tYXAocmVzdG9yZSkuZmlsdGVyKChkYXRlKTogZGF0ZSBpcyBUID0+IGRhdGUgIT0gbnVsbCkpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJ5ID0gc3RhdGUuZ2V0KHRoaXMubmFtZSk7XG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGVudHJ5LnRleHQoKS50aGVuKCh0ZXh0KSA9PiAodGhpcy52YWx1ZSA9IHJlc3RvcmUoSlNPTi5wYXJzZSh0ZXh0KSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSByZXN0b3JlKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZWFkRm9ybURhdGEoZm9ybURhdGE6IEZvcm1EYXRhKTogUHJvbWlzZTxUW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBmb3JtRGF0YVxuICAgICAgICAuZ2V0QWxsKHRoaXMubmFtZSlcbiAgICAgICAgLm1hcChhc3luYyAoZW50cnkpID0+XG4gICAgICAgICAgZW50cnkgaW5zdGFuY2VvZiBCbG9iID8gSlNPTi5wYXJzZShhd2FpdCBlbnRyeS50ZXh0KCkpIDogKGVudHJ5IGFzIFQpLFxuICAgICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBvdmVycmlkZSBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLl9mb2N1c0NlbGwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnYW1vdW50JykgfHxcbiAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnb3JpZW50YXRpb24nKSB8fFxuICAgICAgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdmaXhlZE1vbnRoJylcbiAgICApIHtcbiAgICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3ZpZXcnKSkge1xuICAgICAgdGhpcy5fc2V0Q2hvc2VuWWVhcigpO1xuICAgICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLnZpZXc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAobmFtZSA9PT0gJ19jYWxlbmRhclZpZXcnKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuZGVsZXRlKGB2aWV3LSR7b2xkVmFsdWV9YCk7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGB2aWV3LSR7dGhpcy5fY2FsZW5kYXJWaWV3fWApO1xuICAgICAgaWYgKHRoaXMuX2NvbnRhaW5pbmdGb2N1cykge1xuICAgICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAvLyBUaGUgY2FsZW5kYXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRhYi1pbmRleGVzIG9uIGZpcnN0IHJlbmRlcixcbiAgICAvLyBhbmQgZXZlcnkgdGltZSBhIGRhdGUgaXMgc2VsZWN0ZWQgb3IgdGhlIG1vbnRoIHZpZXcgY2hhbmdlcy5cbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuXG4gICAgLy8gV2hlbiBjaGFuZ2luZyB2aWV3IHRvIHllYXIvbW9udGgsIHRoZSB0YWJpbmRleCBpcyBjaGFuZ2VkLCBidXQgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyBnZXR0aW5nIGxvc3QuXG4gICAgLy8gV2UgbmVlZCB0byBjYWxsIGBfZm9jdXNDZWxsKClgIG1ldGhvZCBleHBsaWNpdGx5IHRvIGNvcnJlY3RseSBzZXQgdGhlIGZvY3VzLlxuICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TbG90Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2VuaGFuY2VkVmFyaWFudCA9IEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuc29tZShcbiAgICAgIChjKSA9PiBjLmxvY2FsTmFtZSA9PT0gJ3NiYi1jYWxlbmRhci1kYXknLFxuICAgICk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnZW5oYW5jZWQnLCB0aGlzLl9lbmhhbmNlZFZhcmlhbnQpO1xuICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBgX3ZhbHVlYCBzdGF0ZSBzaG91bGQgYmUgYWRhcHRlZCB3aGVuIHRoZSBgbXVsdGlwbGVgIHByb3BlcnR5IGNoYW5nZXM6XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIHRydWUsIHRoZSAnX3ZhbHVlJyBpcyBzZXQgdG8gYW4gYXJyYXk7XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIGZhbHNlLCB0aGUgZmlyc3QgYXZhaWxhYmxlIG9wdGlvbiBpcyBzZXQgYXMgJ3ZhbHVlJyBvdGhlcndpc2UgaXQncyBzZXQgdG8gbnVsbC5cbiAgICovXG4gIHByaXZhdGUgX29uTXVsdGlwbGVDaGFuZ2VkKGlzTXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLl92YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fdmFsdWUgPyBbdGhpcy5fdmFsdWUgYXMgVF0gOiBbXTtcbiAgICB9XG4gICAgaWYgKCFpc011bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy5fdmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICh0aGlzLl92YWx1ZSBhcyBUW10pLmxlbmd0aCA/ICh0aGlzLl92YWx1ZSBhcyBUW10pWzBdIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJpdmF0ZSBfaW5pdChhY3RpdmVEYXRlPzogVCk6IHZvaWQge1xuICAgIC8vIER1ZSB0byBpdHMgY29tcGxleGl0eSwgdGhlIGNhbGVuZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLl9pbml0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVEYXRlKSB7XG4gICAgICB0aGlzLl9hc3NpZ25BY3RpdmVEYXRlKGFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuX2ZpeGVkTW9udGggPz8gdGhpcy5fYWN0aXZlRGF0ZTtcbiAgICBjb25zdCBhbW91bnQgPSB0aGlzLmFtb3VudCA8IDEgPyAxIDogdGhpcy5hbW91bnQ7XG4gICAgdGhpcy5fd2Vla3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBhbW91bnQgfSwgKF8sIGkpID0+XG4gICAgICB0aGlzLl9jcmVhdGVXZWVrUm93cyh0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyhzdGFydERhdGUsIGkpKSxcbiAgICApO1xuICAgIGNvbnN0IGRhdGVGcm9tRmlyc3RNb250aCA9IHRoaXMuX3dlZWtzWzBdWzBdWzBdLmRhdGVWYWx1ZTtcbiAgICB0aGlzLl9maXJzdFZpc2libGVEYXkgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGVGcm9tRmlyc3RNb250aCksXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGVGcm9tRmlyc3RNb250aCksXG4gICAgICAgIDEsXG4gICAgICApISxcbiAgICApO1xuICAgIGNvbnN0IGRhdGVGcm9tTGFzdE1vbnRoID0gdGhpcy5fd2Vla3NbYW1vdW50IC0gMV1bMF1bMF0uZGF0ZVZhbHVlO1xuICAgIHRoaXMuX2xhc3RWaXNpYmxlRGF5ID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlRnJvbUxhc3RNb250aCksXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGVGcm9tTGFzdE1vbnRoKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgoZGF0ZUZyb21MYXN0TW9udGgpLFxuICAgICAgKSEsXG4gICAgKTtcblxuICAgIHRoaXMuX3llYXJzID0gdGhpcy5fY3JlYXRlWWVhclJvd3MoKTtcbiAgICB0aGlzLl93ZWVrTnVtYmVycyA9IHRoaXMuX3dlZWtzLm1hcCgod2VlaykgPT5cbiAgICAgIHdlZWtcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS52YWx1ZS5sb2NhbGVDb21wYXJlKGIudmFsdWUpKVxuICAgICAgICAubWFwKChkYXk6IERheTxUPikgPT4gZGF5LndlZWtWYWx1ZSlcbiAgICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKSxcbiAgICApO1xuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIG9uIGEgZGF5IGNlbGwgcHJpb3JpdGl6aW5nIHRoZSBzZWxlY3RlZCBkYXksIHRoZSBjdXJyZW50IGRheSwgYW5kIGxhc3RseSwgdGhlIGZpcnN0IHNlbGVjdGFibGUgZGF5LiAqL1xuICBwcml2YXRlIF9mb2N1c0NlbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Jlc2V0Rm9jdXMpIHtcbiAgICAgIHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk/LmZvY3VzKCk7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGFycmF5IG9mIHdlZWtkYXlzLiAqL1xuICBwcml2YXRlIF9zZXRXZWVrZGF5cygpOiB2b2lkIHtcbiAgICBjb25zdCBuYXJyb3dXZWVrZGF5czogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbmFycm93Jyk7XG4gICAgY29uc3QgbG9uZ1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCdsb25nJyk7XG4gICAgY29uc3Qgd2Vla2RheXM6IFdlZWtkYXlbXSA9IGxvbmdXZWVrZGF5cy5tYXAoKGxvbmc6IHN0cmluZywgaTogbnVtYmVyKSA9PiAoe1xuICAgICAgbG9uZyxcbiAgICAgIG5hcnJvdzogbmFycm93V2Vla2RheXNbaV0sXG4gICAgfSkpO1xuXG4gICAgLy8gUm90YXRlcyB0aGUgbGFiZWxzIGZvciBkYXlzIG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICBjb25zdCBmaXJzdERheU9mV2VlazogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKTtcbiAgICB0aGlzLl93ZWVrZGF5cyA9IHdlZWtkYXlzLnNsaWNlKGZpcnN0RGF5T2ZXZWVrKS5jb25jYXQod2Vla2RheXMuc2xpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGFsb25nIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbiBhbmQgc2V0cyB0aGUgcGFyYW1ldGVycyB1c2VkIGluIGtleWJvYXJkIG5hdmlnYXRpb24uICovXG4gIHByaXZhdGUgX2NyZWF0ZVdlZWtSb3dzKHZhbHVlOiBUKTogRGF5PFQ+W11bXSB7XG4gICAgY29uc3QgZGF5c0luTW9udGg6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKHZhbHVlKTtcbiAgICBjb25zdCB3ZWVrT2Zmc2V0OiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgID8gdGhpcy5fY3JlYXRlV2Vla1Jvd3NIb3Jpem9udGFsKHZhbHVlLCBkYXlzSW5Nb250aCwgd2Vla09mZnNldClcbiAgICAgIDogdGhpcy5fY3JlYXRlV2Vla1Jvd3NWZXJ0aWNhbCh2YWx1ZSwgZGF5c0luTW9udGgsIHdlZWtPZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIGVhY2ggd2VlayBpbiBvcmllbnRhdGlvbj0naG9yaXpvbnRhbCcuXG4gICAqXG4gICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGRheXMgb2YgdGhlIG1vbnRocywgY3JlYXRlcyBhIERheSBvYmplY3QgZm9yIGVhY2ggYW5kIHB1c2hlcyBpdCBpbnRvIGFuZCBhcnJheS5cbiAgICogRWFjaCBzZXZlbiBkYXlzIChjb25zaWRlcmluZyB0aGUgb2Zmc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1vbnRoKSByZXN0YXJ0cyBmcm9tIGFuIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGEgbWF0cml4IGluIHdoaWNoIGV2ZXJ5IHJvdyBpcyBhIHdlZWsgKG9yIHBhcnQgb2YgaXQsIGNvbnNpZGVyaW5nIG9mZnNldCkuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVXZWVrUm93c0hvcml6b250YWwodmFsdWU6IFQsIGRheXNJbk1vbnRoOiBudW1iZXIsIHdlZWtPZmZzZXQ6IG51bWJlcik6IERheTxUPltdW10ge1xuICAgIGNvbnN0IHdlZWtzOiBEYXk8VD5bXVtdID0gW1tdXTtcbiAgICBmb3IgKGxldCBpID0gMCwgY2VsbCA9IHdlZWtPZmZzZXQ7IGkgPCBkYXlzSW5Nb250aDsgaSsrLCBjZWxsKyspIHtcbiAgICAgIGlmIChjZWxsID09PSBEQVlTX1BFUl9ST1cpIHtcbiAgICAgICAgd2Vla3MucHVzaChbXSk7XG4gICAgICAgIGNlbGwgPSAwO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodmFsdWUpLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh2YWx1ZSksXG4gICAgICAgIGkgKyAxLFxuICAgICAgKSE7XG4gICAgICB3ZWVrc1t3ZWVrcy5sZW5ndGggLSAxXS5wdXNoKHRoaXMuX21hcERhdGVUb0RheShkYXRlKSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByb3dzIGZvciBlYWNoIHdlZWsgaW4gb3JpZW50YXRpb249J3ZlcnRpY2FsJy5cbiAgICpcbiAgICogQ3JlYXRlcyBhIG1hdHJpeCB3aXRoIHNldmVuIGVtcHR5IHJvd3MuXG4gICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGRheXMgb2YgdGhlIG1vbnRocywgY3JlYXRlcyBhIERheSBvYmplY3QgZm9yIGVhY2hcbiAgICogYW5kIHB1c2hlcyBpdCBpbnRvIHRoZSBjb3JyZWN0IGFycmF5IGNvbnNpZGVyaW5nIHRoZSBvZmZzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbW9udGguXG4gICAqIEVhY2ggc2V2ZW4gZGF5cyAoaW5jbHVkaW5nIG9mZnNldCkgcmVzdGFydHMgZnJvbSB0aGUgZmlyc3QuXG4gICAqXG4gICAqIFRoZSByZXN1bHQgaXMgYSBtYXRyaXggaW4gd2hpY2ggZXZlcnkgcm93IGlzIGEgc2V0IG9mIHdlZWtkYXlzLCBzbzpcbiAgICogLSByb3cgMDogYWxsIHRoZSBNb25kYXlzO1xuICAgKiAtIHJvdyAxOiBhbGwgdGhlIFR1ZXNkYXlzO1xuICAgKiAtIC4uLlxuICAgKiAtIHJvdyA3OiBhbGwgdGhlIFN1bmRheXMuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVXZWVrUm93c1ZlcnRpY2FsKHZhbHVlOiBULCBkYXlzSW5Nb250aDogbnVtYmVyLCB3ZWVrT2Zmc2V0OiBudW1iZXIpOiBEYXk8VD5bXVtdIHtcbiAgICBjb25zdCB3ZWVrczogRGF5PFQ+W11bXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IERBWVNfUEVSX1JPVyB9LCAoKSA9PiBbXSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIGNlbGwgPSAwO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodmFsdWUpLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh2YWx1ZSksXG4gICAgICAgIGkgKyAxLFxuICAgICAgKSE7XG4gICAgICB3ZWVrc1tjZWxsXS5wdXNoKHRoaXMuX21hcERhdGVUb0RheShkYXRlKSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIHByaXZhdGUgX21hcERhdGVUb0RheShkYXRlOiBUKTogRGF5PFQ+IHtcbiAgICBjb25zdCBpc29EYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGRhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogaXNvRGF0ZSxcbiAgICAgIGRhdGVWYWx1ZTogZGF0ZSxcbiAgICAgIGRheVZhbHVlOiBTdHJpbmcodGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShkYXRlKSksXG4gICAgICBtb250aFZhbHVlOiBTdHJpbmcodGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZGF0ZSkpLFxuICAgICAgeWVhclZhbHVlOiBTdHJpbmcodGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKSksXG4gICAgICAvLyBUT0RPOiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHRoaXMsIGJ5IGtlZXBpbmcgdHJhY2sgb2YgdGhlXG4gICAgICAvLyB3ZWVrIG51bWJlciB3aGlsZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZGF5cy5cbiAgICAgIHdlZWtWYWx1ZTogdGhpcy5fZ2V0V2VlayhkYXRlKSxcbiAgICAgIHdlZWtEYXlWYWx1ZTogdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrKGRhdGUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRXZWVrKGRhdGU6IFQpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpLCAxLCAxKTtcbiAgICBjb25zdCB3ZWVrZGF5ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrKGZpcnN0RGF5T2ZZZWFyKTtcblxuICAgIGxldCB3ZWVrSW5kZXggPSBbTU9OREFZLCBUVUVTREFZLCBXRURORVNEQVksIFRIVVJTREFZXS5pbmNsdWRlcyh3ZWVrZGF5KSA/IDEgOiAwO1xuICAgIGxldCB3ZWVrU3RhcnQgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoXG4gICAgICBmaXJzdERheU9mWWVhcixcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldChmaXJzdERheU9mWWVhcikgKiAtMSxcbiAgICApO1xuICAgIHdoaWxlICh0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh3ZWVrU3RhcnQsIGRhdGUpIDw9IDApIHtcbiAgICAgIGNvbnN0IHdlZWtFbmQgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMod2Vla1N0YXJ0LCA2KTtcbiAgICAgIGlmICh0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShkYXRlLCB3ZWVrRW5kKSA8PSAwKSB7XG4gICAgICAgIHJldHVybiB3ZWVrSW5kZXggPiAwXG4gICAgICAgICAgPyB3ZWVrSW5kZXhcbiAgICAgICAgICA6IHRoaXMuX2dldFdlZWsodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGZpcnN0RGF5T2ZZZWFyLCAtMSkpO1xuICAgICAgfVxuICAgICAgd2Vla1N0YXJ0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHdlZWtTdGFydCwgREFZU19QRVJfUk9XKTtcbiAgICAgIHdlZWtJbmRleCsrO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGRhdGUgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgLyoqIEZvcmNlIHRoZSBjb252ZXJzaW9uIHRvIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZy4gKi9cbiAgcHJpdmF0ZSBfbWFwVmFsdWVUb0lTT0RhdGUodmFsdWU6IHN0cmluZyB8IFQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodmFsdWUgYXMgVCk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVNb250aFJvd3MoKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGhzOiBNb250aENlbGxbXSA9IG5ldyBBcnJheSgxMikuZmlsbChudWxsKS5tYXAoXG4gICAgICAoXywgaTogbnVtYmVyKTogTW9udGhDZWxsID0+ICh7XG4gICAgICAgIHZhbHVlOiBTdHJpbmcoaSArIDEpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgICAgIG1vbnRoVmFsdWU6IGkgKyAxLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCByb3dzOiBudW1iZXIgPSAxMiAvIE1PTlRIU19QRVJfUk9XO1xuICAgIGNvbnN0IG1vbnRoQXJyYXk6IE1vbnRoQ2VsbFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtb250aEFycmF5LnB1c2gobW9udGhzLnNsaWNlKE1PTlRIU19QRVJfUk9XICogaSwgTU9OVEhTX1BFUl9ST1cgKiAoaSArIDEpKSk7XG4gICAgfVxuICAgIHRoaXMuX21vbnRocyA9IG1vbnRoQXJyYXk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZVllYXJSb3dzKCk6IG51bWJlcltdW10ge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWVZZWFyVmlldzogbnVtYmVyID0gdGhpcy5fZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk7XG4gICAgY29uc3QgYWxsWWVhcnM6IG51bWJlcltdID0gbmV3IEFycmF5KFlFQVJTX1BFUl9QQUdFKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGk6IG51bWJlcikgPT4gc3RhcnRWYWx1ZVllYXJWaWV3ICsgaSk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gWUVBUlNfUEVSX1BBR0UgLyBZRUFSU19QRVJfUk9XO1xuICAgIGNvbnN0IHllYXJBcnJheTogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHllYXJBcnJheS5wdXNoKGFsbFllYXJzLnNsaWNlKFlFQVJTX1BFUl9ST1cgKiBpLCBZRUFSU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICByZXR1cm4geWVhckFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IHllYXIgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiBwYW5lbC5cbiAgICogSWYgYG1pbkRhdGVgIGFuZCBgbWF4RGF0ZWAgYXJlIGJvdGggbnVsbCwgdGhlIHN0YXJ0aW5nIHllYXIgaXMgY2FsY3VsYXRlZCBhc1xuICAgKiB0aGUgbXVsdGlwbGUgb2YgWUVBUlNfUEVSX1BBR0UgY2xvc2VzdCB0byBhbmQgbGVzcyB0aGFuIGFjdGl2ZURhdGUsXG4gICAqIGUuZy4sIHdpdGggYFlFQVJTX1BFUl9QQUdFYCA9IDI0IGFuZCBgYWN0aXZlRGF0ZWAgPSAyMDIwLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMjAxNiAoMjQgKiA4MyksXG4gICAqIHdoaWxlIHdpdGggYGFjdGl2ZURhdGVgID0gMjAwMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDE5OTIgKDI0ICogODIpLlxuICAgKiBJZiBgbWluRGF0ZWAgaXMgbm90IG51bGwsIGl0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgeWVhcjsgaWYgYG1heERhdGVgIGlzIG5vdCBudWxsLFxuICAgKiBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXIgbWludXMgYFlFQVJTX1BFUl9QQUdFYCwgc28gdGhhdCB0aGUgYG1heERhdGVgIGlzIHRoZSBsYXN0IHJlbmRlcmVkIHllYXIuXG4gICAqIElmIGJvdGggYXJlIG5vdCBudWxsLCBgbWF4RGF0ZWAgaGFzIHByaW9yaXR5IG92ZXIgYG1pbkRhdGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0aW5nWWVhciA9IDA7XG4gICAgaWYgKHRoaXMubWF4KSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4KSAtIFlFQVJTX1BFUl9QQUdFICsgMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluKSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2ZVllYXIgLVxuICAgICAgKCgoKGFjdGl2ZVllYXIgLSBzdGFydGluZ1llYXIpICUgWUVBUlNfUEVSX1BBR0UpICsgWUVBUlNfUEVSX1BBR0UpICUgWUVBUlNfUEVSX1BBR0UpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbi1tYXggcmFuZ2UuICovXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlU3RyaW5nKSE7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLnNhbWVEYXRlKGRhdGUsIHRoaXMuX2RhdGVBZGFwdGVyLmNsYW1wRGF0ZShkYXRlLCB0aGlzLm1pbiwgdGhpcy5tYXgpKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgc2V0cyBpdCBpbnRlcm5hbGx5LiAqL1xuICBwcml2YXRlIF9zZWxlY3REYXRlKGRheTogVCwgZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NldENob3NlblllYXIoKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgLy8gSWYgYSByYW5nZSBpcyBzZWxlY3RlZCB2aWEgU2hpZnQsIGEgdGV4dCBzZWxlY3Rpb24gcmFuZ2Ugd2lsbCBiZSBhY3RpdmUuXG4gICAgICAvLyBXZSBuZWVkIHRvIHJlbW92ZSBpdCB0byBhdm9pZCBoYXZpbmcgYSB0ZXh0IHNlbGVjdGlvbiBvbiB0b3Agb2YgdGhlIGNhbGVuZGFyIGNlbGxzLFxuICAgICAgLy8gd2hpY2ggd291bGQgY3JlYXRlIGEgY29uZnVzaW5nIFVYLlxuICAgICAgLy8gVGhpcyBhbHNvIG11c3QgYmUgdmVyeSBlYXJseSBpbiB0aGUgZXZlbnQgaGFuZGxlciwgb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYSBmbGFzaFxuICAgICAgLy8gb2Ygc2VsZWN0aW9uLlxuICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIGxldCBzZWxlY3RlZCA9ICF0aGlzLl92YWx1ZSA/IFtdIDogQXJyYXkuaXNBcnJheSh0aGlzLl92YWx1ZSkgPyB0aGlzLl92YWx1ZSA6IFt0aGlzLl92YWx1ZV07XG4gICAgICBjb25zdCBzZXJpYWxpemVkU2VsZWN0ZWQgPSBzZWxlY3RlZC5tYXAoKHMpID0+IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShzKSk7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LnNoaWZ0S2V5ICYmXG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3Rpb24gJiZcbiAgICAgICAgc2VyaWFsaXplZFNlbGVjdGVkLmluY2x1ZGVzKHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLl9sYXN0U2VsZWN0aW9uKSkgJiZcbiAgICAgICAgIXNlcmlhbGl6ZWRTZWxlY3RlZC5pbmNsdWRlcyh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZGF5KSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9sYXN0U2VsZWN0aW9uLCBkYXkpIDwgMCA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgcmFuZ2U6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5fbGFzdFNlbGVjdGlvbjtcbiAgICAgICAgd2hpbGUgKCF0aGlzLl9kYXRlQWRhcHRlci5zYW1lRGF0ZShjdXJyZW50LCBkYXkpKSB7XG4gICAgICAgICAgY3VycmVudCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhjdXJyZW50LCBvZmZzZXQpITtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVkQ3VycmVudCA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShjdXJyZW50KTtcbiAgICAgICAgICBpZiAoIXNlcmlhbGl6ZWRTZWxlY3RlZC5pbmNsdWRlcyhzZXJpYWxpemVkQ3VycmVudCkpIHtcbiAgICAgICAgICAgIHJhbmdlLnB1c2goc2VyaWFsaXplZEN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZCA9IHRoaXMuX21lcmdlRGF0ZXMocmFuZ2UsIHNlcmlhbGl6ZWRTZWxlY3RlZCk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkLnNvbWUoKHNlbCkgPT4gdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUoc2VsLCBkYXkpKSkge1xuICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkLmZpbHRlcigoc2VsKSA9PiAhdGhpcy5fZGF0ZUFkYXB0ZXIuc2FtZURhdGUoc2VsLCBkYXkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkID0gWy4uLnNlbGVjdGVkLCBkYXldLnNvcnQodGhpcy5fc29ydERhdGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sYXN0U2VsZWN0aW9uID0gZGF5O1xuICAgICAgdGhpcy5fdmFsdWUgPSBzZWxlY3RlZDtcbiAgICAgIHRoaXMuX2VtaXREYXRlU2VsZWN0ZWRFdmVudCh0aGlzLl92YWx1ZS5tYXAoKGUpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGUpISkpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3ZhbHVlIHx8IHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHRoaXMuX3ZhbHVlIGFzIFQsIGRheSkgIT09IDApIHtcbiAgICAgIC8vIEluIHNpbmdsZSBzZWxlY3Rpb24sIGNoZWNrIGlmIHRoZSBkYXkgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgdGhpcy5fdmFsdWUgPSBkYXk7XG4gICAgICB0aGlzLl9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5KSEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbXVsdGlwbGUgZGF0ZXMgc2VsZWN0aW9uIHZpYSB3ZWVrTnVtYmVyIC8gd2Vla0RheSBidXR0b25zOlxuICAgKiAtIGlmIENtZCBvciBDdHJsIGFyZSBwcmVzc2VkLCBhZGQgdGhlIG5ldyBkYXRlIHRvIHRoZSBjdXJyZW50IG9uZXM7XG4gICAqIC0gaWYgbm90LFxuICAgKiAgICAgLSBpZiB0aGUgbmV3IGRhdGVzIGFyZSB0aGUgc2FtZSBvZiB0aGUgY3VycmVudCBvbmVzLCBpdCBtZWFucyB0aGF0IHRoZSBzYW1lIGJ1dHRvbiBoYXMgYmVlbiBjbGlja2VkIHR3aWNlLCBzbyBkbyBub3RoaW5nO1xuICAgKiAgICAgLSBpZiBub3QsIHRoZSBzZWxlY3RlZCBkYXRlcyBhcmUgdGhlIG5ldyBvbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2VsZWN0TXVsdGlwbGVEYXRlcyhkYXlzOiBEYXk8VD5bXSk6IHZvaWQge1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbWVyZ2VEYXRlcyhkYXlzLm1hcCgoZSkgPT4gZS52YWx1ZSkpO1xuICAgIHRoaXMuX2VtaXREYXRlU2VsZWN0ZWRFdmVudCh0aGlzLl92YWx1ZS5tYXAoKGUpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGUpISkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWVyZ2VEYXRlcyhkYXRlczogc3RyaW5nW10sIHNlbGVjdGVkPzogc3RyaW5nW10pOiBUW10ge1xuICAgIHNlbGVjdGVkID8/PSAodGhpcy5fdmFsdWUgYXMgVFtdKS5tYXAoKHMpID0+IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShzKSk7XG4gICAgLy8gRmlsdGVyIGRpc2FibGVkIGRheXMgYnkgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIGBkYXRlc2AgcGFyYW1ldGVyIGFnYWluc3QgdGhlIGVuYWJsZWQgY2VsbHMuXG4gICAgLy8gU2luY2UgdGhlIGJ1dHRvbnMnIHZhbHVlIGlzIHNldCB0byB0aGUgRGF5J3MgaW50ZXJmYWNlIHZhbHVlIChJU08gc3RyaW5nKSwgdGhlcmUncyBubyBuZWVkIHRvIGRlc2VyaWFsaXplIGl0LlxuICAgIGNvbnN0IGVuYWJsZWREYXlzOiBzdHJpbmdbXSA9ICh0aGlzLl9jZWxscyBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD5bXSlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmRpc2FibGVkKVxuICAgICAgLm1hcCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpKTtcbiAgICBjb25zdCBkYXlzVG9BZGQ6IHN0cmluZ1tdID0gZGF0ZXMuZmlsdGVyKChpc29EYXRlKSA9PiBlbmFibGVkRGF5cy5pbmNsdWRlcyhpc29EYXRlKSk7XG5cbiAgICAvLyBJbiBjYXNlIG9mIG11bHRpcGxlIHNlbGVjdGlvbiwgbmV3bHkgYWRkZWQgZGF5cyBtdXN0IGJlIGFkZGVkIHRvIHRoZVxuICAgIC8vIGV4aXN0aW5nIG9uZXMsIHdpdGhvdXQgZHVwbGljYXRpb24uXG4gICAgLy8gSWYgdGhlIGRheXMgdG8gYWRkIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBzZWxlY3RlZCBvbmVzLCB0aGUgc2V0XG4gICAgLy8gbXVzdCBiZSBlbXB0aWVkLlxuICAgIGlmIChkYXlzVG9BZGQuZXZlcnkoKGRheTogc3RyaW5nKSA9PiBzZWxlY3RlZCEuaW5jbHVkZXMoZGF5KSkpIHtcbiAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWQuZmlsdGVyKChkYXk6IHN0cmluZykgPT4gIWRheXNUb0FkZC5pbmNsdWRlcyhkYXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWQgPSBbLi4uc2VsZWN0ZWQsIC4uLmRheXNUb0FkZF0uZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmluZGV4T2YodikgPT09IGkpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWQubWFwKChzKSA9PiB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShzKSEpLnNvcnQodGhpcy5fc29ydERhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBkYXRlc2VsZWN0ZWQgZXZlbnQgZ2l2ZW4gdGhlIGRldGFpbCAoYXMgVCBvciBUW10gYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBtdWx0aXBsZSBmbGFnKS5cbiAgICogRklYTUU6IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBhcHBlYXJzIGFzIGV2ZW50IG5hbWUgaW4gdGhlIHJlYWRtZVxuICAgKiAgZHVlIHRvIGEgYnVnIGluIHRoZSBjdXN0b20tZWxlbWVudHMtbWFuaWZlc3QgbGlicmFyeS5cbiAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXdjL2N1c3RvbS1lbGVtZW50cy1tYW5pZmVzdC9pc3N1ZXMvMTQ5XG4gICAqL1xuICBwcml2YXRlIF9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQoZGF0ZXNlbGVjdGVkOiBUIHwgVFtdKTogdm9pZCB7XG4gICAgLyoqIEB0eXBlIHtTYmJEYXRlU2VsZWN0ZWRFdmVudDxUPn0gRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IFNiYkRhdGVTZWxlY3RlZEV2ZW50PFQ+KGRhdGVzZWxlY3RlZCkpO1xuXG4gICAgLyoqIEB0eXBlIHtJbnB1dEV2ZW50fSBFdmVudCBlbWl0dGVkIG9uIHVzZXIgc2VsZWN0aW9uLiAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgICAvKiogQHR5cGUge0V2ZW50fSBFdmVudCBlbWl0dGVkIG9uIHVzZXIgc2VsZWN0aW9uLiAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0TW9udGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gRklYTUU6IHRoZSBuYW1lIG9mIHRoaXMgdmFyaWFibGUgYXBwZWFycyBhcyBldmVudCBuYW1lIGluIHRoZSByZWFkbWVcbiAgICAvLyAgZHVlIHRvIGEgYnVnIGluIHRoZSBjdXN0b20tZWxlbWVudHMtbWFuaWZlc3QgbGlicmFyeS5cbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2MvY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0L2lzc3Vlcy8xNDlcbiAgICBjb25zdCBtb250aGNoYW5nZSA9IHRoaXMuX3dlZWtzLmZsYXQoMikuc29ydCgoYSwgYikgPT4gYS52YWx1ZS5sb2NhbGVDb21wYXJlKGIudmFsdWUpKSBhcyBEYXlbXTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7U2JiTW9udGhDaGFuZ2VFdmVudH1cbiAgICAgKiBFbWl0cyB3aGVuIHRoZSBtb250aCBjaGFuZ2VzLlxuICAgICAqIFRoZSBgcmFuZ2VgIHByb3BlcnR5IGNvbnRhaW5zIHRoZSBkYXlzIGFycmF5IG9mIHRoZSBjaG9zZW4gbW9udGguXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBTYmJNb250aENoYW5nZUV2ZW50KG1vbnRoY2hhbmdlKSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRDaG9zZW5ZZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgIGxldCBzZWxlY3RlZERhdGU6IFQgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBzZWxlY3RlZERhdGUgPSAodGhpcy52YWx1ZSBhcyBUW10pLmF0KC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkRGF0ZSA9IHRoaXMudmFsdWUgYXMgVDtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nob3NlblllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHNlbGVjdGVkRGF0ZSA/PyB0aGlzLl9kYXRlQWRhcHRlci50b2RheSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hvc2VuWWVhciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hc3NpZ25BY3RpdmVEYXRlKGRhdGU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY2xhbXBEYXRlKGRhdGUsIHRoaXMubWluLCB0aGlzLm1heCkhO1xuICB9XG5cbiAgLyoqIEdvZXMgdG8gdGhlIG1vbnRoIGlkZW50aWZpZWQgYnkgdGhlIHNoaWZ0LiAqL1xuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50TW9udGgobW9udGhzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0KHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuX2FjdGl2ZURhdGUsIG1vbnRocykpO1xuICAgIHRoaXMuX2VtaXRNb250aENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ29Ub0RpZmZlcmVudFllYXIoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Nob3NlblllYXIhICs9IHllYXJzO1xuICAgIC8vIENhbid0IHVzZSBgX2Fzc2lnbkFjdGl2ZURhdGUoLi4uKWAgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIHNldCBpdCB0byBtaW4vbWF4IHZhbHVlIGlmIGFyZ3VtZW50IGlzIG91dCBvZiByYW5nZVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fY2hvc2VuWWVhciEsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhclJhbmdlKHllYXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0KHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fYWN0aXZlRGF0ZSwgeWVhcnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZEaXNhYmxlZChwcmV2RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5taW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHByZXZEYXRlLCB0aGlzLm1pbikgPCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dERpc2FibGVkKG5leHREYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUobmV4dERhdGUsIHRoaXMubWF4KSA+IDA7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpICogLTEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICB0aGlzLl9hY3RpdmVEYXRlLFxuICAgICAgdGhpcy5hbW91bnQgPCAxID8gMSA6IHRoaXMuYW1vdW50LFxuICAgICk7XG4gICAgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIobmV4dE1vbnRoKSxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKG5leHRNb250aCksXG4gICAgICAxLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX25leHREaXNhYmxlZChuZXh0TW9udGgpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJwcmV2aW91cyB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldlllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9hY3RpdmVEYXRlKSAtIDEsXG4gICAgICAxMixcbiAgICAgIDMxLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXZEaXNhYmxlZChwcmV2WWVhcik7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgeWVhclwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gIHByaXZhdGUgX25leHRZZWFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9hY3RpdmVEYXRlKSArICh0aGlzLmFtb3VudCA8IDEgPyAxIDogdGhpcy5hbW91bnQpLFxuICAgICAgMSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRZZWFyKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwicHJldmlvdXMgeWVhclwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaW4geWVhciB2aWV3LiAqL1xuICBwcml2YXRlIF9wcmV2aW91c1llYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh0aGlzLl95ZWFyc1swXVswXSAtIDEsIDEyLCAzMSk7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXZEaXNhYmxlZChwcmV2WWVhcik7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgeWVhclwiIGJ1dHRvbiBzaG91bGQgYmUgZGlzYWJsZWQgaW4geWVhciB2aWV3LiAqL1xuICBwcml2YXRlIF9uZXh0WWVhclJhbmdlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGFzdFllYXIgPSB0aGlzLl95ZWFycy5mbGF0KDIpLmF0KC0xKSE7XG4gICAgY29uc3QgbmV4dFllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGxhc3RZZWFyICsgMSwgMSwgMSk7XG4gICAgcmV0dXJuIHRoaXMuX25leHREaXNhYmxlZChuZXh0WWVhcik7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVUYWJsZUJsdXIoZXZlbnRUYXJnZXQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50VGFyZ2V0Py5sb2NhbE5hbWUgIT09ICdzYmItY2FsZW5kYXItZGF5Jykge1xuICAgICAgdGhpcy5fc2V0VGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRUYWJJbmRleCgpOiB2b2lkIHtcbiAgICBBcnJheS5mcm9tKHRoaXMuX2NlbGxzLmZpbHRlcigoZSkgPT4gZS50YWJJbmRleCA9PT0gMCkgPz8gW10pLmZvckVhY2goXG4gICAgICAoZGF5KSA9PiAoZGF5LnRhYkluZGV4ID0gLTEpLFxuICAgICk7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSB0aGlzLl9nZXRGaXJzdEZvY3VzYWJsZSgpO1xuICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xuICAgICAgZmlyc3RGb2N1c2FibGUudGFiSW5kZXggPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGVsZW1lbnQgaW4gdGhlIGNhbGVuZGFyIHRvIGFzc2lnbiBmb2N1cy4gKi9cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RGb2N1c2FibGUoKTogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4gfCBudWxsIHtcbiAgICBpZiAodGhpcy5fY2FsZW5kYXJWaWV3ID09PSAnZGF5Jykge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPckN1cnJlbnQgPVxuICAgICAgICB0aGlzLl9jZWxscy5maW5kKChlKSA9PiBlLm1hdGNoZXMoJzpzdGF0ZShzZWxlY3RlZCknKSkgPz9cbiAgICAgICAgdGhpcy5fY2VsbHMuZmluZCgoZSkgPT4gZS5tYXRjaGVzKCc6c3RhdGUoY3VycmVudCknKSk7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPckN1cnJlbnQgJiYgIXNlbGVjdGVkT3JDdXJyZW50LmRpc2FibGVkXG4gICAgICAgID8gc2VsZWN0ZWRPckN1cnJlbnRcbiAgICAgICAgOiB0aGlzLl9nZXRGaXJzdEZvY3VzYWJsZURheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RlZE9yQ3VycmVudCA9XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcjxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPj4oXG4gICAgICAgICAgYHNiYi1jYWxlbmRhci0ke3RoaXMuX2NhbGVuZGFyVmlld306c3RhdGUoc2VsZWN0ZWQpYCxcbiAgICAgICAgKSA/P1xuICAgICAgICB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3I8U2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4+KFxuICAgICAgICAgIGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9OnN0YXRlKGN1cnJlbnQpYCxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9yQ3VycmVudCAmJiAhc2VsZWN0ZWRPckN1cnJlbnQuZGlzYWJsZWRcbiAgICAgICAgPyBzZWxlY3RlZE9yQ3VycmVudFxuICAgICAgICA6IHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcjxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPj4oXG4gICAgICAgICAgICBgc2JiLWNhbGVuZGFyLSR7dGhpcy5fY2FsZW5kYXJWaWV3fTpub3QoW2Rpc2FibGVkXSlgLFxuICAgICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGBkYXlgIHZpZXcgaW4gYHZlcnRpY2FsYCBvcmllbnRhdGlvbixcbiAgICogaWYgdGhlIGZpcnN0IG9mIHRoZSBtb250aCBpcyBub3QgYSBNb25kYXksIGl0IGlzIG5vdCB0aGUgZmlyc3QgcmVuZGVyZWQgZWxlbWVudCBpbiB0aGUgdGFibGUsXG4gICAqIHNvIGB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJ3NiYi1jYWxlbmRhci1kYXk6bm90KFtkaXNhYmxlZF0pJylgIHdpbGwgcmV0dXJuIGEgd3JvbmcgdmFsdWUuXG4gICAqXG4gICAqIFRvIHNvbHZlIHRoaXMsIHRoZSBlbGVtZW50IHdpdGggdGhlIGxvd2VzdCBgdmFsdWVgIGlzIHRha2VuIChJU08gU3RyaW5nIGFyZSBvcmRlcmVkKS5cbiAgICovXG4gIHByaXZhdGUgX2dldEZpcnN0Rm9jdXNhYmxlRGF5KCk6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPiB8IG51bGwge1xuICAgIGNvbnN0IGNlbGxzID0gdGhpcy5fY2VsbHMgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+W107XG4gICAgY29uc3QgZGF5c0luVmlldyA9IGNlbGxzLmZpbHRlcigoZSkgPT4gIWUuZGlzYWJsZWQpO1xuICAgIGlmICghZGF5c0luVmlldyB8fCBkYXlzSW5WaWV3Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IGRheXNJblZpZXdcbiAgICAgICAgLm1hcCgoZSk6IHN0cmluZyA9PiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZS52YWx1ZSEgYXMgVCkpXG4gICAgICAgIC5zb3J0KClbMF07XG4gICAgICByZXR1cm4gY2VsbHMuZmluZCgoZSkgPT4gZS5tYXRjaGVzKGBbc2xvdD1cIiR7Zmlyc3RFbGVtZW50fVwiXWApKSEgPz8gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkYXk/OiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLy8gR2V0cyB0aGUgY3VycmVudGx5IHJlbmRlcmVkIHRhYmxlJ3MgY2VsbDtcbiAgICAvLyB0aGV5IGNvdWxkIGJlIGRheXMsIG1vbnRocyBvciB5ZWFycyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gdmlldy5cbiAgICBjb25zdCBvcmlnaW4gPSBkYXkgPz8gKGV2ZW50LnRhcmdldCBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4pO1xuICAgIGNvbnN0IGNlbGxzID0gdGhpcy5fY2VsbHM7XG4gICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGNlbGxzLmluZGV4T2Yob3JpZ2luKTtcbiAgICBsZXQgbmV4dEVsOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPjtcbiAgICBpZiAoZGF5KSB7XG4gICAgICBuZXh0RWwgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmREYXlWaWV3KFxuICAgICAgICBldmVudCxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGNlbGxzIGFzIFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdLFxuICAgICAgICB0aGlzLl9tYXBEYXRlVG9EYXkoZGF5LnZhbHVlISBhcyBUKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRFbCA9IHRoaXMuX25hdmlnYXRlQnlLZXlib2FyZChldmVudCwgaW5kZXgsIGNlbGxzKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWwgPSAodGhpcy5fZW5oYW5jZWRWYXJpYW50ID8gZG9jdW1lbnQgOiB0aGlzLnNoYWRvd1Jvb3QhKVxuICAgICAgLmFjdGl2ZUVsZW1lbnQgYXMgU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD47XG4gICAgaWYgKG5leHRFbCAhPT0gYWN0aXZlRWwpIHtcbiAgICAgIG5leHRFbC50YWJJbmRleCA9IDA7XG4gICAgICBuZXh0RWwuZm9jdXMoKTtcblxuICAgICAgaWYgKGNlbGxzLmluY2x1ZGVzKGFjdGl2ZUVsKSkge1xuICAgICAgICBhY3RpdmVFbC50YWJJbmRleCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRlQnlLZXlib2FyZERheVZpZXcoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdLFxuICAgIGRheTogRGF5PFQ+LFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4ge1xuICAgIGNvbnN0IGFycm93c09mZnNldCA9XG4gICAgICB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IGxlZnRSaWdodDogMSwgdXBEb3duOiBEQVlTX1BFUl9ST1cgfVxuICAgICAgICA6IHsgbGVmdFJpZ2h0OiBEQVlTX1BFUl9ST1csIHVwRG93bjogMSB9O1xuXG4gICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCAtYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUFycm93cyhjZWxscywgaW5kZXgsIGRheS5kYXRlVmFsdWUsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCAtYXJyb3dzT2Zmc2V0LmxlZnRSaWdodCk7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCBhcnJvd3NPZmZzZXQubGVmdFJpZ2h0KTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6IHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGNvbnN0IGZpcnN0T2ZXZWVrOiBudW1iZXIgPSArZGF5LmRheVZhbHVlICUgREFZU19QRVJfUk9XIHx8IERBWVNfUEVSX1JPVztcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gZmlyc3RPZldlZWsgLSArZGF5LmRheVZhbHVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9mZnNldEZvclZlcnRpY2FsOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoZGF5LmRhdGVWYWx1ZSk7XG4gICAgICAgICAgY29uc3Qgd2Vla051bWJlcjogbnVtYmVyID0gTWF0aC5jZWlsKCgrZGF5LmRheVZhbHVlICsgb2Zmc2V0Rm9yVmVydGljYWwpIC8gREFZU19QRVJfUk9XKTtcbiAgICAgICAgICBjb25zdCBmaXJzdE9mV2VlazogbnVtYmVyID0gKHdlZWtOdW1iZXIgLSAxKSAqIERBWVNfUEVSX1JPVyAtIG9mZnNldEZvclZlcnRpY2FsICsgMTtcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gZmlyc3RPZldlZWsgLSArZGF5LmRheVZhbHVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdQYWdlRG93bic6IHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGNvbnN0IG1vbnRoSW5Cb3VuZHMgPSArZGF5Lm1vbnRoVmFsdWUgKyAxID4gMTIgPyAxIDogK2RheS5tb250aFZhbHVlICsgMTtcbiAgICAgICAgICBjb25zdCB5ZWFySW5Cb3VuZHMgPSArZGF5Lm1vbnRoVmFsdWUgKyAxID4gMTIgPyArZGF5LnllYXJWYWx1ZSArIDEgOiArZGF5LnllYXJWYWx1ZTtcbiAgICAgICAgICBjb25zdCBmaXJzdE5leHRNb250aDogVCA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhckluQm91bmRzLCBtb250aEluQm91bmRzLCAxKTtcbiAgICAgICAgICBjb25zdCBsYXN0T2ZNb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShcbiAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdE5leHRNb250aCwgLTEpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9XG4gICAgICAgICAgICBNYXRoLnRydW5jKChsYXN0T2ZNb250aCAtICtkYXkuZGF5VmFsdWUhKSAvIERBWVNfUEVSX1JPVykgKiBEQVlTX1BFUl9ST1c7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlQYWdlVXBEb3duKGNlbGxzLCBpbmRleCwgZGF5LCBkZWx0YSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9mZnNldEZvclZlcnRpY2FsOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoZGF5LmRhdGVWYWx1ZSk7XG4gICAgICAgICAgY29uc3Qgd2Vla051bWJlcjogbnVtYmVyID0gTWF0aC5jZWlsKCgrZGF5LmRheVZhbHVlICsgb2Zmc2V0Rm9yVmVydGljYWwpIC8gREFZU19QRVJfUk9XKTtcbiAgICAgICAgICBjb25zdCBsYXN0T2ZXZWVrOiBudW1iZXIgPSB3ZWVrTnVtYmVyICogREFZU19QRVJfUk9XIC0gb2Zmc2V0Rm9yVmVydGljYWw7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IGxhc3RPZldlZWsgLSArZGF5LmRheVZhbHVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnSG9tZSc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlGaXJzdChjZWxscywgaW5kZXgsIGRheSwgMSk7XG4gICAgICB9XG4gICAgICBjYXNlICdFbmQnOiB7XG4gICAgICAgIGNvbnN0IG1vbnRoSW5Cb3VuZHMgPSArZGF5Lm1vbnRoVmFsdWUgKyAxID4gMTIgPyAxIDogK2RheS5tb250aFZhbHVlICsgMTtcbiAgICAgICAgY29uc3QgeWVhckluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gK2RheS55ZWFyVmFsdWUgKyAxIDogK2RheS55ZWFyVmFsdWU7XG4gICAgICAgIGNvbnN0IGZpcnN0TmV4dE1vbnRoOiBUID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFySW5Cb3VuZHMsIG1vbnRoSW5Cb3VuZHMsIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUxhc3QoY2VsbHMsIGluZGV4LCBmaXJzdE5leHRNb250aCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzRGF5T3V0T2ZWaWV3KGRhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRlIDwgdGhpcy5fZmlyc3RWaXNpYmxlRGF5IHx8IGRhdGUgPiB0aGlzLl9sYXN0VmlzaWJsZURheTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlBcnJvd3MoXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF0ZTogVCxcbiAgICBkZWx0YTogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4ge1xuICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCBkZWx0YSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5faXNEYXlPdXRPZlZpZXcobmV3RGF0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gICAgY29uc3QgbmV4dENlbGwgPSBjZWxscy5maW5kKChlKSA9PiB0aGlzLl9tYXBWYWx1ZVRvSVNPRGF0ZShlLnZhbHVlISkgPT09IG5ld0RhdGVWYWx1ZSk7XG4gICAgaWYgKCFuZXh0Q2VsbCB8fCBuZXh0Q2VsbC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShuZXdEYXRlVmFsdWUpISwgZGVsdGEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dENlbGw7XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGF5UGFnZVVwRG93bihcbiAgICBjZWxsczogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXk6IERheTxUPixcbiAgICBkZWx0YTogbnVtYmVyLFxuICAgIGRlbHRhSWZEaXNhYmxlZDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD4ge1xuICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXkuZGF0ZVZhbHVlLCBkZWx0YSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5faXNEYXlPdXRPZlZpZXcobmV3RGF0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gICAgY29uc3QgbmV4dENlbGwgPSBjZWxscy5maW5kKChlKSA9PiB0aGlzLl9tYXBWYWx1ZVRvSVNPRGF0ZShlLnZhbHVlISkgPT09IG5ld0RhdGVWYWx1ZSk7XG4gICAgaWYgKCFuZXh0Q2VsbCB8fCBuZXh0Q2VsbC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlQYWdlVXBEb3duKGNlbGxzLCBpbmRleCwgZGF5LCBkZWx0YSArIGRlbHRhSWZEaXNhYmxlZCwgZGVsdGFJZkRpc2FibGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERheUZpcnN0KFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnQ8VD5bXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRheTogRGF5PFQ+LFxuICAgIGRhdGU6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKCtkYXkueWVhclZhbHVlLCArZGF5Lm1vbnRoVmFsdWUsIGRhdGUpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5Rmlyc3QoY2VsbHMsIGluZGV4LCBkYXksIGRhdGUgKyAxKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERheUxhc3QoXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPltdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZmlyc3ROZXh0TW9udGg6IFQsXG4gICk6IFNiYkNhbGVuZGFyRGF5RWxlbWVudDxUPiB7XG4gICAgY29uc3QgbmV3RGF0ZVZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGZpcnN0TmV4dE1vbnRoLCAtMSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5faXNEYXlPdXRPZlZpZXcobmV3RGF0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gICAgY29uc3QgbmV4dENlbGwgPSBjZWxscy5maW5kKChlKSA9PiB0aGlzLl9tYXBWYWx1ZVRvSVNPRGF0ZShlLnZhbHVlISkgPT09IG5ld0RhdGVWYWx1ZSk7XG4gICAgaWYgKCFuZXh0Q2VsbCB8fCBuZXh0Q2VsbC5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlMYXN0KGNlbGxzLCBpbmRleCwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobmV3RGF0ZVZhbHVlKSEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dENlbGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gbW92ZSB0bywgYmFzZWQgb24gYSBsaXN0IG9mIGVsZW1lbnRzICh3aGljaCBjYW4gYmUgcG90ZW50aWFsbHkgZGlzYWJsZWQpLFxuICAgKiB0aGUga2V5Ym9hcmQgaW5wdXQgYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBsaXN0LlxuICAgKiBJbiB0aGUgZGF5IHZpZXcsIHRoZSBgZGF5PzogRGF5YCBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGZvciBjYWxjdWxhdGlvbixcbiAgICogd2hpbGUgaW4gbW9udGggYW5kIHllYXIgdmlldyBpdCdzIG5vdCBkdWUgdG8gdGhlIGZpeGVkIGFtb3VudCBvZiByZW5kZXJlZCBjZWxscy5cbiAgICovXG4gIHByaXZhdGUgX25hdmlnYXRlQnlLZXlib2FyZChcbiAgICBldnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjZWxsczogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSxcbiAgKTogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGUsXG4gICAgICBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICB2ZXJ0aWNhbE9mZnNldCxcbiAgICB9OiBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvbk1vbnRoWWVhclZpZXdzUGFyYW1ldGVycyA9XG4gICAgICB0aGlzLl9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKGluZGV4LCB0aGlzLl9jYWxlbmRhclZpZXcgPT09ICd5ZWFyJyk7XG5cbiAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAtdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLTEpO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIDEpO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3QoY2VsbHMsIG9mZnNldEZvcldpZGVNb2RlKTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3RPbkNvbHVtbihcbiAgICAgICAgICBjZWxscyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRMYXN0T25Db2x1bW4oY2VsbHMsIGluZGV4LCBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdChjZWxscywgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlIC0gMSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCBpbiBrZXlib2FyZCBuYXZpZ2F0aW9uIGluIHllYXIgYW5kIG1vbnRoIHZpZXcuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgc3RhcnRpbmcgZWxlbWVudCdzIGluZGV4IGluIHRoZSBjZWxsIGFycmF5LlxuICAgKiBAcGFyYW0gaXNZZWFyVmlldyBXaGV0aGVyIHRoZSBkaXNwbGF5ZWQgYHZpZXdgIGlzIHRoZSB5ZWFyIG9uZS5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVBhcmFtZXRlcnNGb3JLZXlib2FyZE5hdmlnYXRpb24oXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpc1llYXJWaWV3OiBib29sZWFuLFxuICApOiBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvbk1vbnRoWWVhclZpZXdzUGFyYW1ldGVycyB7XG4gICAgY29uc3QgZWxlbWVudHNQZXJQYWdlID0gaXNZZWFyVmlldyA/IFlFQVJTX1BFUl9QQUdFIDogTU9OVEhTX1BFUl9QQUdFO1xuICAgIGNvbnN0IG9mZnNldDogbnVtYmVyID0gTWF0aC50cnVuYyhpbmRleCAvIGVsZW1lbnRzUGVyUGFnZSkgKiBlbGVtZW50c1BlclBhZ2U7XG4gICAgY29uc3QgaW5kZXhJblZpZXc6IG51bWJlciA9IG9mZnNldCA9PT0gMCA/IGluZGV4IDogaW5kZXggLSBlbGVtZW50c1BlclBhZ2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnRpY2FsT2Zmc2V0OiBpc1llYXJWaWV3ID8gWUVBUlNfUEVSX1JPVyA6IE1PTlRIU19QRVJfUk9XLFxuICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4SW5WaWV3LFxuICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IGluZGV4IC0gaW5kZXhJblZpZXcsXG4gICAgICBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG9mZnNldCA9PT0gMCA/IGVsZW1lbnRzUGVyUGFnZSA6IGVsZW1lbnRzUGVyUGFnZSAqIDIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHByb3ZpZGVkIGFycmF5IHN0YXJ0aW5nIGZyb20gYGluZGV4YCBieSBhZGRpbmcgYGRlbHRhYC5cbiAgICogSWYgdGhlIGZvdW5kIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGl0IGNvbnRpbnVlcyBhZGRpbmcgYGRlbHRhYCB1bnRpbCBpdCBmaW5kcyBhbiBlbmFibGVkIG9uZSBpbiB0aGUgYXJyYXkgYm91bmRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZE5leHQoXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRlbHRhOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgICBsZXQgbmV4dEluZGV4ID0gaW5kZXggKyBkZWx0YTtcbiAgICB3aGlsZSAobmV4dEluZGV4IDwgZGF5cy5sZW5ndGggJiYgZGF5c1tuZXh0SW5kZXhdPy5kaXNhYmxlZCkge1xuICAgICAgbmV4dEluZGV4ICs9IGRlbHRhO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c1tuZXh0SW5kZXhdID8/IGRheXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdChcbiAgICBkYXlzOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDxUPltdLFxuICAgIGZpcnN0T2ZDdXJyZW50TW9udGg6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4ge1xuICAgIHJldHVybiAhZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2ZpcnN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGZpcnN0T2ZDdXJyZW50TW9udGgsIDEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxhc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3QoXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSxcbiAgICBsYXN0T2ZDdXJyZW50TW9udGg6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD4ge1xuICAgIHJldHVybiAhZGF5c1tsYXN0T2ZDdXJyZW50TW9udGhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbGFzdE9mQ3VycmVudE1vbnRoXVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBsYXN0T2ZDdXJyZW50TW9udGgsIC0xKTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHNhbWUgY29sdW1uIG9mIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZEZpcnN0T25Db2x1bW4oXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHZlcnRpY2FsT2Zmc2V0OiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSAoaW5kZXggJSB2ZXJ0aWNhbE9mZnNldCkgKyBvZmZzZXQ7XG4gICAgcmV0dXJuICFkYXlzW25leHRJbmRleF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tuZXh0SW5kZXhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIG5leHRJbmRleCwgdmVydGljYWxPZmZzZXQpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxhc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBzYW1lIGNvbHVtbiBvZiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRMYXN0T25Db2x1bW4oXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ8VD5bXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHZlcnRpY2FsT2Zmc2V0OiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PFQ+IHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCArIE1hdGgudHJ1bmMoKG9mZnNldCAtIGluZGV4IC0gMSkgLyB2ZXJ0aWNhbE9mZnNldCkgKiB2ZXJ0aWNhbE9mZnNldDtcbiAgICByZXR1cm4gIWRheXNbbmV4dEluZGV4XS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW25leHRJbmRleF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbmV4dEluZGV4LCAtdmVydGljYWxPZmZzZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRDYWxlbmRhclZpZXdBbmRFbWl0TW9udGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRDYWxlbmRhclZpZXcoKTtcbiAgICB0aGlzLl9lbWl0TW9udGhDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q2FsZW5kYXJWaWV3KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250YWluaW5nRm9jdXMpIHtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVEYXRlID1cbiAgICAgICh0aGlzLm11bHRpcGxlID8gKHRoaXMuX3ZhbHVlIGFzIFRbXSkuYXQoLTEpIDogKHRoaXMuX3ZhbHVlIGFzIFQpKSA/P1xuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faW5pdCgpO1xuICAgIHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjYWxlbmRhciB0YWJsZSBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlKFxuICAgIHdlZWtzOiBEYXk8VD5bXVtdLFxuICAgIHdlZWtOdW1iZXJzOiBudW1iZXJbXSxcbiAgICBmaXJzdDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gd2Vla3NbMF1bMF0uZGF0ZVZhbHVlO1xuICAgIGNvbnN0IG1vbnRoTGFiZWwgPSBgJHtcbiAgICAgIHRoaXMuX21vbnRoTmFtZXNbdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZmlyc3REYXkpIC0gMV1cbiAgICB9ICR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmaXJzdERheSl9YDtcbiAgICBjb25zdCB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnM6IERheTxUPltdID0gd2Vla3MuZmxhdCgpO1xuICAgIGNvbnN0IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrRGF5czogRGF5PFQ+W10gPSB3ZWVrcy5mbGF0KCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS13cmFwcGVyIHNiYi1jYWxlbmRhcl9fZGF5LXZpZXdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4+JHttb250aExhYmVsfTwvc3Bhbj4gJHtmaXJzdCA/IHRoaXMuX2NyZWF0ZURheVRhYmxlQ29udHJvbHMobW9udGhMYWJlbCkgOiBub3RoaW5nfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgICBAZm9jdXNvdXQ9JHsoZXZlbnQ6IEZvY3VzRXZlbnQpID0+XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgID5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICR7dGhpcy53ZWVrTnVtYmVyc1xuICAgICAgICAgICAgICAgID8gaHRtbGA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+PC90aD5gXG4gICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAke3RoaXMuX3dlZWtkYXlzLm1hcChcbiAgICAgICAgICAgICAgICAod2Vla0RheTogV2Vla2RheSwgaW5kZXg6IG51bWJlcikgPT4gaHRtbGBcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrRGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFN1bmRheXMgaGF2ZSBpbmRleCA3LCB3aGlsZSB0aGVpciB3ZWVrRGF5VmFsdWUgaXMgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla0RheXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrRGF5VmFsdWUgPT09IChpbmRleCArIDEpICUgNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0TXVsdGlwbGVEYXRlcyhkYXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla2RheT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7d2Vla0RheS5sb25nfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrRGF5Lm5hcnJvd308L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICR7d2Vla3MubWFwKCh3ZWVrOiBEYXk8VD5bXSwgcm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFJvd09mZnNldDogbnVtYmVyID0gREFZU19QRVJfUk9XIC0gd2Vlay5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiBmaXJzdFJvd09mZnNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwtdmVydGljYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLXdlZWtudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtOdW1iZXJzWzBdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzOiBEYXk8VD5bXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXk6IERheTxUPikgPT4gZGF5LndlZWtWYWx1ZSA9PT0gd2Vla051bWJlcnNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NiYi1jYWxlbmRhci13ZWVrbnVtYmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcnNbMF19YH08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyc1swXX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgICAgICAke1suLi5BcnJheShmaXJzdFJvd09mZnNldCkua2V5cygpXS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4gaHRtbGA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj48L3RkPmAsXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2Vlayl9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgJHt0aGlzLndlZWtOdW1iZXJzXG4gICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwtdmVydGljYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLXdlZWtudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrTnVtYmVyc1tyb3dJbmRleF19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUgPT09IHdlZWtOdW1iZXJzW3Jvd0luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0TXVsdGlwbGVEYXRlcyhkYXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiR7YCR7aTE4bkNhbGVuZGFyV2Vla051bWJlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt3ZWVrTnVtYmVyc1tyb3dJbmRleF19YH08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtOdW1iZXJzW3Jvd0luZGV4XX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2Vlayl9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGluIG9yaWVudGF0aW9uPSd2ZXJ0aWNhbCcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlVmVydGljYWwoXG4gICAgd2Vla3M6IERheTxUPltdW10sXG4gICAgd2Vla051bWJlcnM6IG51bWJlcltdLFxuICAgIGZpcnN0OiBib29sZWFuLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3REYXkgPSB3ZWVrc1swXVswXS5kYXRlVmFsdWU7XG4gICAgY29uc3QgbW9udGhMYWJlbCA9IGAke1xuICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChmaXJzdERheSkgLSAxXVxuICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGZpcnN0RGF5KX1gO1xuICAgIGNvbnN0IGFjdGl2ZURhdGUgPSB3ZWVrc1swXVswXS5kYXRlVmFsdWU7XG4gICAgY29uc3Qgd2Vla09mZnNldCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldChhY3RpdmVEYXRlID8/IHRoaXMuX2FjdGl2ZURhdGUpO1xuICAgIGNvbnN0IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrTnVtYmVyczogRGF5PFQ+W10gPSB3ZWVrcy5mbGF0KCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS13cmFwcGVyIHNiYi1jYWxlbmRhcl9fZGF5LXZpZXdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4+JHttb250aExhYmVsfTwvc3Bhbj4gJHtmaXJzdCA/IHRoaXMuX2NyZWF0ZURheVRhYmxlQ29udHJvbHMobW9udGhMYWJlbCkgOiBub3RoaW5nfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgICBAZm9jdXNvdXQ9JHsoZXZlbnQ6IEZvY3VzRXZlbnQpID0+XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgID5cbiAgICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICR7d2Vla051bWJlcnMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICh3ZWVrTnVtYmVyOiBudW1iZXIpID0+IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7d2Vla051bWJlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzOiBEYXk8VD5bXSA9IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrTnVtYmVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXk6IERheTxUPikgPT4gZGF5LndlZWtWYWx1ZSA9PT0gd2Vla051bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0TXVsdGlwbGVEYXRlcyhkYXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiR7YCR7aTE4bkNhbGVuZGFyV2Vla051bWJlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt3ZWVrTnVtYmVyfWB9PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIGBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAke3dlZWtzLm1hcCgod2VlazogRGF5PFQ+W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgd2Vla2RheSA9IHRoaXMuX3dlZWtkYXlzW3Jvd0luZGV4XTtcbiAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbFwiPlxuICAgICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItd2Vla2RheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtkYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fc2VsZWN0TXVsdGlwbGVEYXRlcyh3ZWVrKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7d2Vla2RheS5uYXJyb3d9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLXdlZWtkYXk+XG4gICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgOiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3dlZWtkYXkubG9uZ308L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7d2Vla2RheS5uYXJyb3d9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAke3Jvd0luZGV4IDwgd2Vla09mZnNldFxuICAgICAgICAgICAgICAgICAgICA/IGh0bWxgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+PC90ZD5gXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2Vlayl9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVDb250cm9scyhtb250aExhYmVsOiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5fZml4ZWRNb250aFxuICAgICAgPyBbXVxuICAgICAgOiBbXG4gICAgICAgICAgdGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50TW9udGgoLTEpLFxuICAgICAgICAgICAgaTE4blByZXZpb3VzTW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c01vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXMuX2dldEFycm93KFxuICAgICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRNb250aCgxKSxcbiAgICAgICAgICAgIGkxOG5OZXh0TW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICB0aGlzLl9uZXh0TW9udGhEaXNhYmxlZCgpLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgICAndXAnLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJWaWV3ID0gJ3llYXInO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGAke2kxOG5ZZWFyTW9udGhTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7bW9udGhMYWJlbH1gLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgY2VsbHMgZm9yIHRoZSBkYWlseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlDZWxscyh3ZWVrOiBEYXk8VD5bXSk6IFRlbXBsYXRlUmVzdWx0W10ge1xuICAgIHJldHVybiB3ZWVrLm1hcCgoZGF5OiBEYXk8VD4pID0+IHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEgc2JiLWNhbGVuZGFyX19kYXktY2VsbFwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9JHtkYXkudmFsdWV9PlxuICAgICAgICAgICAgPHNiYi1jYWxlbmRhci1kYXkgc2xvdD0ke2RheS52YWx1ZX0+PC9zYmItY2FsZW5kYXItZGF5PlxuICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgPC90ZD5cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJNb250aFZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtd3JhcHBlciBzYmItY2FsZW5kYXJfX21vbnRoLXZpZXdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4+JHt0aGlzLl9jaG9zZW5ZZWFyfTwvc3Bhbj5cbiAgICAgICAgICAke3RoaXMuX2ZpeGVkTW9udGhcbiAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldEFycm93KFxuICAgICAgICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXIoLTEpLFxuICAgICAgICAgICAgICAgICAgaTE4blByZXZpb3VzWWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzWWVhckRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhcigxKSxcbiAgICAgICAgICAgICAgICAgIGkxOG5OZXh0WWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25leHRZZWFyRGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dldEFycm93KFxuICAgICAgICAgICAgICAgICAgJ2Rvd24nLFxuICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fcmVzZXRDYWxlbmRhclZpZXdBbmRFbWl0TW9udGhDaGFuZ2UoKSxcbiAgICAgICAgICAgICAgICAgIGkxOG5DYWxlbmRhckRhdGVTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIiByb2xlPVwic3RhdHVzXCI+JHt0aGlzLl9jaG9zZW5ZZWFyfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAke3RoaXMuX21vbnRocy5tYXAoXG4gICAgICAgICAgICAgIChyb3c6IE1vbnRoQ2VsbFtdKSA9PiBodG1sYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICR7cm93Lm1hcCgobW9udGg6IE1vbnRoQ2VsbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItbW9udGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt0aGlzLl9jaG9zZW5ZZWFyfS0ke21vbnRoLnZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Nb250aFNlbGVjdGlvbihtb250aC5tb250aFZhbHVlLCB0aGlzLl9jaG9zZW5ZZWFyISl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zYmItY2FsZW5kYXItbW9udGg+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIFNlbGVjdCB0aGUgbW9udGggYW5kIGNoYW5nZSB0aGUgdmlldyB0byBkYXkgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vbk1vbnRoU2VsZWN0aW9uKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gbW9udGg7XG4gICAgdGhpcy5fY2FsZW5kYXJWaWV3ID0gJ2RheSc7XG4gICAgdGhpcy5faW5pdChcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgIHllYXIsXG4gICAgICAgIHRoaXMuX2Nob3Nlbk1vbnRoLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuX2VtaXRNb250aENoYW5nZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3RZZWFyOiBudW1iZXIgPSB0aGlzLl95ZWFycy5mbGF0KDIpWzBdO1xuICAgIGNvbnN0IGxhc3RZZWFyQXJyYXk6IG51bWJlcltdID0gdGhpcy5feWVhcnMuYXQoLTEpIS5mbGF0KCk7XG4gICAgY29uc3QgbGFzdFllYXI6IG51bWJlciA9IGxhc3RZZWFyQXJyYXlbbGFzdFllYXJBcnJheS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCB5ZWFyTGFiZWwgPSBgJHtmaXJzdFllYXJ9IC0gJHtsYXN0WWVhcn1gO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtd3JhcHBlciBzYmItY2FsZW5kYXJfX3llYXItdmlld1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c3Bhbj4ke3llYXJMYWJlbH08L3NwYW4+XG4gICAgICAgICAgJHt0aGlzLl9maXhlZE1vbnRoXG4gICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoLVlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICAgICAgICAgIGkxOG5QcmV2aW91c1llYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICAgICAgICAgIGkxOG5OZXh0WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX25leHRZZWFyUmFuZ2VEaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgICAgICAgICAnZG93bicsXG4gICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9yZXNldENhbGVuZGFyVmlld0FuZEVtaXRNb250aENoYW5nZSgpLFxuICAgICAgICAgICAgICAgICAgaTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdfVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiIHJvbGU9XCJzdGF0dXNcIj4ke3llYXJMYWJlbH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCI+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgJHt0aGlzLl95ZWFycy5tYXAoXG4gICAgICAgICAgICAgIChyb3c6IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgICAgIGh0bWxgIDx0cj5cbiAgICAgICAgICAgICAgICAgICR7cm93Lm1hcCgoeWVhcjogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci15ZWFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke1N0cmluZyh5ZWFyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KGV2dCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uWWVhclNlbGVjdGlvbih5ZWFyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLXllYXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvdHI+YCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuWWVhciA9IHllYXI7XG4gICAgdGhpcy5fY2FsZW5kYXJWaWV3ID0gJ21vbnRoJztcbiAgICB0aGlzLl9hc3NpZ25BY3RpdmVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgdGhpcy5fY2hvc2VuWWVhcixcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYnV0dG9uIGFycm93IGZvciBhbGwgdGhlIHZpZXdzLiAqL1xuICBwcml2YXRlIF9nZXRBcnJvdyhcbiAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcgfCAnZG93bicgfCAndXAnLFxuICAgIGNsaWNrOiAoKSA9PiB2b2lkLFxuICAgIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sXCJcbiAgICAgIHNpemU9XCJzXCJcbiAgICAgIGljb24tbmFtZT1cImNoZXZyb24tc21hbGwtJHtkaXJlY3Rpb259LXNtYWxsXCJcbiAgICAgIGFyaWEtbGFiZWw9JHthcmlhTGFiZWx9XG4gICAgICBAY2xpY2s9JHtjbGlja31cbiAgICAgID9kaXNhYmxlZD0ke2Rpc2FibGVkfVxuICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPmA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHwgdHlwZW9mIG5vdGhpbmcge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBub3RoaW5nO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGlmIChpc1NlcnZlciB8fCB0aGlzLmh5ZHJhdGlvblJlcXVpcmVkKSB7XG4gICAgICAvLyBUT0RPOiBXZSBkaXNhYmxlIFNTUiBmb3IgY2FsZW5kYXIgZm9yIG5vdy4gRmlndXJlIG91dCwgaWYgdGhlcmUgaXMgYSB3YXlcbiAgICAgIC8vIHRvIGVuYWJsZSBpdCwgd2hpbGUgY29uc2lkZXJpbmcgaTE4biBhbmQgZGF0ZSBpbmZvcm1hdGlvbi5cbiAgICAgIHJldHVybiBodG1sYCR7bm90aGluZ31gO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3dyYXBwZXJcIj5cbiAgICAgICR7dGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gdGhpcy5fd2Vla3MubWFwKCh3ZWVrcywgaSkgPT4gdGhpcy5fY3JlYXRlRGF5VGFibGUod2Vla3MsIHRoaXMuX3dlZWtOdW1iZXJzW2ldLCBpID09PSAwKSlcbiAgICAgICAgOiB0aGlzLl93ZWVrcy5tYXAoKHdlZWtzLCBpKSA9PlxuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRGF5VGFibGVWZXJ0aWNhbCh3ZWVrcywgdGhpcy5fd2Vla051bWJlcnNbaV0sIGkgPT09IDApLFxuICAgICAgICAgICl9XG4gICAgICAke3RoaXMuX2dldFZpZXcoKX1cbiAgICA8L2Rpdj5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2FsZW5kYXInOiBTYmJDYWxlbmRhckVsZW1lbnQ7XG4gIH1cbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50RXZlbnRNYXAge1xuICAgIG1vbnRoY2hhbmdlOiBTYmJNb250aENoYW5nZUV2ZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQ3FEQSxJQUFNLGVBQXVCO0FBQzdCLElBQU0saUJBQXlCO0FBQy9CLElBQU0sZ0JBQXdCO0FBQzlCLElBQU0sa0JBQTBCO0FBQ2hDLElBQU0saUJBQXlCO0FBRS9CLElBQWEsc0JBQWIsY0FBeUMsTUFBSztDQUc1QyxJQUFXLFFBQUs7RUFDZCxPQUFPLEtBQUs7Q0FDZDtDQUVBLFlBQW1CLE9BQXFCO0VBQ3RDLE1BQU0sZUFBZTtHQUFFLFNBQVM7R0FBTSxVQUFVO0VBQUksQ0FBRTtFQUN0RCxLQUFLLFNBQVMsT0FBTyxPQUFPLFNBQVMsQ0FBQSxDQUFFO0NBQ3pDOztBQUdGLElBQWEsdUJBQWIsY0FBNkMsTUFBSztDQUdoRCxJQUFXLGVBQVk7RUFDckIsT0FBTyxLQUFLO0NBQ2Q7Q0FFQSxZQUFtQixPQUFjO0VBQy9CLE1BQU0sZ0JBQWdCO0dBQUUsU0FBUztHQUFNLFVBQVU7RUFBSSxDQUFFO0VBQ3ZELEtBQUssZ0JBQWdCLE9BQU8sT0FBTyxLQUFLO0NBQzFDOzs7Ozs7O0lBZ0RXLDRCQUFrQjttQkFBbUIsdUJBQXVCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FBdEUsMkJBQXFDLFlBQWtDOzs7eUJBd0JqRixVQUFTLEdBQ1QsU0FBUyxFQUFFLE1BQU0sT0FBTSxDQUFFLENBQUM7dUJB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
@@ -1,4 +1,4 @@
1
- import { t as SbbCalendarDayElement } from "./calendar-day.component-Zky9Z-Fq.js";
1
+ import { t as SbbCalendarDayElement } from "./calendar-day.component-DS2H_TP3.js";
2
2
  import { SbbCalendarMonthElement } from "./calendar/calendar-month/calendar-month.component.js";
3
3
  import { SbbCalendarYearElement } from "./calendar/calendar-year/calendar-year.component.js";
4
4
  import { SbbCalendarWeekdayElement } from "./calendar/calendar-weekday/calendar-weekday.component.js";
@@ -1,4 +1,4 @@
1
- import { t as SbbCalendarDayElement } from "./calendar-day.component-Zky9Z-Fq.js";
1
+ import { t as SbbCalendarDayElement } from "./calendar-day.component-DS2H_TP3.js";
2
2
  import { SbbCalendarMonthElement } from "./calendar/calendar-month/calendar-month.component.js";
3
3
  import { SbbCalendarYearElement } from "./calendar/calendar-year/calendar-year.component.js";
4
4
  import { SbbCalendarWeekdayElement } from "./calendar/calendar-weekday/calendar-weekday.component.js";
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sbb-esta/lyne-elements-dev",
3
- "version": "5.0.0-next.3-dev.1781073244",
3
+ "version": "5.0.1-dev.1781208601",
4
4
  "description": "Lyne Design System",
5
5
  "keywords": [
6
6
  "design system",
7
7
  "web components",
8
8
  "lit",
9
- "https://github.com/sbb-design-systems/lyne-components/commit/8470338a67ad37c8e01a688789b2429d1d074cd9"
9
+ "https://github.com/sbb-design-systems/lyne-components/commit/a0edddade160b5b3a6323a997f9bf26b2482a46c"
10
10
  ],
11
11
  "type": "module",
12
12
  "exports": {