@kaspernj/api-maker 1.0.2105 → 1.0.2107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -96,6 +96,42 @@ The relationship name is stored in `snake_case`, so `preloadRelationship("Accoun
96
96
 
97
97
  `config` is a shared singleton. Some helpers (forms, routing, navigation, and money inputs) require config values like `history`, `linkTo`, `navigation`, and `currenciesCollection` to be set. If a required value is missing, the getter throws an error to avoid silent failures.
98
98
 
99
+ ## ApiMakerTable date formatting
100
+
101
+ `ApiMakerTable` supports date formatting in two ways:
102
+
103
+ - i18n format-name strings (existing behavior)
104
+ - formatter callbacks (custom behavior)
105
+
106
+ Use `defaultDateFormatName` for date values and `defaultDateTimeFormatName` for datetime values.
107
+
108
+ ```jsx
109
+ <ApiMakerTable
110
+ defaultDateFormatName="date.formats.default"
111
+ defaultDateTimeFormatName="time.formats.default"
112
+ modelClass={User}
113
+ />
114
+ ```
115
+
116
+ You can also pass callbacks when you need country-aware or app-specific formatting:
117
+
118
+ ```jsx
119
+ <ApiMakerTable
120
+ defaultDateFormatName={({value}) => formatByCountry(value, "date")}
121
+ defaultDateTimeFormatName={({value}) => formatByCountry(value, "date-with-time")}
122
+ modelClass={User}
123
+ />
124
+ ```
125
+
126
+ Callback arguments:
127
+
128
+ - `value`: the `Date` instance being rendered
129
+ - `apiMakerType`: `"date"` or `"time"`
130
+ - `column`: the column definition object
131
+ - `model`: the current row model
132
+ - `table`: the table component instance
133
+ - `l`: ApiMaker i18n formatter helper (for fallback/interop)
134
+
99
135
  ## API reference
100
136
 
101
137
  ApiMaker generates model classes from your recipes. The classes inherit `BaseModel` and expose relationship helpers based on your server-side associations.
@@ -17,9 +17,29 @@ export default class ApiMakerTableColumnContent {
17
17
  columnsContentFromAttributeAndPath(): any;
18
18
  content(): any;
19
19
  presentColumnValue: (value: any) => any;
20
+ /**
21
+ * Presents date and datetime values using either translation-format keys or formatter callbacks.
22
+ * @param {object} args
23
+ * @param {"date"|"time"} [args.apiMakerType]
24
+ * @param {Date} args.value
25
+ * @returns {string}
26
+ */
20
27
  presentDateTime: ({ apiMakerType, value }: {
21
- apiMakerType: any;
22
- value: any;
23
- }) => any;
28
+ apiMakerType?: "date" | "time";
29
+ value: Date;
30
+ }) => string;
31
+ /**
32
+ * Resolves a date format key or executes a custom formatter callback.
33
+ * @param {object} args
34
+ * @param {"date"|"time"} args.apiMakerType
35
+ * @param {Function|string} args.format
36
+ * @param {Date} args.value
37
+ * @returns {string}
38
+ */
39
+ presentDateTimeValue({ apiMakerType, format, value }: {
40
+ apiMakerType: "date" | "time";
41
+ format: Function | string;
42
+ value: Date;
43
+ }): string;
24
44
  }
25
45
  //# sourceMappingURL=column-content.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-content.d.ts","sourceRoot":"/src/","sources":["table/column-content.jsx"],"names":[],"mappings":"AAQA;IACE;;;;;;;OAOC;IANC,YAAoB;IACpB,OAAU;IACV,aAAgB;IAChB,WAAkB;IAClB,OAAU;IACV,WAAkB;IAGpB,mCAQC;IAED,0CAsCC;IAED,eAMC;IAED,qBAAsB,UAAK,SA+B1B;IAED,kBAAmB;;;KAAqB,SAYvC;CACF"}
1
+ {"version":3,"file":"column-content.d.ts","sourceRoot":"/src/","sources":["table/column-content.jsx"],"names":[],"mappings":"AAQA;IACE;;;;;;;OAOC;IANC,YAAoB;IACpB,OAAU;IACV,aAAgB;IAChB,WAAkB;IAClB,OAAU;IACV,WAAkB;IAGpB,mCAQC;IAED,0CAsCC;IAED,eAMC;IAED,qBAAsB,UAAK,SA+B1B;IAED;;;;;;OAMG;IACH,kBAAmB,yBAJhB;QAA6B,YAAY,GAAjC,MAAM,GAAC,MAAM;QACF,KAAK,EAAhB,IAAI;KAGkC,KAFpC,MAAM,CAclB;IAED;;;;;;;OAOG;IACH,sDALG;QAA4B,YAAY,EAAhC,MAAM,GAAC,MAAM;QACS,MAAM,EAA5B,WAAS,MAAM;QACJ,KAAK,EAAhB,IAAI;KACZ,GAAU,MAAM,CAelB;CACF"}
@@ -95,18 +95,46 @@ export default class ApiMakerTableColumnContent {
95
95
  }
96
96
  return _jsx(Text, { children: contentText });
97
97
  };
98
- presentDateTime = ({ apiMakerType, value }) => {
98
+ /**
99
+ * Presents date and datetime values using either translation-format keys or formatter callbacks.
100
+ * @param {object} args
101
+ * @param {"date"|"time"} [args.apiMakerType]
102
+ * @param {Date} args.value
103
+ * @returns {string}
104
+ */
105
+ presentDateTime = ({ apiMakerType = "time", value }) => {
99
106
  if (!apiMakerType || apiMakerType == "time") {
100
107
  const dateTimeFormatName = this.table.props.defaultDateTimeFormatName || "time.formats.default";
101
- return this.l(dateTimeFormatName, value);
108
+ return this.presentDateTimeValue({ apiMakerType: "time", format: dateTimeFormatName, value });
102
109
  }
103
110
  else if (apiMakerType == "date") {
104
111
  const dateFormatName = this.table.props.defaultDateFormatName || "date.formats.default";
105
- return this.l(dateFormatName, value);
112
+ return this.presentDateTimeValue({ apiMakerType: "date", format: dateFormatName, value });
106
113
  }
107
114
  else {
108
115
  throw new Error(`Unhandled type: ${apiMakerType}`);
109
116
  }
110
117
  };
118
+ /**
119
+ * Resolves a date format key or executes a custom formatter callback.
120
+ * @param {object} args
121
+ * @param {"date"|"time"} args.apiMakerType
122
+ * @param {Function|string} args.format
123
+ * @param {Date} args.value
124
+ * @returns {string}
125
+ */
126
+ presentDateTimeValue({ apiMakerType, format, value }) {
127
+ if (typeof format == "function") {
128
+ return format({
129
+ apiMakerType,
130
+ column: this.column,
131
+ l: this.l,
132
+ model: this.model,
133
+ table: this.table,
134
+ value
135
+ });
136
+ }
137
+ return this.l(format, value);
138
+ }
111
139
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL2NvbHVtbi1jb250ZW50LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUZBQW1GO0FBQ25GLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUNsRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDekIsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFBO0FBRWhDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDLFlBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ3BCLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBRXJCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXZDLE9BQU8s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UUFDMUMsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLElBQUksTUFBTSxFQUFFLENBQUM7WUFDNUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxzQkFBc0IsQ0FBQTtZQUUvRixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDMUMsQ0FBQzthQUFNLElBQUksWUFBWSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLHNCQUFzQixDQUFBO1lBRXZGLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixZQUFZLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELENBQUM7SUFDSCxDQUFDLENBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHBhZGRlZC1ibG9ja3MsIHJlYWN0L2pzeC1vbmUtZXhwcmVzc2lvbi1wZXItbGluZSwgc29ydC1pbXBvcnRzICovXG5pbXBvcnQge2RpZ3N9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgbW9kZWxDYWxsYmFja0FyZ3MgZnJvbSBcIi4vbW9kZWwtY2FsbGJhY2stYXJncy5qc1wiXG5pbXBvcnQgTW9uZXlGb3JtYXR0ZXIgZnJvbSBcIi4uL21vbmV5LWZvcm1hdHRlci5qc1wiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBUZXh0IGZyb20gXCIuLi91dGlscy90ZXh0XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJUYWJsZUNvbHVtbkNvbnRlbnQge1xuICBjb25zdHJ1Y3Rvcih7Y29sdW1uLCBsLCBtb2RlID0gXCJyZWFjdC1uYXRpdmVcIiwgbW9kZWwsIHQsIHRhYmxlfSkge1xuICAgIHRoaXMuY29sdW1uID0gY29sdW1uXG4gICAgdGhpcy5sID0gbFxuICAgIHRoaXMubW9kZSA9IG1vZGVcbiAgICB0aGlzLm1vZGVsID0gbW9kZWxcbiAgICB0aGlzLnQgPSB0XG4gICAgdGhpcy50YWJsZSA9IHRhYmxlXG4gIH1cblxuICBjb2x1bW5Db250ZW50RnJvbUNvbnRlbnRBcmcoKSB7XG4gICAgY29uc3QgYXJncyA9IG1vZGVsQ2FsbGJhY2tBcmdzKHRoaXMudGFibGUsIHRoaXMubW9kZWwpXG5cbiAgICBhcmdzLm1vZGUgPSB0aGlzLm1vZGVcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb2x1bW4uY29udGVudChhcmdzKVxuXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudENvbHVtblZhbHVlKHZhbHVlKVxuICB9XG5cbiAgY29sdW1uc0NvbnRlbnRGcm9tQXR0cmlidXRlQW5kUGF0aCgpIHtcbiAgICBjb25zdCB7YXR0cmlidXRlOiBhdHRyaWJ1dGVOYW1lfSA9IGRpZ3ModGhpcy5jb2x1bW4sIFwiYXR0cmlidXRlXCIpXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYXR0cmlidXRlTmFtZSlcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb2x1bW4ucGF0aCB8fCBbXVxuICAgIGxldCB2YWx1ZVxuICAgIGxldCBjdXJyZW50TW9kZWwgPSB0aGlzLm1vZGVsXG5cbiAgICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIHBhdGgpIHtcbiAgICAgICAgY3VycmVudE1vZGVsID0gY3VycmVudE1vZGVsW3BhdGhQYXJ0XSgpXG4gICAgICAgIGlmICghY3VycmVudE1vZGVsKSByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShhdHRyaWJ1dGVOYW1lIGluIGN1cnJlbnRNb2RlbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtjdXJyZW50TW9kZWwuY29uc3RydWN0b3IubW9kZWxOYW1lKCkuaHVtYW4oKX0gZG9lc24ndCByZXNwb25kIHRvICR7YXR0cmlidXRlTmFtZX1gKVxuICAgIH1cblxuICAgIGlmIChjdXJyZW50TW9kZWwuaXNBdHRyaWJ1dGVMb2FkZWQoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIHZhbHVlID0gY3VycmVudE1vZGVsW2F0dHJpYnV0ZU5hbWVdKClcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBjdXJyZW50TW9kZWwuY29uc3RydWN0b3IuYXR0cmlidXRlcygpLmZpbmQoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLm5hbWUoKSA9PSBhdHRyaWJ1dGVOYW1lVW5kZXJzY29yZSlcbiAgICBjb25zdCBtb2RlbENvbHVtbiA9IGF0dHJpYnV0ZT8uZ2V0Q29sdW1uKClcblxuICAgIGlmIChtb2RlbENvbHVtbj8uZ2V0VHlwZSgpID09IFwiZGF0ZVwiICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb250ZW50VGV4dCA9IHRoaXMucHJlc2VudERhdGVUaW1lKHthcGlNYWtlclR5cGU6IFwiZGF0ZVwiLCB2YWx1ZX0pXG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gXCJodG1sXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRUZXh0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxUZXh0Pntjb250ZW50VGV4dH08L1RleHQ+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcmVzZW50Q29sdW1uVmFsdWUodmFsdWUpXG4gIH1cblxuICBjb250ZW50KCkge1xuICAgIGlmICh0aGlzLmNvbHVtbi5jb250ZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5Db250ZW50RnJvbUNvbnRlbnRBcmcoKVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY29sdW1uLmNvbnRlbnQgJiYgdGhpcy5jb2x1bW4uYXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGVudEZyb21BdHRyaWJ1dGVBbmRQYXRoKClcbiAgICB9XG4gIH1cblxuICBwcmVzZW50Q29sdW1uVmFsdWUgPSAodmFsdWUpID0+IHtcbiAgICBsZXQgY29udGVudFRleHRcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnRlbnRUZXh0ID0gdGhpcy5wcmVzZW50RGF0ZVRpbWUoe3ZhbHVlfSlcbiAgICB9IGVsc2UgaWYgKE1vbmV5Rm9ybWF0dGVyLmlzTW9uZXkodmFsdWUpKSB7XG4gICAgICBjb250ZW50VGV4dCA9IE1vbmV5Rm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImJvb2xlYW5cIikge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnRlbnRUZXh0ID0gdGhpcy50KFwianMuc2hhcmVkLnllc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlllc1wifSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRlbnRUZXh0ID0gdGhpcy50KFwianMuc2hhcmVkLm5vXCIsIHtkZWZhdWx0VmFsdWU6IFwiTm9cIn0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29udGVudFRleHQgPSB2YWx1ZVxuICAgICAgICAubWFwKCh2YWx1ZVBhcnQpID0+IHRoaXMucHJlc2VudENvbHVtblZhbHVlKHZhbHVlUGFydCkpXG4gICAgICAgIC5maWx0ZXIoKHZhbHVlUGFydCkgPT4gQm9vbGVhbih2YWx1ZVBhcnQpKVxuICAgICAgICAuam9pbihcIiwgXCIpXG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb250ZW50VGV4dCA9IHZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEl0cyBhIFJlYWN0IG5vZGUgLSBqdXN0IHJldHVybiBpdCBhbmQgdHJ1c3QgdGhlIHByb3ZpZGVyIHRvIGJlIEhUTUwgY29tcGF0aWJsZS5cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGUgPT0gXCJodG1sXCIpIHtcbiAgICAgIHJldHVybiBjb250ZW50VGV4dFxuICAgIH1cblxuICAgIHJldHVybiA8VGV4dD57Y29udGVudFRleHR9PC9UZXh0PlxuICB9XG5cbiAgcHJlc2VudERhdGVUaW1lID0gKHthcGlNYWtlclR5cGUsIHZhbHVlfSkgPT4ge1xuICAgIGlmICghYXBpTWFrZXJUeXBlIHx8IGFwaU1ha2VyVHlwZSA9PSBcInRpbWVcIikge1xuICAgICAgY29uc3QgZGF0ZVRpbWVGb3JtYXROYW1lID0gdGhpcy50YWJsZS5wcm9wcy5kZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lIHx8IFwidGltZS5mb3JtYXRzLmRlZmF1bHRcIlxuXG4gICAgICByZXR1cm4gdGhpcy5sKGRhdGVUaW1lRm9ybWF0TmFtZSwgdmFsdWUpXG4gICAgfSBlbHNlIGlmIChhcGlNYWtlclR5cGUgPT0gXCJkYXRlXCIpIHtcbiAgICAgIGNvbnN0IGRhdGVGb3JtYXROYW1lID0gdGhpcy50YWJsZS5wcm9wcy5kZWZhdWx0RGF0ZUZvcm1hdE5hbWUgfHwgXCJkYXRlLmZvcm1hdHMuZGVmYXVsdFwiXG5cbiAgICAgIHJldHVybiB0aGlzLmwoZGF0ZUZvcm1hdE5hbWUsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCB0eXBlOiAke2FwaU1ha2VyVHlwZX1gKVxuICAgIH1cbiAgfVxufVxuIl19
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWNvbnRlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL2NvbHVtbi1jb250ZW50LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsbUZBQW1GO0FBQ25GLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUNsRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFDekIsT0FBTyxJQUFJLE1BQU0sZUFBZSxDQUFBO0FBRWhDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMEJBQTBCO0lBQzdDLFlBQVksRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ3BCLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBRXJCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXZDLE9BQU8s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Q0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcGFkZGVkLWJsb2NrcywgcmVhY3QvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lLCBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7ZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBtb2RlbENhbGxiYWNrQXJncyBmcm9tIFwiLi9tb2RlbC1jYWxsYmFjay1hcmdzLmpzXCJcbmltcG9ydCBNb25leUZvcm1hdHRlciBmcm9tIFwiLi4vbW9uZXktZm9ybWF0dGVyLmpzXCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4uL3V0aWxzL3RleHRcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlclRhYmxlQ29sdW1uQ29udGVudCB7XG4gIGNvbnN0cnVjdG9yKHtjb2x1bW4sIGwsIG1vZGUgPSBcInJlYWN0LW5hdGl2ZVwiLCBtb2RlbCwgdCwgdGFibGV9KSB7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW5cbiAgICB0aGlzLmwgPSBsXG4gICAgdGhpcy5tb2RlID0gbW9kZVxuICAgIHRoaXMubW9kZWwgPSBtb2RlbFxuICAgIHRoaXMudCA9IHRcbiAgICB0aGlzLnRhYmxlID0gdGFibGVcbiAgfVxuXG4gIGNvbHVtbkNvbnRlbnRGcm9tQ29udGVudEFyZygpIHtcbiAgICBjb25zdCBhcmdzID0gbW9kZWxDYWxsYmFja0FyZ3ModGhpcy50YWJsZSwgdGhpcy5tb2RlbClcblxuICAgIGFyZ3MubW9kZSA9IHRoaXMubW9kZVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbHVtbi5jb250ZW50KGFyZ3MpXG5cbiAgICByZXR1cm4gdGhpcy5wcmVzZW50Q29sdW1uVmFsdWUodmFsdWUpXG4gIH1cblxuICBjb2x1bW5zQ29udGVudEZyb21BdHRyaWJ1dGVBbmRQYXRoKCkge1xuICAgIGNvbnN0IHthdHRyaWJ1dGU6IGF0dHJpYnV0ZU5hbWV9ID0gZGlncyh0aGlzLmNvbHVtbiwgXCJhdHRyaWJ1dGVcIilcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lVW5kZXJzY29yZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZShhdHRyaWJ1dGVOYW1lKVxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmNvbHVtbi5wYXRoIHx8IFtdXG4gICAgbGV0IHZhbHVlXG4gICAgbGV0IGN1cnJlbnRNb2RlbCA9IHRoaXMubW9kZWxcblxuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aFBhcnQgb2YgcGF0aCkge1xuICAgICAgICBjdXJyZW50TW9kZWwgPSBjdXJyZW50TW9kZWxbcGF0aFBhcnRdKClcbiAgICAgICAgaWYgKCFjdXJyZW50TW9kZWwpIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKGF0dHJpYnV0ZU5hbWUgaW4gY3VycmVudE1vZGVsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2N1cnJlbnRNb2RlbC5jb25zdHJ1Y3Rvci5tb2RlbE5hbWUoKS5odW1hbigpfSBkb2Vzbid0IHJlc3BvbmQgdG8gJHthdHRyaWJ1dGVOYW1lfWApXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRNb2RlbC5pc0F0dHJpYnV0ZUxvYWRlZChhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgdmFsdWUgPSBjdXJyZW50TW9kZWxbYXR0cmlidXRlTmFtZV0oKVxuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGN1cnJlbnRNb2RlbC5jb25zdHJ1Y3Rvci5hdHRyaWJ1dGVzKCkuZmluZCgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUubmFtZSgpID09IGF0dHJpYnV0ZU5hbWVVbmRlcnNjb3JlKVxuICAgIGNvbnN0IG1vZGVsQ29sdW1uID0gYXR0cmlidXRlPy5nZXRDb2x1bW4oKVxuXG4gICAgaWYgKG1vZGVsQ29sdW1uPy5nZXRUeXBlKCkgPT0gXCJkYXRlXCIgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUZXh0ID0gdGhpcy5wcmVzZW50RGF0ZVRpbWUoe2FwaU1ha2VyVHlwZTogXCJkYXRlXCIsIHZhbHVlfSlcblxuICAgICAgaWYgKHRoaXMubW9kZSA9PSBcImh0bWxcIikge1xuICAgICAgICByZXR1cm4gY29udGVudFRleHRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFRleHQ+e2NvbnRlbnRUZXh0fTwvVGV4dD5cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByZXNlbnRDb2x1bW5WYWx1ZSh2YWx1ZSlcbiAgfVxuXG4gIGNvbnRlbnQoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1uLmNvbnRlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbkNvbnRlbnRGcm9tQ29udGVudEFyZygpXG4gICAgfSBlbHNlIGlmICghdGhpcy5jb2x1bW4uY29udGVudCAmJiB0aGlzLmNvbHVtbi5hdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250ZW50RnJvbUF0dHJpYnV0ZUFuZFBhdGgoKVxuICAgIH1cbiAgfVxuXG4gIHByZXNlbnRDb2x1bW5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGxldCBjb250ZW50VGV4dFxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29udGVudFRleHQgPSB0aGlzLnByZXNlbnREYXRlVGltZSh7dmFsdWV9KVxuICAgIH0gZWxzZSBpZiAoTW9uZXlGb3JtYXR0ZXIuaXNNb25leSh2YWx1ZSkpIHtcbiAgICAgIGNvbnRlbnRUZXh0ID0gTW9uZXlGb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09IFwiYm9vbGVhblwiKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY29udGVudFRleHQgPSB0aGlzLnQoXCJqcy5zaGFyZWQueWVzXCIsIHtkZWZhdWx0VmFsdWU6IFwiWWVzXCJ9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudFRleHQgPSB0aGlzLnQoXCJqcy5zaGFyZWQubm9cIiwge2RlZmF1bHRWYWx1ZTogXCJOb1wifSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb250ZW50VGV4dCA9IHZhbHVlXG4gICAgICAgIC5tYXAoKHZhbHVlUGFydCkgPT4gdGhpcy5wcmVzZW50Q29sdW1uVmFsdWUodmFsdWVQYXJ0KSlcbiAgICAgICAgLmZpbHRlcigodmFsdWVQYXJ0KSA9PiBCb29sZWFuKHZhbHVlUGFydCkpXG4gICAgICAgIC5qb2luKFwiLCBcIilcblxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnRlbnRUZXh0ID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSXRzIGEgUmVhY3Qgbm9kZSAtIGp1c3QgcmV0dXJuIGl0IGFuZCB0cnVzdCB0aGUgcHJvdmlkZXIgdG8gYmUgSFRNTCBjb21wYXRpYmxlLlxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9kZSA9PSBcImh0bWxcIikge1xuICAgICAgcmV0dXJuIGNvbnRlbnRUZXh0XG4gICAgfVxuXG4gICAgcmV0dXJuIDxUZXh0Pntjb250ZW50VGV4dH08L1RleHQ+XG4gIH1cblxuICAvKipcbiAgICogUHJlc2VudHMgZGF0ZSBhbmQgZGF0ZXRpbWUgdmFsdWVzIHVzaW5nIGVpdGhlciB0cmFuc2xhdGlvbi1mb3JtYXQga2V5cyBvciBmb3JtYXR0ZXIgY2FsbGJhY2tzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge1wiZGF0ZVwifFwidGltZVwifSBbYXJncy5hcGlNYWtlclR5cGVdXG4gICAqIEBwYXJhbSB7RGF0ZX0gYXJncy52YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgcHJlc2VudERhdGVUaW1lID0gKHthcGlNYWtlclR5cGUgPSBcInRpbWVcIiwgdmFsdWV9KSA9PiB7XG4gICAgaWYgKCFhcGlNYWtlclR5cGUgfHwgYXBpTWFrZXJUeXBlID09IFwidGltZVwiKSB7XG4gICAgICBjb25zdCBkYXRlVGltZUZvcm1hdE5hbWUgPSB0aGlzLnRhYmxlLnByb3BzLmRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWUgfHwgXCJ0aW1lLmZvcm1hdHMuZGVmYXVsdFwiXG5cbiAgICAgIHJldHVybiB0aGlzLnByZXNlbnREYXRlVGltZVZhbHVlKHthcGlNYWtlclR5cGU6IFwidGltZVwiLCBmb3JtYXQ6IGRhdGVUaW1lRm9ybWF0TmFtZSwgdmFsdWV9KVxuICAgIH0gZWxzZSBpZiAoYXBpTWFrZXJUeXBlID09IFwiZGF0ZVwiKSB7XG4gICAgICBjb25zdCBkYXRlRm9ybWF0TmFtZSA9IHRoaXMudGFibGUucHJvcHMuZGVmYXVsdERhdGVGb3JtYXROYW1lIHx8IFwiZGF0ZS5mb3JtYXRzLmRlZmF1bHRcIlxuXG4gICAgICByZXR1cm4gdGhpcy5wcmVzZW50RGF0ZVRpbWVWYWx1ZSh7YXBpTWFrZXJUeXBlOiBcImRhdGVcIiwgZm9ybWF0OiBkYXRlRm9ybWF0TmFtZSwgdmFsdWV9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCB0eXBlOiAke2FwaU1ha2VyVHlwZX1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIGRhdGUgZm9ybWF0IGtleSBvciBleGVjdXRlcyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7XCJkYXRlXCJ8XCJ0aW1lXCJ9IGFyZ3MuYXBpTWFrZXJUeXBlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBhcmdzLmZvcm1hdFxuICAgKiBAcGFyYW0ge0RhdGV9IGFyZ3MudmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHByZXNlbnREYXRlVGltZVZhbHVlKHthcGlNYWtlclR5cGUsIGZvcm1hdCwgdmFsdWV9KSB7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHtcbiAgICAgICAgYXBpTWFrZXJUeXBlLFxuICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICBsOiB0aGlzLmwsXG4gICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubChmb3JtYXQsIHZhbHVlKVxuICB9XG59XG4iXX0=
@@ -101,8 +101,8 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
101
101
  columns: PropTypes.oneOfType([PropTypes.array, PropTypes.func]),
102
102
  controls: PropTypes.func,
103
103
  currentUser: PropTypes.object,
104
- defaultDateFormatName: PropTypes.string,
105
- defaultDateTimeFormatName: PropTypes.string,
104
+ defaultDateFormatName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
105
+ defaultDateTimeFormatName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
106
106
  defaultParams: PropTypes.object,
107
107
  destroyEnabled: PropTypes.bool.isRequired,
108
108
  destroyMessage: PropTypes.string,
@@ -740,4 +740,4 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
740
740
  };
741
741
  submitFilterDebounce = debounce(this.tt.submitFilter);
742
742
  }));
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL3RhYmxlLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUZBQXVGO0FBQ3ZGLDJGQUEyRjtBQUMzRiw0RUFBNEU7QUFDNUUsd0RBQXdEO0FBQ3hELE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUN6QyxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ2hFLE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sSUFBSSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BDLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxhQUFhLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLFFBQVEsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQzVCLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFBO0FBQ3hDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFD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QUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDdkQsQ0FBQyxDQUFBO0lBRUQsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUE7Q0FDdEQsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1ib2R5LXN0eWxlLCBpbXBvcnQvbm8tbmFtZWQtYXMtZGVmYXVsdCwgaW1wb3J0L25vLXVucmVzb2x2ZWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWV4dHJhLXBhcmVucywgbm8tcmV0dXJuLWFzc2lnbiwgbm8tdW51c2VkLXZhcnMsIHJlYWN0L2pzeC1tYXgtZGVwdGggKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1vbmUtZXhwcmVzc2lvbi1wZXItbGluZSwgcmVhY3QvanN4LXNvcnQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3NvcnQtcHJvcC10eXBlcywgc29ydC1pbXBvcnRzICovXG5pbXBvcnQge2RpZywgZGlnZywgZGlnc30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgUmVhY3QsIHtjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VSZWZ9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQbGF0Zm9ybSwgUHJlc3NhYmxlLCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gXCIuLi9iYXNlLWNvbXBvbmVudFwiXG5pbXBvcnQgQ2FyZCBmcm9tIFwiLi4vYm9vdHN0cmFwL2NhcmRcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IENvbGxlY3Rpb24gZnJvbSBcIi4uL2NvbGxlY3Rpb24uanNcIlxuaW1wb3J0IGNvbHVtblZpc2libGUgZnJvbSBcIi4vY29sdW1uLXZpc2libGUuanNcIlxuaW1wb3J0IGRlYm91bmNlIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgRHJhZ2dhYmxlU29ydCBmcm9tIFwiLi4vZHJhZ2dhYmxlLXNvcnQvaW5kZXhcIlxuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gXCJldmVudGVtaXR0ZXIzXCJcbmltcG9ydCBGaWx0ZXJzIGZyb20gXCIuL2ZpbHRlcnMvaW5kZXhcIlxuaW1wb3J0IEZsYXRMaXN0IGZyb20gXCIuL2NvbXBvbmVudHMvZmxhdC1saXN0XCJcbmltcG9ydCB7Rm9ybX0gZnJvbSBcIi4uL2Zvcm1cIlxuaW1wb3J0IEhlYWRlciBmcm9tIFwiLi9jb21wb25lbnRzL2hlYWRlclwiXG5pbXBvcnQgSGVhZGVyQ29sdW1uIGZyb20gXCIuL2hlYWRlci1jb2x1bW5cIlxuaW1wb3J0IEhlYWRlclNlbGVjdCBmcm9tIFwiLi9oZWFkZXItc2VsZWN0XCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi91dGlscy9pY29uXCJcbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5pbXBvcnQgbW9kZWxDbGFzc1JlcXVpcmUgZnJvbSBcIi4uL21vZGVsLWNsYXNzLXJlcXVpcmUuanNcIlxuaW1wb3J0IE1vZGVsUm93IGZyb20gXCIuL21vZGVsLXJvd1wiXG5pbXBvcnQgUGFnaW5hdGUgZnJvbSBcIi4uL2Jvb3RzdHJhcC9wYWdpbmF0ZVwiXG5pbXBvcnQgUGFyYW1zIGZyb20gXCIuLi9wYXJhbXMuanNcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgUm93IGZyb20gXCIuL2NvbXBvbmVudHMvcm93XCJcbmltcG9ydCBzZWxlY3RDYWxjdWxhdG9yIGZyb20gXCIuL3NlbGVjdC1jYWxjdWxhdG9yLmpzXCJcbmltcG9ydCBTZWxlY3QgZnJvbSBcIi4uL2lucHV0cy9zZWxlY3RcIlxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzL2luZGV4XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IFRhYmxlU2V0dGluZ3MgZnJvbSBcIi4vdGFibGUtc2V0dGluZ3MuanNcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4uL3V0aWxzL3RleHRcIlxuaW1wb3J0IHVuaXF1bml6ZSBmcm9tIFwidW5pcXVuaXplXCJcbmltcG9ydCB7dXNlQnJlYWtwb2ludH0gZnJvbSBcInJlc3BvbnNpdmUtYnJlYWtwb2ludHNcIlxuaW1wb3J0IHVzZUNvbGxlY3Rpb24gZnJvbSBcIi4uL3VzZS1jb2xsZWN0aW9uLmpzXCJcbmltcG9ydCB1c2VJMThuIGZyb20gXCJpMThuLW9uLXN0ZXJvaWRzL3NyYy91c2UtaTE4bi5tanNcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwieWEtdXNlLWV2ZW50LWVtaXR0ZXJcIlxuaW1wb3J0IHVzZU1vZGVsRXZlbnQgZnJvbSBcIi4uL3VzZS1tb2RlbC1ldmVudC5qc1wiXG5pbXBvcnQgdXNlUXVlcnlQYXJhbXMgZnJvbSBcIm9uLWxvY2F0aW9uLWNoYW5nZWQvYnVpbGQvdXNlLXF1ZXJ5LXBhcmFtcy5qc1wiXG5pbXBvcnQgV2lkdGhzIGZyb20gXCIuL3dpZHRoc1wiXG5pbXBvcnQgV29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3ggZnJvbSBcIi4vd29ya2VyLXBsdWdpbnMtY2hlY2stYWxsLWNoZWNrYm94XCJcblxuLyoqXG4gKiBUYWJsZSBjb21wb25lbnQgd2l0aCBzb3J0YWJsZSwgcmVzaXphYmxlIGNvbHVtbnMgYW5kIG9wdGlvbmFsIGZpbHRlcnMuXG4gKi9cbmNvbnN0IGRhdGFTZXRzID0ge31cbmNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzMwLCA2MCwgOTAsIFtcIkFsbFwiLCBcImFsbFwiXV1cbmNvbnN0IHN0eWxlcyA9IHt9XG5jb25zdCBUYWJsZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgTGlzdEhlYWRlckNvbXBvbmVudCA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgTGlzdEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzZXR1cCgpIHtcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpXG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCB0YWJsZUNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoVGFibGVDb250ZXh0KVxuICAgIGNvbnN0IHRhYmxlID0gdGFibGVDb250ZXh0VmFsdWUudGFibGVcbiAgICBjb25zdCB7Y29sbGVjdGlvbiwgZXZlbnRzLCBxdWVyeVdpdGhvdXRQYWdpbmF0aW9uLCB0fSA9IHRhYmxlLnR0XG4gICAgY29uc3Qge3F1ZXJ5fSA9IGRpZ3MoY29sbGVjdGlvbiwgXCJxdWVyeVwiKVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJjb2x1bW5WaXNpYmlsaXR5VXBkYXRlZFwiLCB0aGlzLnR0Lm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJvdyBzdHlsZT17dGFibGUuc3R5bGVGb3JSb3dIZWFkZXIoKX0gdGVzdElEPVwiYXBpLW1ha2VyL3RhYmxlL2hlYWRlci1yb3dcIj5cbiAgICAgICAge3RhYmxlLnAud29ya3BsYWNlICYmIHRhYmxlLnMuY3VycmVudFdvcmtwbGFjZSAmJlxuICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge3dpZHRoOiBtZFVwID8gNDEgOiB1bmRlZmluZWR9fSl9PlxuICAgICAgICAgICAgPFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94XG4gICAgICAgICAgICAgIGN1cnJlbnRXb3JrcGxhY2U9e3RhYmxlLnMuY3VycmVudFdvcmtwbGFjZX1cbiAgICAgICAgICAgICAgcXVlcnk9e3F1ZXJ5V2l0aG91dFBhZ2luYXRpb259XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMud29ya2VyUGxndWluc0NoZWNrQWxsQ2hlY2tib3hTdHlsZSB8fD0ge21hcmdpbkhvcml6b250YWw6IFwiYXV0b1wifX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zZWxlY3RBbGxGb3VuZFRleHRTdHlsZSB8fD0ge21hcmdpbkxlZnQ6IDN9fT5cbiAgICAgICAgICAgICAgICB7dChcIi5zZWxlY3RfYWxsX2ZvdW5kXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2VsZWN0IGFsbCBmb3VuZFwifSl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt9fSl9PlxuICAgICAgICAgICAgPEhlYWRlclNlbGVjdCBwcmVwYXJlZENvbHVtbnM9e3RhYmxlLnMucHJlcGFyZWRDb2x1bW5zfSBxdWVyeT17cXVlcnl9IHRhYmxlPXt0YWJsZX0gLz5cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7bWRVcCAmJlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7dGFibGUuaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucygpfVxuICAgICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fSwgdHlwZTogXCJhY3Rpb25zXCJ9KX0gLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgPC9Sb3c+XG4gICAgKVxuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2xhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxufSkpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJUYWJsZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gICAqL1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGNhcmQ6IHRydWUsXG4gICAgY3VycmVudFVzZXI6IG51bGwsXG4gICAgZGVzdHJveUVuYWJsZWQ6IHRydWUsXG4gICAgZHJhZ2dlZEhlYWRlclN0eWxlOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyQ2FyZDogdHJ1ZSxcbiAgICBmaWx0ZXJTdWJtaXRCdXR0b246IHRydWUsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdW5kZWZpbmVkLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogdW5kZWZpbmVkLFxuICAgIHByZWxvYWRzOiBbXSxcbiAgICBzZWxlY3Q6IHt9LFxuICAgIHN0eWxlVUk6IHRydWUsXG4gICAgd29ya3BsYWNlOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgYWN0aW9uc0NvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFwcEhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2FyZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sbGVjdGlvbjogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ29sbGVjdGlvbiksXG4gICAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGNvbnRyb2xzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXJyZW50VXNlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0UGFyYW1zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlc3Ryb3lFbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGRlc3Ryb3lNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRyYWdnZWRIZWFkZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBlZGl0TW9kZWxQYXRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJDYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGZpbHRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlclN1Ym1pdExhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGdyb3VwQnk6IFByb3BUeXBlcy5hcnJheSxcbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgaWRlbnRpZmllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhZ2luYXRlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHByZWxvYWRzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBxdWVyeU1ldGhvZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcXVlcnlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzZWxlY3RDb2x1bW5zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZVVJOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHZpZXdNb2RlbFBhdGg6IFByb3BUeXBlcy5mdW5jLFxuICAgIHdvcmtwbGFjZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxuICB9XG5cbiAgZHJhZ2dhYmxlU29ydEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgdGFibGVTZXR0aW5ncyA9IG51bGxcblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnRhYmxlXCJ9KVxuICAgIGNvbnN0IHtuYW1lOiBicmVha3BvaW50LCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7XG4gICAgICBicmVha3BvaW50LFxuICAgICAgZmlsdGVyRm9ybVJlZjogdXNlUmVmKCksXG4gICAgICBtZFVwLFxuICAgICAgdFxuICAgIH0pXG5cbiAgICBjb25zdCBjb2xsZWN0aW9uS2V5ID0gZGlnZyh0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25LZXlcIilcbiAgICBsZXQgcXVlcnlOYW1lID0gdGhpcy5wcm9wcy5xdWVyeU5hbWVcblxuICAgIGlmICghcXVlcnlOYW1lKSBxdWVyeU5hbWUgPSBjb2xsZWN0aW9uS2V5XG5cbiAgICBjb25zdCBxdWVyeVNOYW1lID0gYCR7cXVlcnlOYW1lfV9zYFxuXG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgY29sdW1uczogKCkgPT4gdGhpcy5jb2x1bW5zQXNBcnJheSgpLFxuICAgICAgY3VycmVudFdvcmtwbGFjZTogdW5kZWZpbmVkLFxuICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBudWxsLFxuICAgICAgZmlsdGVyRm9ybTogbnVsbCxcbiAgICAgIGNvbHVtbnNUb1Nob3c6IG51bGwsXG4gICAgICBkcmFnZ2VkQ29sdW1uOiBudWxsLFxuICAgICAgaWRlbnRpZmllcjogKCkgPT4gdGhpcy5wcm9wcy5pZGVudGlmaWVyIHx8IGAke2NvbGxlY3Rpb25LZXl9LWRlZmF1bHRgLFxuICAgICAgbGFzdFVwZGF0ZTogKCkgPT4gbmV3IERhdGUoKSxcbiAgICAgIHByZWxvYWQ6IHVuZGVmaW5lZCxcbiAgICAgIHByZXBhcmVkQ29sdW1uczogdW5kZWZpbmVkLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgcXVlcnlRTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9xYCxcbiAgICAgIHF1ZXJ5UGFnZU5hbWU6ICgpID0+IGAke3F1ZXJ5TmFtZX1fcGFnZWAsXG4gICAgICBxdWVyeVNOYW1lLFxuICAgICAgcmVzaXppbmc6IGZhbHNlLFxuICAgICAgc2hvd0ZpbHRlcnM6ICgpID0+IEJvb2xlYW4ocXVlcnlQYXJhbXNbcXVlcnlTTmFtZV0pLFxuICAgICAgc2hvd1NldHRpbmdzOiBmYWxzZSxcbiAgICAgIHRhYmxlU2V0dGluZzogdW5kZWZpbmVkLFxuICAgICAgdGFibGVTZXR0aW5nTG9hZGVkOiBmYWxzZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdW5kZWZpbmVkLFxuICAgICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoczogbnVsbFxuICAgIH0pXG5cbiAgICB0aGlzLnRhYmxlQ29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNhY2hlS2V5OiB0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5LFxuICAgICAgICBsYXN0VXBkYXRlOiB0aGlzLnMubGFzdFVwZGF0ZSxcbiAgICAgICAgcmVzaXppbmc6IHRoaXMucy5yZXNpemluZyxcbiAgICAgICAgdGFibGU6IHRoaXNcbiAgICAgIH0pLFxuICAgICAgW3RoaXMucy5sYXN0VXBkYXRlLCB0aGlzLnMucmVzaXppbmcsIHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXldXG4gICAgKVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcm9wcy53b3JrcGxhY2UpIHtcbiAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEN1cnJlbnRXb3JrcGxhY2VDb3VudCgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKV0pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50dC50YWJsZVNldHRpbmdzICYmIHRoaXMucy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKSwgdGhpcy5zLndpZHRoXSlcblxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2NyZWF0ZWRcIiwgdGhpcy50dC5vbkxpbmtzQ3JlYXRlZClcbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19kZXN0cm95ZWRcIiwgdGhpcy50dC5vbkxpbmtzRGVzdHJveWVkKVxuXG4gICAgbGV0IGNvbGxlY3Rpb25SZWFkeSA9IHRydWVcbiAgICBsZXQgc2VsZWN0XG5cbiAgICBpZiAoIXRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbGxlY3Rpb25SZWFkeSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25SZWFkeSkge1xuICAgICAgc2VsZWN0ID0gc2VsZWN0Q2FsY3VsYXRvcih7dGFibGU6IHRoaXN9KVxuICAgIH1cblxuICAgIHRoaXMuY29sbGVjdGlvbiA9IHVzZUNvbGxlY3Rpb24oe1xuICAgICAgYWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllc1RvTG9hZCgpLFxuICAgICAgZGVmYXVsdFBhcmFtczogdGhpcy5wcm9wcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5wcm9wcy5jb2xsZWN0aW9uLFxuICAgICAgZ3JvdXBCeTogdGhpcy5wcm9wcy5ncm91cEJ5LFxuICAgICAgaWZDb25kaXRpb246IGNvbGxlY3Rpb25SZWFkeSxcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMucHJvcHMubW9kZWxDbGFzcyxcbiAgICAgIG9uTW9kZWxzTG9hZGVkOiB0aGlzLnByb3BzLm9uTW9kZWxzTG9hZGVkLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICBwcmVsb2FkczogdGhpcy5zdGF0ZS5wcmVsb2FkLFxuICAgICAgcXVlcnlNZXRob2Q6IHRoaXMucHJvcHMucXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zOiB0aGlzLnByb3BzLnNlbGVjdENvbHVtbnNcbiAgICB9KVxuICAgIHRoaXMucXVlcnlXaXRob3V0UGFnaW5hdGlvbiA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB0aGlzLmNvbGxlY3Rpb24/LnF1ZXJ5Py5jbG9uZSgpPy5leGNlcHQoXCJwYWdlXCIpLFxuICAgICAgW3RoaXMuY29sbGVjdGlvbi5xdWVyeV1cbiAgICApXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdFbmRBbmltYXRpb25cIiwgdGhpcy50dC5vbkRyYWdFbmRBbmltYXRpb24pXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtjb2x1bW5zVG9TaG93OiB0aGlzLmdldENvbHVtbnNUb1Nob3codGhpcy5zLmNvbHVtbnMpLCBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDk5OTkpXG4gIG9uRHJhZ0VuZEFuaW1hdGlvbiA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoMClcblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZSgpIHtcbiAgICBjb25zdCBXb3JrcGxhY2UgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZVwiKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFdvcmtwbGFjZS5jdXJyZW50KClcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlID0gZGlnKHJlc3VsdCwgXCJjdXJyZW50XCIsIDApXG5cbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50V29ya3BsYWNlfSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRDdXJyZW50V29ya3BsYWNlQ291bnQoKSB7XG4gICAgaWYgKCF0aGlzLnMuY3VycmVudFdvcmtwbGFjZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZUNvdW50OiAwfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFdvcmtwbGFjZUxpbmsgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZUxpbmtcIilcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlQ291bnQgPSBhd2FpdCBXb3JrcGxhY2VMaW5rXG4gICAgICAucmFuc2Fjayh7XG4gICAgICAgIHJlc291cmNlX3R5cGVfZXE6IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSxcbiAgICAgICAgd29ya3BsYWNlX2lkX2VxOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZS5pZCgpXG4gICAgICB9KVxuICAgICAgLmNvdW50KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2VDb3VudH0pXG4gIH1cblxuICBnZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcigoe2NvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSkgPT4gY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSAtIGIudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkpXG4gIH1cblxuICBhc3luYyBsb2FkVGFibGVTZXR0aW5nKCkge1xuICAgIHRoaXMudGFibGVTZXR0aW5ncyA9IG5ldyBUYWJsZVNldHRpbmdzKHt0YWJsZTogdGhpc30pXG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLnRhYmxlU2V0dGluZ3MubG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzKClcblxuICAgIGlmICghdGFibGVTZXR0aW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YWJsZVNldHRpbmcgcmV0dXJuZWQgYnkgdGFibGVTZXR0aW5ncy5sb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MoKVwiKVxuXG4gICAgY29uc3Qge2NvbHVtbnMsIHByZWxvYWR9ID0gdGhpcy50YWJsZVNldHRpbmdzLnByZXBhcmVkQ29sdW1ucyh0YWJsZVNldHRpbmcpXG4gICAgY29uc3Qge3dpZHRofSA9IHRoaXMuc1xuICAgIGNvbnN0IHdpZHRocyA9IG5ldyBXaWR0aHMoe2NvbHVtbnMsIHRhYmxlOiB0aGlzLCB3aWR0aH0pXG4gICAgY29uc3QgY29sdW1uc1RvU2hvdyA9IHRoaXMuZ2V0Q29sdW1uc1RvU2hvdyhjb2x1bW5zKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb2x1bW5zLFxuICAgICAgY29sdW1uc1RvU2hvdyxcbiAgICAgIHByZXBhcmVkQ29sdW1uczogY29sdW1ucyxcbiAgICAgIHByZWxvYWQ6IHRoaXMubWVyZ2VkUHJlbG9hZHMocHJlbG9hZCksXG4gICAgICB0YWJsZVNldHRpbmcsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IHRydWUsXG4gICAgICB0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk6IHRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKSxcbiAgICAgIHdpZHRoc1xuICAgIH0pXG4gIH1cblxuICB1cGRhdGVTZXR0aW5nc0Z1bGxDYWNoZUtleSA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3RhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGhpcy5zdGF0ZS50YWJsZVNldHRpbmcuZnVsbENhY2hlS2V5KCl9KVxuXG4gIGNvbHVtbnNBc0FycmF5ID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5jb2x1bW5zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1ucygpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1uc1xuICB9XG5cbiAgbWVyZ2VkUHJlbG9hZHMocHJlbG9hZCkge1xuICAgIGNvbnN0IHtwcmVsb2Fkc30gPSB0aGlzLnByb3BzXG4gICAgbGV0IG1lcmdlZFByZWxvYWRzID0gW11cblxuICAgIGlmIChwcmVsb2FkcykgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZHMpXG4gICAgaWYgKHByZWxvYWQpIG1lcmdlZFByZWxvYWRzID0gbWVyZ2VkUHJlbG9hZHMuY29uY2F0KHByZWxvYWQpXG5cbiAgICByZXR1cm4gdW5pcXVuaXplKG1lcmdlZFByZWxvYWRzKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHttb2RlbENsYXNzLCBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LCBub1JlY29yZHNGb3VuZENvbnRlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NvbGxlY3Rpb24sIGN1cnJlbnRVc2VyfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlOYW1lLCBxdWVyeVNOYW1lLCBzaG93RmlsdGVyc30gPSB0aGlzLnNcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbHMsXG4gICAgICBvdmVyYWxsQ291bnQsXG4gICAgICBxUGFyYW1zLFxuICAgICAgcXVlcnksXG4gICAgICByZXN1bHQsXG4gICAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcbiAgICB9ID0gZGlncyhcbiAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgIFwibW9kZWxzXCIsXG4gICAgICBcIm92ZXJhbGxDb3VudFwiLFxuICAgICAgXCJxUGFyYW1zXCIsXG4gICAgICBcInF1ZXJ5XCIsXG4gICAgICBcInJlc3VsdFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgICApXG5cbiAgICBpZiAoY29sbGVjdGlvbiAmJiBjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUgIT0gbW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZGVsIGNsYXNzIGZyb20gY29sbGVjdGlvbiAnJHtjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9JyBgICtcbiAgICAgICAgYGRpZG4ndCBtYXRjaCBtb2RlbCBjbGFzcyBvbiB0YWJsZTogJyR7bW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9J2BcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYHJvb3RWaWV3LSR7dGhpcy5jbGFzc05hbWUoKX1gXSB8fD0ge2NsYXNzOiB0aGlzLmNsYXNzTmFtZSgpfX1cbiAgICAgICAgb25MYXlvdXQ9e3RoaXMudHQub25Db250YWluZXJMYXlvdXR9XG4gICAgICAgIHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlcz8uY29udGFpbmVyfVxuICAgICAgPlxuICAgICAgICB7c2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgJiZcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLW5vLXJlY29yZHMtYXZhaWxhYmxlLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIHtub1JlY29yZHNBdmFpbGFibGVDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIG92ZXJhbGxDb3VudH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50ICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1uby1yZWNvcmRzLWZvdW5kLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIHtub1JlY29yZHNGb3VuZENvbnRlbnQoe21vZGVscywgcVBhcmFtcywgb3ZlcmFsbENvdW50fSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3Nob3dGaWx0ZXJzICYmXG4gICAgICAgICAgPEZpbHRlcnMgY3VycmVudFVzZXI9e2N1cnJlbnRVc2VyfSBtb2RlbENsYXNzPXttb2RlbENsYXNzfSBxdWVyeU5hbWU9e3F1ZXJ5TmFtZX0gcXVlcnlTTmFtZT17cXVlcnlTTmFtZX0gLz5cbiAgICAgICAgfVxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBpZiAocVBhcmFtcyAmJiBxdWVyeSAmJiByZXN1bHQgJiYgbW9kZWxzICYmICFzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCAmJiAhc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FyZE9yVGFibGUoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCl9XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGhlYWRlciB0aXRsZSBvciBjdXN0b20gaGVhZGVyIGNvbnRlbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc11cbiAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSBbYXJncy5tb2RlbHNdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJncy5xUGFyYW1zXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3MucXVlcnldXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJncy5yZXN1bHRdXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8UmVhY3QuUmVhY3ROb2RlfVxuICAgKi9cbiAgdGFibGVIZWFkZXJDb250ZW50ICh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IHt9KSB7XG4gICAgY29uc3Qge2hlYWRlciwgbW9kZWxDbGFzc30gPSB0aGlzLnByb3BzXG5cbiAgICBpZiAodHlwZW9mIGhlYWRlciA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pXG4gICAgfSBlbHNlIGlmIChoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXJcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZWxDbGFzcy5tb2RlbE5hbWUoKS5odW1hbih7Y291bnQ6IDJ9KVxuICB9XG5cbiAgbG9hZGluZ0NvbnRlbnQgKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KSB7XG4gICAgY29uc3Qge1xuICAgICAgYWJpbGl0aWVzLFxuICAgICAgYWN0aW9uc0NvbnRlbnQsXG4gICAgICBhcHBIaXN0b3J5LFxuICAgICAgY2FyZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBjb2x1bW5zLFxuICAgICAgY29udHJvbHMsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIGRlZmF1bHREYXRlRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0UGFyYW1zLFxuICAgICAgZGVzdHJveUVuYWJsZWQsXG4gICAgICBkZXN0cm95TWVzc2FnZSxcbiAgICAgIGVkaXRNb2RlbFBhdGgsXG4gICAgICBmaWx0ZXJDYXJkLFxuICAgICAgZmlsdGVyQ29udGVudCxcbiAgICAgIGZpbHRlclN1Ym1pdEJ1dHRvbixcbiAgICAgIGZpbHRlclN1Ym1pdExhYmVsLFxuICAgICAgZ3JvdXBCeSxcbiAgICAgIGhlYWRlcixcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBtb2RlbENsYXNzLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIG9uTW9kZWxzTG9hZGVkLFxuICAgICAgcGFnaW5hdGVDb250ZW50LFxuICAgICAgcGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgIHByZWxvYWRzLFxuICAgICAgcXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zLFxuICAgICAgc3R5bGVVSSxcbiAgICAgIHZpZXdNb2RlbFBhdGgsXG4gICAgICB3b3JrcGxhY2UsXG4gICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgY29uc3QgbG9hZGluZ0NvbnRlbnQgPSAoXG4gICAgICA8VmlldyBkYXRhU2V0PXtkYXRhU2V0cy5sb2FkaW5nIHx8PSB7Y2xhc3M6IFwiYXBpLW1ha2VyLS10YWJsZS0tbG9hZGluZ1wifX0+XG4gICAgICAgIDxUZXh0Pnt0aGlzLnQoXCIubG9hZGluZ19kb3RfZG90X2RpdFwiLCB7ZGVmYXVsdFZhbHVlOiBcIkxvYWRpbmcuLi5cIn0pfTwvVGV4dD5cbiAgICAgIDwvVmlldz5cbiAgICApXG5cbiAgICBpZiAoIWNhcmQpIHJldHVybiBsb2FkaW5nQ29udGVudFxuXG4gICAgY29uc3Qgc2FmZU1vZGVscyA9IG1vZGVscyB8fCBbXVxuICAgIGNvbnN0IHNhZmVBcmdzID0ge21vZGVsczogc2FmZU1vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q2FyZFxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJsaXZlLXRhYmxlLS10YWJsZS1jYXJkXCIsIFwibWItNFwiLCBjbGFzc05hbWUpfVxuICAgICAgICBjb250cm9scz17dGhpcy50YWJsZUNvbnRyb2xzKHNhZmVBcmdzKX1cbiAgICAgICAgaGVhZGVyPXt0aGlzLnRhYmxlSGVhZGVyQ29udGVudChzYWZlQXJncyl9XG4gICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtsb2FkaW5nQ29udGVudH1cbiAgICAgIDwvQ2FyZD5cbiAgICApXG4gIH1cblxuICBhYmlsaXRpZXNUb0xvYWQgKCkge1xuICAgIGNvbnN0IGFiaWxpdGllc1RvTG9hZCA9IHt9XG4gICAgY29uc3Qge2FiaWxpdGllcywgbW9kZWxDbGFzc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qgb3duQWJpbGl0aWVzID0gW11cblxuICAgIGlmICh0aGlzLnByb3BzLmRlc3Ryb3lFbmFibGVkKSBvd25BYmlsaXRpZXMucHVzaChcImRlc3Ryb3lcIilcbiAgICBpZiAodGhpcy5wcm9wcy5lZGl0TW9kZWxQYXRoKSBvd25BYmlsaXRpZXMucHVzaChcImVkaXRcIilcbiAgICBpZiAodGhpcy5wcm9wcy52aWV3TW9kZWxQYXRoKSBvd25BYmlsaXRpZXMucHVzaChcInNob3dcIilcblxuICAgIGlmIChvd25BYmlsaXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSBkaWdnKG1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJuYW1lXCIpXG5cbiAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbENsYXNzTmFtZV0gPSBvd25BYmlsaXRpZXNcbiAgICB9XG5cbiAgICBpZiAoYWJpbGl0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IG1vZGVsTmFtZSBpbiBhYmlsaXRpZXMpIHtcbiAgICAgICAgaWYgKCEobW9kZWxOYW1lIGluIGFiaWxpdGllc1RvTG9hZCkpIHtcbiAgICAgICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxOYW1lXSA9IFtdXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGFiaWxpdHkgb2YgYWJpbGl0aWVzW21vZGVsTmFtZV0pIHtcbiAgICAgICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxOYW1lXS5wdXNoKGFiaWxpdHkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWJpbGl0aWVzVG9Mb2FkXG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlIGJldHdlZW4gY2FyZC90YWJsZSByZW5kZXJpbmcgb25jZSBkYXRhIGlzIHJlYWR5LlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3ROb2RlfVxuICAgKi9cbiAgY2FyZE9yVGFibGUgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFiaWxpdGllcyxcbiAgICAgIGFjdGlvbnNDb250ZW50LFxuICAgICAgYXBwSGlzdG9yeSxcbiAgICAgIGNhcmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbnRyb2xzLFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdFBhcmFtcyxcbiAgICAgIGRlc3Ryb3lFbmFibGVkLFxuICAgICAgZGVzdHJveU1lc3NhZ2UsXG4gICAgICBlZGl0TW9kZWxQYXRoLFxuICAgICAgZmlsdGVyQ2FyZCxcbiAgICAgIGZpbHRlckNvbnRlbnQsXG4gICAgICBmaWx0ZXJTdWJtaXRCdXR0b24sXG4gICAgICBmaWx0ZXJTdWJtaXRMYWJlbCxcbiAgICAgIGdyb3VwQnksXG4gICAgICBoZWFkZXIsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgbW9kZWxDbGFzcyxcbiAgICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgICBvbk1vZGVsc0xvYWRlZCxcbiAgICAgIHBhZ2luYXRlQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICBwcmVsb2FkcyxcbiAgICAgIHF1ZXJ5TWV0aG9kLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgc2VsZWN0LFxuICAgICAgc2VsZWN0Q29sdW1ucyxcbiAgICAgIHN0eWxlVUksXG4gICAgICB2aWV3TW9kZWxQYXRoLFxuICAgICAgd29ya3BsYWNlLFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuXG4gICAgY29uc3QgaGVhZGVyQ29udGVudCA9IHRoaXMudGFibGVIZWFkZXJDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KVxuICAgIGxldCBQYWdpbmF0aW9uQ29tcG9uZW50XG5cbiAgICBpZiAoIXBhZ2luYXRlQ29udGVudCkge1xuICAgICAgaWYgKHBhZ2luYXRpb25Db21wb25lbnQpIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IHBhZ2luYXRpb25Db21wb25lbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBQYWdpbmF0ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZsYXRMaXN0ID0gKFxuICAgICAgPFRhYmxlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy50dC50YWJsZUNvbnRleHRWYWx1ZX0+XG4gICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgIGRhdGE9e21vZGVsc31cbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgZmxhdExpc3QtJHtjbGFzc05hbWV9LSR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX1gXSB8fD0ge1xuICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMoXCJhcGktbWFrZXItLXRhYmxlXCIsIGNsYXNzTmFtZSksXG4gICAgICAgICAgICBjYWNoZUtleTogdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSxcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHRyYURhdGE9e3RoaXMucy5sYXN0VXBkYXRlfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5rZXlFeHRyYXRvcn1cbiAgICAgICAgICBMaXN0SGVhZGVyQ29tcG9uZW50PXtMaXN0SGVhZGVyQ29tcG9uZW50fVxuICAgICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQucmVuZGVySXRlbX1cbiAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17c3R5bGVzW2BmbGF0TGlzdC0ke3N0eWxlVUl9YF0gfHw9IHtcbiAgICAgICAgICAgIG92ZXJmbG93WDogXCJhdXRvXCIsXG4gICAgICAgICAgICBib3JkZXI6IHN0eWxlVUkgPyBcIjFweCBzb2xpZCAjZGJkYmRiXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IHN0eWxlVUkgPyA1IDogdW5kZWZpbmVkXG4gICAgICAgICAgfX1cbiAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmIGZpbHRlckNhcmQgJiZcbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItY2FyZCBtYi00XCI+XG4gICAgICAgICAgICB7dGhpcy5maWx0ZXJGb3JtKCl9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmICFmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtKClcbiAgICAgICAgfVxuICAgICAgICB7Y2FyZCAmJlxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJsaXZlLXRhYmxlLS10YWJsZS1jYXJkXCIsIFwibWItNFwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scygpfVxuICAgICAgICAgICAgaGVhZGVyPXtoZWFkZXJDb250ZW50fVxuICAgICAgICAgICAgZm9vdGVyPXt0aGlzLnRhYmxlRm9vdGVyKCl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmbGF0TGlzdH1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAgeyFjYXJkICYmIGZsYXRMaXN0fVxuICAgICAgICB7cmVzdWx0ICYmIFBhZ2luYXRpb25Db21wb25lbnQgJiZcbiAgICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudCByZXN1bHQ9e3Jlc3VsdH0gLz5cbiAgICAgICAgfVxuICAgICAgICB7cmVzdWx0ICYmIHBhZ2luYXRlQ29udGVudCAmJlxuICAgICAgICAgIHBhZ2luYXRlQ29udGVudCh7cmVzdWx0fSlcbiAgICAgICAgfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG5cbiAgb25Db250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHt3aWR0aH0gPSBlLm5hdGl2ZUV2ZW50LmxheW91dFxuICAgIGNvbnN0IHt3aWR0aHN9ID0gdGhpcy5zXG5cbiAgICB0aGlzLnNldFN0YXRlKHt3aWR0aH0pXG4gICAgaWYgKHdpZHRocykgd2lkdGhzLnRhYmxlV2lkdGggPSB3aWR0aFxuICB9XG5cbiAgb25MaW5rc0NyZWF0ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnRDcmVhdGVkID0gYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgKyBhbW91bnRDcmVhdGVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBvbkxpbmtzRGVzdHJveWVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnREZXN0cm95ZWQgPSBhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50IC0gYW1vdW50RGVzdHJveWVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBrZXlFeHRyYXRvciA9IChtb2RlbCkgPT4gYCR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX0tJHttb2RlbC5pZCgpfWBcblxuICBmaWx0ZXJGb3JtID0gKCkgPT4ge1xuICAgIGNvbnN0IHtmaWx0ZXJGb3JtUmVmLCBzdWJtaXRGaWx0ZXIsIHN1Ym1pdEZpbHRlckRlYm91bmNlfSA9IHRoaXMudHRcbiAgICBjb25zdCB7ZmlsdGVyQ29udGVudCwgZmlsdGVyU3VibWl0QnV0dG9ufSA9IHRoaXMucFxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtmaWx0ZXJTdWJtaXRMYWJlbH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3FQYXJhbXN9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicVBhcmFtc1wiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtXG4gICAgICAgIGZvcm1SZWY9e2ZpbHRlckZvcm1SZWZ9XG4gICAgICAgIGh0bWxGb3JtUHJvcHM9e3N0eWxlcy5maWx0ZXJGb3JtSHRtbFByb3BzIHx8PSB7Y2xhc3NOYW1lOiBcImxpdmUtdGFibGUtLWZpbHRlci1mb3JtXCJ9fVxuICAgICAgICBvblN1Ym1pdD17dGhpcy50dC5vbkZpbHRlckZvcm1TdWJtaXR9XG4gICAgICAgIHNldEZvcm09e3RoaXMuc2V0U3RhdGVzLmZpbHRlckZvcm19XG4gICAgICA+XG4gICAgICAgIHtcInNcIiBpbiBxUGFyYW1zICYmXG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJzXCIgdHlwZT1cImhpZGRlblwiIHZhbHVlPXtxUGFyYW1zLnN9IC8+XG4gICAgICAgIH1cbiAgICAgICAge2ZpbHRlckNvbnRlbnQoe1xuICAgICAgICAgIG9uRmlsdGVyQ2hhbmdlZDogc3VibWl0RmlsdGVyLFxuICAgICAgICAgIG9uRmlsdGVyQ2hhbmdlZFdpdGhEZWxheTogc3VibWl0RmlsdGVyRGVib3VuY2UsXG4gICAgICAgICAgcVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVFOYW1lXG4gICAgICAgIH0pfVxuICAgICAgICB7ZmlsdGVyU3VibWl0QnV0dG9uICYmXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgbGl2ZS10YWJsZS0tc3VibWl0LWZpbHRlci1idXR0b25cIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmZpbHRlclN1Ym1pdEJ1dHRvbiB8fD0ge21hcmdpblRvcDogXCI4cHhcIn19XG4gICAgICAgICAgICB2YWx1ZT17ZmlsdGVyU3VibWl0TGFiZWwgfHwgdGhpcy50KFwiLmZpbHRlclwiLCB7ZGVmYXVsdFZhbHVlOiBcIkZpbHRlclwifSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9Gb3JtPlxuICAgIClcbiAgfVxuXG4gIG9uRmlsdGVyQ2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd0ZpbHRlcnM6ICF0aGlzLnN0YXRlLnNob3dGaWx0ZXJzfSlcbiAgfVxuXG4gIG9uUGVyUGFnZUNoYW5nZWQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHtxdWVyeU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3QgbmV3UGVyUGFnZVZhbHVlID0gZGlnZyhlLCBcInRhcmdldFwiLCBcInZhbHVlXCIpXG4gICAgY29uc3QgcGVyS2V5ID0gYCR7cXVlcnlOYW1lfV9wZXJgXG4gICAgY29uc3QgcGFyYW1zQ2hhbmdlID0ge31cblxuICAgIHBhcmFtc0NoYW5nZVtwZXJLZXldID0gbmV3UGVyUGFnZVZhbHVlXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKHBhcmFtc0NoYW5nZSlcbiAgfVxuXG4gIHJlbmRlckl0ZW0gPSAoe2luZGV4LCBpdGVtOiBtb2RlbH0pID0+IHtcbiAgICBpZiAoIXRoaXMucy50YWJsZVNldHRpbmdMb2FkZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3RoaXMudChcIi5sb2FkaW5nX2RvdF9kb3RfZG90XCIsIHtkZWZhdWx0VmFsdWU6IFwiTG9hZGluZy4uLlwifSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RlbFJvd1xuICAgICAgICBjYWNoZUtleT17bW9kZWwuY2FjaGVLZXkoKX1cbiAgICAgICAgY29sdW1ucz17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGNvbHVtbldpZHRocz17dGhpcy5jb2x1bW5XaWR0aHMoKX1cbiAgICAgICAgZXZlbnRzPXt0aGlzLnR0LmV2ZW50c31cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e21vZGVsLmlkKCl9XG4gICAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleT17dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBiYXNlIHN0eWxlIGZvciBhIGRhdGEgY29sdW1uLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5jb2x1bW5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY29sdW1uSW5kZXhcbiAgICogQHBhcmFtIHtib29sZWFufSBhcmdzLmV2ZW5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3Muc3R5bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3R5bGVGb3JDb2x1bW4gPSAoe2NvbHVtbiwgY29sdW1uSW5kZXgsIGV2ZW4sIHN0eWxlLCB0eXBlfSkgPT4ge1xuICAgIGNvbnN0IHtzdHlsZVVJfSA9IHRoaXMucFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOCxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgaWYgKHN0eWxlVUkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZGVmYXVsdFN0eWxlLCB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZXZlbiA/IFwiI2Y1ZjVmNVwiIDogXCIjZmZmXCJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT0gXCJhY3Rpb25zXCIpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJyb3dcIlxuICAgICAgZGVmYXVsdFN0eWxlLmFsaWduSXRlbXMgPSBcImNlbnRlclwiXG5cbiAgICAgIGlmICh0aGlzLnR0Lm1kVXApIHtcbiAgICAgICAgZGVmYXVsdFN0eWxlLm1hcmdpbkxlZnQgPSBcImF1dG9cIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFN0eWxlLm1hcmdpblJpZ2h0ID0gXCJhdXRvXCJcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudHQubWRVcCAmJiBzdHlsZVVJKSB7XG4gICAgICBkZWZhdWx0U3R5bGUuYm9yZGVyUmlnaHQgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBkZWZhdWx0U3R5bGUsXG4gICAgICBzdHlsZVxuICAgIClcblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBiYXNlIHN0eWxlIGZvciBhIGhlYWRlciBjb2x1bW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLmNvbHVtblxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5jb2x1bW5JbmRleFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5zdHlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50eXBlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvckhlYWRlciA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge21kVXB9ID0gdGhpcy50dFxuICAgIHJldHVybiB0aGlzLmNhY2hlKFxuICAgICAgYGhlYWRlclN0eWxlLSR7dHlwZSB8fCBcImRlZmF1bHRcIn1gLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgIHBhZGRpbmc6IDhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9IFwiYWN0aW9uc1wiICYmIG1kVXAgJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgICAgICBkZWZhdWx0U3R5bGUuYm9yZGVyUmlnaHQgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGRlZmF1bHRTdHlsZSwgc3R5bGUpXG4gICAgICB9LFxuICAgICAgW21kVXAsIHRoaXMucC5zdHlsZVVJLCB0eXBlLCBzdHlsZV1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBhIGJvbGQgaGVhZGVyIHRleHQgc3R5bGUuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvckhlYWRlclRleHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5oZWFkZXJUZXh0U3R5bGUgfHw9IHtmb250V2VpZ2h0OiBcImJvbGRcIn1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdHlsZSBmb3IgYSB0YWJsZSByb3cgd3JhcHBlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmV2ZW5dXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvclJvdyA9ICh7ZXZlbn0gPSB7fSkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlKFxuICAgICAgYHJvd1N0eWxlLSR7ZXZlbiA/IFwiZXZlblwiIDogXCJvZGRcIn1gLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3R1YWxTdHlsZSA9IHtcbiAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbiAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgICAgIGFjdHVhbFN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiI2Y1ZjVmNVwiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgICAgIH0sXG4gICAgICBbZXZlbiwgdGhpcy5wLnN0eWxlVUldXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0eWxlIGZvciB0aGUgaGVhZGVyIHJvdyB3cmFwcGVyLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3R5bGVGb3JSb3dIZWFkZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXG4gICAgICBcInJvd0hlYWRlclN0eWxlXCIsXG4gICAgICAoKSA9PiAoe1xuICAgICAgICBmbGV4OiAxLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcInN0cmV0Y2hcIlxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICB0YWJsZUNvbnRyb2xzKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0ge30pIHtcbiAgICBjb25zdCB7Y29udHJvbHN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtzaG93U2V0dGluZ3N9ID0gdGhpcy5zXG4gICAgY29uc3QgY29sbGVjdGlvbkFyZ3MgPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcbiAgICBjb25zdCBhY3R1YWxNb2RlbHMgPSBtb2RlbHMgPz8gY29sbGVjdGlvbkFyZ3MubW9kZWxzID8/IFtdXG4gICAgY29uc3QgYWN0dWFsUVBhcmFtcyA9IHFQYXJhbXMgPz8gY29sbGVjdGlvbkFyZ3MucVBhcmFtc1xuICAgIGNvbnN0IGFjdHVhbFF1ZXJ5ID0gcXVlcnkgPz8gY29sbGVjdGlvbkFyZ3MucXVlcnlcbiAgICBjb25zdCBhY3R1YWxSZXN1bHQgPSByZXN1bHQgPz8gY29sbGVjdGlvbkFyZ3MucmVzdWx0XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50YWJsZUNvbnRyb2xzUm9vdFZpZXcgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgIHtjb250cm9scyAmJiBjb250cm9scyh7bW9kZWxzOiBhY3R1YWxNb2RlbHMsIHFQYXJhbXM6IGFjdHVhbFFQYXJhbXMsIHF1ZXJ5OiBhY3R1YWxRdWVyeSwgcmVzdWx0OiBhY3R1YWxSZXN1bHR9KX1cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLmZpbHRlckJ1dHRvbiB8fD0ge2NsYXNzOiBcImZpbHRlci1idXR0b25cIn19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbkZpbHRlckNsaWNrZWR9XG4gICAgICAgICAgdGVzdElEPVwiZmlsdGVyQnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzZWFyY2hcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIHtzaG93U2V0dGluZ3MgJiZcbiAgICAgICAgICAgIDxTZXR0aW5ncyBvblJlcXVlc3RDbG9zZT17dGhpcy50dC5vblJlcXVlc3RDbG9zZVNldHRpbmdzfSB0YWJsZT17dGhpc30gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPFByZXNzYWJsZSBvblByZXNzPXt0aGlzLnR0Lm9uU2V0dGluZ3NDbGlja2VkfSB0ZXN0SUQ9XCJzZXR0aW5ncy1idXR0b25cIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJnZWFyXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICB0YWJsZUZvb3RlcigpIHtcbiAgICBjb25zdCB7cmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcInJlc3VsdFwiKVxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gcmVzdWx0LmN1cnJlbnRQYWdlKClcbiAgICBjb25zdCB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQoKVxuICAgIGNvbnN0IHBlclBhZ2UgPSByZXN1bHQucGVyUGFnZSgpXG4gICAgY29uc3QgdG8gPSBNYXRoLm1pbihjdXJyZW50UGFnZSAqIHBlclBhZ2UsIHRvdGFsQ291bnQpXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gXCJTaG93aW5nICV7ZnJvbX0gdG8gJXt0b30gb3V0IG9mICV7dG90YWxfY291bnR9IHRvdGFsLlwiXG4gICAgbGV0IGZyb20gPSAoKGN1cnJlbnRQYWdlIC0gMSkgKiBwZXJQYWdlKSArIDFcblxuICAgIGlmICh0byA9PT0gMCkgZnJvbSA9IDBcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhYmxlRm9vdGVyUm9vdFZpZXdTdHlsZSB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIiwgbWFyZ2luVG9wOiAxMH19PlxuICAgICAgICA8VmlldyBkYXRhU2V0PXtkYXRhU2V0cy5zaG93aW5nQ291bnRzIHx8PSB7Y2xhc3M6IFwic2hvd2luZy1jb3VudHNcIn19IHN0eWxlPXtzdHlsZXMuc2hvd2luZ0NvdW50cyB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHt0aGlzLnQoXCIuc2hvd2luZ19mcm9tX3RvX291dF9vZl90b3RhbFwiLCB7ZGVmYXVsdFZhbHVlLCBmcm9tLCB0bywgdG90YWxfY291bnQ6IHRvdGFsQ291bnR9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAge3RoaXMucC53b3JrcGxhY2UgJiYgdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy54U2VsZWN0ZWRUZXh0U3R5bGUgfHw9IHttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgIHt0aGlzLnQoXCIueF9zZWxlY3RlZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIiV7c2VsZWN0ZWR9IHNlbGVjdGVkLlwiLCBzZWxlY3RlZDogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudH0pfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwZXItcGFnZS1zZWxlY3RcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtwZXJQYWdlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudHQub25QZXJQYWdlQ2hhbmdlZH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3BhZ2luYXRpb25PcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBjbGFzc05hbWUoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcImFwaS1tYWtlci0tdGFibGVcIl1cblxuICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHRoaXMucHJvcHMuY2xhc3NOYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBjbGFzc05hbWVzLmpvaW4oXCIgXCIpXG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgcGVyLWNvbHVtbiBwcm9wcyBmb3IgdGFibGUgY2VsbHMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGNvbHVtblByb3BzKGNvbHVtbikge1xuICAgIGxldCBjYWNoZUtleSA9IFwiZGVmYXVsdFwiXG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIGNhY2hlS2V5ID0gXCJjZW50ZXJcIlxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgY2FjaGVLZXkgPSBcInJpZ2h0XCJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIGBjb2x1bW5Qcm9wcy0ke2NhY2hlS2V5fWAsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgICAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgICAgICBwcm9wcy5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BzXG4gICAgICB9LFxuICAgICAgW2NvbHVtbi50ZXh0Q2VudGVyLCBjb2x1bW4udGV4dFJpZ2h0XVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBwZXItY29sdW1uIHByb3BzIGZvciBoZWFkZXIgY2VsbHMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGhlYWRlclByb3BzKGNvbHVtbikge1xuICAgIGxldCBjYWNoZUtleSA9IFwiZGVmYXVsdFwiXG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIGNhY2hlS2V5ID0gXCJjZW50ZXJcIlxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgY2FjaGVLZXkgPSBcInJpZ2h0XCJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIGBoZWFkZXJQcm9wcy0ke2NhY2hlS2V5fWAsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgICAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgICAgICBwcm9wcy5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiY2VudGVyXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICAgICAgcHJvcHMuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImVuZFwiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcHNcbiAgICAgIH0sXG4gICAgICBbY29sdW1uLnRleHRDZW50ZXIsIGNvbHVtbi50ZXh0UmlnaHRdXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbHVtbiB3aWR0aHMga2V5ZWQgYnkgaWRlbnRpZmllciBmb3IgdGFibGUgcm93cy5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGNvbHVtbldpZHRocygpIHtcbiAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5zLnByZXBhcmVkQ29sdW1ucykge1xuICAgICAgY29sdW1uV2lkdGhzW2NvbHVtbi50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpXSA9IGNvbHVtbi53aWR0aFxuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5XaWR0aHNcbiAgfVxuXG4gIGhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmFnZ2FibGVTb3J0XG4gICAgICAgIGFjdGl2ZUl0ZW1TdHlsZT17dGhpcy50dC5kcmFnZ2VkSGVhZGVyU3R5bGUoKX1cbiAgICAgICAgZGF0YT17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGV2ZW50cz17dGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzfVxuICAgICAgICBob3Jpem9udGFsXG4gICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5kcmFnTGlzdGtleUV4dHJhY3Rvcn1cbiAgICAgICAgb25JdGVtTW92ZWQ9e3RoaXMudHQub25JdGVtTW92ZWR9XG4gICAgICAgIG9uUmVvcmRlcmVkPXt0aGlzLnR0Lm9uUmVvcmRlcmVkfVxuICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LmRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnR9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGRyYWdMaXN0Q2FjaGVLZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gYCR7aXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfS0ke3RoaXMucy5yZXNpemluZ31gXG4gIGRyYWdMaXN0a2V5RXh0cmFjdG9yID0gKGl0ZW0pID0+IGl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKVxuXG4gIG9uSXRlbU1vdmVkID0gKHthbmltYXRpb25BcmdzLCBpdGVtSW5kZXgsIHgsIHl9KSA9PiB7XG4gICAgY29uc3QgYW5pbWF0ZWRQb3NpdGlvbiA9IGRpZ2codGhpcywgXCJzXCIsIFwiY29sdW1uc1RvU2hvd1wiLCBpdGVtSW5kZXgsIFwiYW5pbWF0ZWRQb3NpdGlvblwiKVxuXG4gICAgaWYgKGFuaW1hdGlvbkFyZ3MpIHtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltYXRlZFBvc2l0aW9uLCBhbmltYXRpb25BcmdzKS5zdGFydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFuaW1hdGVkUG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0IHRoZSBuZXcgY29sdW1uIG9yZGVyaW5nLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5mcm9tSXRlbVxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy50b0l0ZW1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuZnJvbVBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLnRvUG9zaXRpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBvblJlb3JkZXJlZCA9IGFzeW5jICh7ZnJvbUl0ZW0sIGZyb21Qb3NpdGlvbiwgdG9JdGVtLCB0b1Bvc2l0aW9ufSkgPT4ge1xuICAgIGlmIChmcm9tUG9zaXRpb24gPT0gdG9Qb3NpdGlvbikgcmV0dXJuIC8vIE9ubHkgZG8gcmVxdWVzdHMgYW5kIHF1ZXJpZXMgaWYgY2hhbmdlZFxuXG4gICAgY29uc3QgVGFibGVTZXR0aW5nQ29sdW1uID0gZnJvbUl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgdG9Db2x1bW4gPSBhd2FpdCBUYWJsZVNldHRpbmdDb2x1bW4uZmluZCh0b0l0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkKCkpIC8vIE5lZWQgdG8gbG9hZCBsYXRlc3QgcG9zaXRpb24gYmVjYXVzZSBBY3RzQXNMaXN0IG1pZ2h0IGhhdmUgY2hhbmdlZCBpdFxuXG4gICAgYXdhaXQgZnJvbUl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLnVwZGF0ZSh7cG9zaXRpb246IHRvQ29sdW1uLnBvc2l0aW9uKCl9KVxuICB9XG5cbiAgZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudCA9ICh7aXNBY3RpdmUsIGl0ZW0sIHRvdWNoUHJvcHN9KSA9PiB7XG4gICAgY29uc3Qge2FuaW1hdGVkV2lkdGgsIGFuaW1hdGVkWkluZGV4LCBjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbn0gPSBpdGVtXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhlYWRlckNvbHVtblxuICAgICAgICBhY3RpdmU9e2lzQWN0aXZlfVxuICAgICAgICBhbmltYXRlZFdpZHRoPXthbmltYXRlZFdpZHRofVxuICAgICAgICBhbmltYXRlZFpJbmRleD17YW5pbWF0ZWRaSW5kZXh9XG4gICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICBrZXk9e3RhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9XG4gICAgICAgIHJlc2l6aW5nPXt0aGlzLnMucmVzaXppbmd9XG4gICAgICAgIHRhYmxlPXt0aGlzfVxuICAgICAgICB0YWJsZVNldHRpbmdDb2x1bW49e3RhYmxlU2V0dGluZ0NvbHVtbn1cbiAgICAgICAgdG91Y2hQcm9wcz17dG91Y2hQcm9wc31cbiAgICAgICAgd2lkdGhzPXt0aGlzLnMud2lkdGhzfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBoZWFkZXJDbGFzc05hbWVGb3JDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtdXG5cbiAgICBpZiAoY29sdW1uLmNvbW1vblByb3BzICYmIGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpIGNsYXNzTmFtZXMucHVzaChjb2x1bW4uY29tbW9uUHJvcHMuY2xhc3NOYW1lKVxuICAgIGlmIChjb2x1bW4uaGVhZGVyUHJvcHMgJiYgY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5oZWFkZXJQcm9wcy5jbGFzc05hbWUpXG5cbiAgICByZXR1cm4gY2xhc3NOYW1lc1xuICB9XG5cbiAgaGVhZGVyTGFiZWxGb3JDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3Qge21vZGVsQ2xhc3N9ID0gdGhpcy5wXG5cbiAgICBpZiAoXCJsYWJlbFwiIGluIGNvbHVtbikge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4ubGFiZWwgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ubGFiZWwoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbFxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcblxuICAgIC8vIENhbGN1bGF0ZSBjdXJyZW50IG1vZGVsIGNsYXNzIHRocm91Z2ggcGF0aFxuICAgIGlmIChjb2x1bW4ucGF0aCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiBjb2x1bW4ucGF0aCkge1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gZGlnZyhjdXJyZW50TW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcInJlbGF0aW9uc2hpcHNcIilcbiAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwcy5maW5kKChyZWxhdGlvbnNoaXBJbkFycmF5KSA9PiByZWxhdGlvbnNoaXBJbkFycmF5Lm5hbWUgPT0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBhdGhQYXJ0KSlcblxuICAgICAgICBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NSZXF1aXJlKGRpZ2cocmVsYXRpb25zaGlwLCBcInJlc291cmNlX25hbWVcIikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGUpIHJldHVybiBjdXJyZW50TW9kZWxDbGFzcy5odW1hbkF0dHJpYnV0ZU5hbWUoY29sdW1uLmF0dHJpYnV0ZSlcblxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vICdsYWJlbCcgb3IgJ2F0dHJpYnV0ZScgd2FzIGdpdmVuXCIpXG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBzdHlsaW5nIGZvciBhIGRyYWdnZWQgaGVhZGVyIGl0ZW0uXG4gICAqIEByZXR1cm5zIHtvYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgZHJhZ2dlZEhlYWRlclN0eWxlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnAuZHJhZ2dlZEhlYWRlclN0eWxlICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnAuZHJhZ2dlZEhlYWRlclN0eWxlXG4gICAgaWYgKHRoaXMucC5zdHlsZVVJKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gc3R5bGVzLmRyYWdnZWRIZWFkZXJTdHlsZVRyYW5zcGFyZW50IHx8PSB7YmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCJ9XG4gIH1cblxuICBvbkZpbHRlckZvcm1TdWJtaXQgPSAoKSA9PiB0aGlzLnN1Ym1pdEZpbHRlcigpXG4gIG9uUmVxdWVzdENsb3NlU2V0dGluZ3MgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtzaG93U2V0dGluZ3M6IGZhbHNlfSlcblxuICBvblNldHRpbmdzQ2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtzaG93U2V0dGluZ3M6ICF0aGlzLnMuc2hvd1NldHRpbmdzfSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlciA9ICgpID0+IHtcbiAgICBjb25zdCB7YXBwSGlzdG9yeX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3F1ZXJ5UU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3QgY2hhbmdlUGFyYW1zUGFyYW1zID0ge31cbiAgICBjb25zdCBxUGFyYW1zID0gdGhpcy5zLmZpbHRlckZvcm0uYXNPYmplY3QoKVxuXG4gICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgIGNvbnN0IGZpbHRlckZvcm0gPSBkaWdnKHRoaXMudHQuZmlsdGVyRm9ybVJlZiwgXCJjdXJyZW50XCIpXG4gICAgICBjb25zdCBuYXZ0aXZlRm9ybVBhcmFtcyA9IFBhcmFtcy5zZXJpYWxpemVGb3JtKGZpbHRlckZvcm0pXG5cbiAgICAgIGluY29ycG9yYXRlKHFQYXJhbXMsIG5hdnRpdmVGb3JtUGFyYW1zKVxuICAgIH1cblxuICAgIGNoYW5nZVBhcmFtc1BhcmFtc1txdWVyeVFOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHFQYXJhbXMpXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKGNoYW5nZVBhcmFtc1BhcmFtcywge2FwcEhpc3Rvcnl9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyRGVib3VuY2UgPSBkZWJvdW5jZSh0aGlzLnR0LnN1Ym1pdEZpbHRlcilcbn0pKVxuIl19
743
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL3RhYmxlLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUZBQXVGO0FBQ3ZGLDJGQUEyRjtBQUMzRiw0RUFBNEU7QUFDNUUsd0RBQXdEO0FBQ3hELE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUN6QyxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ2hFLE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sSUFBSSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BDLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxhQUFhLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLFFBQVEsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQzVCLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFBO0FBQ3hDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFD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QUUsaUJBQWlCLENBQUMsQ0FBQTtRQUN6QyxDQUFDO1FBRUQsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUV4RCxNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxvQkFBb0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUN0RCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGFycm93LWJvZHktc3R5bGUsIGltcG9ydC9uby1uYW1lZC1hcy1kZWZhdWx0LCBpbXBvcnQvbm8tdW5yZXNvbHZlZCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZXh0cmEtcGFyZW5zLCBuby1yZXR1cm4tYXNzaWduLCBuby11bnVzZWQtdmFycywgcmVhY3QvanN4LW1heC1kZXB0aCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lLCByZWFjdC9qc3gtc29ydC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvc29ydC1wcm9wLXR5cGVzLCBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7ZGlnLCBkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBSZWFjdCwge2NyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7QW5pbWF0ZWQsIFBsYXRmb3JtLCBQcmVzc2FibGUsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCBDYXJkIGZyb20gXCIuLi9ib290c3RyYXAvY2FyZFwiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQ29sbGVjdGlvbiBmcm9tIFwiLi4vY29sbGVjdGlvbi5qc1wiXG5pbXBvcnQgY29sdW1uVmlzaWJsZSBmcm9tIFwiLi9jb2x1bW4tdmlzaWJsZS5qc1wiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBEcmFnZ2FibGVTb3J0IGZyb20gXCIuLi9kcmFnZ2FibGUtc29ydC9pbmRleFwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0IEZpbHRlcnMgZnJvbSBcIi4vZmlsdGVycy9pbmRleFwiXG5pbXBvcnQgRmxhdExpc3QgZnJvbSBcIi4vY29tcG9uZW50cy9mbGF0LWxpc3RcIlxuaW1wb3J0IHtGb3JtfSBmcm9tIFwiLi4vZm9ybVwiXG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvaGVhZGVyXCJcbmltcG9ydCBIZWFkZXJDb2x1bW4gZnJvbSBcIi4vaGVhZGVyLWNvbHVtblwiXG5pbXBvcnQgSGVhZGVyU2VsZWN0IGZyb20gXCIuL2hlYWRlci1zZWxlY3RcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL3V0aWxzL2ljb25cIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi4vbW9kZWwtY2xhc3MtcmVxdWlyZS5qc1wiXG5pbXBvcnQgTW9kZWxSb3cgZnJvbSBcIi4vbW9kZWwtcm93XCJcbmltcG9ydCBQYWdpbmF0ZSBmcm9tIFwiLi4vYm9vdHN0cmFwL3BhZ2luYXRlXCJcbmltcG9ydCBQYXJhbXMgZnJvbSBcIi4uL3BhcmFtcy5qc1wiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBSb3cgZnJvbSBcIi4vY29tcG9uZW50cy9yb3dcIlxuaW1wb3J0IHNlbGVjdENhbGN1bGF0b3IgZnJvbSBcIi4vc2VsZWN0LWNhbGN1bGF0b3IuanNcIlxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi4vaW5wdXRzL3NlbGVjdFwiXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MvaW5kZXhcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgVGFibGVTZXR0aW5ncyBmcm9tIFwiLi90YWJsZS1zZXR0aW5ncy5qc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdW5pcXVuaXplIGZyb20gXCJ1bmlxdW5pemVcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlQ29sbGVjdGlvbiBmcm9tIFwiLi4vdXNlLWNvbGxlY3Rpb24uanNcIlxuaW1wb3J0IHVzZUkxOG4gZnJvbSBcImkxOG4tb24tc3Rlcm9pZHMvc3JjL3VzZS1pMThuLm1qc1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlTW9kZWxFdmVudCBmcm9tIFwiLi4vdXNlLW1vZGVsLWV2ZW50LmpzXCJcbmltcG9ydCB1c2VRdWVyeVBhcmFtcyBmcm9tIFwib24tbG9jYXRpb24tY2hhbmdlZC9idWlsZC91c2UtcXVlcnktcGFyYW1zLmpzXCJcbmltcG9ydCBXaWR0aHMgZnJvbSBcIi4vd2lkdGhzXCJcbmltcG9ydCBXb3JrZXJQbHVnaW5zQ2hlY2tBbGxDaGVja2JveCBmcm9tIFwiLi93b3JrZXItcGx1Z2lucy1jaGVjay1hbGwtY2hlY2tib3hcIlxuXG4vKipcbiAqIFRhYmxlIGNvbXBvbmVudCB3aXRoIHNvcnRhYmxlLCByZXNpemFibGUgY29sdW1ucyBhbmQgb3B0aW9uYWwgZmlsdGVycy5cbiAqL1xuY29uc3QgZGF0YVNldHMgPSB7fVxuY29uc3QgcGFnaW5hdGlvbk9wdGlvbnMgPSBbMzAsIDYwLCA5MCwgW1wiQWxsXCIsIFwiYWxsXCJdXVxuY29uc3Qgc3R5bGVzID0ge31cbmNvbnN0IFRhYmxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKVxuXG5jb25zdCBMaXN0SGVhZGVyQ29tcG9uZW50ID0gbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBMaXN0SGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIHNldHVwKCkge1xuICAgIHRoaXMudXNlU3RhdGVzKHtcbiAgICAgIGxhc3RVcGRhdGU6IG5ldyBEYXRlKClcbiAgICB9KVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHttZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHRhYmxlQ29udGV4dFZhbHVlID0gdXNlQ29udGV4dChUYWJsZUNvbnRleHQpXG4gICAgY29uc3QgdGFibGUgPSB0YWJsZUNvbnRleHRWYWx1ZS50YWJsZVxuICAgIGNvbnN0IHtjb2xsZWN0aW9uLCBldmVudHMsIHF1ZXJ5V2l0aG91dFBhZ2luYXRpb24sIHR9ID0gdGFibGUudHRcbiAgICBjb25zdCB7cXVlcnl9ID0gZGlncyhjb2xsZWN0aW9uLCBcInF1ZXJ5XCIpXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIoZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcblxuICAgIHJldHVybiAoXG4gICAgICA8Um93IHN0eWxlPXt0YWJsZS5zdHlsZUZvclJvd0hlYWRlcigpfSB0ZXN0SUQ9XCJhcGktbWFrZXIvdGFibGUvaGVhZGVyLXJvd1wiPlxuICAgICAgICB7dGFibGUucC53b3JrcGxhY2UgJiYgdGFibGUucy5jdXJyZW50V29ya3BsYWNlICYmXG4gICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7d2lkdGg6IG1kVXAgPyA0MSA6IHVuZGVmaW5lZH19KX0+XG4gICAgICAgICAgICA8V29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3hcbiAgICAgICAgICAgICAgY3VycmVudFdvcmtwbGFjZT17dGFibGUucy5jdXJyZW50V29ya3BsYWNlfVxuICAgICAgICAgICAgICBxdWVyeT17cXVlcnlXaXRob3V0UGFnaW5hdGlvbn1cbiAgICAgICAgICAgICAgc3R5bGU9e3N0eWxlcy53b3JrZXJQbGd1aW5zQ2hlY2tBbGxDaGVja2JveFN0eWxlIHx8PSB7bWFyZ2luSG9yaXpvbnRhbDogXCJhdXRvXCJ9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshbWRVcCAmJlxuICAgICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnNlbGVjdEFsbEZvdW5kVGV4dFN0eWxlIHx8PSB7bWFyZ2luTGVmdDogM319PlxuICAgICAgICAgICAgICAgIHt0KFwiLnNlbGVjdF9hbGxfZm91bmRcIiwge2RlZmF1bHRWYWx1ZTogXCJTZWxlY3QgYWxsIGZvdW5kXCJ9KX1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICB9XG4gICAgICAgIHshbWRVcCAmJlxuICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge319KX0+XG4gICAgICAgICAgICA8SGVhZGVyU2VsZWN0IHByZXBhcmVkQ29sdW1ucz17dGFibGUucy5wcmVwYXJlZENvbHVtbnN9IHF1ZXJ5PXtxdWVyeX0gdGFibGU9e3RhYmxlfSAvPlxuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICB9XG4gICAgICAgIHttZFVwICYmXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHt0YWJsZS5oZWFkZXJzQ29udGVudEZyb21Db2x1bW5zKCl9XG4gICAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt9LCB0eXBlOiBcImFjdGlvbnNcIn0pfSAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICB9XG4gICAgICA8L1Jvdz5cbiAgICApXG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7bGFzdFVwZGF0ZTogbmV3IERhdGUoKX0pXG59KSlcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBBcGlNYWtlclRhYmxlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICovXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgY2FyZDogdHJ1ZSxcbiAgICBjdXJyZW50VXNlcjogbnVsbCxcbiAgICBkZXN0cm95RW5hYmxlZDogdHJ1ZSxcbiAgICBkcmFnZ2VkSGVhZGVyU3R5bGU6IHVuZGVmaW5lZCxcbiAgICBmaWx0ZXJDYXJkOiB0cnVlLFxuICAgIGZpbHRlclN1Ym1pdEJ1dHRvbjogdHJ1ZSxcbiAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB1bmRlZmluZWQsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB1bmRlZmluZWQsXG4gICAgcHJlbG9hZHM6IFtdLFxuICAgIHNlbGVjdDoge30sXG4gICAgc3R5bGVVSTogdHJ1ZSxcbiAgICB3b3JrcGxhY2U6IGZhbHNlXG4gIH1cblxuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFiaWxpdGllczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBhY3Rpb25zQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYXBwSGlzdG9yeTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xsZWN0aW9uOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihDb2xsZWN0aW9uKSxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5mdW5jXSksXG4gICAgY29udHJvbHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGN1cnJlbnRVc2VyOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlZmF1bHREYXRlRm9ybWF0TmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIGRlZmF1bHRQYXJhbXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZGVzdHJveUVuYWJsZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZGVzdHJveU1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZHJhZ2dlZEhlYWRlclN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGVkaXRNb2RlbFBhdGg6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlckNhcmQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZmlsdGVyQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZmlsdGVyU3VibWl0TGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgZ3JvdXBCeTogUHJvcFR5cGVzLmFycmF5LFxuICAgIGhlYWRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBpZGVudGlmaWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk1vZGVsc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdpbmF0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHF1ZXJ5TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNlbGVjdENvbHVtbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlVUk6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmlld01vZGVsUGF0aDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgd29ya3BsYWNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG4gIH1cblxuICBkcmFnZ2FibGVTb3J0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICB0YWJsZVNldHRpbmdzID0gbnVsbFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIudGFibGVcIn0pXG4gICAgY29uc3Qge25hbWU6IGJyZWFrcG9pbnQsIG1kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1c2VRdWVyeVBhcmFtcygpXG5cbiAgICB0aGlzLnNldEluc3RhbmNlKHtcbiAgICAgIGJyZWFrcG9pbnQsXG4gICAgICBmaWx0ZXJGb3JtUmVmOiB1c2VSZWYoKSxcbiAgICAgIG1kVXAsXG4gICAgICB0XG4gICAgfSlcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25LZXkgPSBkaWdnKHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwiY29sbGVjdGlvbktleVwiKVxuICAgIGxldCBxdWVyeU5hbWUgPSB0aGlzLnByb3BzLnF1ZXJ5TmFtZVxuXG4gICAgaWYgKCFxdWVyeU5hbWUpIHF1ZXJ5TmFtZSA9IGNvbGxlY3Rpb25LZXlcblxuICAgIGNvbnN0IHF1ZXJ5U05hbWUgPSBgJHtxdWVyeU5hbWV9X3NgXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBjb2x1bW5zOiAoKSA9PiB0aGlzLmNvbHVtbnNBc0FycmF5KCksXG4gICAgICBjdXJyZW50V29ya3BsYWNlOiB1bmRlZmluZWQsXG4gICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IG51bGwsXG4gICAgICBmaWx0ZXJGb3JtOiBudWxsLFxuICAgICAgY29sdW1uc1RvU2hvdzogbnVsbCxcbiAgICAgIGRyYWdnZWRDb2x1bW46IG51bGwsXG4gICAgICBpZGVudGlmaWVyOiAoKSA9PiB0aGlzLnByb3BzLmlkZW50aWZpZXIgfHwgYCR7Y29sbGVjdGlvbktleX0tZGVmYXVsdGAsXG4gICAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpLFxuICAgICAgcHJlbG9hZDogdW5kZWZpbmVkLFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBxdWVyeVFOYW1lOiAoKSA9PiBgJHtxdWVyeU5hbWV9X3FgLFxuICAgICAgcXVlcnlQYWdlTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9wYWdlYCxcbiAgICAgIHF1ZXJ5U05hbWUsXG4gICAgICByZXNpemluZzogZmFsc2UsXG4gICAgICBzaG93RmlsdGVyczogKCkgPT4gQm9vbGVhbihxdWVyeVBhcmFtc1txdWVyeVNOYW1lXSksXG4gICAgICBzaG93U2V0dGluZ3M6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGhzOiBudWxsXG4gICAgfSlcblxuICAgIHRoaXMudGFibGVDb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlLFxuICAgICAgICByZXNpemluZzogdGhpcy5zLnJlc2l6aW5nLFxuICAgICAgICB0YWJsZTogdGhpc1xuICAgICAgfSksXG4gICAgICBbdGhpcy5zLmxhc3RVcGRhdGUsIHRoaXMucy5yZXNpemluZywgdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleV1cbiAgICApXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb3BzLndvcmtwbGFjZSkge1xuICAgICAgICB0aGlzLmxvYWRDdXJyZW50V29ya3BsYWNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpXSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnR0LnRhYmxlU2V0dGluZ3MgJiYgdGhpcy5zLndpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sb2FkVGFibGVTZXR0aW5nKClcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpLCB0aGlzLnMud2lkdGhdKVxuXG4gICAgdXNlTW9kZWxFdmVudCh0aGlzLnMuY3VycmVudFdvcmtwbGFjZSwgXCJ3b3JrcGxhY2VfbGlua3NfY3JlYXRlZFwiLCB0aGlzLnR0Lm9uTGlua3NDcmVhdGVkKVxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2Rlc3Ryb3llZFwiLCB0aGlzLnR0Lm9uTGlua3NEZXN0cm95ZWQpXG5cbiAgICBsZXQgY29sbGVjdGlvblJlYWR5ID0gdHJ1ZVxuICAgIGxldCBzZWxlY3RcblxuICAgIGlmICghdGhpcy5zLnByZXBhcmVkQ29sdW1ucykge1xuICAgICAgY29sbGVjdGlvblJlYWR5ID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY29sbGVjdGlvblJlYWR5KSB7XG4gICAgICBzZWxlY3QgPSBzZWxlY3RDYWxjdWxhdG9yKHt0YWJsZTogdGhpc30pXG4gICAgfVxuXG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdXNlQ29sbGVjdGlvbih7XG4gICAgICBhYmlsaXRpZXM6IHRoaXMuYWJpbGl0aWVzVG9Mb2FkKCksXG4gICAgICBkZWZhdWx0UGFyYW1zOiB0aGlzLnByb3BzLmRlZmF1bHRQYXJhbXMsXG4gICAgICBjb2xsZWN0aW9uOiB0aGlzLnByb3BzLmNvbGxlY3Rpb24sXG4gICAgICBncm91cEJ5OiB0aGlzLnByb3BzLmdyb3VwQnksXG4gICAgICBpZkNvbmRpdGlvbjogY29sbGVjdGlvblJlYWR5LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5wcm9wcy5tb2RlbENsYXNzLFxuICAgICAgb25Nb2RlbHNMb2FkZWQ6IHRoaXMucHJvcHMub25Nb2RlbHNMb2FkZWQsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBub1JlY29yZHNGb3VuZENvbnRlbnQ6IHRoaXMucHJvcHMubm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgIHByZWxvYWRzOiB0aGlzLnN0YXRlLnByZWxvYWQsXG4gICAgICBxdWVyeU1ldGhvZDogdGhpcy5wcm9wcy5xdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnM6IHRoaXMucHJvcHMuc2VsZWN0Q29sdW1uc1xuICAgIH0pXG4gICAgdGhpcy5xdWVyeVdpdGhvdXRQYWdpbmF0aW9uID0gdXNlTWVtbyhcbiAgICAgICgpID0+IHRoaXMuY29sbGVjdGlvbj8ucXVlcnk/LmNsb25lKCk/LmV4Y2VwdChcInBhZ2VcIiksXG4gICAgICBbdGhpcy5jb2xsZWN0aW9uLnF1ZXJ5XVxuICAgIClcblxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHMsIFwib25EcmFnU3RhcnRcIiwgdGhpcy50dC5vbkRyYWdTdGFydClcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ0VuZEFuaW1hdGlvblwiLCB0aGlzLnR0Lm9uRHJhZ0VuZEFuaW1hdGlvbilcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5ldmVudHMsIFwiY29sdW1uVmlzaWJpbGl0eVVwZGF0ZWRcIiwgdGhpcy50dC5vbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkKVxuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2NvbHVtbnNUb1Nob3c6IHRoaXMuZ2V0Q29sdW1uc1RvU2hvdyh0aGlzLnMuY29sdW1ucyksIGxhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxuICBvbkRyYWdTdGFydCA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoOTk5OSlcbiAgb25EcmFnRW5kQW5pbWF0aW9uID0gKHtpdGVtfSkgPT4gaXRlbS5hbmltYXRlZFpJbmRleC5zZXRWYWx1ZSgwKVxuXG4gIGFzeW5jIGxvYWRDdXJyZW50V29ya3BsYWNlKCkge1xuICAgIGNvbnN0IFdvcmtwbGFjZSA9IG1vZGVsQ2xhc3NSZXF1aXJlKFwiV29ya3BsYWNlXCIpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgV29ya3BsYWNlLmN1cnJlbnQoKVxuICAgIGNvbnN0IGN1cnJlbnRXb3JrcGxhY2UgPSBkaWcocmVzdWx0LCBcImN1cnJlbnRcIiwgMClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2V9KVxuICB9XG5cbiAgYXN5bmMgbG9hZEN1cnJlbnRXb3JrcGxhY2VDb3VudCgpIHtcbiAgICBpZiAoIXRoaXMucy5jdXJyZW50V29ya3BsYWNlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50V29ya3BsYWNlQ291bnQ6IDB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgV29ya3BsYWNlTGluayA9IG1vZGVsQ2xhc3NSZXF1aXJlKFwiV29ya3BsYWNlTGlua1wiKVxuICAgIGNvbnN0IGN1cnJlbnRXb3JrcGxhY2VDb3VudCA9IGF3YWl0IFdvcmtwbGFjZUxpbmtcbiAgICAgIC5yYW5zYWNrKHtcbiAgICAgICAgcmVzb3VyY2VfdHlwZV9lcTogdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lLFxuICAgICAgICB3b3JrcGxhY2VfaWRfZXE6IHRoaXMucy5jdXJyZW50V29ya3BsYWNlLmlkKClcbiAgICAgIH0pXG4gICAgICAuY291bnQoKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZUNvdW50fSlcbiAgfVxuXG4gIGdldENvbHVtbnNUb1Nob3coY29sdW1ucykge1xuICAgIHJldHVybiBjb2x1bW5zXG4gICAgICAuZmlsdGVyKCh7Y29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW59KSA9PiBjb2x1bW5WaXNpYmxlKGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1uKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRhYmxlU2V0dGluZ0NvbHVtbi5wb3NpdGlvbigpIC0gYi50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRUYWJsZVNldHRpbmcoKSB7XG4gICAgdGhpcy50YWJsZVNldHRpbmdzID0gbmV3IFRhYmxlU2V0dGluZ3Moe3RhYmxlOiB0aGlzfSlcblxuICAgIGNvbnN0IHRhYmxlU2V0dGluZyA9IGF3YWl0IHRoaXMudGFibGVTZXR0aW5ncy5sb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MoKVxuXG4gICAgaWYgKCF0YWJsZVNldHRpbmcpIHRocm93IG5ldyBFcnJvcihcIk5vIHRhYmxlU2V0dGluZyByZXR1cm5lZCBieSB0YWJsZVNldHRpbmdzLmxvYWRFeGlzdGluZ09yQ3JlYXRlVGFibGVTZXR0aW5ncygpXCIpXG5cbiAgICBjb25zdCB7Y29sdW1ucywgcHJlbG9hZH0gPSB0aGlzLnRhYmxlU2V0dGluZ3MucHJlcGFyZWRDb2x1bW5zKHRhYmxlU2V0dGluZylcbiAgICBjb25zdCB7d2lkdGh9ID0gdGhpcy5zXG4gICAgY29uc3Qgd2lkdGhzID0gbmV3IFdpZHRocyh7Y29sdW1ucywgdGFibGU6IHRoaXMsIHdpZHRofSlcbiAgICBjb25zdCBjb2x1bW5zVG9TaG93ID0gdGhpcy5nZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb2x1bW5zVG9TaG93LFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgcHJlbG9hZDogdGhpcy5tZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSxcbiAgICAgIHRhYmxlU2V0dGluZyxcbiAgICAgIHRhYmxlU2V0dGluZ0xvYWRlZDogdHJ1ZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGFibGVTZXR0aW5nLmZ1bGxDYWNoZUtleSgpLFxuICAgICAgd2lkdGhzXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZVNldHRpbmdzRnVsbENhY2hlS2V5ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7dGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB0aGlzLnN0YXRlLnRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKX0pXG5cbiAgY29sdW1uc0FzQXJyYXkgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLmNvbHVtbnMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW5zXG4gIH1cblxuICBtZXJnZWRQcmVsb2FkcyhwcmVsb2FkKSB7XG4gICAgY29uc3Qge3ByZWxvYWRzfSA9IHRoaXMucHJvcHNcbiAgICBsZXQgbWVyZ2VkUHJlbG9hZHMgPSBbXVxuXG4gICAgaWYgKHByZWxvYWRzKSBtZXJnZWRQcmVsb2FkcyA9IG1lcmdlZFByZWxvYWRzLmNvbmNhdChwcmVsb2FkcylcbiAgICBpZiAocHJlbG9hZCkgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZClcblxuICAgIHJldHVybiB1bmlxdW5pemUobWVyZ2VkUHJlbG9hZHMpXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge21vZGVsQ2xhc3MsIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsIG5vUmVjb3Jkc0ZvdW5kQ29udGVudH0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y29sbGVjdGlvbiwgY3VycmVudFVzZXJ9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtxdWVyeU5hbWUsIHF1ZXJ5U05hbWUsIHNob3dGaWx0ZXJzfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGVscyxcbiAgICAgIG92ZXJhbGxDb3VudCxcbiAgICAgIHFQYXJhbXMsXG4gICAgICBxdWVyeSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudFxuICAgIH0gPSBkaWdzKFxuICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuICAgICAgXCJtb2RlbHNcIixcbiAgICAgIFwib3ZlcmFsbENvdW50XCIsXG4gICAgICBcInFQYXJhbXNcIixcbiAgICAgIFwicXVlcnlcIixcbiAgICAgIFwicmVzdWx0XCIsXG4gICAgICBcInNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50XCIsXG4gICAgICBcInNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcIlxuICAgIClcblxuICAgIGlmIChjb2xsZWN0aW9uICYmIGNvbGxlY3Rpb24uYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSAhPSBtb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTW9kZWwgY2xhc3MgZnJvbSBjb2xsZWN0aW9uICcke2NvbGxlY3Rpb24uYXJncy5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX0nIGAgK1xuICAgICAgICBgZGlkbid0IG1hdGNoIG1vZGVsIGNsYXNzIG9uIHRhYmxlOiAnJHttb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZX0nYFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1xuICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgcm9vdFZpZXctJHt0aGlzLmNsYXNzTmFtZSgpfWBdIHx8PSB7Y2xhc3M6IHRoaXMuY2xhc3NOYW1lKCl9fVxuICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkNvbnRhaW5lckxheW91dH1cbiAgICAgICAgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGVzPy5jb250YWluZXJ9XG4gICAgICA+XG4gICAgICAgIHtzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1hdmFpbGFibGUtY29udGVudFwiPlxuICAgICAgICAgICAge25vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQoe21vZGVscywgcVBhcmFtcywgb3ZlcmFsbENvdW50fSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3Nob3dOb1JlY29yZHNGb3VuZENvbnRlbnQgJiZcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLW5vLXJlY29yZHMtZm91bmQtY29udGVudFwiPlxuICAgICAgICAgICAge25vUmVjb3Jkc0ZvdW5kQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd0ZpbHRlcnMgJiZcbiAgICAgICAgICA8RmlsdGVycyBjdXJyZW50VXNlcj17Y3VycmVudFVzZXJ9IG1vZGVsQ2xhc3M9e21vZGVsQ2xhc3N9IHF1ZXJ5TmFtZT17cXVlcnlOYW1lfSBxdWVyeVNOYW1lPXtxdWVyeVNOYW1lfSAvPlxuICAgICAgICB9XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChxUGFyYW1zICYmIHF1ZXJ5ICYmIHJlc3VsdCAmJiBtb2RlbHMgJiYgIXNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmICFzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXJkT3JUYWJsZSgpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKX1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgaGVhZGVyIHRpdGxlIG9yIGN1c3RvbSBoZWFkZXIgY29udGVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge0FycmF5PG9iamVjdD59IFthcmdzLm1vZGVsc11cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzLnFQYXJhbXNdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJncy5xdWVyeV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzLnJlc3VsdF1cbiAgICogQHJldHVybnMge3N0cmluZ3xSZWFjdC5SZWFjdE5vZGV9XG4gICAqL1xuICB0YWJsZUhlYWRlckNvbnRlbnQgKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0ge30pIHtcbiAgICBjb25zdCB7aGVhZGVyLCBtb2RlbENsYXNzfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICh0eXBlb2YgaGVhZGVyID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGhlYWRlcih7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSlcbiAgICB9IGVsc2UgaWYgKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlclxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbENsYXNzLm1vZGVsTmFtZSgpLmh1bWFuKHtjb3VudDogMn0pXG4gIH1cblxuICBsb2FkaW5nQ29udGVudCAoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pIHtcbiAgICBjb25zdCB7XG4gICAgICBhYmlsaXRpZXMsXG4gICAgICBhY3Rpb25zQ29udGVudCxcbiAgICAgIGFwcEhpc3RvcnksXG4gICAgICBjYXJkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb250cm9scyxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgZGVmYXVsdERhdGVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgICBkZXN0cm95RW5hYmxlZCxcbiAgICAgIGRlc3Ryb3lNZXNzYWdlLFxuICAgICAgZWRpdE1vZGVsUGF0aCxcbiAgICAgIGZpbHRlckNhcmQsXG4gICAgICBmaWx0ZXJDb250ZW50LFxuICAgICAgZmlsdGVyU3VibWl0QnV0dG9uLFxuICAgICAgZmlsdGVyU3VibWl0TGFiZWwsXG4gICAgICBncm91cEJ5LFxuICAgICAgaGVhZGVyLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgICBwYWdpbmF0ZUNvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgcHJlbG9hZHMsXG4gICAgICBxdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnMsXG4gICAgICBzdHlsZVVJLFxuICAgICAgdmlld01vZGVsUGF0aCxcbiAgICAgIHdvcmtwbGFjZSxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBjb25zdCBsb2FkaW5nQ29udGVudCA9IChcbiAgICAgIDxWaWV3IGRhdGFTZXQ9e2RhdGFTZXRzLmxvYWRpbmcgfHw9IHtjbGFzczogXCJhcGktbWFrZXItLXRhYmxlLS1sb2FkaW5nXCJ9fT5cbiAgICAgICAgPFRleHQ+e3RoaXMudChcIi5sb2FkaW5nX2RvdF9kb3RfZGl0XCIsIHtkZWZhdWx0VmFsdWU6IFwiTG9hZGluZy4uLlwifSl9PC9UZXh0PlxuICAgICAgPC9WaWV3PlxuICAgIClcblxuICAgIGlmICghY2FyZCkgcmV0dXJuIGxvYWRpbmdDb250ZW50XG5cbiAgICBjb25zdCBzYWZlTW9kZWxzID0gbW9kZWxzIHx8IFtdXG4gICAgY29uc3Qgc2FmZUFyZ3MgPSB7bW9kZWxzOiBzYWZlTW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDYXJkXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcImxpdmUtdGFibGUtLXRhYmxlLWNhcmRcIiwgXCJtYi00XCIsIGNsYXNzTmFtZSl9XG4gICAgICAgIGNvbnRyb2xzPXt0aGlzLnRhYmxlQ29udHJvbHMoc2FmZUFyZ3MpfVxuICAgICAgICBoZWFkZXI9e3RoaXMudGFibGVIZWFkZXJDb250ZW50KHNhZmVBcmdzKX1cbiAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgID5cbiAgICAgICAge2xvYWRpbmdDb250ZW50fVxuICAgICAgPC9DYXJkPlxuICAgIClcbiAgfVxuXG4gIGFiaWxpdGllc1RvTG9hZCAoKSB7XG4gICAgY29uc3QgYWJpbGl0aWVzVG9Mb2FkID0ge31cbiAgICBjb25zdCB7YWJpbGl0aWVzLCBtb2RlbENsYXNzfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBvd25BYmlsaXRpZXMgPSBbXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveUVuYWJsZWQpIG93bkFiaWxpdGllcy5wdXNoKFwiZGVzdHJveVwiKVxuICAgIGlmICh0aGlzLnByb3BzLmVkaXRNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwiZWRpdFwiKVxuICAgIGlmICh0aGlzLnByb3BzLnZpZXdNb2RlbFBhdGgpIG93bkFiaWxpdGllcy5wdXNoKFwic2hvd1wiKVxuXG4gICAgaWYgKG93bkFiaWxpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IGRpZ2cobW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcIm5hbWVcIilcblxuICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsQ2xhc3NOYW1lXSA9IG93bkFiaWxpdGllc1xuICAgIH1cblxuICAgIGlmIChhYmlsaXRpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWxOYW1lIGluIGFiaWxpdGllcykge1xuICAgICAgICBpZiAoIShtb2RlbE5hbWUgaW4gYWJpbGl0aWVzVG9Mb2FkKSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWJpbGl0eSBvZiBhYmlsaXRpZXNbbW9kZWxOYW1lXSkge1xuICAgICAgICAgIGFiaWxpdGllc1RvTG9hZFttb2RlbE5hbWVdLnB1c2goYWJpbGl0eSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhYmlsaXRpZXNUb0xvYWRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGUgYmV0d2VlbiBjYXJkL3RhYmxlIHJlbmRlcmluZyBvbmNlIGRhdGEgaXMgcmVhZHkuXG4gICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdE5vZGV9XG4gICAqL1xuICBjYXJkT3JUYWJsZSAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYWJpbGl0aWVzLFxuICAgICAgYWN0aW9uc0NvbnRlbnQsXG4gICAgICBhcHBIaXN0b3J5LFxuICAgICAgY2FyZCxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICBjb2x1bW5zLFxuICAgICAgY29udHJvbHMsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIGRlZmF1bHREYXRlRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0UGFyYW1zLFxuICAgICAgZGVzdHJveUVuYWJsZWQsXG4gICAgICBkZXN0cm95TWVzc2FnZSxcbiAgICAgIGVkaXRNb2RlbFBhdGgsXG4gICAgICBmaWx0ZXJDYXJkLFxuICAgICAgZmlsdGVyQ29udGVudCxcbiAgICAgIGZpbHRlclN1Ym1pdEJ1dHRvbixcbiAgICAgIGZpbHRlclN1Ym1pdExhYmVsLFxuICAgICAgZ3JvdXBCeSxcbiAgICAgIGhlYWRlcixcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBtb2RlbENsYXNzLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIG9uTW9kZWxzTG9hZGVkLFxuICAgICAgcGFnaW5hdGVDb250ZW50LFxuICAgICAgcGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgIHByZWxvYWRzLFxuICAgICAgcXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zLFxuICAgICAgc3R5bGVVSSxcbiAgICAgIHZpZXdNb2RlbFBhdGgsXG4gICAgICB3b3JrcGxhY2UsXG4gICAgICAuLi5yZXN0UHJvcHNcbiAgICB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwibW9kZWxzXCIsIFwicVBhcmFtc1wiLCBcInF1ZXJ5XCIsIFwicmVzdWx0XCIpXG5cbiAgICBjb25zdCBoZWFkZXJDb250ZW50ID0gdGhpcy50YWJsZUhlYWRlckNvbnRlbnQoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pXG4gICAgbGV0IFBhZ2luYXRpb25Db21wb25lbnRcblxuICAgIGlmICghcGFnaW5hdGVDb250ZW50KSB7XG4gICAgICBpZiAocGFnaW5hdGlvbkNvbXBvbmVudCkge1xuICAgICAgICBQYWdpbmF0aW9uQ29tcG9uZW50ID0gcGFnaW5hdGlvbkNvbXBvbmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IFBhZ2luYXRlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmxhdExpc3QgPSAoXG4gICAgICA8VGFibGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0aGlzLnR0LnRhYmxlQ29udGV4dFZhbHVlfT5cbiAgICAgICAgPEZsYXRMaXN0XG4gICAgICAgICAgZGF0YT17bW9kZWxzfVxuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzW2BmbGF0TGlzdC0ke2NsYXNzTmFtZX0tJHt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fWBdIHx8PSB7XG4gICAgICAgICAgICBjbGFzczogY2xhc3NOYW1lcyhcImFwaS1tYWtlci0tdGFibGVcIiwgY2xhc3NOYW1lKSxcbiAgICAgICAgICAgIGNhY2hlS2V5OiB0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5LFxuICAgICAgICAgICAgbGFzdFVwZGF0ZTogdGhpcy5zLmxhc3RVcGRhdGVcbiAgICAgICAgICB9fVxuICAgICAgICAgIGV4dHJhRGF0YT17dGhpcy5zLmxhc3RVcGRhdGV9XG4gICAgICAgICAga2V5RXh0cmFjdG9yPXt0aGlzLnR0LmtleUV4dHJhdG9yfVxuICAgICAgICAgIExpc3RIZWFkZXJDb21wb25lbnQ9e0xpc3RIZWFkZXJDb21wb25lbnR9XG4gICAgICAgICAgcmVuZGVySXRlbT17dGhpcy50dC5yZW5kZXJJdGVtfVxuICAgICAgICAgIHNob3dzSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvclxuICAgICAgICAgIHN0eWxlPXtzdHlsZXNbYGZsYXRMaXN0LSR7c3R5bGVVSX1gXSB8fD0ge1xuICAgICAgICAgICAgb3ZlcmZsb3dYOiBcImF1dG9cIixcbiAgICAgICAgICAgIGJvcmRlcjogc3R5bGVVSSA/IFwiMXB4IHNvbGlkICNkYmRiZGJcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogc3R5bGVVSSA/IDUgOiB1bmRlZmluZWRcbiAgICAgICAgICB9fVxuICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgIC8+XG4gICAgICA8L1RhYmxlQ29udGV4dC5Qcm92aWRlcj5cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2ZpbHRlckNvbnRlbnQgJiYgZmlsdGVyQ2FyZCAmJlxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLWZpbHRlci1jYXJkIG1iLTRcIj5cbiAgICAgICAgICAgIHt0aGlzLmZpbHRlckZvcm0oKX1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAge2ZpbHRlckNvbnRlbnQgJiYgIWZpbHRlckNhcmQgJiZcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0oKVxuICAgICAgICB9XG4gICAgICAgIHtjYXJkICYmXG4gICAgICAgICAgPENhcmRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcImxpdmUtdGFibGUtLXRhYmxlLWNhcmRcIiwgXCJtYi00XCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICBjb250cm9scz17dGhpcy50YWJsZUNvbnRyb2xzKCl9XG4gICAgICAgICAgICBoZWFkZXI9e2hlYWRlckNvbnRlbnR9XG4gICAgICAgICAgICBmb290ZXI9e3RoaXMudGFibGVGb290ZXIoKX1cbiAgICAgICAgICAgIHsuLi5yZXN0UHJvcHN9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2ZsYXRMaXN0fVxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgfVxuICAgICAgICB7IWNhcmQgJiYgZmxhdExpc3R9XG4gICAgICAgIHtyZXN1bHQgJiYgUGFnaW5hdGlvbkNvbXBvbmVudCAmJlxuICAgICAgICAgIDxQYWdpbmF0aW9uQ29tcG9uZW50IHJlc3VsdD17cmVzdWx0fSAvPlxuICAgICAgICB9XG4gICAgICAgIHtyZXN1bHQgJiYgcGFnaW5hdGVDb250ZW50ICYmXG4gICAgICAgICAgcGFnaW5hdGVDb250ZW50KHtyZXN1bHR9KVxuICAgICAgICB9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICBvbkNvbnRhaW5lckxheW91dCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3dpZHRofSA9IGUubmF0aXZlRXZlbnQubGF5b3V0XG4gICAgY29uc3Qge3dpZHRoc30gPSB0aGlzLnNcblxuICAgIHRoaXMuc2V0U3RhdGUoe3dpZHRofSlcbiAgICBpZiAod2lkdGhzKSB3aWR0aHMudGFibGVXaWR0aCA9IHdpZHRoXG4gIH1cblxuICBvbkxpbmtzQ3JlYXRlZCA9ICh7YXJnc30pID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZVxuXG4gICAgaWYgKGFyZ3MuY3JlYXRlZFttb2RlbENsYXNzTmFtZV0pIHtcbiAgICAgIGNvbnN0IGFtb3VudENyZWF0ZWQgPSBhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdLmxlbmd0aFxuXG4gICAgICB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIGN1cnJlbnRXb3JrcGxhY2VDb3VudDogcHJldlN0YXRlLmN1cnJlbnRXb3JrcGxhY2VDb3VudCArIGFtb3VudENyZWF0ZWRcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIG9uTGlua3NEZXN0cm95ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0pIHtcbiAgICAgIGNvbnN0IGFtb3VudERlc3Ryb3llZCA9IGFyZ3MuZGVzdHJveWVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgLSBhbW91bnREZXN0cm95ZWRcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIGtleUV4dHJhdG9yID0gKG1vZGVsKSA9PiBgJHt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fS0ke21vZGVsLmlkKCl9YFxuXG4gIGZpbHRlckZvcm0gPSAoKSA9PiB7XG4gICAgY29uc3Qge2ZpbHRlckZvcm1SZWYsIHN1Ym1pdEZpbHRlciwgc3VibWl0RmlsdGVyRGVib3VuY2V9ID0gdGhpcy50dFxuICAgIGNvbnN0IHtmaWx0ZXJDb250ZW50LCBmaWx0ZXJTdWJtaXRCdXR0b259ID0gdGhpcy5wXG4gICAgY29uc3Qge3F1ZXJ5UU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3Qge2ZpbHRlclN1Ym1pdExhYmVsfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cVBhcmFtc30gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJxUGFyYW1zXCIpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZvcm1cbiAgICAgICAgZm9ybVJlZj17ZmlsdGVyRm9ybVJlZn1cbiAgICAgICAgaHRtbEZvcm1Qcm9wcz17c3R5bGVzLmZpbHRlckZvcm1IdG1sUHJvcHMgfHw9IHtjbGFzc05hbWU6IFwibGl2ZS10YWJsZS0tZmlsdGVyLWZvcm1cIn19XG4gICAgICAgIG9uU3VibWl0PXt0aGlzLnR0Lm9uRmlsdGVyRm9ybVN1Ym1pdH1cbiAgICAgICAgc2V0Rm9ybT17dGhpcy5zZXRTdGF0ZXMuZmlsdGVyRm9ybX1cbiAgICAgID5cbiAgICAgICAge1wic1wiIGluIHFQYXJhbXMgJiZcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cInNcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e3FQYXJhbXMuc30gLz5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCh7XG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkOiBzdWJtaXRGaWx0ZXIsXG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5OiBzdWJtaXRGaWx0ZXJEZWJvdW5jZSxcbiAgICAgICAgICBxUGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UU5hbWVcbiAgICAgICAgfSl9XG4gICAgICAgIHtmaWx0ZXJTdWJtaXRCdXR0b24gJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBsaXZlLXRhYmxlLS1zdWJtaXQtZmlsdGVyLWJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZmlsdGVyU3VibWl0QnV0dG9uIHx8PSB7bWFyZ2luVG9wOiBcIjhweFwifX1cbiAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXJTdWJtaXRMYWJlbCB8fCB0aGlzLnQoXCIuZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiRmlsdGVyXCJ9KX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgb25GaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFN0YXRlKHtzaG93RmlsdGVyczogIXRoaXMuc3RhdGUuc2hvd0ZpbHRlcnN9KVxuICB9XG5cbiAgb25QZXJQYWdlQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5TmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBuZXdQZXJQYWdlVmFsdWUgPSBkaWdnKGUsIFwidGFyZ2V0XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwZXJLZXkgPSBgJHtxdWVyeU5hbWV9X3BlcmBcbiAgICBjb25zdCBwYXJhbXNDaGFuZ2UgPSB7fVxuXG4gICAgcGFyYW1zQ2hhbmdlW3BlcktleV0gPSBuZXdQZXJQYWdlVmFsdWVcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMocGFyYW1zQ2hhbmdlKVxuICB9XG5cbiAgcmVuZGVySXRlbSA9ICh7aW5kZXgsIGl0ZW06IG1vZGVsfSkgPT4ge1xuICAgIGlmICghdGhpcy5zLnRhYmxlU2V0dGluZ0xvYWRlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kb3RcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGVsUm93XG4gICAgICAgIGNhY2hlS2V5PXttb2RlbC5jYWNoZUtleSgpfVxuICAgICAgICBjb2x1bW5zPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgY29sdW1uV2lkdGhzPXt0aGlzLmNvbHVtbldpZHRocygpfVxuICAgICAgICBldmVudHM9e3RoaXMudHQuZXZlbnRzfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17bW9kZWwuaWQoKX1cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5PXt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGJhc2Ugc3R5bGUgZm9yIGEgZGF0YSBjb2x1bW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLmNvbHVtblxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5jb2x1bW5JbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFyZ3MuZXZlblxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5zdHlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50eXBlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvckNvbHVtbiA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgZXZlbiwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge3N0eWxlVUl9ID0gdGhpcy5wXG4gICAgY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICBwYWRkaW5nOiA4LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBpZiAoc3R5bGVVSSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihkZWZhdWx0U3R5bGUsIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBldmVuID8gXCIjZjVmNWY1XCIgOiBcIiNmZmZcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcImFjdGlvbnNcIikge1xuICAgICAgZGVmYXVsdFN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcInJvd1wiXG4gICAgICBkZWZhdWx0U3R5bGUuYWxpZ25JdGVtcyA9IFwiY2VudGVyXCJcblxuICAgICAgaWYgKHRoaXMudHQubWRVcCkge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luTGVmdCA9IFwiYXV0b1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luUmlnaHQgPSBcImF1dG9cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50dC5tZFVwICYmIHN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGJhc2Ugc3R5bGUgZm9yIGEgaGVhZGVyIGNvbHVtbi5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MuY29sdW1uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmNvbHVtbkluZGV4XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLnN0eWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnR5cGVcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHN0eWxlRm9ySGVhZGVyID0gKHtjb2x1bW4sIGNvbHVtbkluZGV4LCBzdHlsZSwgdHlwZX0pID0+IHtcbiAgICBjb25zdCB7bWRVcH0gPSB0aGlzLnR0XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXG4gICAgICBgaGVhZGVyU3R5bGUtJHt0eXBlIHx8IFwiZGVmYXVsdFwifWAsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBcInJvd1wiLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgcGFkZGluZzogOFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgIT0gXCJhY3Rpb25zXCIgJiYgbWRVcCAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZGVmYXVsdFN0eWxlLCBzdHlsZSlcbiAgICAgIH0sXG4gICAgICBbbWRVcCwgdGhpcy5wLnN0eWxlVUksIHR5cGUsIHN0eWxlXVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGEgYm9sZCBoZWFkZXIgdGV4dCBzdHlsZS5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHN0eWxlRm9ySGVhZGVyVGV4dCA9ICgpID0+IHtcbiAgICByZXR1cm4gc3R5bGVzLmhlYWRlclRleHRTdHlsZSB8fD0ge2ZvbnRXZWlnaHQ6IFwiYm9sZFwifVxuICB9XG5cbiAgLyoqXG4gICAqIFN0eWxlIGZvciBhIHRhYmxlIHJvdyB3cmFwcGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuZXZlbl1cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHN0eWxlRm9yUm93ID0gKHtldmVufSA9IHt9KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXG4gICAgICBgcm93U3R5bGUtJHtldmVuID8gXCJldmVuXCIgOiBcIm9kZFwifWAsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge1xuICAgICAgICAgIGZsZXg6IDEsXG4gICAgICAgICAgYWxpZ25JdGVtczogXCJzdHJldGNoXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVuICYmIHRoaXMucC5zdHlsZVVJKSB7XG4gICAgICAgICAgYWN0dWFsU3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZjVmNWY1XCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICAgICAgfSxcbiAgICAgIFtldmVuLCB0aGlzLnAuc3R5bGVVSV1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogU3R5bGUgZm9yIHRoZSBoZWFkZXIgcm93IHdyYXBwZXIuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvclJvd0hlYWRlciA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIFwicm93SGVhZGVyU3R5bGVcIixcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGZsZXg6IDEsXG4gICAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHRhYmxlQ29udHJvbHMoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSB7fSkge1xuICAgIGNvbnN0IHtjb250cm9sc30gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3Nob3dTZXR0aW5nc30gPSB0aGlzLnNcbiAgICBjb25zdCBjb2xsZWN0aW9uQXJncyA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuICAgIGNvbnN0IGFjdHVhbE1vZGVscyA9IG1vZGVscyA/PyBjb2xsZWN0aW9uQXJncy5tb2RlbHMgPz8gW11cbiAgICBjb25zdCBhY3R1YWxRUGFyYW1zID0gcVBhcmFtcyA/PyBjb2xsZWN0aW9uQXJncy5xUGFyYW1zXG4gICAgY29uc3QgYWN0dWFsUXVlcnkgPSBxdWVyeSA/PyBjb2xsZWN0aW9uQXJncy5xdWVyeVxuICAgIGNvbnN0IGFjdHVhbFJlc3VsdCA9IHJlc3VsdCA/PyBjb2xsZWN0aW9uQXJncy5yZXN1bHRcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhYmxlQ29udHJvbHNSb290VmlldyB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAge2NvbnRyb2xzICYmIGNvbnRyb2xzKHttb2RlbHM6IGFjdHVhbE1vZGVscywgcVBhcmFtczogYWN0dWFsUVBhcmFtcywgcXVlcnk6IGFjdHVhbFF1ZXJ5LCByZXN1bHQ6IGFjdHVhbFJlc3VsdH0pfVxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHMuZmlsdGVyQnV0dG9uIHx8PSB7Y2xhc3M6IFwiZmlsdGVyLWJ1dHRvblwifX1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uRmlsdGVyQ2xpY2tlZH1cbiAgICAgICAgICB0ZXN0SUQ9XCJmaWx0ZXJCdXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gbmFtZT1cInNlYXJjaFwiIHNpemU9ezIwfSAvPlxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAge3Nob3dTZXR0aW5ncyAmJlxuICAgICAgICAgICAgPFNldHRpbmdzIG9uUmVxdWVzdENsb3NlPXt0aGlzLnR0Lm9uUmVxdWVzdENsb3NlU2V0dGluZ3N9IHRhYmxlPXt0aGlzfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8UHJlc3NhYmxlIG9uUHJlc3M9e3RoaXMudHQub25TZXR0aW5nc0NsaWNrZWR9IHRlc3RJRD1cInNldHRpbmdzLWJ1dHRvblwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImdlYXJcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIHRhYmxlRm9vdGVyKCkge1xuICAgIGNvbnN0IHtyZXN1bHR9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicmVzdWx0XCIpXG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSByZXN1bHQuY3VycmVudFBhZ2UoKVxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudCgpXG4gICAgY29uc3QgcGVyUGFnZSA9IHJlc3VsdC5wZXJQYWdlKClcbiAgICBjb25zdCB0byA9IE1hdGgubWluKGN1cnJlbnRQYWdlICogcGVyUGFnZSwgdG90YWxDb3VudClcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBcIlNob3dpbmcgJXtmcm9tfSB0byAle3RvfSBvdXQgb2YgJXt0b3RhbF9jb3VudH0gdG90YWwuXCJcbiAgICBsZXQgZnJvbSA9ICgoY3VycmVudFBhZ2UgLSAxKSAqIHBlclBhZ2UpICsgMVxuXG4gICAgaWYgKHRvID09PSAwKSBmcm9tID0gMFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3IHN0eWxlPXtzdHlsZXMudGFibGVGb290ZXJSb290Vmlld1N0eWxlIHx8PSB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBtYXJnaW5Ub3A6IDEwfX0+XG4gICAgICAgIDxWaWV3IGRhdGFTZXQ9e2RhdGFTZXRzLnNob3dpbmdDb3VudHMgfHw9IHtjbGFzczogXCJzaG93aW5nLWNvdW50c1wifX0gc3R5bGU9e3N0eWxlcy5zaG93aW5nQ291bnRzIHx8PSB7ZmxleERpcmVjdGlvbjogXCJyb3dcIn19PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3RoaXMudChcIi5zaG93aW5nX2Zyb21fdG9fb3V0X29mX3RvdGFsXCIsIHtkZWZhdWx0VmFsdWUsIGZyb20sIHRvLCB0b3RhbF9jb3VudDogdG90YWxDb3VudH0pfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7dGhpcy5wLndvcmtwbGFjZSAmJiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZUNvdW50ICE9PSBudWxsICYmXG4gICAgICAgICAgICA8VGV4dCBzdHlsZT17c3R5bGVzLnhTZWxlY3RlZFRleHRTdHlsZSB8fD0ge21hcmdpbkxlZnQ6IDN9fT5cbiAgICAgICAgICAgICAge3RoaXMudChcIi54X3NlbGVjdGVkXCIsIHtkZWZhdWx0VmFsdWU6IFwiJXtzZWxlY3RlZH0gc2VsZWN0ZWQuXCIsIHNlbGVjdGVkOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZUNvdW50fSl9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBlci1wYWdlLXNlbGVjdFwiXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU9e3BlclBhZ2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy50dC5vblBlclBhZ2VDaGFuZ2VkfVxuICAgICAgICAgICAgb3B0aW9ucz17cGFnaW5hdGlvbk9wdGlvbnN9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9WaWV3PlxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIGNsYXNzTmFtZSgpIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW1wiYXBpLW1ha2VyLS10YWJsZVwiXVxuXG4gICAgaWYgKHRoaXMucHJvcHMuY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2godGhpcy5wcm9wcy5jbGFzc05hbWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuam9pbihcIiBcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBwZXItY29sdW1uIHByb3BzIGZvciB0YWJsZSBjZWxscy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbHVtblxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgY29sdW1uUHJvcHMoY29sdW1uKSB7XG4gICAgbGV0IGNhY2hlS2V5ID0gXCJkZWZhdWx0XCJcblxuICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgY2FjaGVLZXkgPSBcImNlbnRlclwiXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBjYWNoZUtleSA9IFwicmlnaHRcIlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlKFxuICAgICAgYGNvbHVtblByb3BzLSR7Y2FjaGVLZXl9YCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7fVxuXG4gICAgICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwiY2VudGVyXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICAgICAgcHJvcHMuc3R5bGUudGV4dEFsaWduID0gXCJyaWdodFwiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcHNcbiAgICAgIH0sXG4gICAgICBbY29sdW1uLnRleHRDZW50ZXIsIGNvbHVtbi50ZXh0UmlnaHRdXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHBlci1jb2x1bW4gcHJvcHMgZm9yIGhlYWRlciBjZWxscy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbHVtblxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgaGVhZGVyUHJvcHMoY29sdW1uKSB7XG4gICAgbGV0IGNhY2hlS2V5ID0gXCJkZWZhdWx0XCJcblxuICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgY2FjaGVLZXkgPSBcImNlbnRlclwiXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBjYWNoZUtleSA9IFwicmlnaHRcIlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhY2hlKFxuICAgICAgYGhlYWRlclByb3BzLSR7Y2FjaGVLZXl9YCxcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7fVxuXG4gICAgICAgIGlmIChjb2x1bW4udGV4dENlbnRlcikge1xuICAgICAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJjZW50ZXJcIlxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi50ZXh0UmlnaHQpIHtcbiAgICAgICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgICAgICBwcm9wcy5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiZW5kXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwcm9wc1xuICAgICAgfSxcbiAgICAgIFtjb2x1bW4udGV4dENlbnRlciwgY29sdW1uLnRleHRSaWdodF1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQ29sdW1uIHdpZHRocyBrZXllZCBieSBpZGVudGlmaWVyIGZvciB0YWJsZSByb3dzLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgY29sdW1uV2lkdGhzKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLnMucHJlcGFyZWRDb2x1bW5zKSB7XG4gICAgICBjb2x1bW5XaWR0aHNbY29sdW1uLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCldID0gY29sdW1uLndpZHRoXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbldpZHRoc1xuICB9XG5cbiAgaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERyYWdnYWJsZVNvcnRcbiAgICAgICAgYWN0aXZlSXRlbVN0eWxlPXt0aGlzLnR0LmRyYWdnZWRIZWFkZXJTdHlsZSgpfVxuICAgICAgICBkYXRhPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgZXZlbnRzPXt0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHN9XG4gICAgICAgIGhvcml6b250YWxcbiAgICAgICAga2V5RXh0cmFjdG9yPXt0aGlzLnR0LmRyYWdMaXN0a2V5RXh0cmFjdG9yfVxuICAgICAgICBvbkl0ZW1Nb3ZlZD17dGhpcy50dC5vbkl0ZW1Nb3ZlZH1cbiAgICAgICAgb25SZW9yZGVyZWQ9e3RoaXMudHQub25SZW9yZGVyZWR9XG4gICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQuZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudH1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgZHJhZ0xpc3RDYWNoZUtleUV4dHJhY3RvciA9IChpdGVtKSA9PiBgJHtpdGVtLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9LSR7dGhpcy5zLnJlc2l6aW5nfWBcbiAgZHJhZ0xpc3RrZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gaXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpXG5cbiAgb25JdGVtTW92ZWQgPSAoe2FuaW1hdGlvbkFyZ3MsIGl0ZW1JbmRleCwgeCwgeX0pID0+IHtcbiAgICBjb25zdCBhbmltYXRlZFBvc2l0aW9uID0gZGlnZyh0aGlzLCBcInNcIiwgXCJjb2x1bW5zVG9TaG93XCIsIGl0ZW1JbmRleCwgXCJhbmltYXRlZFBvc2l0aW9uXCIpXG5cbiAgICBpZiAoYW5pbWF0aW9uQXJncykge1xuICAgICAgQW5pbWF0ZWQudGltaW5nKGFuaW1hdGVkUG9zaXRpb24sIGFuaW1hdGlvbkFyZ3MpLnN0YXJ0KClcbiAgICB9IGVsc2Uge1xuICAgICAgYW5pbWF0ZWRQb3NpdGlvbi5zZXRWYWx1ZSh7eCwgeX0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3QgdGhlIG5ldyBjb2x1bW4gb3JkZXJpbmcuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLmZyb21JdGVtXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLnRvSXRlbVxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5mcm9tUG9zaXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MudG9Qb3NpdGlvblxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIG9uUmVvcmRlcmVkID0gYXN5bmMgKHtmcm9tSXRlbSwgZnJvbVBvc2l0aW9uLCB0b0l0ZW0sIHRvUG9zaXRpb259KSA9PiB7XG4gICAgaWYgKGZyb21Qb3NpdGlvbiA9PSB0b1Bvc2l0aW9uKSByZXR1cm4gLy8gT25seSBkbyByZXF1ZXN0cyBhbmQgcXVlcmllcyBpZiBjaGFuZ2VkXG5cbiAgICBjb25zdCBUYWJsZVNldHRpbmdDb2x1bW4gPSBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uY29uc3RydWN0b3JcbiAgICBjb25zdCB0b0NvbHVtbiA9IGF3YWl0IFRhYmxlU2V0dGluZ0NvbHVtbi5maW5kKHRvSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWQoKSkgLy8gTmVlZCB0byBsb2FkIGxhdGVzdCBwb3NpdGlvbiBiZWNhdXNlIEFjdHNBc0xpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0XG5cbiAgICBhd2FpdCBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4udXBkYXRlKHtwb3NpdGlvbjogdG9Db2x1bW4ucG9zaXRpb24oKX0pXG4gIH1cblxuICBkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50ID0gKHtpc0FjdGl2ZSwgaXRlbSwgdG91Y2hQcm9wc30pID0+IHtcbiAgICBjb25zdCB7YW5pbWF0ZWRXaWR0aCwgYW5pbWF0ZWRaSW5kZXgsIGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSA9IGl0ZW1cblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ29sdW1uXG4gICAgICAgIGFjdGl2ZT17aXNBY3RpdmV9XG4gICAgICAgIGFuaW1hdGVkV2lkdGg9e2FuaW1hdGVkV2lkdGh9XG4gICAgICAgIGFuaW1hdGVkWkluZGV4PXthbmltYXRlZFpJbmRleH1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIGtleT17dGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKX1cbiAgICAgICAgcmVzaXppbmc9e3RoaXMucy5yZXNpemluZ31cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0NvbHVtbj17dGFibGVTZXR0aW5nQ29sdW1ufVxuICAgICAgICB0b3VjaFByb3BzPXt0b3VjaFByb3BzfVxuICAgICAgICB3aWR0aHM9e3RoaXMucy53aWR0aHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGhlYWRlckNsYXNzTmFtZUZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW11cblxuICAgIGlmIChjb2x1bW4uY29tbW9uUHJvcHMgJiYgY29sdW1uLmNvbW1vblByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpXG4gICAgaWYgKGNvbHVtbi5oZWFkZXJQcm9wcyAmJiBjb2x1bW4uaGVhZGVyUHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWVzLnB1c2goY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSlcblxuICAgIHJldHVybiBjbGFzc05hbWVzXG4gIH1cblxuICBoZWFkZXJMYWJlbEZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSB0aGlzLnBcblxuICAgIGlmIChcImxhYmVsXCIgaW4gY29sdW1uKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5sYWJlbCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uLmxhYmVsXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgbW9kZWwgY2xhc3MgdGhyb3VnaCBwYXRoXG4gICAgaWYgKGNvbHVtbi5wYXRoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIGNvbHVtbi5wYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBkaWdnKGN1cnJlbnRNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicmVsYXRpb25zaGlwc1wiKVxuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzLmZpbmQoKHJlbGF0aW9uc2hpcEluQXJyYXkpID0+IHJlbGF0aW9uc2hpcEluQXJyYXkubmFtZSA9PSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGF0aFBhcnQpKVxuXG4gICAgICAgIGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUoZGlnZyhyZWxhdGlvbnNoaXAsIFwicmVzb3VyY2VfbmFtZVwiKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZSkgcmV0dXJuIGN1cnJlbnRNb2RlbENsYXNzLmh1bWFuQXR0cmlidXRlTmFtZShjb2x1bW4uYXR0cmlidXRlKVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gJ2xhYmVsJyBvciAnYXR0cmlidXRlJyB3YXMgZ2l2ZW5cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIHN0eWxpbmcgZm9yIGEgZHJhZ2dlZCBoZWFkZXIgaXRlbS5cbiAgICogQHJldHVybnMge29iamVjdHx1bmRlZmluZWR9XG4gICAqL1xuICBkcmFnZ2VkSGVhZGVyU3R5bGUgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucC5kcmFnZ2VkSGVhZGVyU3R5bGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMucC5kcmFnZ2VkSGVhZGVyU3R5bGVcbiAgICBpZiAodGhpcy5wLnN0eWxlVUkpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiBzdHlsZXMuZHJhZ2dlZEhlYWRlclN0eWxlVHJhbnNwYXJlbnQgfHw9IHtiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIn1cbiAgfVxuXG4gIG9uRmlsdGVyRm9ybVN1Ym1pdCA9ICgpID0+IHRoaXMuc3VibWl0RmlsdGVyKClcbiAgb25SZXF1ZXN0Q2xvc2VTZXR0aW5ncyA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogZmFsc2V9KVxuXG4gIG9uU2V0dGluZ3NDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogIXRoaXMucy5zaG93U2V0dGluZ3N9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHthcHBIaXN0b3J5fSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlRTmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBjaGFuZ2VQYXJhbXNQYXJhbXMgPSB7fVxuICAgIGNvbnN0IHFQYXJhbXMgPSB0aGlzLnMuZmlsdGVyRm9ybS5hc09iamVjdCgpXG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgY29uc3QgZmlsdGVyRm9ybSA9IGRpZ2codGhpcy50dC5maWx0ZXJGb3JtUmVmLCBcImN1cnJlbnRcIilcbiAgICAgIGNvbnN0IG5hdnRpdmVGb3JtUGFyYW1zID0gUGFyYW1zLnNlcmlhbGl6ZUZvcm0oZmlsdGVyRm9ybSlcblxuICAgICAgaW5jb3Jwb3JhdGUocVBhcmFtcywgbmF2dGl2ZUZvcm1QYXJhbXMpXG4gICAgfVxuXG4gICAgY2hhbmdlUGFyYW1zUGFyYW1zW3F1ZXJ5UU5hbWVdID0gSlNPTi5zdHJpbmdpZnkocVBhcmFtcylcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMoY2hhbmdlUGFyYW1zUGFyYW1zLCB7YXBwSGlzdG9yeX0pXG4gIH1cblxuICBzdWJtaXRGaWx0ZXJEZWJvdW5jZSA9IGRlYm91bmNlKHRoaXMudHQuc3VibWl0RmlsdGVyKVxufSkpXG4iXX0=
@@ -1,16 +1,16 @@
1
1
  export default apiMakerUseDestroyedEvent;
2
2
  /**
3
- * @param {object} model
3
+ * @param {object|object[]} model
4
4
  * @param {Function} onDestroyed
5
- * @param {object} props
6
- * @param {boolean} props.active
7
- * @param {number} props.debounce
8
- * @param {Function} props.onConnected
5
+ * @param {object} [props]
6
+ * @param {boolean} [props.active]
7
+ * @param {number} [props.debounce]
8
+ * @param {Function} [props.onConnected]
9
9
  * @returns {void}
10
10
  */
11
- declare function apiMakerUseDestroyedEvent(model: object, onDestroyed: Function, props: {
12
- active: boolean;
13
- debounce: number;
14
- onConnected: Function;
11
+ declare function apiMakerUseDestroyedEvent(model: object | object[], onDestroyed: Function, props?: {
12
+ active?: boolean;
13
+ debounce?: number;
14
+ onConnected?: Function;
15
15
  }): void;
16
16
  //# sourceMappingURL=use-destroyed-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-destroyed-event.d.ts","sourceRoot":"/src/","sources":["use-destroyed-event.js"],"names":[],"mappings":";AAMA;;;;;;;;GAQG;AACH,kDARW,MAAM,gCAGd;IAAuB,MAAM,EAArB,OAAO;IACO,QAAQ,EAAtB,MAAM;IACU,WAAW;CACnC,GAAU,IAAI,CAsDhB"}
1
+ {"version":3,"file":"use-destroyed-event.d.ts","sourceRoot":"/src/","sources":["use-destroyed-event.js"],"names":[],"mappings":";AA0CA;;;;;;;;GAQG;AACH,kDARW,MAAM,GAAC,MAAM,EAAE,iCAGvB;IAAwB,MAAM,GAAtB,OAAO;IACQ,QAAQ,GAAvB,MAAM;IACW,WAAW;CACpC,GAAU,IAAI,CA0EhB"}
@@ -1,19 +1,51 @@
1
1
  /* eslint-disable sort-imports */
2
- import { useCallback, useLayoutEffect, useMemo } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from "react";
3
3
  import debounceFunction from "debounce";
4
4
  import ModelEvents from "./model-events.js";
5
5
  import useShape from "set-state-compare/build/use-shape.js";
6
6
  /**
7
- * @param {object} model
7
+ * @param {object|object[]|undefined|null} modelOrModels
8
+ * @returns {object[]}
9
+ */
10
+ const modelsFromInput = (modelOrModels) => {
11
+ if (!modelOrModels) {
12
+ return [];
13
+ }
14
+ else if (Array.isArray(modelOrModels)) {
15
+ return modelOrModels.filter(Boolean);
16
+ }
17
+ else {
18
+ return [modelOrModels];
19
+ }
20
+ };
21
+ /**
22
+ * @param {object|object[]|undefined|null} modelOrModels
23
+ * @returns {string}
24
+ */
25
+ const modelsDependencyKey = (modelOrModels) => JSON.stringify(modelsFromInput(modelOrModels).map((model) => model.id()));
26
+ /**
27
+ * @param {object|object[]|undefined|null} modelOrModels
28
+ * @returns {Record<string, object>}
29
+ */
30
+ const modelsByIdFromInput = (modelOrModels) => {
31
+ const modelsById = {};
32
+ modelsFromInput(modelOrModels).forEach((model) => {
33
+ modelsById[model.id()] = model;
34
+ });
35
+ return modelsById;
36
+ };
37
+ /**
38
+ * @param {object|object[]} model
8
39
  * @param {Function} onDestroyed
9
- * @param {object} props
10
- * @param {boolean} props.active
11
- * @param {number} props.debounce
12
- * @param {Function} props.onConnected
40
+ * @param {object} [props]
41
+ * @param {boolean} [props.active]
42
+ * @param {number} [props.debounce]
43
+ * @param {Function} [props.onConnected]
13
44
  * @returns {void}
14
45
  */
15
46
  const apiMakerUseDestroyedEvent = (model, onDestroyed, props) => {
16
47
  const { active = true, debounce, onConnected, ...restProps } = props || {};
48
+ const connectionsRef = useRef({});
17
49
  if (Object.keys(restProps).length > 0) {
18
50
  throw new Error(`Unknown props given to useDestroyedEvent: ${Object.keys(restProps).join(", ")}`);
19
51
  }
@@ -39,22 +71,37 @@ const apiMakerUseDestroyedEvent = (model, onDestroyed, props) => {
39
71
  }
40
72
  }, []);
41
73
  useLayoutEffect(() => {
42
- let connectDestroyed, onConnectedListener;
43
- if (model) {
44
- connectDestroyed = ModelEvents.connectDestroyed(model, onDestroyedCallback);
45
- if (onConnected) {
46
- onConnectedListener = connectDestroyed.events.addListener("connected", onConnected);
74
+ const currentConnections = connectionsRef.current;
75
+ const nextModelsById = modelsByIdFromInput(model);
76
+ Object.keys(currentConnections).forEach((modelId) => {
77
+ if (!(modelId in nextModelsById)) {
78
+ if (onConnected) {
79
+ currentConnections[modelId].events.removeListener("connected", onConnected);
80
+ }
81
+ currentConnections[modelId].unsubscribe();
82
+ delete currentConnections[modelId];
47
83
  }
48
- }
49
- return () => {
50
- if (onConnectedListener) {
51
- connectDestroyed.events.removeListener("connected", onConnected);
84
+ });
85
+ Object.keys(nextModelsById).forEach((modelId) => {
86
+ if (modelId in currentConnections) {
87
+ return;
52
88
  }
53
- if (connectDestroyed) {
54
- connectDestroyed.unsubscribe();
89
+ const destroyedConnection = ModelEvents.connectDestroyed(nextModelsById[modelId], onDestroyedCallback);
90
+ currentConnections[modelId] = destroyedConnection;
91
+ if (onConnected) {
92
+ destroyedConnection.events.addListener("connected", onConnected);
93
+ }
94
+ });
95
+ }, [modelsDependencyKey(model)]);
96
+ useLayoutEffect(() => () => {
97
+ Object.values(connectionsRef.current).forEach((destroyedConnection) => {
98
+ if (onConnected) {
99
+ destroyedConnection.events.removeListener("connected", onConnected);
55
100
  }
56
- };
57
- }, [model?.id()]);
101
+ destroyedConnection.unsubscribe();
102
+ });
103
+ connectionsRef.current = {};
104
+ }, []);
58
105
  };
59
106
  export default apiMakerUseDestroyedEvent;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWRlc3Ryb3llZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsidXNlLWRlc3Ryb3llZC1ldmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxFQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQzNELE9BQU8sZ0JBQWdCLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sV0FBVyxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sUUFBUSxNQUFNLHNDQUFzQyxDQUFBO0FBRTNEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDOUQsTUFBTSxFQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLFNBQVMsRUFBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUE7SUFFeEUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDbkcsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUE7SUFFMUQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ3BDLElBQUksT0FBTyxRQUFRLElBQUksUUFBUSxFQUFFLENBQUM7WUFDaEMsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMxQyxDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUVkLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBQyxnQkFBZ0IsRUFBQyxDQUFDLENBQUE7SUFFaEMsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO1FBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDMUIsQ0FBQztJQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUVOLGVBQWUsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsSUFBSSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQTtRQUV6QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1lBRTNFLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ3JGLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ2xFLENBQUM7WUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQUVELGVBQWUseUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgTW9kZWxFdmVudHMgZnJvbSBcIi4vbW9kZWwtZXZlbnRzLmpzXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvdXNlLXNoYXBlLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbW9kZWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRGVzdHJveWVkXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuYWN0aXZlXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMuZGVib3VuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQ29ubmVjdGVkXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgYXBpTWFrZXJVc2VEZXN0cm95ZWRFdmVudCA9IChtb2RlbCwgb25EZXN0cm95ZWQsIHByb3BzKSA9PiB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBkZWJvdW5jZSwgb25Db25uZWN0ZWQsIC4uLnJlc3RQcm9wc30gPSBwcm9wcyB8fCB7fVxuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gdXNlRGVzdHJveWVkRXZlbnQ6ICR7T2JqZWN0LmtleXMocmVzdFByb3BzKS5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIGNvbnN0IHMgPSB1c2VTaGFwZSh7YWN0aXZlLCBkZWJvdW5jZSwgbW9kZWwsIG9uRGVzdHJveWVkfSlcblxuICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25EZXN0cm95ZWQsIGRlYm91bmNlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25EZXN0cm95ZWQpXG4gICAgfVxuICB9LCBbZGVib3VuY2VdKVxuXG4gIHMudXBkYXRlTWV0YSh7ZGVib3VuY2VDYWxsYmFja30pXG5cbiAgY29uc3Qgb25EZXN0cm95ZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFzLnAuYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocy5wLmRlYm91bmNlKSB7XG4gICAgICBzLm0uZGVib3VuY2VDYWxsYmFjayguLi5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzLnAub25EZXN0cm95ZWQoLi4uYXJncylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNvbm5lY3REZXN0cm95ZWQsIG9uQ29ubmVjdGVkTGlzdGVuZXJcblxuICAgIGlmIChtb2RlbCkge1xuICAgICAgY29ubmVjdERlc3Ryb3llZCA9IE1vZGVsRXZlbnRzLmNvbm5lY3REZXN0cm95ZWQobW9kZWwsIG9uRGVzdHJveWVkQ2FsbGJhY2spXG5cbiAgICAgIGlmIChvbkNvbm5lY3RlZCkge1xuICAgICAgICBvbkNvbm5lY3RlZExpc3RlbmVyID0gY29ubmVjdERlc3Ryb3llZC5ldmVudHMuYWRkTGlzdGVuZXIoXCJjb25uZWN0ZWRcIiwgb25Db25uZWN0ZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChvbkNvbm5lY3RlZExpc3RlbmVyKSB7XG4gICAgICAgIGNvbm5lY3REZXN0cm95ZWQuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29ubmVjdERlc3Ryb3llZCkge1xuICAgICAgICBjb25uZWN0RGVzdHJveWVkLnVuc3Vic2NyaWJlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFttb2RlbD8uaWQoKV0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwaU1ha2VyVXNlRGVzdHJveWVkRXZlbnRcbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWRlc3Ryb3llZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsidXNlLWRlc3Ryb3llZC1ldmVudC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFDakMsT0FBTyxFQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNuRSxPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUN2QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFFBQVEsTUFBTSxzQ0FBc0MsQ0FBQTtBQUUzRDs7O0dBR0c7QUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFO0lBQ3hDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN4QyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDeEIsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQzNELGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUMxRCxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFO0lBQzVDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtJQUVyQixlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENB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LENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxPQUFPLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDbEMsT0FBTTtZQUNSLENBQUM7WUFFRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtZQUN0RyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxtQkFBbUIsQ0FBQTtZQUVqRCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixtQkFBbUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNsRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFaEMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3BFLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ3JFLENBQUM7WUFFRCxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FBQTtRQUVGLGNBQWMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNSLENBQUMsQ0FBQTtBQUVELGVBQWUseUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IGRlYm91bmNlRnVuY3Rpb24gZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBNb2RlbEV2ZW50cyBmcm9tIFwiLi9tb2RlbC1ldmVudHMuanNcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC91c2Utc2hhcGUuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fG9iamVjdFtdfHVuZGVmaW5lZHxudWxsfSBtb2RlbE9yTW9kZWxzXG4gKiBAcmV0dXJucyB7b2JqZWN0W119XG4gKi9cbmNvbnN0IG1vZGVsc0Zyb21JbnB1dCA9IChtb2RlbE9yTW9kZWxzKSA9PiB7XG4gIGlmICghbW9kZWxPck1vZGVscykge1xuICAgIHJldHVybiBbXVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxPck1vZGVscykpIHtcbiAgICByZXR1cm4gbW9kZWxPck1vZGVscy5maWx0ZXIoQm9vbGVhbilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW21vZGVsT3JNb2RlbHNdXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxvYmplY3RbXXx1bmRlZmluZWR8bnVsbH0gbW9kZWxPck1vZGVsc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgbW9kZWxzRGVwZW5kZW5jeUtleSA9IChtb2RlbE9yTW9kZWxzKSA9PiBKU09OLnN0cmluZ2lmeShcbiAgbW9kZWxzRnJvbUlucHV0KG1vZGVsT3JNb2RlbHMpLm1hcCgobW9kZWwpID0+IG1vZGVsLmlkKCkpXG4pXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R8b2JqZWN0W118dW5kZWZpbmVkfG51bGx9IG1vZGVsT3JNb2RlbHNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fVxuICovXG5jb25zdCBtb2RlbHNCeUlkRnJvbUlucHV0ID0gKG1vZGVsT3JNb2RlbHMpID0+IHtcbiAgY29uc3QgbW9kZWxzQnlJZCA9IHt9XG5cbiAgbW9kZWxzRnJvbUlucHV0KG1vZGVsT3JNb2RlbHMpLmZvckVhY2goKG1vZGVsKSA9PiB7XG4gICAgbW9kZWxzQnlJZFttb2RlbC5pZCgpXSA9IG1vZGVsXG4gIH0pXG5cbiAgcmV0dXJuIG1vZGVsc0J5SWRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxvYmplY3RbXX0gbW9kZWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRGVzdHJveWVkXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuYWN0aXZlXVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5kZWJvdW5jZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wcy5vbkNvbm5lY3RlZF1cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBhcGlNYWtlclVzZURlc3Ryb3llZEV2ZW50ID0gKG1vZGVsLCBvbkRlc3Ryb3llZCwgcHJvcHMpID0+IHtcbiAgY29uc3Qge2FjdGl2ZSA9IHRydWUsIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucmVzdFByb3BzfSA9IHByb3BzIHx8IHt9XG4gIGNvbnN0IGNvbm5lY3Rpb25zUmVmID0gdXNlUmVmKHt9KVxuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gdXNlRGVzdHJveWVkRXZlbnQ6ICR7T2JqZWN0LmtleXMocmVzdFByb3BzKS5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIGNvbnN0IHMgPSB1c2VTaGFwZSh7YWN0aXZlLCBkZWJvdW5jZSwgbW9kZWwsIG9uRGVzdHJveWVkfSlcblxuICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25EZXN0cm95ZWQsIGRlYm91bmNlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25EZXN0cm95ZWQpXG4gICAgfVxuICB9LCBbZGVib3VuY2VdKVxuXG4gIHMudXBkYXRlTWV0YSh7ZGVib3VuY2VDYWxsYmFja30pXG5cbiAgY29uc3Qgb25EZXN0cm95ZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFzLnAuYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocy5wLmRlYm91bmNlKSB7XG4gICAgICBzLm0uZGVib3VuY2VDYWxsYmFjayguLi5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzLnAub25EZXN0cm95ZWQoLi4uYXJncylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25zID0gY29ubmVjdGlvbnNSZWYuY3VycmVudFxuICAgIGNvbnN0IG5leHRNb2RlbHNCeUlkID0gbW9kZWxzQnlJZEZyb21JbnB1dChtb2RlbClcblxuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25uZWN0aW9ucykuZm9yRWFjaCgobW9kZWxJZCkgPT4ge1xuICAgICAgaWYgKCEobW9kZWxJZCBpbiBuZXh0TW9kZWxzQnlJZCkpIHtcbiAgICAgICAgaWYgKG9uQ29ubmVjdGVkKSB7XG4gICAgICAgICAgY3VycmVudENvbm5lY3Rpb25zW21vZGVsSWRdLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRDb25uZWN0aW9uc1ttb2RlbElkXS51bnN1YnNjcmliZSgpXG4gICAgICAgIGRlbGV0ZSBjdXJyZW50Q29ubmVjdGlvbnNbbW9kZWxJZF1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMobmV4dE1vZGVsc0J5SWQpLmZvckVhY2goKG1vZGVsSWQpID0+IHtcbiAgICAgIGlmIChtb2RlbElkIGluIGN1cnJlbnRDb25uZWN0aW9ucykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVzdHJveWVkQ29ubmVjdGlvbiA9IE1vZGVsRXZlbnRzLmNvbm5lY3REZXN0cm95ZWQobmV4dE1vZGVsc0J5SWRbbW9kZWxJZF0sIG9uRGVzdHJveWVkQ2FsbGJhY2spXG4gICAgICBjdXJyZW50Q29ubmVjdGlvbnNbbW9kZWxJZF0gPSBkZXN0cm95ZWRDb25uZWN0aW9uXG5cbiAgICAgIGlmIChvbkNvbm5lY3RlZCkge1xuICAgICAgICBkZXN0cm95ZWRDb25uZWN0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbbW9kZWxzRGVwZW5kZW5jeUtleShtb2RlbCldKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiAoKSA9PiB7XG4gICAgT2JqZWN0LnZhbHVlcyhjb25uZWN0aW9uc1JlZi5jdXJyZW50KS5mb3JFYWNoKChkZXN0cm95ZWRDb25uZWN0aW9uKSA9PiB7XG4gICAgICBpZiAob25Db25uZWN0ZWQpIHtcbiAgICAgICAgZGVzdHJveWVkQ29ubmVjdGlvbi5ldmVudHMucmVtb3ZlTGlzdGVuZXIoXCJjb25uZWN0ZWRcIiwgb25Db25uZWN0ZWQpXG4gICAgICB9XG5cbiAgICAgIGRlc3Ryb3llZENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKVxuICAgIH0pXG5cbiAgICBjb25uZWN0aW9uc1JlZi5jdXJyZW50ID0ge31cbiAgfSwgW10pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwaU1ha2VyVXNlRGVzdHJveWVkRXZlbnRcbiJdfQ==
@@ -1,17 +1,17 @@
1
1
  export default apiMakerUseModelEvent;
2
2
  /**
3
- * @param {import("./base-model.js").default} model
3
+ * @param {import("./base-model.js").default|import("./base-model.js").default[]} model
4
4
  * @param {string} event
5
5
  * @param {Function} onCallback
6
- * @param {object} props
7
- * @param {object} props.active
8
- * @param {number} props.debounce
9
- * @param {Function} props.onConnected
6
+ * @param {object} [props]
7
+ * @param {boolean} [props.active]
8
+ * @param {number} [props.debounce]
9
+ * @param {Function} [props.onConnected]
10
10
  * @returns {void}
11
11
  */
12
- declare function apiMakerUseModelEvent(model: import("./base-model.js").default, event: string, onCallback: Function, props: {
13
- active: object;
14
- debounce: number;
15
- onConnected: Function;
12
+ declare function apiMakerUseModelEvent(model: import("./base-model.js").default | import("./base-model.js").default[], event: string, onCallback: Function, props?: {
13
+ active?: boolean;
14
+ debounce?: number;
15
+ onConnected?: Function;
16
16
  }): void;
17
17
  //# sourceMappingURL=use-model-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-model-event.d.ts","sourceRoot":"/src/","sources":["use-model-event.js"],"names":[],"mappings":";AAMA;;;;;;;;;GASG;AAEH,8CAVW,OAAO,iBAAiB,EAAE,OAAO,SACjC,MAAM,+BAGd;IAAsB,MAAM,EAApB,MAAM;IACQ,QAAQ,EAAtB,MAAM;IACU,WAAW;CACnC,GAAU,IAAI,CAuDhB"}
1
+ {"version":3,"file":"use-model-event.d.ts","sourceRoot":"/src/","sources":["use-model-event.js"],"names":[],"mappings":";AA0CA;;;;;;;;;GASG;AAEH,8CAVW,OAAO,iBAAiB,EAAE,OAAO,GAAC,OAAO,iBAAiB,EAAE,OAAO,EAAE,SACrE,MAAM,gCAGd;IAAwB,MAAM,GAAtB,OAAO;IACQ,QAAQ,GAAvB,MAAM;IACW,WAAW;CACpC,GAAU,IAAI,CA2EhB"}
@@ -1,21 +1,53 @@
1
1
  /* eslint-disable sort-imports */
2
- import { useCallback, useLayoutEffect, useMemo } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from "react";
3
3
  import debounceFunction from "debounce";
4
4
  import ModelEvents from "./model-events.js";
5
5
  import useShape from "set-state-compare/build/use-shape.js";
6
6
  /**
7
- * @param {import("./base-model.js").default} model
7
+ * @param {object|object[]|undefined|null} modelOrModels
8
+ * @returns {object[]}
9
+ */
10
+ const modelsFromInput = (modelOrModels) => {
11
+ if (!modelOrModels) {
12
+ return [];
13
+ }
14
+ else if (Array.isArray(modelOrModels)) {
15
+ return modelOrModels.filter(Boolean);
16
+ }
17
+ else {
18
+ return [modelOrModels];
19
+ }
20
+ };
21
+ /**
22
+ * @param {object|object[]|undefined|null} modelOrModels
23
+ * @returns {string}
24
+ */
25
+ const modelsDependencyKey = (modelOrModels) => JSON.stringify(modelsFromInput(modelOrModels).map((model) => model.id()));
26
+ /**
27
+ * @param {object|object[]|undefined|null} modelOrModels
28
+ * @returns {Record<string, object>}
29
+ */
30
+ const modelsByIdFromInput = (modelOrModels) => {
31
+ const modelsById = {};
32
+ modelsFromInput(modelOrModels).forEach((model) => {
33
+ modelsById[model.id()] = model;
34
+ });
35
+ return modelsById;
36
+ };
37
+ /**
38
+ * @param {import("./base-model.js").default|import("./base-model.js").default[]} model
8
39
  * @param {string} event
9
40
  * @param {Function} onCallback
10
- * @param {object} props
11
- * @param {object} props.active
12
- * @param {number} props.debounce
13
- * @param {Function} props.onConnected
41
+ * @param {object} [props]
42
+ * @param {boolean} [props.active]
43
+ * @param {number} [props.debounce]
44
+ * @param {Function} [props.onConnected]
14
45
  * @returns {void}
15
46
  */
16
47
  // eslint-disable-next-line max-params
17
48
  const apiMakerUseModelEvent = (model, event, onCallback, props) => {
18
49
  const { active = true, debounce, onConnected, ...restProps } = props || {};
50
+ const connectionsRef = useRef({});
19
51
  if (Object.keys(restProps).length > 0) {
20
52
  throw new Error(`Unknown props given to apiMakerUseModelEvent: ${Object.keys(restProps).join(", ")}`);
21
53
  }
@@ -41,22 +73,37 @@ const apiMakerUseModelEvent = (model, event, onCallback, props) => {
41
73
  }
42
74
  }, []);
43
75
  useLayoutEffect(() => {
44
- let connectEvent, onConnectedListener;
45
- if (model) {
46
- connectEvent = ModelEvents.connect(model, event, onCallbackCallback);
47
- if (onConnected) {
48
- onConnectedListener = connectEvent.events.addListener("connected", onConnected);
76
+ const currentConnections = connectionsRef.current;
77
+ const nextModelsById = modelsByIdFromInput(model);
78
+ Object.keys(currentConnections).forEach((modelId) => {
79
+ if (!(modelId in nextModelsById)) {
80
+ if (onConnected) {
81
+ currentConnections[modelId].events.removeListener("connected", onConnected);
82
+ }
83
+ currentConnections[modelId].unsubscribe();
84
+ delete currentConnections[modelId];
49
85
  }
50
- }
51
- return () => {
52
- if (onConnectedListener) {
53
- connectEvent.events.removeListener("connected", onConnected);
86
+ });
87
+ Object.keys(nextModelsById).forEach((modelId) => {
88
+ if (modelId in currentConnections) {
89
+ return;
54
90
  }
55
- if (connectEvent) {
56
- connectEvent.unsubscribe();
91
+ const eventConnection = ModelEvents.connect(nextModelsById[modelId], event, onCallbackCallback);
92
+ currentConnections[modelId] = eventConnection;
93
+ if (onConnected) {
94
+ eventConnection.events.addListener("connected", onConnected);
95
+ }
96
+ });
97
+ }, [event, modelsDependencyKey(model)]);
98
+ useLayoutEffect(() => () => {
99
+ Object.values(connectionsRef.current).forEach((eventConnection) => {
100
+ if (onConnected) {
101
+ eventConnection.events.removeListener("connected", onConnected);
57
102
  }
58
- };
59
- }, [model?.id()]);
103
+ eventConnection.unsubscribe();
104
+ });
105
+ connectionsRef.current = {};
106
+ }, []);
60
107
  };
61
108
  export default apiMakerUseModelEvent;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vZGVsLWV2ZW50LmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJ1c2UtbW9kZWwtZXZlbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUMzRCxPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUN2QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFFBQVEsTUFBTSxzQ0FBc0MsQ0FBQTtBQUUzRDs7Ozs7Ozs7O0dBU0c7QUFDSCxzQ0FBc0M7QUFDdEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ2hFLE1BQU0sRUFBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsR0FBRyxTQUFTLEVBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFBO0lBRXhFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZHLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO0lBRXpELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNwQyxJQUFJLE9BQU8sUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDekMsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFFZCxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFBO0lBRWhDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUNqRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQ3pCLENBQUM7SUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFTixlQUFlLENBQUMsR0FBRyxFQUFFO1FBQ25CLElBQUksWUFBWSxFQUFFLG1CQUFtQixDQUFBO1FBRXJDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixZQUFZLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUE7WUFFcEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ2pGLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3hCLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUM5RCxDQUFDO1lBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQUVELGVBQWUscUJBQXFCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgTW9kZWxFdmVudHMgZnJvbSBcIi4vbW9kZWwtZXZlbnRzLmpzXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvdXNlLXNoYXBlLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBtb2RlbFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcy5hY3RpdmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wcy5kZWJvdW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvcHMub25Db25uZWN0ZWRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuY29uc3QgYXBpTWFrZXJVc2VNb2RlbEV2ZW50ID0gKG1vZGVsLCBldmVudCwgb25DYWxsYmFjaywgcHJvcHMpID0+IHtcbiAgY29uc3Qge2FjdGl2ZSA9IHRydWUsIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucmVzdFByb3BzfSA9IHByb3BzIHx8IHt9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJlc3RQcm9wcykubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwcm9wcyBnaXZlbiB0byBhcGlNYWtlclVzZU1vZGVsRXZlbnQ6ICR7T2JqZWN0LmtleXMocmVzdFByb3BzKS5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIGNvbnN0IHMgPSB1c2VTaGFwZSh7YWN0aXZlLCBkZWJvdW5jZSwgbW9kZWwsIG9uQ2FsbGJhY2t9KVxuXG4gIGNvbnN0IGRlYm91bmNlQ2FsbGJhY2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGRlYm91bmNlID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHMucC5vbkNhbGxiYWNrLCBkZWJvdW5jZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24ocy5wLm9uQ2FsbGJhY2spXG4gICAgfVxuICB9LCBbZGVib3VuY2VdKVxuXG4gIHMudXBkYXRlTWV0YSh7ZGVib3VuY2VDYWxsYmFja30pXG5cbiAgY29uc3Qgb25DYWxsYmFja0NhbGxiYWNrID0gdXNlQ2FsbGJhY2soKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIXMucC5hY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzLnAuZGVib3VuY2UpIHtcbiAgICAgIHMubS5kZWJvdW5jZUNhbGxiYWNrKC4uLmFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIHMucC5vbkNhbGxiYWNrKC4uLmFyZ3MpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjb25uZWN0RXZlbnQsIG9uQ29ubmVjdGVkTGlzdGVuZXJcblxuICAgIGlmIChtb2RlbCkge1xuICAgICAgY29ubmVjdEV2ZW50ID0gTW9kZWxFdmVudHMuY29ubmVjdChtb2RlbCwgZXZlbnQsIG9uQ2FsbGJhY2tDYWxsYmFjaylcblxuICAgICAgaWYgKG9uQ29ubmVjdGVkKSB7XG4gICAgICAgIG9uQ29ubmVjdGVkTGlzdGVuZXIgPSBjb25uZWN0RXZlbnQuZXZlbnRzLmFkZExpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAob25Db25uZWN0ZWRMaXN0ZW5lcikge1xuICAgICAgICBjb25uZWN0RXZlbnQuZXZlbnRzLnJlbW92ZUxpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29ubmVjdEV2ZW50KSB7XG4gICAgICAgIGNvbm5lY3RFdmVudC51bnN1YnNjcmliZSgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbbW9kZWw/LmlkKCldKVxufVxuXG5leHBvcnQgZGVmYXVsdCBhcGlNYWtlclVzZU1vZGVsRXZlbnRcbiJdfQ==
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vZGVsLWV2ZW50LmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJ1c2UtbW9kZWwtZXZlbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDbkUsT0FBTyxnQkFBZ0IsTUFBTSxVQUFVLENBQUE7QUFDdkMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxRQUFRLE1BQU0sc0NBQXNDLENBQUE7QUFFM0Q7OztHQUdHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRTtJQUN4QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3RDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7QUFDSCxDQUFDLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUMzRCxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDMUQsQ0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRTtJQUM1QyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFFckIsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUss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RixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlDLElBQUksT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2xDLE9BQU07WUFDUixDQUFDO1lBRUQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUE7WUFDL0Ysa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFBO1lBRTdDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUM5RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXZDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ2pFLENBQUM7WUFFRCxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQUE7UUFFRixjQUFjLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUM3QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDUixDQUFDLENBQUE7QUFFRCxlQUFlLHFCQUFxQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgTW9kZWxFdmVudHMgZnJvbSBcIi4vbW9kZWwtZXZlbnRzLmpzXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvdXNlLXNoYXBlLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxvYmplY3RbXXx1bmRlZmluZWR8bnVsbH0gbW9kZWxPck1vZGVsc1xuICogQHJldHVybnMge29iamVjdFtdfVxuICovXG5jb25zdCBtb2RlbHNGcm9tSW5wdXQgPSAobW9kZWxPck1vZGVscykgPT4ge1xuICBpZiAoIW1vZGVsT3JNb2RlbHMpIHtcbiAgICByZXR1cm4gW11cbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1vZGVsT3JNb2RlbHMpKSB7XG4gICAgcmV0dXJuIG1vZGVsT3JNb2RlbHMuZmlsdGVyKEJvb2xlYW4pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFttb2RlbE9yTW9kZWxzXVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R8b2JqZWN0W118dW5kZWZpbmVkfG51bGx9IG1vZGVsT3JNb2RlbHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IG1vZGVsc0RlcGVuZGVuY3lLZXkgPSAobW9kZWxPck1vZGVscykgPT4gSlNPTi5zdHJpbmdpZnkoXG4gIG1vZGVsc0Zyb21JbnB1dChtb2RlbE9yTW9kZWxzKS5tYXAoKG1vZGVsKSA9PiBtb2RlbC5pZCgpKVxuKVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fG9iamVjdFtdfHVuZGVmaW5lZHxudWxsfSBtb2RlbE9yTW9kZWxzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgb2JqZWN0Pn1cbiAqL1xuY29uc3QgbW9kZWxzQnlJZEZyb21JbnB1dCA9IChtb2RlbE9yTW9kZWxzKSA9PiB7XG4gIGNvbnN0IG1vZGVsc0J5SWQgPSB7fVxuXG4gIG1vZGVsc0Zyb21JbnB1dChtb2RlbE9yTW9kZWxzKS5mb3JFYWNoKChtb2RlbCkgPT4ge1xuICAgIG1vZGVsc0J5SWRbbW9kZWwuaWQoKV0gPSBtb2RlbFxuICB9KVxuXG4gIHJldHVybiBtb2RlbHNCeUlkXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdHxpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdFtdfSBtb2RlbFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuYWN0aXZlXVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcm9wcy5kZWJvdW5jZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wcy5vbkNvbm5lY3RlZF1cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuY29uc3QgYXBpTWFrZXJVc2VNb2RlbEV2ZW50ID0gKG1vZGVsLCBldmVudCwgb25DYWxsYmFjaywgcHJvcHMpID0+IHtcbiAgY29uc3Qge2FjdGl2ZSA9IHRydWUsIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucmVzdFByb3BzfSA9IHByb3BzIHx8IHt9XG4gIGNvbnN0IGNvbm5lY3Rpb25zUmVmID0gdXNlUmVmKHt9KVxuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gYXBpTWFrZXJVc2VNb2RlbEV2ZW50OiAke09iamVjdC5rZXlzKHJlc3RQcm9wcykuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICBjb25zdCBzID0gdXNlU2hhcGUoe2FjdGl2ZSwgZGVib3VuY2UsIG1vZGVsLCBvbkNhbGxiYWNrfSlcblxuICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25DYWxsYmFjaywgZGVib3VuY2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHMucC5vbkNhbGxiYWNrKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlXSlcblxuICBzLnVwZGF0ZU1ldGEoe2RlYm91bmNlQ2FsbGJhY2t9KVxuXG4gIGNvbnN0IG9uQ2FsbGJhY2tDYWxsYmFjayA9IHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFzLnAuYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocy5wLmRlYm91bmNlKSB7XG4gICAgICBzLm0uZGVib3VuY2VDYWxsYmFjayguLi5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzLnAub25DYWxsYmFjayguLi5hcmdzKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50Q29ubmVjdGlvbnMgPSBjb25uZWN0aW9uc1JlZi5jdXJyZW50XG4gICAgY29uc3QgbmV4dE1vZGVsc0J5SWQgPSBtb2RlbHNCeUlkRnJvbUlucHV0KG1vZGVsKVxuXG4gICAgT2JqZWN0LmtleXMoY3VycmVudENvbm5lY3Rpb25zKS5mb3JFYWNoKChtb2RlbElkKSA9PiB7XG4gICAgICBpZiAoIShtb2RlbElkIGluIG5leHRNb2RlbHNCeUlkKSkge1xuICAgICAgICBpZiAob25Db25uZWN0ZWQpIHtcbiAgICAgICAgICBjdXJyZW50Q29ubmVjdGlvbnNbbW9kZWxJZF0uZXZlbnRzLnJlbW92ZUxpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudENvbm5lY3Rpb25zW21vZGVsSWRdLnVuc3Vic2NyaWJlKClcbiAgICAgICAgZGVsZXRlIGN1cnJlbnRDb25uZWN0aW9uc1ttb2RlbElkXVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBPYmplY3Qua2V5cyhuZXh0TW9kZWxzQnlJZCkuZm9yRWFjaCgobW9kZWxJZCkgPT4ge1xuICAgICAgaWYgKG1vZGVsSWQgaW4gY3VycmVudENvbm5lY3Rpb25zKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBldmVudENvbm5lY3Rpb24gPSBNb2RlbEV2ZW50cy5jb25uZWN0KG5leHRNb2RlbHNCeUlkW21vZGVsSWRdLCBldmVudCwgb25DYWxsYmFja0NhbGxiYWNrKVxuICAgICAgY3VycmVudENvbm5lY3Rpb25zW21vZGVsSWRdID0gZXZlbnRDb25uZWN0aW9uXG5cbiAgICAgIGlmIChvbkNvbm5lY3RlZCkge1xuICAgICAgICBldmVudENvbm5lY3Rpb24uZXZlbnRzLmFkZExpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFtldmVudCwgbW9kZWxzRGVwZW5kZW5jeUtleShtb2RlbCldKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiAoKSA9PiB7XG4gICAgT2JqZWN0LnZhbHVlcyhjb25uZWN0aW9uc1JlZi5jdXJyZW50KS5mb3JFYWNoKChldmVudENvbm5lY3Rpb24pID0+IHtcbiAgICAgIGlmIChvbkNvbm5lY3RlZCkge1xuICAgICAgICBldmVudENvbm5lY3Rpb24uZXZlbnRzLnJlbW92ZUxpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuXG4gICAgICBldmVudENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKVxuICAgIH0pXG5cbiAgICBjb25uZWN0aW9uc1JlZi5jdXJyZW50ID0ge31cbiAgfSwgW10pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwaU1ha2VyVXNlTW9kZWxFdmVudFxuIl19
@@ -1,16 +1,16 @@
1
1
  export default apiMakerUseUpdatedEvent;
2
2
  /**
3
- * @param {import("./base-model.js").default} model
3
+ * @param {import("./base-model.js").default|import("./base-model.js").default[]} model
4
4
  * @param {Function} onUpdated
5
- * @param {object} props
6
- * @param {boolean} props.active
7
- * @param {number} props.debounce
8
- * @param {Function} props.onConnected
5
+ * @param {object} [props]
6
+ * @param {boolean} [props.active]
7
+ * @param {number} [props.debounce]
8
+ * @param {Function} [props.onConnected]
9
9
  * @returns {void}
10
10
  */
11
- declare function apiMakerUseUpdatedEvent(model: import("./base-model.js").default, onUpdated: Function, props?: {
12
- active: boolean;
13
- debounce: number;
14
- onConnected: Function;
11
+ declare function apiMakerUseUpdatedEvent(model: import("./base-model.js").default | import("./base-model.js").default[], onUpdated: Function, props?: {
12
+ active?: boolean;
13
+ debounce?: number;
14
+ onConnected?: Function;
15
15
  }): void;
16
16
  //# sourceMappingURL=use-updated-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-updated-event.d.ts","sourceRoot":"/src/","sources":["use-updated-event.js"],"names":[],"mappings":";AAMA;;;;;;;;GAQG;AACH,gDARW,OAAO,iBAAiB,EAAE,OAAO,+BAGzC;IAAuB,MAAM,EAArB,OAAO;IACO,QAAQ,EAAtB,MAAM;IACU,WAAW;CACnC,GAAU,IAAI,CAsDhB"}
1
+ {"version":3,"file":"use-updated-event.d.ts","sourceRoot":"/src/","sources":["use-updated-event.js"],"names":[],"mappings":";AA0CA;;;;;;;;GAQG;AACH,gDARW,OAAO,iBAAiB,EAAE,OAAO,GAAC,OAAO,iBAAiB,EAAE,OAAO,EAAE,+BAG7E;IAAwB,MAAM,GAAtB,OAAO;IACQ,QAAQ,GAAvB,MAAM;IACW,WAAW;CACpC,GAAU,IAAI,CA0EhB"}
@@ -1,19 +1,51 @@
1
1
  /* eslint-disable sort-imports */
2
- import { useCallback, useLayoutEffect, useMemo } from "react";
2
+ import { useCallback, useLayoutEffect, useMemo, useRef } from "react";
3
3
  import debounceFunction from "debounce";
4
4
  import ModelEvents from "./model-events.js";
5
5
  import useShape from "set-state-compare/build/use-shape.js";
6
6
  /**
7
- * @param {import("./base-model.js").default} model
7
+ * @param {object|object[]|undefined|null} modelOrModels
8
+ * @returns {object[]}
9
+ */
10
+ const modelsFromInput = (modelOrModels) => {
11
+ if (!modelOrModels) {
12
+ return [];
13
+ }
14
+ else if (Array.isArray(modelOrModels)) {
15
+ return modelOrModels.filter(Boolean);
16
+ }
17
+ else {
18
+ return [modelOrModels];
19
+ }
20
+ };
21
+ /**
22
+ * @param {object|object[]|undefined|null} modelOrModels
23
+ * @returns {string}
24
+ */
25
+ const modelsDependencyKey = (modelOrModels) => JSON.stringify(modelsFromInput(modelOrModels).map((model) => model.id()));
26
+ /**
27
+ * @param {object|object[]|undefined|null} modelOrModels
28
+ * @returns {Record<string, object>}
29
+ */
30
+ const modelsByIdFromInput = (modelOrModels) => {
31
+ const modelsById = {};
32
+ modelsFromInput(modelOrModels).forEach((model) => {
33
+ modelsById[model.id()] = model;
34
+ });
35
+ return modelsById;
36
+ };
37
+ /**
38
+ * @param {import("./base-model.js").default|import("./base-model.js").default[]} model
8
39
  * @param {Function} onUpdated
9
- * @param {object} props
10
- * @param {boolean} props.active
11
- * @param {number} props.debounce
12
- * @param {Function} props.onConnected
40
+ * @param {object} [props]
41
+ * @param {boolean} [props.active]
42
+ * @param {number} [props.debounce]
43
+ * @param {Function} [props.onConnected]
13
44
  * @returns {void}
14
45
  */
15
46
  const apiMakerUseUpdatedEvent = (model, onUpdated, props = {}) => {
16
47
  const { active = true, debounce, onConnected, ...restProps } = props;
48
+ const connectionsRef = useRef({});
17
49
  if (Object.keys(restProps).length > 0) {
18
50
  throw new Error(`Unknown props given to useUpdatedEvent: ${Object.keys(restProps).join(", ")}`);
19
51
  }
@@ -39,22 +71,37 @@ const apiMakerUseUpdatedEvent = (model, onUpdated, props = {}) => {
39
71
  }
40
72
  }, []);
41
73
  useLayoutEffect(() => {
42
- let connectUpdated, onConnectedListener;
43
- if (model) {
44
- connectUpdated = ModelEvents.connectUpdated(model, onUpdatedCallback);
45
- if (onConnected) {
46
- onConnectedListener = connectUpdated.events.addListener("connected", onConnected);
74
+ const currentConnections = connectionsRef.current;
75
+ const nextModelsById = modelsByIdFromInput(model);
76
+ Object.keys(currentConnections).forEach((modelId) => {
77
+ if (!(modelId in nextModelsById)) {
78
+ if (onConnected) {
79
+ currentConnections[modelId].events.removeListener("connected", onConnected);
80
+ }
81
+ currentConnections[modelId].unsubscribe();
82
+ delete currentConnections[modelId];
47
83
  }
48
- }
49
- return () => {
50
- if (onConnectedListener) {
51
- connectUpdated.events.removeListener("connected", onConnected);
84
+ });
85
+ Object.keys(nextModelsById).forEach((modelId) => {
86
+ if (modelId in currentConnections) {
87
+ return;
52
88
  }
53
- if (connectUpdated) {
54
- connectUpdated.unsubscribe();
89
+ const updatedConnection = ModelEvents.connectUpdated(nextModelsById[modelId], onUpdatedCallback);
90
+ currentConnections[modelId] = updatedConnection;
91
+ if (onConnected) {
92
+ updatedConnection.events.addListener("connected", onConnected);
93
+ }
94
+ });
95
+ }, [modelsDependencyKey(model)]);
96
+ useLayoutEffect(() => () => {
97
+ Object.values(connectionsRef.current).forEach((updatedConnection) => {
98
+ if (onConnected) {
99
+ updatedConnection.events.removeListener("connected", onConnected);
55
100
  }
56
- };
57
- }, [model?.id()]);
101
+ updatedConnection.unsubscribe();
102
+ });
103
+ connectionsRef.current = {};
104
+ }, []);
58
105
  };
59
106
  export default apiMakerUseUpdatedEvent;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXVwZGF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS11cGRhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDM0QsT0FBTyxnQkFBZ0IsTUFBTSxVQUFVLENBQUE7QUFDdkMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxRQUFRLE1BQU0sc0NBQXNDLENBQUE7QUFFM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDL0QsTUFBTSxFQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLFNBQVMsRUFBQyxHQUFHLEtBQUssQ0FBQTtJQUVsRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtJQUV4RCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDcEMsSUFBSSxPQUFPLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNoQyxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3hDLENBQUM7SUFDSCxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRWQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFDLGdCQUFnQixFQUFDLENBQUMsQ0FBQTtJQUVoQyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUU7UUFDaEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRU4sZUFBZSxDQUFDLEdBQUcsRUFBRTtRQUNuQixJQUFJLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQTtRQUV2QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsY0FBYyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUE7WUFFckUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsbUJBQW1CLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ25GLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3hCLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNoRSxDQUFDO1lBRUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQUVELGVBQWUsdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQgTW9kZWxFdmVudHMgZnJvbSBcIi4vbW9kZWwtZXZlbnRzLmpzXCJcbmltcG9ydCB1c2VTaGFwZSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvdXNlLXNoYXBlLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBtb2RlbFxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25VcGRhdGVkXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuYWN0aXZlXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMuZGVib3VuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BzLm9uQ29ubmVjdGVkXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgYXBpTWFrZXJVc2VVcGRhdGVkRXZlbnQgPSAobW9kZWwsIG9uVXBkYXRlZCwgcHJvcHMgPSB7fSkgPT4ge1xuICBjb25zdCB7YWN0aXZlID0gdHJ1ZSwgZGVib3VuY2UsIG9uQ29ubmVjdGVkLCAuLi5yZXN0UHJvcHN9ID0gcHJvcHNcblxuICBpZiAoT2JqZWN0LmtleXMocmVzdFByb3BzKS5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHByb3BzIGdpdmVuIHRvIHVzZVVwZGF0ZWRFdmVudDogJHtPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmpvaW4oXCIsIFwiKX1gKVxuICB9XG5cbiAgY29uc3QgcyA9IHVzZVNoYXBlKHthY3RpdmUsIGRlYm91bmNlLCBtb2RlbCwgb25VcGRhdGVkfSlcblxuICBjb25zdCBkZWJvdW5jZUNhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25VcGRhdGVkLCBkZWJvdW5jZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24ocy5wLm9uVXBkYXRlZClcbiAgICB9XG4gIH0sIFtkZWJvdW5jZV0pXG5cbiAgcy51cGRhdGVNZXRhKHtkZWJvdW5jZUNhbGxiYWNrfSlcblxuICBjb25zdCBvblVwZGF0ZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKCguLi5hcmdzKSA9PiB7XG4gICAgaWYgKCFzLnAuYWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocy5wLmRlYm91bmNlKSB7XG4gICAgICBzLm0uZGVib3VuY2VDYWxsYmFjayguLi5hcmdzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzLnAub25VcGRhdGVkKC4uLmFyZ3MpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjb25uZWN0VXBkYXRlZCwgb25Db25uZWN0ZWRMaXN0ZW5lclxuXG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBjb25uZWN0VXBkYXRlZCA9IE1vZGVsRXZlbnRzLmNvbm5lY3RVcGRhdGVkKG1vZGVsLCBvblVwZGF0ZWRDYWxsYmFjaylcblxuICAgICAgaWYgKG9uQ29ubmVjdGVkKSB7XG4gICAgICAgIG9uQ29ubmVjdGVkTGlzdGVuZXIgPSBjb25uZWN0VXBkYXRlZC5ldmVudHMuYWRkTGlzdGVuZXIoXCJjb25uZWN0ZWRcIiwgb25Db25uZWN0ZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChvbkNvbm5lY3RlZExpc3RlbmVyKSB7XG4gICAgICAgIGNvbm5lY3RVcGRhdGVkLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3RVcGRhdGVkKSB7XG4gICAgICAgIGNvbm5lY3RVcGRhdGVkLnVuc3Vic2NyaWJlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFttb2RlbD8uaWQoKV0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGFwaU1ha2VyVXNlVXBkYXRlZEV2ZW50XG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXVwZGF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS11cGRhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQ25FLE9BQU8sZ0JBQWdCLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sV0FBVyxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sUUFBUSxNQUFNLHNDQUFzQyxDQUFBO0FBRTNEOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN0QyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN4QixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDM0QsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQzFELENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUU7SUFDNUMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBRXJCLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxL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QyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM5QyxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUNsQyxPQUFNO1lBQ1IsQ0FBQztZQUVELE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtZQUNoRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQTtZQUUvQyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNoRSxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFaEMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtRQUN6QixNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQ2xFLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ25FLENBQUM7WUFFRCxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNqQyxDQUFDLENBQUMsQ0FBQTtRQUVGLGNBQWMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQzdCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNSLENBQUMsQ0FBQTtBQUVELGVBQWUsdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7dXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IGRlYm91bmNlRnVuY3Rpb24gZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBNb2RlbEV2ZW50cyBmcm9tIFwiLi9tb2RlbC1ldmVudHMuanNcIlxuaW1wb3J0IHVzZVNoYXBlIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC91c2Utc2hhcGUuanNcIlxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fG9iamVjdFtdfHVuZGVmaW5lZHxudWxsfSBtb2RlbE9yTW9kZWxzXG4gKiBAcmV0dXJucyB7b2JqZWN0W119XG4gKi9cbmNvbnN0IG1vZGVsc0Zyb21JbnB1dCA9IChtb2RlbE9yTW9kZWxzKSA9PiB7XG4gIGlmICghbW9kZWxPck1vZGVscykge1xuICAgIHJldHVybiBbXVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxPck1vZGVscykpIHtcbiAgICByZXR1cm4gbW9kZWxPck1vZGVscy5maWx0ZXIoQm9vbGVhbilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW21vZGVsT3JNb2RlbHNdXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxvYmplY3RbXXx1bmRlZmluZWR8bnVsbH0gbW9kZWxPck1vZGVsc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuY29uc3QgbW9kZWxzRGVwZW5kZW5jeUtleSA9IChtb2RlbE9yTW9kZWxzKSA9PiBKU09OLnN0cmluZ2lmeShcbiAgbW9kZWxzRnJvbUlucHV0KG1vZGVsT3JNb2RlbHMpLm1hcCgobW9kZWwpID0+IG1vZGVsLmlkKCkpXG4pXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R8b2JqZWN0W118dW5kZWZpbmVkfG51bGx9IG1vZGVsT3JNb2RlbHNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fVxuICovXG5jb25zdCBtb2RlbHNCeUlkRnJvbUlucHV0ID0gKG1vZGVsT3JNb2RlbHMpID0+IHtcbiAgY29uc3QgbW9kZWxzQnlJZCA9IHt9XG5cbiAgbW9kZWxzRnJvbUlucHV0KG1vZGVsT3JNb2RlbHMpLmZvckVhY2goKG1vZGVsKSA9PiB7XG4gICAgbW9kZWxzQnlJZFttb2RlbC5pZCgpXSA9IG1vZGVsXG4gIH0pXG5cbiAgcmV0dXJuIG1vZGVsc0J5SWRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0W119IG1vZGVsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblVwZGF0ZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5hY3RpdmVdXG4gKiBAcGFyYW0ge251bWJlcn0gW3Byb3BzLmRlYm91bmNlXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BzLm9uQ29ubmVjdGVkXVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGFwaU1ha2VyVXNlVXBkYXRlZEV2ZW50ID0gKG1vZGVsLCBvblVwZGF0ZWQsIHByb3BzID0ge30pID0+IHtcbiAgY29uc3Qge2FjdGl2ZSA9IHRydWUsIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucmVzdFByb3BzfSA9IHByb3BzXG4gIGNvbnN0IGNvbm5lY3Rpb25zUmVmID0gdXNlUmVmKHt9KVxuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gdXNlVXBkYXRlZEV2ZW50OiAke09iamVjdC5rZXlzKHJlc3RQcm9wcykuam9pbihcIiwgXCIpfWApXG4gIH1cblxuICBjb25zdCBzID0gdXNlU2hhcGUoe2FjdGl2ZSwgZGVib3VuY2UsIG1vZGVsLCBvblVwZGF0ZWR9KVxuXG4gIGNvbnN0IGRlYm91bmNlQ2FsbGJhY2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGRlYm91bmNlID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHMucC5vblVwZGF0ZWQsIGRlYm91bmNlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVib3VuY2VGdW5jdGlvbihzLnAub25VcGRhdGVkKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlXSlcblxuICBzLnVwZGF0ZU1ldGEoe2RlYm91bmNlQ2FsbGJhY2t9KVxuXG4gIGNvbnN0IG9uVXBkYXRlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soKC4uLmFyZ3MpID0+IHtcbiAgICBpZiAoIXMucC5hY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzLnAuZGVib3VuY2UpIHtcbiAgICAgIHMubS5kZWJvdW5jZUNhbGxiYWNrKC4uLmFyZ3MpXG4gICAgfSBlbHNlIHtcbiAgICAgIHMucC5vblVwZGF0ZWQoLi4uYXJncylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25zID0gY29ubmVjdGlvbnNSZWYuY3VycmVudFxuICAgIGNvbnN0IG5leHRNb2RlbHNCeUlkID0gbW9kZWxzQnlJZEZyb21JbnB1dChtb2RlbClcblxuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25uZWN0aW9ucykuZm9yRWFjaCgobW9kZWxJZCkgPT4ge1xuICAgICAgaWYgKCEobW9kZWxJZCBpbiBuZXh0TW9kZWxzQnlJZCkpIHtcbiAgICAgICAgaWYgKG9uQ29ubmVjdGVkKSB7XG4gICAgICAgICAgY3VycmVudENvbm5lY3Rpb25zW21vZGVsSWRdLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihcImNvbm5lY3RlZFwiLCBvbkNvbm5lY3RlZClcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRDb25uZWN0aW9uc1ttb2RlbElkXS51bnN1YnNjcmliZSgpXG4gICAgICAgIGRlbGV0ZSBjdXJyZW50Q29ubmVjdGlvbnNbbW9kZWxJZF1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgT2JqZWN0LmtleXMobmV4dE1vZGVsc0J5SWQpLmZvckVhY2goKG1vZGVsSWQpID0+IHtcbiAgICAgIGlmIChtb2RlbElkIGluIGN1cnJlbnRDb25uZWN0aW9ucykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZENvbm5lY3Rpb24gPSBNb2RlbEV2ZW50cy5jb25uZWN0VXBkYXRlZChuZXh0TW9kZWxzQnlJZFttb2RlbElkXSwgb25VcGRhdGVkQ2FsbGJhY2spXG4gICAgICBjdXJyZW50Q29ubmVjdGlvbnNbbW9kZWxJZF0gPSB1cGRhdGVkQ29ubmVjdGlvblxuXG4gICAgICBpZiAob25Db25uZWN0ZWQpIHtcbiAgICAgICAgdXBkYXRlZENvbm5lY3Rpb24uZXZlbnRzLmFkZExpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttb2RlbHNEZXBlbmRlbmN5S2V5KG1vZGVsKV0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+ICgpID0+IHtcbiAgICBPYmplY3QudmFsdWVzKGNvbm5lY3Rpb25zUmVmLmN1cnJlbnQpLmZvckVhY2goKHVwZGF0ZWRDb25uZWN0aW9uKSA9PiB7XG4gICAgICBpZiAob25Db25uZWN0ZWQpIHtcbiAgICAgICAgdXBkYXRlZENvbm5lY3Rpb24uZXZlbnRzLnJlbW92ZUxpc3RlbmVyKFwiY29ubmVjdGVkXCIsIG9uQ29ubmVjdGVkKVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfSlcblxuICAgIGNvbm5lY3Rpb25zUmVmLmN1cnJlbnQgPSB7fVxuICB9LCBbXSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBpTWFrZXJVc2VVcGRhdGVkRXZlbnRcbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
3
  "type": "module",
4
- "version": "1.0.2105",
4
+ "version": "1.0.2107",
5
5
  "description": "My new module",
6
6
  "files": [
7
7
  "build/**"