@plumile/router 0.1.20 → 0.1.22

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.
@@ -45,19 +45,10 @@ export default function createRouter(routes, opts = {}) {
45
45
  const initialRawQuery = parseRawQuery(history.location.search);
46
46
  let initialUnifiedSchema;
47
47
  if (route != null) {
48
- const collected = [];
49
- for (const r of route.route.routes) {
50
- let maybe;
51
- const obj = r;
52
- if (obj.querySchema != null)
53
- maybe = obj.querySchema;
54
- else if (obj.filterSchema != null)
55
- maybe = obj.filterSchema;
56
- if (maybe != null)
57
- collected.push(maybe);
48
+ const last = route.route.routes.at(-1);
49
+ if (last != null) {
50
+ initialUnifiedSchema = last.querySchema;
58
51
  }
59
- if (collected.length > 0)
60
- initialUnifiedSchema = collected.at(-1);
61
52
  }
62
53
  let initialFilters;
63
54
  let initialFilterDiagnostics;
@@ -100,7 +91,7 @@ export default function createRouter(routes, opts = {}) {
100
91
  currentEntry.filters = norm;
101
92
  const normalizedSearch = buildCombinedSearch({
102
93
  filters: norm,
103
- filterSchema: initialUnifiedSchema,
94
+ querySchema: initialUnifiedSchema,
104
95
  });
105
96
  if (normalizedSearch !== history.location.search) {
106
97
  history.set({
@@ -129,27 +120,17 @@ export default function createRouter(routes, opts = {}) {
129
120
  nextRoute = getMatchedRoute(flatRoutes, history.location);
130
121
  }
131
122
  const query = parseRawQuery(location.search);
132
- let filterSchema;
123
+ let querySchema;
133
124
  if (nextRoute != null) {
134
- const collected = [];
135
- for (const r of nextRoute.route.routes) {
136
- let maybeF;
137
- const obj = r;
138
- if (obj.querySchema != null)
139
- maybeF = obj.querySchema;
140
- else if (obj.filterSchema != null)
141
- maybeF = obj.filterSchema;
142
- if (maybeF != null)
143
- collected.push(maybeF);
144
- }
145
- if (collected.length > 0) {
146
- filterSchema = collected.at(-1);
125
+ const last = nextRoute.route.routes.at(-1);
126
+ if (last != null) {
127
+ querySchema = last.querySchema;
147
128
  }
148
129
  }
149
130
  let filters;
150
131
  let filterDiagnostics;
151
- if (filterSchema != null) {
152
- const parsedF = parseFilters(location.search, filterSchema);
132
+ if (querySchema != null) {
133
+ const parsedF = parseFilters(location.search, querySchema);
153
134
  filters = parsedF.filters;
154
135
  filterDiagnostics = parsedF.diagnostics;
155
136
  }
@@ -185,12 +166,12 @@ export default function createRouter(routes, opts = {}) {
185
166
  query,
186
167
  filters,
187
168
  filterDiagnostics,
188
- activeQuerySchema: filterSchema,
169
+ activeQuerySchema: querySchema,
189
170
  };
190
- if (normalized && filterSchema != null) {
171
+ if (normalized && querySchema != null) {
191
172
  const normalizedSearch = buildCombinedSearch({
192
173
  filters,
193
- filterSchema,
174
+ querySchema,
194
175
  });
195
176
  if (normalizedSearch !== location.search) {
196
177
  let nextSearchStr = normalizedSearch;
@@ -252,37 +233,23 @@ export default function createRouter(routes, opts = {}) {
252
233
  navigate({ pathname, query, filters: navFilters, replace }) {
253
234
  const current = currentEntry;
254
235
  const targetPathname = pathname ?? current.location.pathname;
255
- let filterSchema;
256
- function collectSchema(routesArr) {
257
- if (routesArr == null) {
258
- return;
259
- }
260
- const collected = [];
261
- for (const r of routesArr) {
262
- let maybeF;
263
- const obj = r;
264
- if (obj.querySchema != null)
265
- maybeF = obj.querySchema;
266
- else if (obj.filterSchema != null)
267
- maybeF = obj.filterSchema;
268
- if (maybeF != null)
269
- collected.push(maybeF);
270
- }
271
- if (collected.length > 0) {
272
- filterSchema = collected.at(-1);
273
- }
274
- }
236
+ let destSchema;
275
237
  const destRoute = getMatchedRoute(flatRoutes, {
276
238
  ...window.location,
277
239
  pathname: targetPathname,
278
240
  });
279
- collectSchema(destRoute?.route.routes);
280
- filterSchema ??= current.activeQuerySchema;
241
+ if (destRoute != null) {
242
+ const last = destRoute.route.routes.at(-1);
243
+ if (last != null) {
244
+ destSchema = last.querySchema;
245
+ }
246
+ }
247
+ destSchema ??= current.activeQuerySchema;
281
248
  const effectiveFilters = navFilters ?? current.filters;
282
249
  const filtersInput = effectiveFilters ?? query;
283
250
  const search = buildCombinedSearch({
284
251
  filters: filtersInput,
285
- filterSchema,
252
+ querySchema: destSchema,
286
253
  });
287
254
  const locationObj = { pathname: targetPathname, search, hash: '' };
288
255
  if (replace === true) {
@@ -644,4 +611,4 @@ export default function createRouter(routes, opts = {}) {
644
611
  }
645
612
  return { cleanup, context };
646
613
  }
647
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF1RDlELE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUNsQyxNQUEyQixFQUMzQixPQUlJLEVBQUU7SUFHTixJQUFJLGNBQXVCLENBQUM7SUFDNUIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUksZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxPQUFPLENBQ0wsT0FBTyxPQUFPLEtBQUssV0FBVztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUN0QyxDQUFDO1lBQ0osQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUNyRCxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FB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ZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCB7IHBhcnNlUmF3UXVlcnkgfSBmcm9tICcuLi90b29scy9xdWVyeS5qcyc7XG5pbXBvcnQgYnVpbGRDb21iaW5lZFNlYXJjaCBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQgdHlwZSB7XG4gIFJvdXRlRW50cnksXG4gIFJvdXRpbmdDb250ZXh0VHlwZSxcbiAgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIEFueVJvdXRlLFxuICBQcmVwYXJlZEFjY2VzcyxcbiAgTmF2aWdhdGVPdmVybG9hZHMsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmIFByZXBhcmVkQWNjZXNzPFI+O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPihcbiAgcm91dGVzOiBbLi4uUl0gfCBBbnlSb3V0ZVtdLFxuICBvcHRzOiB7XG4gICAgZGV2dG9vbHM/OlxuICAgICAgfCBib29sZWFuXG4gICAgICB8IHsgZ2xvYmFsPzogYm9vbGVhbjsgcGFuZWw/OiBib29sZWFuOyBzaG9ydGN1dD86IHN0cmluZyB9O1xuICB9ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48UiBleHRlbmRzIEFueVJvdXRlW10gPyBSIDogQW55Um91dGVbXT4ge1xuICAvLyBOb3JtYWxpemUgZGV2dG9vbHMgb3B0aW9ucyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBsZXQgZGV2dG9vbHNHbG9iYWw6IGJvb2xlYW47XG4gIGxldCBkZXZ0b29sc1BhbmVsID0gZmFsc2U7XG4gIGxldCBkZXZ0b29sc1Nob3J0Y3V0ID0gJ0FsdCtTaGlmdCtSJztcbiAgaWYgKHR5cGVvZiBvcHRzLmRldnRvb2xzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGJhc2VFbmFibGVkID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGRldnRvb2xzR2xvYmFsID0gb3B0cy5kZXZ0b29scy5nbG9iYWwgPz8gYmFzZUVuYWJsZWQ7XG4gICAgZGV2dG9vbHNQYW5lbCA9ICEhb3B0cy5kZXZ0b29scy5wYW5lbDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0cy5kZXZ0b29scy5zaG9ydGN1dCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQudHJpbSgpICE9PSAnJ1xuICAgICkge1xuICAgICAgZGV2dG9vbHNTaG9ydGN1dCA9IG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gICAgY29uc3QgZW5hYmxlZCA9ICgoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZGV2dG9vbHMgPT09ICdib29sZWFuJykgcmV0dXJuIG9wdHMuZGV2dG9vbHM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBkZXZ0b29sc0dsb2JhbCA9IGVuYWJsZWQ7XG4gIH1cbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGV0ZXJtaW5lIHVuaWZpZWQgc2NoZW1hIChxdWVyeVNjaGVtYSkgZnJvbSBkZWVwZXN0IHJvdXRlXG4gIGxldCBpbml0aWFsVW5pZmllZFNjaGVtYTogYW55O1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBsZXQgbWF5YmU6IHVua25vd247XG4gICAgICBjb25zdCBvYmogPSByIGFzIHVua25vd24gYXMge1xuICAgICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgICAgIGZpbHRlclNjaGVtYT86IHVua25vd247XG4gICAgICB9O1xuICAgICAgaWYgKG9iai5xdWVyeVNjaGVtYSAhPSBudWxsKSBtYXliZSA9IG9iai5xdWVyeVNjaGVtYTtcbiAgICAgIGVsc2UgaWYgKG9iai5maWx0ZXJTY2hlbWEgIT0gbnVsbCkgbWF5YmUgPSBvYmouZmlsdGVyU2NoZW1hOyAvLyBsZWdhY3kgcHJvcGVydHkgbmFtZVxuICAgICAgaWYgKG1heWJlICE9IG51bGwpIGNvbGxlY3RlZC5wdXNoKG1heWJlKTtcbiAgICB9XG4gICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSBpbml0aWFsVW5pZmllZFNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gIH1cbiAgbGV0IGluaXRpYWxGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gIGlmIChpbml0aWFsVW5pZmllZFNjaGVtYSAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGaWx0ZXJzKGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLCBpbml0aWFsVW5pZmllZFNjaGVtYSk7XG4gICAgaW5pdGlhbEZpbHRlcnMgPSBwYXJzZWQuZmlsdGVycyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljcyA9IHBhcnNlZC5kaWFnbm9zdGljcyBhcyB1bmtub3duW107XG4gIH1cbiAgY29uc3QgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChyb3V0ZSwgaW5pdGlhbEZpbHRlcnMpO1xuICAvLyBIZWxwZXIgdG8gYnVpbGQgdGhlIHJhdyBxdWVyeSBvYmplY3QgZnJvbSBhIHNlYXJjaCBzdHJpbmdcbiAgbGV0IGN1cnJlbnRFbnRyeTogUm91dGVFbnRyeTxhbnk+ID0ge1xuICAgIGZvcmNlUmVyZW5kZXI6IGZhbHNlLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uLFxuICAgIHJvdXRlLFxuICAgIHByZXBhcmVkTWF0Y2gsXG4gICAgcmF3U2VhcmNoOiBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCxcbiAgICBxdWVyeTogaW5pdGlhbFJhd1F1ZXJ5LFxuICAgIC8vIHR5cGVkUXVlcnkgcmVtb3ZlZCAodW5pZmllZCBpbnRvIGZpbHRlcnMvcXVlcnkpXG4gICAgZmlsdGVyczogaW5pdGlhbEZpbHRlcnMsXG4gICAgZmlsdGVyRGlhZ25vc3RpY3M6IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljcyxcbiAgICBhY3RpdmVRdWVyeVNjaGVtYTogaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gIH07XG5cbiAgLy8gSW5pdGlhbCBub3JtYWxpemF0aW9uIHBhc3MgKGUuZy4sIGNsYW1wIHBhZ2UpXG4gIGNvbnN0IGluaXRUeXBlZCA9IGN1cnJlbnRFbnRyeS5maWx0ZXJzIGFzIHVua25vd24gYXNcbiAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgfCB1bmRlZmluZWQ7XG4gIGxldCBpbml0UGFnZU51bWVyaWM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgaWYgKGluaXRUeXBlZCAhPSBudWxsKSB7XG4gICAgY29uc3QgcmF3UGFnZSA9IGluaXRUeXBlZC5wYWdlO1xuICAgIGlmICh0eXBlb2YgcmF3UGFnZSA9PT0gJ251bWJlcicpIGluaXRQYWdlTnVtZXJpYyA9IHJhd1BhZ2U7XG4gICAgZWxzZSBpZiAoXG4gICAgICByYXdQYWdlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiByYXdQYWdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkocmF3UGFnZSkgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyYXdQYWdlLCAnZXEnKSAmJlxuICAgICAgdHlwZW9mIChyYXdQYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5lcSA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIGluaXRQYWdlTnVtZXJpYyA9IChyYXdQYWdlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5lcSBhcyBudW1iZXI7XG4gICAgfVxuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgaW5pdFBhZ2VOdW1lcmljID09PSAnbnVtYmVyJyAmJlxuICAgIGluaXRQYWdlTnVtZXJpYyA8IDEgJiZcbiAgICBpbml0aWFsVW5pZmllZFNjaGVtYSAhPSBudWxsICYmXG4gICAgaW5pdFR5cGVkICE9IG51bGxcbiAgKSB7XG4gICAgY29uc3Qgbm9ybSA9IHsgLi4uaW5pdFR5cGVkLCBwYWdlOiB7IGVxOiAxIH0gfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjdXJyZW50RW50cnkuZmlsdGVycyA9IG5vcm07IC8vIGltbWVkaWF0ZSB2aXNpYmlsaXR5XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgZmlsdGVyczogbm9ybSxcbiAgICAgIGZpbHRlclNjaGVtYTogaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gICAgfSk7IC8vIHJldHVybnMgJycgb3Igc3RyaW5nIHN0YXJ0aW5nIHdpdGggJz8nXG4gICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgIHBhdGhuYW1lOiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgfSk7XG4gICAgICAvLyBVcGRhdGUgY3VycmVudEVudHJ5LmxvY2F0aW9uIHRvIHJlZmxlY3QgbmV3IHNlYXJjaCBkaXJlY3RseSAoaGlzdG9yeS5zZXQgdHJpZ2dlcnMgYXN5bmMgc3Vic2NyaWJlcilcbiAgICAgIGN1cnJlbnRFbnRyeSA9IHtcbiAgICAgICAgLi4uY3VycmVudEVudHJ5LFxuICAgICAgICBsb2NhdGlvbjogeyAuLi5jdXJyZW50RW50cnkubG9jYXRpb24sIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCB9LFxuICAgICAgICByYXdTZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxudW1iZXIsIFN1YnNjcmliZUNhbGxiYWNrPGFueT4+KCk7XG5cbiAgLy8gTGlzdGVuIGZvciBsb2NhdGlvbiBjaGFuZ2VzLCBtYXRjaCB0byB0aGUgcm91dGUgZW50cnksIHByZXBhcmUgdGhlIGVudHJ5LFxuICAvLyBhbmQgbm90aWZ5IHN1YnNjcmliZXJzLiBUaGlzIHBhdHRlcm4gZW5zdXJlcyB0aGF0IGRhdGEtbG9hZGluZ1xuICAvLyBvY2N1cnMgKm91dHNpZGUqIG9mIC0gYW5kICpiZWZvcmUqIC0gcmVuZGVyaW5nLlxuICBjb25zdCBjbGVhbnVwID0gaGlzdG9yeS5zdWJzY3JpYmUoKGxvY2F0aW9uLCBmb3JjZVJlcmVuZGVyKSA9PiB7XG4gICAgY29uc3Qgc2FtZVBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBjb25zdCBzYW1lU2VhcmNoID0gbG9jYXRpb24uc2VhcmNoID09PSBjdXJyZW50RW50cnkucmF3U2VhcmNoO1xuXG4gICAgaWYgKCFmb3JjZVJlcmVuZGVyICYmIHNhbWVQYXRobmFtZSAmJiBzYW1lU2VhcmNoKSB7XG4gICAgICAvLyBOb3RoaW5nIGNoYW5nZWQgdGhhdCB3ZSBjYXJlIGFib3V0XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgd2Ugc3RpbGwgd2FudCB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZS5cbiAgICAvLyBLZWVwIHRoZSBleGlzdGluZyBwcmVwYXJlZE1hdGNoIHdoZW4gcGF0aG5hbWUgaXMgaWRlbnRpY2FsIHRvIGF2b2lkIHJlZHVuZGFudCB3b3JrLlxuICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgIGxldCBuZXh0Um91dGUgPSBjdXJyZW50RW50cnkucm91dGU7XG5cbiAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgLy8gUGF0aCBjaGFuZ2VkOiByZWNvbXB1dGUgbWF0Y2ggKyBwcmVwYXJlZCBkYXRhIGluY2x1ZGluZyBxdWVyeVxuICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICAgICAgLy8gd2Ugd2lsbCBzZXQgYmVsb3cgYWZ0ZXIgY29tcHV0aW5nIHR5cGVkIHF1ZXJ5XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgcmF3IHF1ZXJ5IG9iamVjdCAoYmFzaWMgYWdncmVnYXRpb24pIGZyb20gbG9jYXRpb24uc2VhcmNoXG4gICAgY29uc3QgcXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGxvY2F0aW9uLnNlYXJjaCk7XG4gICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBmcm9tIGRlZXBlc3QgbWF0Y2hlZCByb3V0ZVxuICAgIGxldCBmaWx0ZXJTY2hlbWE6IGFueTtcbiAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgciBvZiBuZXh0Um91dGUucm91dGUucm91dGVzKSB7XG4gICAgICAgIGxldCBtYXliZUY6IHVua25vd247XG4gICAgICAgIGNvbnN0IG9iaiA9IHIgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgcXVlcnlTY2hlbWE/OiB1bmtub3duO1xuICAgICAgICAgIGZpbHRlclNjaGVtYT86IHVua25vd247XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvYmoucXVlcnlTY2hlbWEgIT0gbnVsbCkgbWF5YmVGID0gb2JqLnF1ZXJ5U2NoZW1hO1xuICAgICAgICBlbHNlIGlmIChvYmouZmlsdGVyU2NoZW1hICE9IG51bGwpIG1heWJlRiA9IG9iai5maWx0ZXJTY2hlbWE7XG4gICAgICAgIGlmIChtYXliZUYgIT0gbnVsbCkgY29sbGVjdGVkLnB1c2gobWF5YmVGKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJTY2hlbWEgPSBjb2xsZWN0ZWQuYXQoLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBQYXJzZSB1bmlmaWVkIGZpbHRlcnNcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZmlsdGVyU2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBmaWx0ZXJTY2hlbWEpO1xuICAgICAgZmlsdGVycyA9IHBhcnNlZEYuZmlsdGVycyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgZmlsdGVyRGlhZ25vc3RpY3MgPSBwYXJzZWRGLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgICB9XG4gICAgLy8gTm9ybWFsaXphdGlvbjogY2xhbXAgcGFnZSA+PSAxIGlmIG51bWVyaWMgcGFnZSBwcmVzZW50XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICBsZXQgcGc6IHVua25vd247XG4gICAgaWYgKGZpbHRlcnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBmaWx0ZXJzO1xuICAgICAgY29uc3QgbWF5YmUgPSBmLnBhZ2U7XG4gICAgICBpZiAoXG4gICAgICAgIG1heWJlICE9IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG1heWJlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShtYXliZSkgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1heWJlLCAnZXEnKVxuICAgICAgKSB7XG4gICAgICAgIHBnID0gKG1heWJlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5lcTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBnID0gbWF5YmU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGcgPT09ICdudW1iZXInICYmIHBnIDwgMSkge1xuICAgICAgY29uc3QgY2xvbmUgPSB7IC4uLihmaWx0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLCBwYWdlOiB7IGVxOiAxIH0gfTtcbiAgICAgIGZpbHRlcnMgPSBjbG9uZTtcbiAgICAgIG5vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIChzYW1lIHBhdGhuYW1lKSB3ZSBzdGlsbCBuZWVkIHRvIHJlLXJ1biBwcmVwYXJlXG4gICAgaWYgKCFzYW1lUGF0aG5hbWUgfHwgIXNhbWVTZWFyY2gpIHtcbiAgICAgIG5leHRQcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKG5leHRSb3V0ZSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICAgIGZvcmNlUmVyZW5kZXI6IGZvcmNlUmVyZW5kZXIgfHwgKHNhbWVQYXRobmFtZSAmJiAhc2FtZVNlYXJjaCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJvdXRlOiBuZXh0Um91dGUsXG4gICAgICBwcmVwYXJlZE1hdGNoOiBuZXh0UHJlcGFyZWRNYXRjaCxcbiAgICAgIHJhd1NlYXJjaDogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgcXVlcnksXG4gICAgICBmaWx0ZXJzLFxuICAgICAgZmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgICBhY3RpdmVRdWVyeVNjaGVtYTogZmlsdGVyU2NoZW1hLFxuICAgIH07XG5cbiAgICAvLyBJZiBub3JtYWxpemF0aW9uIGNoYW5nZWQgdGhlIHR5cGVkIHF1ZXJ5IHdlIHRyaWdnZXIgYSByZXBsYWNlIHdpdGggbm9ybWFsaXplZCBzZWFyY2hcbiAgICBpZiAobm9ybWFsaXplZCAmJiBmaWx0ZXJTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBmaWx0ZXJTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBsb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgICAgbGV0IG5leHRTZWFyY2hTdHIgPSBub3JtYWxpemVkU2VhcmNoO1xuICAgICAgICBpZiAoIW5leHRTZWFyY2hTdHIuc3RhcnRzV2l0aCgnPycpKSB7XG4gICAgICAgICAgaWYgKG5leHRTZWFyY2hTdHIgPT09ICcnKSBuZXh0U2VhcmNoU3RyID0gJyc7XG4gICAgICAgICAgZWxzZSBuZXh0U2VhcmNoU3RyID0gYD8ke25leHRTZWFyY2hTdHJ9YDtcbiAgICAgICAgfVxuICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogbmV4dFNlYXJjaFN0cixcbiAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjsgLy8gZWFybHk6IHN1YnNlcXVlbnQgc2V0IHdpbGwgdHJpZ2dlciByZXJ1blxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjdXJyZW50IGVudHJ5IGFuZCBub3RpZnkgYWxsIHN1YnNjcmliZXJzXG4gICAgY3VycmVudEVudHJ5ID0gbmV4dEVudHJ5O1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjayhuZXh0RW50cnkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUaGUgcm91dGVyIGNvbnRleHQgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gUmVhY3QgQ29udGV4dFxuICBjb25zdCBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmXG4gICAgUHJlcGFyZWRBY2Nlc3M8QW55Um91dGVbXT4gJiB7XG4gICAgICBuYXZpZ2F0ZTogTmF2aWdhdGVPdmVybG9hZHM8QW55Um91dGVbXT47XG4gICAgfSA9IHtcbiAgICBoaXN0b3J5LFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50cnk7XG4gICAgfSxcbiAgICBwcmVsb2FkQ29kZShwYXRobmFtZSkge1xuICAgICAgLy8gUHJlbG9hZCBqdXN0IHRoZSBjb21wb25lbnQgY29kZSBmb3IgYSByb3V0ZSB3aXRob3V0IHN0b3JpbmcgdGhlIHJlc3VsdFxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgYWxsIHJlc291cmNlIHBhZ2VzIGZvciB0aGUgbWF0Y2hlZCByb3V0ZVxuICAgICAgbWF0Y2hlcy5yb3V0ZS5yb3V0ZXMuZm9yRWFjaCgoeyByZXNvdXJjZVBhZ2UgfSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByZXNvdXJjZVBhZ2UubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVsb2FkKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGJvdGggdGhlIGNvbXBvbmVudCBjb2RlIGFuZCBwcmVwYXJlZCBkYXRhIGZvciBhIHJvdXRlXG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgcHJlcGFyZU1hdGNoKG1hdGNoZXMpO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBBZGQgYSBuZXcgc3Vic2NyaWJlciBhbmQgcmV0dXJuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAgICBuZXh0SWQgKz0gMTtcbiAgICAgIGNvbnN0IGlkID0gbmV4dElkO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtc3R5bGVcbiAgICAgIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShpZCk7XG4gICAgICB9O1xuICAgICAgc3Vic2NyaWJlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZGlzcG9zZTtcbiAgICB9LFxuICAgIG5hdmlnYXRlKHsgcGF0aG5hbWUsIHF1ZXJ5LCBmaWx0ZXJzOiBuYXZGaWx0ZXJzLCByZXBsYWNlIH06IGFueSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRFbnRyeTtcbiAgICAgIGNvbnN0IHRhcmdldFBhdGhuYW1lID0gcGF0aG5hbWUgPz8gY3VycmVudC5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIC8vIERldGVybWluZSBzY2hlbWEgb2YgZGVzdGluYXRpb24gKGlmIHNhbWUgcGF0aCBhbmQgd2UgaGF2ZSByb3V0ZSB3ZSBjYW4gcmV1c2UsIGVsc2UgcmVtYXRjaClcbiAgICAgIGxldCBmaWx0ZXJTY2hlbWE6IGFueTtcbiAgICAgIC8qKiBDb2xsZWN0IGRlZXBlc3QgcXVlcnkgc2NoZW1hIGZyb20gcm91dGUgY2hhaW4gKi9cbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RTY2hlbWEocm91dGVzQXJyOiBhbnlbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAocm91dGVzQXJyID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGVzQXJyKSB7XG4gICAgICAgICAgbGV0IG1heWJlRjogdW5rbm93bjtcbiAgICAgICAgICBjb25zdCBvYmogPSByIGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgcXVlcnlTY2hlbWE/OiB1bmtub3duO1xuICAgICAgICAgICAgZmlsdGVyU2NoZW1hPzogdW5rbm93bjtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChvYmoucXVlcnlTY2hlbWEgIT0gbnVsbCkgbWF5YmVGID0gb2JqLnF1ZXJ5U2NoZW1hO1xuICAgICAgICAgIGVsc2UgaWYgKG9iai5maWx0ZXJTY2hlbWEgIT0gbnVsbCkgbWF5YmVGID0gb2JqLmZpbHRlclNjaGVtYTtcbiAgICAgICAgICBpZiAobWF5YmVGICE9IG51bGwpIGNvbGxlY3RlZC5wdXNoKG1heWJlRik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVyU2NoZW1hID0gY29sbGVjdGVkLmF0KC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWx3YXlzIGF0dGVtcHQgZnVsbCBtYXRjaCBmb3IgZGVzdGluYXRpb24gdG8gZW5zdXJlIHNjaGVtYSBwcmVzZW50IGV2ZW4gaWYgc2FtZSBwYXRobmFtZVxuICAgICAgY29uc3QgZGVzdFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsXG4gICAgICB9KTtcbiAgICAgIGNvbGxlY3RTY2hlbWEoZGVzdFJvdXRlPy5yb3V0ZS5yb3V0ZXMpO1xuICAgICAgLy8gRmFsbGJhY2sgdG8gY3VycmVudGx5IGFjdGl2ZSBzY2hlbWEgaWYgZGVzdGluYXRpb24gc2NoZW1hIG5vdCBmb3VuZCAoZS5nLiwgcmFjZSBjb25kaXRpb25zKVxuICAgICAgZmlsdGVyU2NoZW1hID8/PSBjdXJyZW50LmFjdGl2ZVF1ZXJ5U2NoZW1hO1xuICAgICAgY29uc3QgZWZmZWN0aXZlRmlsdGVycyA9IG5hdkZpbHRlcnMgPz8gY3VycmVudC5maWx0ZXJzO1xuICAgICAgLy8gVHJlYXQgbGVnYWN5IG5hdmlnYXRlKHsgcXVlcnkgfSkgYXMgZmlsdGVycyBpbiB1bmlmaWVkIG1vZGVsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmaWx0ZXJzSW5wdXQgPVxuICAgICAgICBlZmZlY3RpdmVGaWx0ZXJzID8/IChxdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgZmlsdGVyczogZmlsdGVyc0lucHV0LFxuICAgICAgICBmaWx0ZXJTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0geyBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsIHNlYXJjaCwgaGFzaDogJycgfTtcbiAgICAgIGlmIChyZXBsYWNlID09PSB0cnVlKSB7XG4gICAgICAgIGhpc3Rvcnkuc2V0KGxvY2F0aW9uT2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpc3RvcnkucHVzaChsb2NhdGlvbk9iaik7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQcmVwYXJlZChwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgLy8gRmluZCBsYXN0IHByZXBhcmVkIHJvdXRlIHdpdGggbWF0Y2hpbmcgcGF0aFxuICAgICAgICBmb3IgKGNvbnN0IHByIG9mIGVudHJ5LnByZXBhcmVkTWF0Y2gucm91dGVzKSB7XG4gICAgICAgICAgaWYgKHByLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBwci5wcmVwYXJlZCBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGdldFR5cGVkUXVlcnkgcmVtb3ZlZFxuICB9O1xuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIC8vIERldnRvb2xzIGV4cG9zdXJlIChkZXZlbG9wbWVudCBvbmx5KVxuICBpZiAoZGV2dG9vbHNHbG9iYWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IF9fUExVTUlMRV9ST1VURVJfXz86IGFueSB9KS5fX1BMVU1JTEVfUk9VVEVSX18gPVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldDogY29udGV4dC5nZXQsXG4gICAgICAgICAgICBzdWJzY3JpYmU6IGNvbnRleHQuc3Vic2NyaWJlLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgLy8gT3B0aW9uYWwgaW4tcGFnZSBkZXZ0b29scyBwYW5lbCAobGlnaHR3ZWlnaHQgb3ZlcmxheSlcbiAgaWYgKGRldnRvb2xzUGFuZWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsXScpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhvc3Quc2V0QXR0cmlidXRlKCdkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsJywgJycpO1xuICAgICAgICBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSAnMjE0NzQ4MzY0Nic7XG4gICAgICAgIGhvc3Quc3R5bGUuYm90dG9tID0gJzhweCc7XG4gICAgICAgIGhvc3Quc3R5bGUucmlnaHQgPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICAgICAndWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIG1vbm9zcGFjZSc7XG4gICAgICAgIGhvc3Quc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgICAgIGhvc3Quc3R5bGUubGluZUhlaWdodCA9ICcxLjMnO1xuICAgICAgICBob3N0LnN0eWxlLmNvbG9yID0gJyMxMTEnO1xuICAgICAgICBob3N0LnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBob3N0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHNoYWRvdyA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYW5lbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcyNjBweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJzQyMHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzZweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJveFNoYWRvdyA9ICcwIDJweCA4cHggcmdiYSgwLDAsMCwwLjE1KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBhZGRpbmcgPSAnNnB4IDhweCA4cHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDRweCknO1xuICAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHBhbmVsLnN0eWxlLnJvd0dhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGhlYWRlci5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgICAgIGhlYWRlci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmdhcCA9ICc4cHgnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSAnUGx1bWlsZSBSb3V0ZXInO1xuICAgICAgICB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgYnV0dG9ucy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBidXR0b25zLnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBjb2xsYXBzZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjbG9zZUJ0bi50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgICAgIGNvbnN0IGJ0bnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbY29sbGFwc2VCdG4sIGNsb3NlQnRuXTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJ0bnMpIHtcbiAgICAgICAgICBiLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSAnI2VlZSc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICAgIGIuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgYi5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgICBiLnN0eWxlLmxpbmVIZWlnaHQgPSAnMSc7XG4gICAgICAgICAgYi5zdHlsZS5wYWRkaW5nID0gJzJweCA1cHgnO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh0aXRsZSk7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY29sbGFwc2VCdG4pO1xuICAgICAgICBidXR0b25zLmFwcGVuZENoaWxkKGNsb3NlQnRuKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcGF0aEVsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICAgICAgY29uc3QgdmFyc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gdHlwZWQgcXVlcnkgZWxlbWVudCByZW1vdmVkXG4gICAgICAgIGNvbnN0IGZpbHRlcnNFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCBmaWx0ZXJEaWFnRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gVGltZWxpbmUgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IHRpbWVsaW5lV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmdhcCA9ICcycHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUubWFyZ2luVG9wID0gJzRweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnRleHRDb250ZW50ID0gJ1RpbWVsaW5lIChxdWVyeSBjaGFuZ2VzKSc7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICAgICAgdGltZWxpbmVIZWFkZXIuc3R5bGUuZm9udFNpemUgPSAnMTFweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uLXJldmVyc2UnOyAvLyBuZXdlc3Qgb24gdG9wIHZpc3VhbGx5IHdoaWxlIGFwcGVuZGluZyBhdCBlbmQgZm9yIGNoZWFwZXIgb3BzXG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm1heEhlaWdodCA9ICcxNDBweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm92ZXJmbG93WSA9ICdhdXRvJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZhZmJmYyc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRGYW1pbHkgPSAnaW5oZXJpdCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmVIZWFkZXIpO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmUpO1xuICAgICAgICBjb25zdCBwcmVzOiBIVE1MUHJlRWxlbWVudFtdID0gW1xuICAgICAgICAgIHZhcnNFbCxcbiAgICAgICAgICBxdWVyeUVsLFxuICAgICAgICAgIGZpbHRlcnNFbCxcbiAgICAgICAgICBmaWx0ZXJEaWFnRWwsXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcmVzKSB7XG4gICAgICAgICAgcC5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gICAgICAgICAgcC5zdHlsZS5wYWRkaW5nID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY4ZmEnO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgICBwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICAgIHAuc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgIHAuc3R5bGUubWF4SGVpZ2h0ID0gJzE2MHB4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbWFsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzbWFsbC5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgc21hbGwuc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuICAgICAgICBzbWFsbC50ZXh0Q29udGVudCA9IGBTaG9ydGN1dDogJHtkZXZ0b29sc1Nob3J0Y3V0fWA7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHBhdGhFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHZhcnNFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHF1ZXJ5RWwpO1xuICAgICAgICAvLyB0eXBlZEVsIHJlbW92ZWRcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQodGltZWxpbmVXcmFwKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyc0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyRGlhZ0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoc21hbGwpO1xuICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgICAgICBsZXQgY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzI0cHgnO1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJysnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHVuc3ViOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB1bnN1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdW5zdWIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgZnJvbSBjdXJyZW50IHJvdXRlIGVudHJ5ICovXG4gICAgICAgIC8vIEtlZXAgbGFzdCBxdWVyeSBzbmFwc2hvdCBmb3IgZGlmZlxuICAgICAgICBsZXQgbGFzdFF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGxhc3RTZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGUgZGlmZiBjbGFzc2lmaWNhdGlvbiBiZXR3ZWVuIHR3byBxdWVyeSBvYmplY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGlmZlF1ZXJpZXMoXG4gICAgICAgICAgcHJldjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgICAgICAgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICk6IHtcbiAgICAgICAgICBhZGRlZDogc3RyaW5nW107XG4gICAgICAgICAgcmVtb3ZlZDogc3RyaW5nW107XG4gICAgICAgICAgY2hhbmdlZDogc3RyaW5nW107XG4gICAgICAgICAgdW5jaGFuZ2VkOiBzdHJpbmdbXTtcbiAgICAgICAgfSB7XG4gICAgICAgICAgY29uc3QgYWRkZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHVuY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBwcmV2S2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocHJldiA/PyB7fSkpO1xuICAgICAgICAgIGNvbnN0IG5leHRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhuZXh0KSk7XG4gICAgICAgICAgbmV4dEtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmV2S2V5cy5oYXMoaykpIHtcbiAgICAgICAgICAgICAgYWRkZWQucHVzaChrKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHB2OiB1bmtub3duO1xuICAgICAgICAgICAgaWYgKHByZXYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBwcmV2IGlzIGEgcGxhaW4gcmVjb3JkOyBkaXJlY3QgaW5kZXggKHJ1bnRpbWUgc2FmZSlcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgICBwdiA9IChwcmV2IGFzIGFueSlba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBudiA9IG5leHRba107XG4gICAgICAgICAgICBsZXQgc2FtZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHYpICYmIEFycmF5LmlzQXJyYXkobnYpKSB7XG4gICAgICAgICAgICAgIGlmIChwdi5sZW5ndGggPT09IChudiBhcyB1bmtub3duW10pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNhbWUgPSBwdi5ldmVyeSgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IChudiBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYW1lID0gcHYgPT09IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbWUpIHtcbiAgICAgICAgICAgICAgdW5jaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2S2V5cy5kZWxldGUoayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJldktleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGspO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IGFkZGVkLCByZW1vdmVkLCBjaGFuZ2VkLCB1bmNoYW5nZWQgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgYW5kIG1heWJlIHB1c2ggdGltZWxpbmUgZW50cnkgKi9cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCk6IHZvaWQge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNvbnRleHQuZ2V0KCk7XG4gICAgICAgICAgICBwYXRoRWwudGV4dENvbnRlbnQgPSBgJHtlbnRyeS5sb2NhdGlvbi5wYXRobmFtZX0ke2VudHJ5LmxvY2F0aW9uLnNlYXJjaH1gO1xuICAgICAgICAgICAgY29uc3QgdmFyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5yb3V0ZT8ucGFyYW1zID8/IHt9LCBudWxsLCAyKTtcbiAgICAgICAgICAgIHZhcnNFbC50ZXh0Q29udGVudCA9IGB2YXJzOiAke3ZhcnNKc29ufWA7XG4gICAgICAgICAgICBjb25zdCByYXdKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkucXVlcnksIG51bGwsIDIpO1xuICAgICAgICAgICAgcXVlcnlFbC50ZXh0Q29udGVudCA9IGByYXc6ICAke3Jhd0pzb259YDtcbiAgICAgICAgICAgIC8vIHR5cGVkIHF1ZXJ5IHJlbW92ZWRcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnNKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkuZmlsdGVycywgbnVsbCwgMik7XG4gICAgICAgICAgICBmaWx0ZXJzRWwudGV4dENvbnRlbnQgPSBgZmlsdGVyczoke2ZpbHRlcnNKc29ufWA7XG4gICAgICAgICAgICBjb25zdCBkaWFnID0gZW50cnkuZmlsdGVyRGlhZ25vc3RpY3MgPz8gW107XG4gICAgICAgICAgICBmaWx0ZXJEaWFnRWwudGV4dENvbnRlbnQgPSBgZmlsdGVyRGlhZ25vc3RpY3M6ICR7ZGlhZy5sZW5ndGh9YDtcbiAgICAgICAgICAgIC8vIFRpbWVsaW5lIGxvZyBpZiBxdWVyeSBzZWFyY2ggY2hhbmdlZFxuICAgICAgICAgICAgaWYgKGVudHJ5LnJhd1NlYXJjaCAhPT0gbGFzdFNlYXJjaCkge1xuICAgICAgICAgICAgICBjb25zdCBub3dRdWVyeSA9IGVudHJ5LnF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgICBjb25zdCBkaWZmID0gZGlmZlF1ZXJpZXMobGFzdFF1ZXJ5LCBub3dRdWVyeSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgI2U5ZTllOSc7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5wYWRkaW5nID0gJzNweCA0cHgnO1xuICAgICAgICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGhlYWQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgaGVhZC5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgICAgICAgY29uc3QgdHMgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICAgICAgICAgICAgICBsZXQgc2VhcmNoRGlzcGxheSA9ICcoZW1wdHkpJztcbiAgICAgICAgICAgICAgaWYgKGVudHJ5LmxvY2F0aW9uLnNlYXJjaCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hEaXNwbGF5ID0gZW50cnkubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGhlYWQuaW5uZXJIVE1MID0gYDxzdHJvbmc+JHt0c308L3N0cm9uZz4gPGNvZGUgc3R5bGU9XCJiYWNrZ3JvdW5kOiNlZWU7cGFkZGluZzoxcHggM3B4O2JvcmRlci1yYWRpdXM6M3B4O1wiPiR7c2VhcmNoRGlzcGxheX08L2NvZGU+YDtcbiAgICAgICAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZmxleFdyYXAgPSAnd3JhcCc7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZ2FwID0gJzRweCc7XG4gICAgICAgICAgICAgIC8qKiBDcmVhdGUgYSBjb2xvcmVkIHBpbGwgZWxlbWVudCAqL1xuICAgICAgICAgICAgICBmdW5jdGlvbiBwaWxsKFxuICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAga2luZDogJ2FkZGVkJyB8ICdyZW1vdmVkJyB8ICdjaGFuZ2VkJyB8ICd1bmNoYW5nZWQnLFxuICAgICAgICAgICAgICApOiBIVE1MU3BhbkVsZW1lbnQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGxhYmVsO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUucGFkZGluZyA9ICcxcHggNHB4JztcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMHB4JztcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCc7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZTZmZmVkJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjMmNiZTRlJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjMjI4NjNhJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmVlZjAnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyNkNzNhNDknO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyNjYjI0MzEnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2NoYW5nZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZjViMSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2ZmZDMzZCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzczNWMwZic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAndW5jaGFuZ2VkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmMWY4ZmYnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyM3OWI4ZmYnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyMwMzY2ZDYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBleGhhdXN0aXZlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzcGFuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYuYWRkZWQubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaWxsKGArJHtrfWAsICdhZGRlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5jaGFuZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYuY2hhbmdlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYH4ke2t9YCwgJ2NoYW5nZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAuLi5kaWZmLnJlbW92ZWQubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaWxsKGAtJHtrfWAsICdyZW1vdmVkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG5vQWRkcyA9IGRpZmYuYWRkZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBjb25zdCBub0NoYW5nZXMgPSBkaWZmLmNoYW5nZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBjb25zdCBub1JlbW92YWxzID0gZGlmZi5yZW1vdmVkLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgaWYgKG5vQWRkcyAmJiBub0NoYW5nZXMgJiYgbm9SZW1vdmFscykge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKHBpbGwoJ25vLWNoYW5nZScsICd1bmNoYW5nZWQnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWQpO1xuICAgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoYm9keSk7XG4gICAgICAgICAgICAgIHRpbWVsaW5lLmFwcGVuZENoaWxkKHJvdyk7XG4gICAgICAgICAgICAgIGlmICh0aW1lbGluZS5jaGlsZEVsZW1lbnRDb3VudCA+IDUwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSB0aW1lbGluZS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgdGltZWxpbmUucmVtb3ZlQ2hpbGQoZmlyc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0UXVlcnkgPSBub3dRdWVyeTtcbiAgICAgICAgICAgICAgbGFzdFNlYXJjaCA9IGVudHJ5LnJhd1NlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgdW5zdWIgPSBjb250ZXh0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldikgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChldi5hbHRLZXkpIHBhcnRzLnB1c2goJ0FsdCcpO1xuICAgICAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSBwYXJ0cy5wdXNoKCdTaGlmdCcpO1xuICAgICAgICAgICAgaWYgKGV2LmN0cmxLZXkpIHBhcnRzLnB1c2goJ0N0cmwnKTtcbiAgICAgICAgICAgIGxldCBrZXlQYXJ0ID0gZXYua2V5O1xuICAgICAgICAgICAgaWYgKGV2LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAga2V5UGFydCA9IGV2LmtleS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHMucHVzaChrZXlQYXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbWJvID0gcGFydHMuam9pbignKycpO1xuICAgICAgICAgICAgaWYgKGNvbWJvID09PSBkZXZ0b29sc1Nob3J0Y3V0LnJlcGxhY2UoL1xccysvZywgJycpKSB7XG4gICAgICAgICAgICAgIGlmIChob3N0LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGhvc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvKiBpZ25vcmUgKi9cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogaWdub3JlICovXG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNsZWFudXAsIGNvbnRleHQgfSBhcyBDcmVhdGVSb3V0ZXJSZXR1cm48YW55Pjtcbn1cbiJdfQ==
614
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF1RDlELE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUNsQyxNQUEyQixFQUMzQixPQUlJLEVBQUU7SUFHTixJQUFJLGNBQXVCLENBQUM7SUFDNUIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUksZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxPQUFPLENBQ0wsT0FBTyxPQUFPLEtBQUssV0FBVztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUN0QyxDQUFDO1lBQ0osQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUNyRCxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FB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QUFPOzRCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ25DLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7d0JBQ3JCLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7NEJBQ3hCLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNqQyxDQUFDO3dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3BCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzlCLElBQUksS0FBSyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQzs0QkFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztnQ0FDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOzRCQUMvQixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOzRCQUM5QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFBQyxNQUFNLENBQUM7b0JBRVQsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBNkIsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRSb3V0ZXMgfSBmcm9tICcuLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCB7IHBhcnNlUmF3UXVlcnkgfSBmcm9tICcuLi90b29scy9xdWVyeS5qcyc7XG5pbXBvcnQgYnVpbGRDb21iaW5lZFNlYXJjaCBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQgdHlwZSB7XG4gIFJvdXRlRW50cnksXG4gIFJvdXRpbmdDb250ZXh0VHlwZSxcbiAgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIEFueVJvdXRlLFxuICBQcmVwYXJlZEFjY2VzcyxcbiAgTmF2aWdhdGVPdmVybG9hZHMsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmIFByZXBhcmVkQWNjZXNzPFI+O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPihcbiAgcm91dGVzOiBbLi4uUl0gfCBBbnlSb3V0ZVtdLFxuICBvcHRzOiB7XG4gICAgZGV2dG9vbHM/OlxuICAgICAgfCBib29sZWFuXG4gICAgICB8IHsgZ2xvYmFsPzogYm9vbGVhbjsgcGFuZWw/OiBib29sZWFuOyBzaG9ydGN1dD86IHN0cmluZyB9O1xuICB9ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48UiBleHRlbmRzIEFueVJvdXRlW10gPyBSIDogQW55Um91dGVbXT4ge1xuICAvLyBOb3JtYWxpemUgZGV2dG9vbHMgb3B0aW9ucyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBsZXQgZGV2dG9vbHNHbG9iYWw6IGJvb2xlYW47XG4gIGxldCBkZXZ0b29sc1BhbmVsID0gZmFsc2U7XG4gIGxldCBkZXZ0b29sc1Nob3J0Y3V0ID0gJ0FsdCtTaGlmdCtSJztcbiAgaWYgKHR5cGVvZiBvcHRzLmRldnRvb2xzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGJhc2VFbmFibGVkID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGRldnRvb2xzR2xvYmFsID0gb3B0cy5kZXZ0b29scy5nbG9iYWwgPz8gYmFzZUVuYWJsZWQ7XG4gICAgZGV2dG9vbHNQYW5lbCA9ICEhb3B0cy5kZXZ0b29scy5wYW5lbDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0cy5kZXZ0b29scy5zaG9ydGN1dCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQudHJpbSgpICE9PSAnJ1xuICAgICkge1xuICAgICAgZGV2dG9vbHNTaG9ydGN1dCA9IG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gICAgY29uc3QgZW5hYmxlZCA9ICgoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZGV2dG9vbHMgPT09ICdib29sZWFuJykgcmV0dXJuIG9wdHMuZGV2dG9vbHM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBkZXZ0b29sc0dsb2JhbCA9IGVuYWJsZWQ7XG4gIH1cbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGlyZWN0IHNjaGVtYTogb25seSB0aGUgbWF0Y2hlZCByb3V0ZSdzIG93biBxdWVyeVNjaGVtYSAobm8gaGllcmFyY2hpY2FsIGRpc2NvdmVyeSlcbiAgbGV0IGluaXRpYWxVbmlmaWVkU2NoZW1hOiBhbnk7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgY29uc3QgbGFzdCA9IHJvdXRlLnJvdXRlLnJvdXRlcy5hdCgtMSkgYXMgdW5rbm93biBhcyB7XG4gICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgfSB8IG51bGw7XG4gICAgaWYgKGxhc3QgIT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgPSBsYXN0LnF1ZXJ5U2NoZW1hO1xuICAgIH1cbiAgfVxuICBsZXQgaW5pdGlhbEZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZpbHRlcnMoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsIGluaXRpYWxVbmlmaWVkU2NoZW1hKTtcbiAgICBpbml0aWFsRmlsdGVycyA9IHBhcnNlZC5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgfVxuICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKHJvdXRlLCBpbml0aWFsRmlsdGVycyk7XG4gIC8vIEhlbHBlciB0byBidWlsZCB0aGUgcmF3IHF1ZXJ5IG9iamVjdCBmcm9tIGEgc2VhcmNoIHN0cmluZ1xuICBsZXQgY3VycmVudEVudHJ5OiBSb3V0ZUVudHJ5PGFueT4gPSB7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsUmF3UXVlcnksXG4gICAgLy8gdHlwZWRRdWVyeSByZW1vdmVkICh1bmlmaWVkIGludG8gZmlsdGVycy9xdWVyeSlcbiAgICBmaWx0ZXJzOiBpbml0aWFsRmlsdGVycyxcbiAgICBmaWx0ZXJEaWFnbm9zdGljczogaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzLFxuICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgfTtcblxuICAvLyBJbml0aWFsIG5vcm1hbGl6YXRpb24gcGFzcyAoZS5nLiwgY2xhbXAgcGFnZSlcbiAgY29uc3QgaW5pdFR5cGVkID0gY3VycmVudEVudHJ5LmZpbHRlcnMgYXMgdW5rbm93biBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRQYWdlTnVtZXJpYzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5pdFR5cGVkICE9IG51bGwpIHtcbiAgICBjb25zdCByYXdQYWdlID0gaW5pdFR5cGVkLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiByYXdQYWdlID09PSAnbnVtYmVyJykgaW5pdFBhZ2VOdW1lcmljID0gcmF3UGFnZTtcbiAgICBlbHNlIGlmIChcbiAgICAgIHJhd1BhZ2UgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHJhd1BhZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShyYXdQYWdlKSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhd1BhZ2UsICdlcScpICYmXG4gICAgICB0eXBlb2YgKHJhd1BhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgaW5pdFBhZ2VOdW1lcmljID0gKHJhd1BhZ2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxIGFzIG51bWJlcjtcbiAgICB9XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBpbml0UGFnZU51bWVyaWMgPT09ICdudW1iZXInICYmXG4gICAgaW5pdFBhZ2VOdW1lcmljIDwgMSAmJlxuICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwgJiZcbiAgICBpbml0VHlwZWQgIT0gbnVsbFxuICApIHtcbiAgICBjb25zdCBub3JtID0geyAuLi5pbml0VHlwZWQsIHBhZ2U6IHsgZXE6IDEgfSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGN1cnJlbnRFbnRyeS5maWx0ZXJzID0gbm9ybTsgLy8gaW1tZWRpYXRlIHZpc2liaWxpdHlcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICBmaWx0ZXJzOiBub3JtLFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgIH0pO1xuICAgICAgLy8gVXBkYXRlIGN1cnJlbnRFbnRyeS5sb2NhdGlvbiB0byByZWZsZWN0IG5ldyBzZWFyY2ggZGlyZWN0bHkgKGhpc3Rvcnkuc2V0IHRyaWdnZXJzIGFzeW5jIHN1YnNjcmliZXIpXG4gICAgICBjdXJyZW50RW50cnkgPSB7XG4gICAgICAgIC4uLmN1cnJlbnRFbnRyeSxcbiAgICAgICAgbG9jYXRpb246IHsgLi4uY3VycmVudEVudHJ5LmxvY2F0aW9uLCBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2ggfSxcbiAgICAgICAgcmF3U2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBNYWludGFpbiBhIHNldCBvZiBzdWJzY3JpYmVycyB0byB0aGUgYWN0aXZlIHJvdXRlIGVudHJ5XG4gIGxldCBuZXh0SWQgPSAwO1xuICBjb25zdCBzdWJzY3JpYmVycyA9IG5ldyBNYXA8bnVtYmVyLCBTdWJzY3JpYmVDYWxsYmFjazxhbnk+PigpO1xuXG4gIC8vIExpc3RlbiBmb3IgbG9jYXRpb24gY2hhbmdlcywgbWF0Y2ggdG8gdGhlIHJvdXRlIGVudHJ5LCBwcmVwYXJlIHRoZSBlbnRyeSxcbiAgLy8gYW5kIG5vdGlmeSBzdWJzY3JpYmVycy4gVGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgY2xlYW51cCA9IGhpc3Rvcnkuc3Vic2NyaWJlKChsb2NhdGlvbiwgZm9yY2VSZXJlbmRlcikgPT4ge1xuICAgIGNvbnN0IHNhbWVQYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lID09PSBjdXJyZW50RW50cnkubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgY29uc3Qgc2FtZVNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCA9PT0gY3VycmVudEVudHJ5LnJhd1NlYXJjaDtcblxuICAgIGlmICghZm9yY2VSZXJlbmRlciAmJiBzYW1lUGF0aG5hbWUgJiYgc2FtZVNlYXJjaCkge1xuICAgICAgLy8gTm90aGluZyBjaGFuZ2VkIHRoYXQgd2UgY2FyZSBhYm91dFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIHdlIHN0aWxsIHdhbnQgdG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2UuXG4gICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICBsZXQgbmV4dFByZXBhcmVkTWF0Y2ggPSBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaDtcbiAgICBsZXQgbmV4dFJvdXRlID0gY3VycmVudEVudHJ5LnJvdXRlO1xuXG4gICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgIC8vIFBhdGggY2hhbmdlZDogcmVjb21wdXRlIG1hdGNoICsgcHJlcGFyZWQgZGF0YSBpbmNsdWRpbmcgcXVlcnlcbiAgICAgIG5leHRSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICAgIC8vIHdlIHdpbGwgc2V0IGJlbG93IGFmdGVyIGNvbXB1dGluZyB0eXBlZCBxdWVyeVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJhdyBxdWVyeSBvYmplY3QgKGJhc2ljIGFnZ3JlZ2F0aW9uKSBmcm9tIGxvY2F0aW9uLnNlYXJjaFxuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyc2VSYXdRdWVyeShsb2NhdGlvbi5zZWFyY2gpO1xuICAgIC8vIERldGVybWluZSBzY2hlbWEgZnJvbSBkZWVwZXN0IG1hdGNoZWQgcm91dGVcbiAgICBsZXQgcXVlcnlTY2hlbWE6IGFueTtcbiAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGxhc3QgPSBuZXh0Um91dGUucm91dGUucm91dGVzLmF0KC0xKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgcXVlcnlTY2hlbWE/OiB1bmtub3duO1xuICAgICAgfSB8IG51bGw7XG4gICAgICBpZiAobGFzdCAhPSBudWxsKSB7XG4gICAgICAgIHF1ZXJ5U2NoZW1hID0gbGFzdC5xdWVyeVNjaGVtYTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgdW5pZmllZCBmaWx0ZXJzXG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBmaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHF1ZXJ5U2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBxdWVyeVNjaGVtYSk7XG4gICAgICBmaWx0ZXJzID0gcGFyc2VkRi5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyA9IHBhcnNlZEYuZGlhZ25vc3RpY3MgYXMgdW5rbm93bltdO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemF0aW9uOiBjbGFtcCBwYWdlID49IDEgaWYgbnVtZXJpYyBwYWdlIHByZXNlbnRcbiAgICBsZXQgbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgIGxldCBwZzogdW5rbm93bjtcbiAgICBpZiAoZmlsdGVycyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IGZpbHRlcnM7XG4gICAgICBjb25zdCBtYXliZSA9IGYucGFnZTtcbiAgICAgIGlmIChcbiAgICAgICAgbWF5YmUgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgbWF5YmUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KG1heWJlKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWF5YmUsICdlcScpXG4gICAgICApIHtcbiAgICAgICAgcGcgPSAobWF5YmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGcgPSBtYXliZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwZyA9PT0gJ251bWJlcicgJiYgcGcgPCAxKSB7XG4gICAgICBjb25zdCBjbG9uZSA9IHsgLi4uKGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PiksIHBhZ2U6IHsgZXE6IDEgfSB9O1xuICAgICAgZmlsdGVycyA9IGNsb25lO1xuICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgKHNhbWUgcGF0aG5hbWUpIHdlIHN0aWxsIG5lZWQgdG8gcmUtcnVuIHByZXBhcmVcbiAgICBpZiAoIXNhbWVQYXRobmFtZSB8fCAhc2FtZVNlYXJjaCkge1xuICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobmV4dFJvdXRlLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVFbnRyeTxhbnk+ID0ge1xuICAgICAgZm9yY2VSZXJlbmRlcjogZm9yY2VSZXJlbmRlciB8fCAoc2FtZVBhdGhuYW1lICYmICFzYW1lU2VhcmNoKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgIHByZXBhcmVkTWF0Y2g6IG5leHRQcmVwYXJlZE1hdGNoLFxuICAgICAgcmF3U2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBxdWVyeVNjaGVtYSxcbiAgICB9O1xuXG4gICAgLy8gSWYgbm9ybWFsaXphdGlvbiBjaGFuZ2VkIHRoZSB0eXBlZCBxdWVyeSB3ZSB0cmlnZ2VyIGEgcmVwbGFjZSB3aXRoIG5vcm1hbGl6ZWQgc2VhcmNoXG4gICAgaWYgKG5vcm1hbGl6ZWQgJiYgcXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBxdWVyeVNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICBsZXQgbmV4dFNlYXJjaFN0ciA9IG5vcm1hbGl6ZWRTZWFyY2g7XG4gICAgICAgIGlmICghbmV4dFNlYXJjaFN0ci5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgICBpZiAobmV4dFNlYXJjaFN0ciA9PT0gJycpIG5leHRTZWFyY2hTdHIgPSAnJztcbiAgICAgICAgICBlbHNlIG5leHRTZWFyY2hTdHIgPSBgPyR7bmV4dFNlYXJjaFN0cn1gO1xuICAgICAgICB9XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBlYXJseTogc3Vic2VxdWVudCBzZXQgd2lsbCB0cmlnZ2VyIHJlcnVuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnJlbnQgZW50cnkgYW5kIG5vdGlmeSBhbGwgc3Vic2NyaWJlcnNcbiAgICBjdXJyZW50RW50cnkgPSBuZXh0RW50cnk7XG4gICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgIGNhbGxiYWNrKG5leHRFbnRyeSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+ICZcbiAgICBQcmVwYXJlZEFjY2VzczxBbnlSb3V0ZVtdPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxBbnlSb3V0ZVtdPjtcbiAgICB9ID0ge1xuICAgIGhpc3RvcnksXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICB9LFxuICAgIHByZWxvYWRDb2RlKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGp1c3QgdGhlIGNvbXBvbmVudCBjb2RlIGZvciBhIHJvdXRlIHdpdGhvdXQgc3RvcmluZyB0aGUgcmVzdWx0XG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCBhbGwgcmVzb3VyY2UgcGFnZXMgZm9yIHRoZSBtYXRjaGVkIHJvdXRlXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQocGF0aG5hbWUpIHtcbiAgICAgIC8vIFByZWxvYWQgYm90aCB0aGUgY29tcG9uZW50IGNvZGUgYW5kIHByZXBhcmVkIGRhdGEgZm9yIGEgcm91dGVcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBwcmVwYXJlTWF0Y2gobWF0Y2hlcyk7XG4gICAgfSxcbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBzdWJzY3JpYmVyIGFuZCByZXR1cm4gdW5zdWJzY3JpYmUgZnVuY3Rpb25cbiAgICAgIG5leHRJZCArPSAxO1xuICAgICAgY29uc3QgaWQgPSBuZXh0SWQ7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1zdHlsZVxuICAgICAgY29uc3QgZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcnMuZGVsZXRlKGlkKTtcbiAgICAgIH07XG4gICAgICBzdWJzY3JpYmVycy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBkaXNwb3NlO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoeyBwYXRobmFtZSwgcXVlcnksIGZpbHRlcnM6IG5hdkZpbHRlcnMsIHJlcGxhY2UgfTogYW55KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY3VycmVudEVudHJ5O1xuICAgICAgY29uc3QgdGFyZ2V0UGF0aG5hbWUgPSBwYXRobmFtZSA/PyBjdXJyZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBvZiBkZXN0aW5hdGlvbiAoaWYgc2FtZSBwYXRoIGFuZCB3ZSBoYXZlIHJvdXRlIHdlIGNhbiByZXVzZSwgZWxzZSByZW1hdGNoKVxuICAgICAgbGV0IGRlc3RTY2hlbWE6IGFueTtcbiAgICAgIC8vIEFsd2F5cyBhdHRlbXB0IGZ1bGwgbWF0Y2ggZm9yIGRlc3RpbmF0aW9uIHRvIGVuc3VyZSBzY2hlbWEgcHJlc2VudCBldmVuIGlmIHNhbWUgcGF0aG5hbWVcbiAgICAgIGNvbnN0IGRlc3RSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBpZiAoZGVzdFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IGRlc3RSb3V0ZS5yb3V0ZS5yb3V0ZXMuYXQoLTEpIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIHF1ZXJ5U2NoZW1hPzogdW5rbm93bjtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICAgIGlmIChsYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICBkZXN0U2NoZW1hID0gbGFzdC5xdWVyeVNjaGVtYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRmFsbGJhY2sgdG8gY3VycmVudGx5IGFjdGl2ZSBzY2hlbWEgaWYgZGVzdGluYXRpb24gc2NoZW1hIG5vdCBmb3VuZCAoZS5nLiwgcmFjZSBjb25kaXRpb25zKVxuICAgICAgZGVzdFNjaGVtYSA/Pz0gY3VycmVudC5hY3RpdmVRdWVyeVNjaGVtYTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcnMgPSBuYXZGaWx0ZXJzID8/IGN1cnJlbnQuZmlsdGVycztcbiAgICAgIC8vIFRyZWF0IGxlZ2FjeSBuYXZpZ2F0ZSh7IHF1ZXJ5IH0pIGFzIGZpbHRlcnMgaW4gdW5pZmllZCBtb2RlbCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgY29uc3QgZmlsdGVyc0lucHV0ID1cbiAgICAgICAgZWZmZWN0aXZlRmlsdGVycyA/PyAocXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgc2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IGRlc3RTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0geyBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsIHNlYXJjaCwgaGFzaDogJycgfTtcbiAgICAgIGlmIChyZXBsYWNlID09PSB0cnVlKSB7XG4gICAgICAgIGhpc3Rvcnkuc2V0KGxvY2F0aW9uT2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpc3RvcnkucHVzaChsb2NhdGlvbk9iaik7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQcmVwYXJlZChwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgLy8gRmluZCBsYXN0IHByZXBhcmVkIHJvdXRlIHdpdGggbWF0Y2hpbmcgcGF0aFxuICAgICAgICBmb3IgKGNvbnN0IHByIG9mIGVudHJ5LnByZXBhcmVkTWF0Y2gucm91dGVzKSB7XG4gICAgICAgICAgaWYgKHByLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBwci5wcmVwYXJlZCBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGdldFR5cGVkUXVlcnkgcmVtb3ZlZFxuICB9O1xuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIC8vIERldnRvb2xzIGV4cG9zdXJlIChkZXZlbG9wbWVudCBvbmx5KVxuICBpZiAoZGV2dG9vbHNHbG9iYWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IF9fUExVTUlMRV9ST1VURVJfXz86IGFueSB9KS5fX1BMVU1JTEVfUk9VVEVSX18gPVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldDogY29udGV4dC5nZXQsXG4gICAgICAgICAgICBzdWJzY3JpYmU6IGNvbnRleHQuc3Vic2NyaWJlLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgLy8gT3B0aW9uYWwgaW4tcGFnZSBkZXZ0b29scyBwYW5lbCAobGlnaHR3ZWlnaHQgb3ZlcmxheSlcbiAgaWYgKGRldnRvb2xzUGFuZWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsXScpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhvc3Quc2V0QXR0cmlidXRlKCdkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsJywgJycpO1xuICAgICAgICBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSAnMjE0NzQ4MzY0Nic7XG4gICAgICAgIGhvc3Quc3R5bGUuYm90dG9tID0gJzhweCc7XG4gICAgICAgIGhvc3Quc3R5bGUucmlnaHQgPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICAgICAndWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIG1vbm9zcGFjZSc7XG4gICAgICAgIGhvc3Quc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgICAgIGhvc3Quc3R5bGUubGluZUhlaWdodCA9ICcxLjMnO1xuICAgICAgICBob3N0LnN0eWxlLmNvbG9yID0gJyMxMTEnO1xuICAgICAgICBob3N0LnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBob3N0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHNoYWRvdyA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYW5lbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcyNjBweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJzQyMHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzZweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJveFNoYWRvdyA9ICcwIDJweCA4cHggcmdiYSgwLDAsMCwwLjE1KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBhZGRpbmcgPSAnNnB4IDhweCA4cHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDRweCknO1xuICAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHBhbmVsLnN0eWxlLnJvd0dhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGhlYWRlci5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgICAgIGhlYWRlci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmdhcCA9ICc4cHgnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSAnUGx1bWlsZSBSb3V0ZXInO1xuICAgICAgICB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgYnV0dG9ucy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBidXR0b25zLnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBjb2xsYXBzZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjbG9zZUJ0bi50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgICAgIGNvbnN0IGJ0bnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbY29sbGFwc2VCdG4sIGNsb3NlQnRuXTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJ0bnMpIHtcbiAgICAgICAgICBiLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSAnI2VlZSc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICAgIGIuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgYi5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgICBiLnN0eWxlLmxpbmVIZWlnaHQgPSAnMSc7XG4gICAgICAgICAgYi5zdHlsZS5wYWRkaW5nID0gJzJweCA1cHgnO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh0aXRsZSk7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY29sbGFwc2VCdG4pO1xuICAgICAgICBidXR0b25zLmFwcGVuZENoaWxkKGNsb3NlQnRuKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcGF0aEVsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICAgICAgY29uc3QgdmFyc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gdHlwZWQgcXVlcnkgZWxlbWVudCByZW1vdmVkXG4gICAgICAgIGNvbnN0IGZpbHRlcnNFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCBmaWx0ZXJEaWFnRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gVGltZWxpbmUgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IHRpbWVsaW5lV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmdhcCA9ICcycHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUubWFyZ2luVG9wID0gJzRweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnRleHRDb250ZW50ID0gJ1RpbWVsaW5lIChxdWVyeSBjaGFuZ2VzKSc7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICAgICAgdGltZWxpbmVIZWFkZXIuc3R5bGUuZm9udFNpemUgPSAnMTFweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uLXJldmVyc2UnOyAvLyBuZXdlc3Qgb24gdG9wIHZpc3VhbGx5IHdoaWxlIGFwcGVuZGluZyBhdCBlbmQgZm9yIGNoZWFwZXIgb3BzXG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm1heEhlaWdodCA9ICcxNDBweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm92ZXJmbG93WSA9ICdhdXRvJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZhZmJmYyc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRGYW1pbHkgPSAnaW5oZXJpdCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmVIZWFkZXIpO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmUpO1xuICAgICAgICBjb25zdCBwcmVzOiBIVE1MUHJlRWxlbWVudFtdID0gW1xuICAgICAgICAgIHZhcnNFbCxcbiAgICAgICAgICBxdWVyeUVsLFxuICAgICAgICAgIGZpbHRlcnNFbCxcbiAgICAgICAgICBmaWx0ZXJEaWFnRWwsXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcmVzKSB7XG4gICAgICAgICAgcC5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gICAgICAgICAgcC5zdHlsZS5wYWRkaW5nID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY4ZmEnO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgICBwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICAgIHAuc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgIHAuc3R5bGUubWF4SGVpZ2h0ID0gJzE2MHB4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbWFsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzbWFsbC5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgc21hbGwuc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuICAgICAgICBzbWFsbC50ZXh0Q29udGVudCA9IGBTaG9ydGN1dDogJHtkZXZ0b29sc1Nob3J0Y3V0fWA7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHBhdGhFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHZhcnNFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHF1ZXJ5RWwpO1xuICAgICAgICAvLyB0eXBlZEVsIHJlbW92ZWRcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQodGltZWxpbmVXcmFwKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyc0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyRGlhZ0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoc21hbGwpO1xuICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgICAgICBsZXQgY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzI0cHgnO1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJysnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHVuc3ViOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB1bnN1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdW5zdWIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgZnJvbSBjdXJyZW50IHJvdXRlIGVudHJ5ICovXG4gICAgICAgIC8vIEtlZXAgbGFzdCBxdWVyeSBzbmFwc2hvdCBmb3IgZGlmZlxuICAgICAgICBsZXQgbGFzdFF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGxhc3RTZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGUgZGlmZiBjbGFzc2lmaWNhdGlvbiBiZXR3ZWVuIHR3byBxdWVyeSBvYmplY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGlmZlF1ZXJpZXMoXG4gICAgICAgICAgcHJldjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgICAgICAgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICk6IHtcbiAgICAgICAgICBhZGRlZDogc3RyaW5nW107XG4gICAgICAgICAgcmVtb3ZlZDogc3RyaW5nW107XG4gICAgICAgICAgY2hhbmdlZDogc3RyaW5nW107XG4gICAgICAgICAgdW5jaGFuZ2VkOiBzdHJpbmdbXTtcbiAgICAgICAgfSB7XG4gICAgICAgICAgY29uc3QgYWRkZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHVuY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBwcmV2S2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocHJldiA/PyB7fSkpO1xuICAgICAgICAgIGNvbnN0IG5leHRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhuZXh0KSk7XG4gICAgICAgICAgbmV4dEtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmV2S2V5cy5oYXMoaykpIHtcbiAgICAgICAgICAgICAgYWRkZWQucHVzaChrKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHB2OiB1bmtub3duO1xuICAgICAgICAgICAgaWYgKHByZXYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBwcmV2IGlzIGEgcGxhaW4gcmVjb3JkOyBkaXJlY3QgaW5kZXggKHJ1bnRpbWUgc2FmZSlcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgICBwdiA9IChwcmV2IGFzIGFueSlba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBudiA9IG5leHRba107XG4gICAgICAgICAgICBsZXQgc2FtZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHYpICYmIEFycmF5LmlzQXJyYXkobnYpKSB7XG4gICAgICAgICAgICAgIGlmIChwdi5sZW5ndGggPT09IChudiBhcyB1bmtub3duW10pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNhbWUgPSBwdi5ldmVyeSgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IChudiBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYW1lID0gcHYgPT09IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbWUpIHtcbiAgICAgICAgICAgICAgdW5jaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2S2V5cy5kZWxldGUoayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJldktleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGspO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IGFkZGVkLCByZW1vdmVkLCBjaGFuZ2VkLCB1bmNoYW5nZWQgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgYW5kIG1heWJlIHB1c2ggdGltZWxpbmUgZW50cnkgKi9cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCk6IHZvaWQge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNvbnRleHQuZ2V0KCk7XG4gICAgICAgICAgICBwYXRoRWwudGV4dENvbnRlbnQgPSBgJHtlbnRyeS5sb2NhdGlvbi5wYXRobmFtZX0ke2VudHJ5LmxvY2F0aW9uLnNlYXJjaH1gO1xuICAgICAgICAgICAgY29uc3QgdmFyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5yb3V0ZT8ucGFyYW1zID8/IHt9LCBudWxsLCAyKTtcbiAgICAgICAgICAgIHZhcnNFbC50ZXh0Q29udGVudCA9IGB2YXJzOiAke3ZhcnNKc29ufWA7XG4gICAgICAgICAgICBjb25zdCByYXdKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkucXVlcnksIG51bGwsIDIpO1xuICAgICAgICAgICAgcXVlcnlFbC50ZXh0Q29udGVudCA9IGByYXc6ICAke3Jhd0pzb259YDtcbiAgICAgICAgICAgIC8vIHR5cGVkIHF1ZXJ5IHJlbW92ZWRcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnNKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkuZmlsdGVycywgbnVsbCwgMik7XG4gICAgICAgICAgICBmaWx0ZXJzRWwudGV4dENvbnRlbnQgPSBgZmlsdGVyczoke2ZpbHRlcnNKc29ufWA7XG4gICAgICAgICAgICBjb25zdCBkaWFnID0gZW50cnkuZmlsdGVyRGlhZ25vc3RpY3MgPz8gW107XG4gICAgICAgICAgICBmaWx0ZXJEaWFnRWwudGV4dENvbnRlbnQgPSBgZmlsdGVyRGlhZ25vc3RpY3M6ICR7ZGlhZy5sZW5ndGh9YDtcbiAgICAgICAgICAgIC8vIFRpbWVsaW5lIGxvZyBpZiBxdWVyeSBzZWFyY2ggY2hhbmdlZFxuICAgICAgICAgICAgaWYgKGVudHJ5LnJhd1NlYXJjaCAhPT0gbGFzdFNlYXJjaCkge1xuICAgICAgICAgICAgICBjb25zdCBub3dRdWVyeSA9IGVudHJ5LnF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgICBjb25zdCBkaWZmID0gZGlmZlF1ZXJpZXMobGFzdFF1ZXJ5LCBub3dRdWVyeSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLmJvcmRlckJvdHRvbSA9ICcxcHggc29saWQgI2U5ZTllOSc7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5wYWRkaW5nID0gJzNweCA0cHgnO1xuICAgICAgICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGhlYWQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgaGVhZC5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgICAgICAgY29uc3QgdHMgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpO1xuICAgICAgICAgICAgICBsZXQgc2VhcmNoRGlzcGxheSA9ICcoZW1wdHkpJztcbiAgICAgICAgICAgICAgaWYgKGVudHJ5LmxvY2F0aW9uLnNlYXJjaCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hEaXNwbGF5ID0gZW50cnkubG9jYXRpb24uc2VhcmNoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGhlYWQuaW5uZXJIVE1MID0gYDxzdHJvbmc+JHt0c308L3N0cm9uZz4gPGNvZGUgc3R5bGU9XCJiYWNrZ3JvdW5kOiNlZWU7cGFkZGluZzoxcHggM3B4O2JvcmRlci1yYWRpdXM6M3B4O1wiPiR7c2VhcmNoRGlzcGxheX08L2NvZGU+YDtcbiAgICAgICAgICAgICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZmxleFdyYXAgPSAnd3JhcCc7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZ2FwID0gJzRweCc7XG4gICAgICAgICAgICAgIC8qKiBDcmVhdGUgYSBjb2xvcmVkIHBpbGwgZWxlbWVudCAqL1xuICAgICAgICAgICAgICBmdW5jdGlvbiBwaWxsKFxuICAgICAgICAgICAgICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAga2luZDogJ2FkZGVkJyB8ICdyZW1vdmVkJyB8ICdjaGFuZ2VkJyB8ICd1bmNoYW5nZWQnLFxuICAgICAgICAgICAgICApOiBIVE1MU3BhbkVsZW1lbnQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGxhYmVsO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUucGFkZGluZyA9ICcxcHggNHB4JztcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMHB4JztcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCc7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZTZmZmVkJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjMmNiZTRlJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjMjI4NjNhJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmVlZjAnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyNkNzNhNDknO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyNjYjI0MzEnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2NoYW5nZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZjViMSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2ZmZDMzZCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzczNWMwZic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAndW5jaGFuZ2VkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmMWY4ZmYnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyM3OWI4ZmYnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyMwMzY2ZDYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBleGhhdXN0aXZlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzcGFuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYuYWRkZWQubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaWxsKGArJHtrfWAsICdhZGRlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5jaGFuZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYuY2hhbmdlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYH4ke2t9YCwgJ2NoYW5nZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAuLi5kaWZmLnJlbW92ZWQubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaWxsKGAtJHtrfWAsICdyZW1vdmVkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG5vQWRkcyA9IGRpZmYuYWRkZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBjb25zdCBub0NoYW5nZXMgPSBkaWZmLmNoYW5nZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBjb25zdCBub1JlbW92YWxzID0gZGlmZi5yZW1vdmVkLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgaWYgKG5vQWRkcyAmJiBub0NoYW5nZXMgJiYgbm9SZW1vdmFscykge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKHBpbGwoJ25vLWNoYW5nZScsICd1bmNoYW5nZWQnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGhlYWQpO1xuICAgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoYm9keSk7XG4gICAgICAgICAgICAgIHRpbWVsaW5lLmFwcGVuZENoaWxkKHJvdyk7XG4gICAgICAgICAgICAgIGlmICh0aW1lbGluZS5jaGlsZEVsZW1lbnRDb3VudCA+IDUwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSB0aW1lbGluZS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgdGltZWxpbmUucmVtb3ZlQ2hpbGQoZmlyc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0UXVlcnkgPSBub3dRdWVyeTtcbiAgICAgICAgICAgICAgbGFzdFNlYXJjaCA9IGVudHJ5LnJhd1NlYXJjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgdW5zdWIgPSBjb250ZXh0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldikgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChldi5hbHRLZXkpIHBhcnRzLnB1c2goJ0FsdCcpO1xuICAgICAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSBwYXJ0cy5wdXNoKCdTaGlmdCcpO1xuICAgICAgICAgICAgaWYgKGV2LmN0cmxLZXkpIHBhcnRzLnB1c2goJ0N0cmwnKTtcbiAgICAgICAgICAgIGxldCBrZXlQYXJ0ID0gZXYua2V5O1xuICAgICAgICAgICAgaWYgKGV2LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAga2V5UGFydCA9IGV2LmtleS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHMucHVzaChrZXlQYXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbWJvID0gcGFydHMuam9pbignKycpO1xuICAgICAgICAgICAgaWYgKGNvbWJvID09PSBkZXZ0b29sc1Nob3J0Y3V0LnJlcGxhY2UoL1xccysvZywgJycpKSB7XG4gICAgICAgICAgICAgIGlmIChob3N0LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGhvc3Quc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvKiBpZ25vcmUgKi9cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogaWdub3JlICovXG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNsZWFudXAsIGNvbnRleHQgfSBhcyBDcmVhdGVSb3V0ZXJSZXR1cm48YW55Pjtcbn1cbiJdfQ==
@@ -1,16 +1,3 @@
1
- export type FilterActions = {
2
- set: (field: string, operator: string, value: unknown | undefined, opts?: {
3
- replace?: boolean;
4
- }) => void;
5
- remove: (field: string, operator?: string, opts?: {
6
- replace?: boolean;
7
- }) => void;
8
- merge: (patch: Record<string, unknown>, opts?: {
9
- replace?: boolean;
10
- }) => void;
11
- clear: (opts?: {
12
- replace?: boolean;
13
- }) => void;
14
- };
15
- export default function useFilters(): [Record<string, unknown>, FilterActions];
1
+ import type { FilterSchema, TypedFilterActions, InferFilters } from '../types.js';
2
+ export default function useFilters<S extends FilterSchema>(schema: S): [InferFilters<S>, TypedFilterActions<S>];
16
3
  //# sourceMappingURL=useFilters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFilters.d.ts","sourceRoot":"","sources":["../../../src/routing/useFilters.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,CACH,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAEhB,KAAK,EAAE,OAAO,GAAG,SAAS,EAC1B,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KACzB,IAAI,CAAC;IACV,MAAM,EAAE,CACN,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KACzB,IAAI,CAAC;IACV,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9E,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CAC/C,CAAC;AAMF,MAAM,CAAC,OAAO,UAAU,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAwE7E"}
1
+ {"version":3,"file":"useFilters.d.ts","sourceRoot":"","sources":["../../../src/routing/useFilters.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACb,MAAM,aAAa,CAAC;AA8BrB,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAC,SAAS,YAAY,EACvD,MAAM,EAAE,CAAC,GACR,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAoD1C"}
@@ -20,64 +20,43 @@ function shallowEqual(a, b) {
20
20
  return false;
21
21
  return true;
22
22
  }
23
- export default function useFilters() {
23
+ export default function useFilters(schema) {
24
24
  const ctx = useContext(RoutingContext);
25
- const entry = ctx?.get();
26
- const route = entry?.route;
27
- const filterSchema = useMemo(() => {
28
- if (route == null)
29
- return undefined;
30
- const collected = [];
31
- for (const r of route.route.routes) {
32
- const maybe = r.filterSchema;
33
- if (maybe != null && typeof maybe === 'object') {
34
- collected.push(maybe);
35
- }
36
- }
37
- if (collected.length === 0)
38
- return undefined;
39
- return collected.at(-1);
40
- }, [route]);
25
+ if (ctx == null) {
26
+ throw new Error('useFilters must be used within a RoutingContext.Provider');
27
+ }
28
+ const entry = ctx.get();
29
+ const { query } = entry;
41
30
  const currentFilters = useMemo(() => {
42
- return entry?.filters ?? {};
43
- }, [entry?.filters]);
44
- const query = entry?.query;
31
+ return (entry.filters ?? {});
32
+ }, [entry.filters]);
33
+ const baseCtx = ctx;
45
34
  const actions = useMemo(() => {
46
35
  function navigateWith(nextFilters, replace) {
47
- if (ctx == null)
48
- return;
49
36
  if (shallowEqual(currentFilters, nextFilters))
50
37
  return;
51
- ctx.navigate({ query: query, filters: nextFilters, replace });
38
+ baseCtx.navigate({ query: query, filters: nextFilters, replace });
52
39
  }
53
40
  return {
54
41
  set(field, operator, value, opts) {
55
- if (filterSchema == null)
56
- return;
57
- const next = setFilter(currentFilters, filterSchema, field, operator, value);
42
+ const next = setFilter(currentFilters, schema, field, operator, value);
58
43
  navigateWith(next, opts?.replace);
59
44
  },
60
45
  remove(field, operator, opts) {
61
- if (filterSchema == null)
62
- return;
63
46
  const next = removeFilterOp(currentFilters, field, operator);
64
47
  navigateWith(next, opts?.replace);
65
48
  },
66
49
  merge(patch, opts) {
67
- if (filterSchema == null)
68
- return;
69
50
  const next = mergeFilters(currentFilters, patch);
70
51
  navigateWith(next, opts?.replace);
71
52
  },
72
53
  clear(opts) {
73
- if (filterSchema == null)
74
- return;
75
54
  if (isEmpty(currentFilters))
76
55
  return;
77
56
  navigateWith({}, opts?.replace);
78
57
  },
79
58
  };
80
- }, [ctx, currentFilters, filterSchema, query]);
59
+ }, [baseCtx, currentFilters, schema, query]);
81
60
  return [currentFilters, actions];
82
61
  }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlRmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0aW5nL3VzZUZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLElBQUksY0FBYyxFQUM5QixZQUFZLEVBQ1osT0FBTyxHQUNSLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsU0FBUyxZQUFZLENBQUMsQ0FBVSxFQUFFLENBQVU7SUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLElBQ0UsT0FBTyxDQUFDLEtBQUssUUFBUTtRQUNyQixDQUFDLEtBQUssSUFBSTtRQUNWLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDckIsQ0FBQyxLQUFLLElBQUksRUFDVixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBNEIsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxDQUE0QixDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSztRQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUM3RCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUF1QkQsTUFBTSxDQUFDLE9BQU8sVUFBVSxVQUFVO0lBQ2hDLE1BQU0s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cUIsQ0FBQztvQkFBRSxPQUFPO2dCQUMzQyxZQUFZLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFL0MsT0FBTyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyU2NoZW1hIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgc2V0RmlsdGVyLFxuICByZW1vdmVGaWx0ZXIgYXMgcmVtb3ZlRmlsdGVyT3AsXG4gIG1lcmdlRmlsdGVycyxcbiAgaXNFbXB0eSxcbn0gZnJvbSAnQHBsdW1pbGUvZmlsdGVyLXF1ZXJ5JztcblxuLyoqIEludGVybmFsIGhlbHBlcjogc2hhbGxvdyBlcXVhbGl0eSAqL1xuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoXG4gICAgdHlwZW9mIGEgIT09ICdvYmplY3QnIHx8XG4gICAgYSA9PT0gbnVsbCB8fFxuICAgIHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fFxuICAgIGIgPT09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGFPYmogPSBhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBiT2JqID0gYiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhhT2JqKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYk9iaikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgayBvZiBhS2V5cykgaWYgKGFPYmpba10gIT09IGJPYmpba10pIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlckFjdGlvbnMgPSB7XG4gIHNldDogKFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IHN0cmluZyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlZHVuZGFudC10eXBlLWNvbnN0aXR1ZW50c1xuICAgIHZhbHVlOiB1bmtub3duIHwgdW5kZWZpbmVkLFxuICAgIG9wdHM/OiB7IHJlcGxhY2U/OiBib29sZWFuIH0sXG4gICkgPT4gdm9pZDtcbiAgcmVtb3ZlOiAoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBvcGVyYXRvcj86IHN0cmluZyxcbiAgICBvcHRzPzogeyByZXBsYWNlPzogYm9vbGVhbiB9LFxuICApID0+IHZvaWQ7XG4gIG1lcmdlOiAocGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcHRzPzogeyByZXBsYWNlPzogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBjbGVhcjogKG9wdHM/OiB7IHJlcGxhY2U/OiBib29sZWFuIH0pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIEhvb2sgcmV0dXJuaW5nIGN1cnJlbnQgZmlsdGVycyAodHlwZWQgaWYgc2NoZW1hIHByZXNlbnQpIGFuZCBhY3Rpb25zIHRvIG11dGF0ZSB0aGVtLlxuICogRmFsbGJhY2sgdG8gZW1wdHkgb2JqZWN0IHdoZW4gbm8gZmlsdGVyIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRmlsdGVycygpOiBbUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIEZpbHRlckFjdGlvbnNdIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGNvbnN0IGVudHJ5ID0gY3R4Py5nZXQoKTtcbiAgY29uc3Qgcm91dGUgPSBlbnRyeT8ucm91dGU7XG4gIC8vIERpc2NvdmVyIGRlZXBlc3QgZmlsdGVyIHNjaGVtYVxuICBjb25zdCBmaWx0ZXJTY2hlbWE6IEZpbHRlclNjaGVtYSB8IHVuZGVmaW5lZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChyb3V0ZSA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbGxlY3RlZDogRmlsdGVyU2NoZW1hW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXliZSA9IChyIGFzIHVua25vd24gYXMgeyBmaWx0ZXJTY2hlbWE/OiB1bmtub3duIH0pLmZpbHRlclNjaGVtYTtcbiAgICAgIGlmIChtYXliZSAhPSBudWxsICYmIHR5cGVvZiBtYXliZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29sbGVjdGVkLnB1c2gobWF5YmUgYXMgRmlsdGVyU2NoZW1hKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNvbGxlY3RlZC5hdCgtMSk7XG4gIH0sIFtyb3V0ZV0pO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBlbnRyeT8uZmlsdGVycyA/PyB7fTtcbiAgfSwgW2VudHJ5Py5maWx0ZXJzXSk7XG4gIGNvbnN0IHF1ZXJ5ID0gZW50cnk/LnF1ZXJ5O1xuXG4gIGNvbnN0IGFjdGlvbnM6IEZpbHRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvKiogTmF2aWdhdGUgd2l0aCBuZXcgZmlsdGVycyBpZiB0aGV5IGRpZmZlci4gKi9cbiAgICBmdW5jdGlvbiBuYXZpZ2F0ZVdpdGgoXG4gICAgICBuZXh0RmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICByZXBsYWNlPzogYm9vbGVhbixcbiAgICApIHtcbiAgICAgIGlmIChjdHggPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgLy8gQXZvaWQgbmF2aWdhdGlvbiBpZiBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsXG4gICAgICBpZiAoc2hhbGxvd0VxdWFsKGN1cnJlbnRGaWx0ZXJzLCBuZXh0RmlsdGVycykpIHJldHVybjtcbiAgICAgIGN0eC5uYXZpZ2F0ZSh7IHF1ZXJ5OiBxdWVyeSBhcyBhbnksIGZpbHRlcnM6IG5leHRGaWx0ZXJzLCByZXBsYWNlIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc2V0KGZpZWxkLCBvcGVyYXRvciwgdmFsdWUsIG9wdHMpIHtcbiAgICAgICAgaWYgKGZpbHRlclNjaGVtYSA9PSBudWxsKSByZXR1cm47IC8vIGlnbm9yZSB3aGVuIG5vIHNjaGVtYVxuICAgICAgICBjb25zdCBuZXh0ID0gc2V0RmlsdGVyKFxuICAgICAgICAgIGN1cnJlbnRGaWx0ZXJzIGFzIGFueSxcbiAgICAgICAgICBmaWx0ZXJTY2hlbWEgYXMgYW55LFxuICAgICAgICAgIGZpZWxkIGFzIGFueSxcbiAgICAgICAgICBvcGVyYXRvciBhcyBhbnksXG4gICAgICAgICAgdmFsdWUgYXMgYW55LFxuICAgICAgICApIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBuYXZpZ2F0ZVdpdGgobmV4dCwgb3B0cz8ucmVwbGFjZSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKGZpZWxkLCBvcGVyYXRvciwgb3B0cykge1xuICAgICAgICBpZiAoZmlsdGVyU2NoZW1hID09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV4dCA9IHJlbW92ZUZpbHRlck9wKFxuICAgICAgICAgIGN1cnJlbnRGaWx0ZXJzIGFzIGFueSxcbiAgICAgICAgICBmaWVsZCBhcyBhbnksXG4gICAgICAgICAgb3BlcmF0b3IgYXMgYW55LFxuICAgICAgICApIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBuYXZpZ2F0ZVdpdGgobmV4dCwgb3B0cz8ucmVwbGFjZSk7XG4gICAgICB9LFxuICAgICAgbWVyZ2UocGF0Y2gsIG9wdHMpIHtcbiAgICAgICAgaWYgKGZpbHRlclNjaGVtYSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHQgPSBtZXJnZUZpbHRlcnMoXG4gICAgICAgICAgY3VycmVudEZpbHRlcnMgYXMgYW55LFxuICAgICAgICAgIHBhdGNoIGFzIGFueSxcbiAgICAgICAgKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgbmF2aWdhdGVXaXRoKG5leHQsIG9wdHM/LnJlcGxhY2UpO1xuICAgICAgfSxcbiAgICAgIGNsZWFyKG9wdHMpIHtcbiAgICAgICAgaWYgKGZpbHRlclNjaGVtYSA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGlmIChpc0VtcHR5KGN1cnJlbnRGaWx0ZXJzIGFzIGFueSkpIHJldHVybjtcbiAgICAgICAgbmF2aWdhdGVXaXRoKHt9LCBvcHRzPy5yZXBsYWNlKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSwgW2N0eCwgY3VycmVudEZpbHRlcnMsIGZpbHRlclNjaGVtYSwgcXVlcnldKTtcblxuICByZXR1cm4gW2N1cnJlbnRGaWx0ZXJzLCBhY3Rpb25zXTtcbn1cbiJdfQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlRmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0aW5nL3VzZUZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFNakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLElBQUksY0FBYyxFQUM5QixZQUFZLEVBQ1osT0FBTyxHQUNSLE1BQU0sdUJBQXVCLENBQUM7QUFHL0IsU0FBUyxZQUFZLENBQUMsQ0FBVSxFQUFFLENBQVU7SUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pCLElBQ0UsT0FBTyxDQUFDLEtBQUssUUFBUTtRQUNyQixDQUFDLEtBQUssSUFBSTtRQUNWLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDckIsQ0FBQyxLQUFLLElBQUksRUFDVixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBNEIsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxDQUE0QixDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSztRQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUM3RCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFLRCxNQUFNLENBQUMsT0FBTyxVQUFVLFVBQVUsQ0FDaEMsTUFBUztJQUVULE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDbEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFvQixDQUFDO0lBQ2xELENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUVwQixNQUFNLE9BQU8sR0FBMEIsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUVsRCxTQUFTLFlBQVksQ0FBQyxXQUE0QixFQUFFLE9BQWlCO1lBQ25FLElBQUksWUFBWSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7Z0JBQUUsT0FBTztZQUN0RCxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE9BQU87WUFDTCxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSTtnQkFDOUIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUNwQixjQUFxQixFQUNyQixNQUFhLEVBQ2IsS0FBWSxFQUNaLFFBQWUsRUFDZixLQUFZLENBQ00sQ0FBQztnQkFDckIsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUk7Z0JBQzFCLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FDekIsY0FBcUIsRUFDckIsS0FBWSxFQUNaLFFBQWUsQ0FDRyxDQUFDO2dCQUNyQixZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJO2dCQUNmLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FDdkIsY0FBcUIsRUFDckIsS0FBWSxDQUNNLENBQUM7Z0JBQ3JCLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSTtnQkFDUixJQUFJLE9BQU8sQ0FBQyxjQUFxQixDQUFDO29CQUFFLE9BQU87Z0JBQzNDLFlBQVksQ0FBQyxFQUFxQixFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ3VCLENBQUM7SUFDN0IsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU3QyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJvdXRpbmdDb250ZXh0IGZyb20gJy4vUm91dGluZ0NvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGaWx0ZXJTY2hlbWEsXG4gIFR5cGVkRmlsdGVyQWN0aW9ucyxcbiAgSW5mZXJGaWx0ZXJzLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBzZXRGaWx0ZXIsXG4gIHJlbW92ZUZpbHRlciBhcyByZW1vdmVGaWx0ZXJPcCxcbiAgbWVyZ2VGaWx0ZXJzLFxuICBpc0VtcHR5LFxufSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuXG4vKiogSW50ZXJuYWwgaGVscGVyOiBzaGFsbG93IGVxdWFsaXR5ICovXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChcbiAgICB0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHxcbiAgICBhID09PSBudWxsIHx8XG4gICAgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8XG4gICAgYiA9PT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYU9iaiA9IGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGJPYmogPSBiIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGFPYmopO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiT2JqKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgZm9yIChjb25zdCBrIG9mIGFLZXlzKSBpZiAoYU9ialtrXSAhPT0gYk9ialtrXSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBTdHJvbmdseSB0eXBlZCBmaWx0ZXJzIGhvb2suIFNjaGVtYSBhcmd1bWVudCBpcyBtYW5kYXRvcnk7IGR5bmFtaWMgZGlzY292ZXJ5IHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZpbHRlcnM8UyBleHRlbmRzIEZpbHRlclNjaGVtYT4oXG4gIHNjaGVtYTogUyxcbik6IFtJbmZlckZpbHRlcnM8Uz4sIFR5cGVkRmlsdGVyQWN0aW9uczxTPl0ge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KFJvdXRpbmdDb250ZXh0KTtcbiAgaWYgKGN0eCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VGaWx0ZXJzIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSb3V0aW5nQ29udGV4dC5Qcm92aWRlcicpO1xuICB9XG4gIGNvbnN0IGVudHJ5ID0gY3R4LmdldCgpO1xuICBjb25zdCB7IHF1ZXJ5IH0gPSBlbnRyeTsgLy8gc3RpbGwgcGFzc2VkIGZvciBub3cgKGxlZ2FjeSBuYXZpZ2F0ZSBzaWduYXR1cmUpXG4gIGNvbnN0IGN1cnJlbnRGaWx0ZXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIChlbnRyeS5maWx0ZXJzID8/IHt9KSBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH0sIFtlbnRyeS5maWx0ZXJzXSk7XG4gIGNvbnN0IGJhc2VDdHggPSBjdHg7IC8vIG5vbi1udWxsIGFsaWFzIGZvciBjbG9zdXJlc1xuXG4gIGNvbnN0IGFjdGlvbnM6IFR5cGVkRmlsdGVyQWN0aW9uczxTPiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8qKiBOYXZpZ2F0ZSBvbmx5IGlmIHN0cnVjdHVyYWwgY2hhbmdlICovXG4gICAgZnVuY3Rpb24gbmF2aWdhdGVXaXRoKG5leHRGaWx0ZXJzOiBJbmZlckZpbHRlcnM8Uz4sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgICBpZiAoc2hhbGxvd0VxdWFsKGN1cnJlbnRGaWx0ZXJzLCBuZXh0RmlsdGVycykpIHJldHVybjtcbiAgICAgIGJhc2VDdHgubmF2aWdhdGUoeyBxdWVyeTogcXVlcnkgYXMgYW55LCBmaWx0ZXJzOiBuZXh0RmlsdGVycywgcmVwbGFjZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldChmaWVsZCwgb3BlcmF0b3IsIHZhbHVlLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBzZXRGaWx0ZXIoXG4gICAgICAgICAgY3VycmVudEZpbHRlcnMgYXMgYW55LFxuICAgICAgICAgIHNjaGVtYSBhcyBhbnksXG4gICAgICAgICAgZmllbGQgYXMgYW55LFxuICAgICAgICAgIG9wZXJhdG9yIGFzIGFueSxcbiAgICAgICAgICB2YWx1ZSBhcyBhbnksXG4gICAgICAgICkgYXMgSW5mZXJGaWx0ZXJzPFM+O1xuICAgICAgICBuYXZpZ2F0ZVdpdGgobmV4dCwgb3B0cz8ucmVwbGFjZSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlKGZpZWxkLCBvcGVyYXRvciwgb3B0cykge1xuICAgICAgICBjb25zdCBuZXh0ID0gcmVtb3ZlRmlsdGVyT3AoXG4gICAgICAgICAgY3VycmVudEZpbHRlcnMgYXMgYW55LFxuICAgICAgICAgIGZpZWxkIGFzIGFueSxcbiAgICAgICAgICBvcGVyYXRvciBhcyBhbnksXG4gICAgICAgICkgYXMgSW5mZXJGaWx0ZXJzPFM+O1xuICAgICAgICBuYXZpZ2F0ZVdpdGgobmV4dCwgb3B0cz8ucmVwbGFjZSk7XG4gICAgICB9LFxuICAgICAgbWVyZ2UocGF0Y2gsIG9wdHMpIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IG1lcmdlRmlsdGVycyhcbiAgICAgICAgICBjdXJyZW50RmlsdGVycyBhcyBhbnksXG4gICAgICAgICAgcGF0Y2ggYXMgYW55LFxuICAgICAgICApIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgICAgICAgbmF2aWdhdGVXaXRoKG5leHQsIG9wdHM/LnJlcGxhY2UpO1xuICAgICAgfSxcbiAgICAgIGNsZWFyKG9wdHMpIHtcbiAgICAgICAgaWYgKGlzRW1wdHkoY3VycmVudEZpbHRlcnMgYXMgYW55KSkgcmV0dXJuO1xuICAgICAgICBuYXZpZ2F0ZVdpdGgoe30gYXMgSW5mZXJGaWx0ZXJzPFM+LCBvcHRzPy5yZXBsYWNlKTtcbiAgICAgIH0sXG4gICAgfSBhcyBUeXBlZEZpbHRlckFjdGlvbnM8Uz47XG4gIH0sIFtiYXNlQ3R4LCBjdXJyZW50RmlsdGVycywgc2NoZW1hLCBxdWVyeV0pO1xuXG4gIHJldHVybiBbY3VycmVudEZpbHRlcnMsIGFjdGlvbnNdO1xufVxuIl19
@@ -1,7 +1,7 @@
1
1
  import { type Schema as FilterSchema } from '@plumile/filter-query';
2
2
  export declare function buildCombinedSearch(opts: {
3
3
  filters?: Record<string, unknown>;
4
- filterSchema?: FilterSchema;
4
+ querySchema?: FilterSchema;
5
5
  }): string;
6
6
  export default buildCombinedSearch;
7
7
  //# sourceMappingURL=buildCombinedSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildCombinedSearch.d.ts","sourceRoot":"","sources":["../../../src/tools/buildCombinedSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,IAAI,YAAY,EAC5B,MAAM,uBAAuB,CAAC;AAM/B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,GAAG,MAAM,CAaT;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"buildCombinedSearch.d.ts","sourceRoot":"","sources":["../../../src/tools/buildCombinedSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,MAAM,IAAI,YAAY,EAC5B,MAAM,uBAAuB,CAAC;AAM/B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B,GAAG,MAAM,CAaT;AAED,eAAe,mBAAmB,CAAC"}