@ethlete/core 4.18.2 → 4.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ethlete/core
2
2
 
3
+ ## 4.18.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`9f8f7ee`](https://github.com/ethlete-io/ethdk/commit/9f8f7ee6bb6bcd494709f822b861ef023b717254) Thanks [@TomTomB](https://github.com/TomTomB)! - Remove temp logging
8
+
3
9
  ## 4.18.2
4
10
 
5
11
  ### Patch Changes
@@ -105,7 +105,6 @@ export const buildSignalEffects = (el, config) => {
105
105
  });
106
106
  }
107
107
  }
108
- console.log('buildSignalEffects updated elements');
109
108
  });
110
109
  const effects = {};
111
110
  const has = (tokens) => tokens in effects;
@@ -121,7 +120,6 @@ export const buildSignalEffects = (el, config) => {
121
120
  continue;
122
121
  config.updateFn(el, tokenArray, signal());
123
122
  }
124
- console.log('buildSignalEffects updated bindings');
125
123
  });
126
124
  });
127
125
  };
@@ -247,7 +245,6 @@ export const signalElementDimensions = (el) => {
247
245
  ? { inlineSize: devicePixelContentBoxSize.inlineSize, blockSize: devicePixelContentBoxSize.blockSize }
248
246
  : null,
249
247
  }));
250
- console.log('signalElementDimensions changes');
251
248
  }
252
249
  });
253
250
  effect(() => {
@@ -264,7 +261,6 @@ export const signalElementDimensions = (el) => {
264
261
  }
265
262
  observer.observe(els.currentElement);
266
263
  }
267
- console.log('signalElementDimensions observe change');
268
264
  }, { allowSignalWrites: true });
269
265
  destroyRef.onDestroy(() => observer.disconnect());
270
266
  return elementDimensionsSignal.asReadonly();
@@ -281,7 +277,6 @@ export const signalElementMutations = (el, options) => {
281
277
  return;
282
278
  const entry = e[0];
283
279
  if (entry) {
284
- console.log('signalElementMutations changes:', entry.type);
285
280
  zone.run(() => elementMutationsSignal.set(entry));
286
281
  }
287
282
  });
@@ -294,7 +289,6 @@ export const signalElementMutations = (el, options) => {
294
289
  if (els.currentElement) {
295
290
  observer.observe(els.currentElement, options);
296
291
  }
297
- console.log('signalElementMutations observe change');
298
292
  }, { allowSignalWrites: true });
299
293
  destroyRef.onDestroy(() => observer.disconnect());
300
294
  return elementMutationsSignal.asReadonly();
@@ -341,7 +335,6 @@ export const signalElementScrollState = (el, options) => {
341
335
  const { width, height } = dimensions.rect;
342
336
  const canScrollHorizontally = scrollWidth > width;
343
337
  const canScrollVertically = scrollHeight > height;
344
- console.log('signalElementScrollState changes:', canScrollHorizontally, canScrollVertically);
345
338
  return {
346
339
  canScroll: canScrollHorizontally || canScrollVertically,
347
340
  canScrollHorizontally,
@@ -389,7 +382,6 @@ export const signalElementIntersection = (el, options) => {
389
382
  currentValues = [...currentValues, intersectionEntry];
390
383
  }
391
384
  }
392
- console.log('signalElementIntersection updateIntersections', currentValues.length);
393
385
  zone.run(() => elementIntersectionSignal.set(currentValues));
394
386
  };
395
387
  const updateIntersectionObserver = (rendered, enabled, rootEl) => {
@@ -467,13 +459,11 @@ export const signalElementIntersection = (el, options) => {
467
459
  const rendered = isRendered();
468
460
  const enabled = isEnabled();
469
461
  untracked(() => updateIntersectionObserver(rendered, enabled, rootEl));
470
- console.log(`signalElementIntersection updateIntersectionObserver: ${rendered} ${enabled}`);
471
462
  }, { allowSignalWrites: true });
472
463
  effect(() => {
473
464
  const els = elements();
474
465
  const obs = observer();
475
466
  untracked(() => updateObservedElements(obs, els));
476
- console.log(`signalElementIntersection updateObservedElements: ${els.currentElements.length}`);
477
467
  });
478
468
  destroyRef.onDestroy(() => observer()?.disconnect());
479
469
  return elementIntersectionSignal.asReadonly();
@@ -499,7 +489,6 @@ export const signalElementChildren = (el) => {
499
489
  children.push(element);
500
490
  }
501
491
  }
502
- console.log(`signalElementChildren changes: ${children.length}`);
503
492
  return children;
504
493
  });
505
494
  };
@@ -858,4 +847,4 @@ export const injectCurrentBreakpoint = () => {
858
847
  initialValue: inject(ViewportService).currentViewport,
859
848
  });
860
849
  };
861
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLFVBQVUsRUFFVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUduQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhGLE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBQ0wsRUFBRSxFQUNGLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQThCdEQsU0FBUyxlQUFlLENBQUMsRUFBVztJQUNsQyxJQUFJLFFBQVEsQ0FBQyxF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Y2VFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEVmZmVjdFJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpc0Rldk1vZGUsXG4gIGlzU2lnbmFsLFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlLFxuICBvZixcbiAgcGFpcndpc2UsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcnZpY2UsIFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEJyZWFrcG9pbnQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBuZXh0RnJhbWUgfSBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5pbXBvcnQgeyBlcXVhbCB9IGZyb20gJy4vZXF1YWwudXRpbCc7XG5pbXBvcnQgeyBpc0VsZW1lbnRWaXNpYmxlIH0gZnJvbSAnLi9zY3JvbGxhYmxlLnV0aWxzJztcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlID1cbiAgfCBIVE1MRWxlbWVudFxuICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgQXJyYXk8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkO1xuXG50eXBlIFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IE9ic2VydmFibGU8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBTaWduYWw8U2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZT5cbiAgfCBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudD5cbiAgfCBFbGVtZW50U2lnbmFsO1xuXG50eXBlIEVsZW1lbnRTaWduYWwgPSBTaWduYWw8e1xuICAvKiogQGRlcHJlY2F0ZWQgQWx3YXlzIHVzZSBjdXJyZW50RWxlbWVudHMgICovXG4gIGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgLyoqIEBkZXByZWNhdGVkIEFsd2F5cyB1c2UgcHJldmlvdXNFbGVtZW50cyAgKi9cbiAgcHJldmlvdXNFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gIGN1cnJlbnRFbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbiAgcHJldmlvdXNFbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbn0+O1xuXG50eXBlIEVsZW1lbnRTaWduYWxWYWx1ZSA9IFJldHVyblR5cGU8RWxlbWVudFNpZ25hbD47XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNpZ25hbChlbDogdW5rbm93bik6IGVsIGlzIEVsZW1lbnRTaWduYWwge1xuICBpZiAoaXNTaWduYWwoZWwpKSB7XG4gICAgY29uc3QgdmFsID0gZWwoKTtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmICdjdXJyZW50RWxlbWVudCcgaW4gdmFsICYmICdwcmV2aW91c0VsZW1lbnQnIGluIHZhbDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgZG9jdW1lbnRFbGVtZW50U2lnbmFsID0gKCk6IEVsZW1lbnRTaWduYWwgPT5cbiAgc2lnbmFsKHtcbiAgICBjdXJyZW50RWxlbWVudDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgIHByZXZpb3VzRWxlbWVudDogbnVsbCxcbiAgICBjdXJyZW50RWxlbWVudHM6IFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdLFxuICAgIHByZXZpb3VzRWxlbWVudHM6IFtdLFxuICB9KTtcblxuY29uc3QgYnVpbGRFbGVtZW50U2lnbmFsID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUgfCBudWxsIHwgdW5kZWZpbmVkKTogRWxlbWVudFNpZ25hbCA9PiB7XG4gIGlmIChlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHNpZ25hbCh7IGN1cnJlbnRFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnQ6IG51bGwsIGN1cnJlbnRFbGVtZW50czogW10sIHByZXZpb3VzRWxlbWVudHM6IFtdIH0pO1xuICB9XG5cbiAgaWYgKGlzRWxlbWVudFNpZ25hbChlbCkpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICBsZXQgbUVsU2lnbmFsOiBTaWduYWw8SFRNTEVsZW1lbnRbXSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc3dpdGNoRWxlbWVudCA9ICgpID0+XG4gICAgc3dpdGNoTWFwKChlbE9yUmVmOiBTaWduYWxFbGVtZW50QmluZGluZ0NvbXBsZXhUeXBlKSA9PiB7XG4gICAgICBpZiAoZWxPclJlZiBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgICAgICByZXR1cm4gZWxPclJlZi5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGVsT3JSZWYpLFxuICAgICAgICAgIG1hcCgoKSA9PiBlbE9yUmVmLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbE9yUmVmKSkge1xuICAgICAgICByZXR1cm4gb2YoZWxPclJlZi5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvZXJjZWRFbCA9IGNvZXJjZUVsZW1lbnQoZWxPclJlZik7XG4gICAgICAgIHJldHVybiBvZihjb2VyY2VkRWwgPyBbY29lcmNlZEVsXSA6IG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlmIChlbCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChlbC5waXBlKHN3aXRjaEVsZW1lbnQoKSksIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0pO1xuICB9IGVsc2UgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKHRvT2JzZXJ2YWJsZShlbCkucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFF1ZXJ5TGlzdCkge1xuICAgIG1FbFNpZ25hbCA9IHRvU2lnbmFsKFxuICAgICAgZWwuY2hhbmdlcy5waXBlKFxuICAgICAgICBzdGFydFdpdGgoZWwpLFxuICAgICAgICBtYXAoKCkgPT4gZWwudG9BcnJheSgpLm1hcCgocikgPT4gY29lcmNlRWxlbWVudChyKSkpLFxuICAgICAgKSxcbiAgICAgIHsgaW5pdGlhbFZhbHVlOiBudWxsIH0sXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtRWxTaWduYWwgPSBzaWduYWwoW2NvZXJjZUVsZW1lbnQoZWwpXSk7XG4gIH1cblxuICBjb25zdCBlbFNpZyA9IHRvU2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZShtRWxTaWduYWwpLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbcHJldmlvdXNFbGVtZW50cywgY3VycmVudEVsZW1lbnRzXSkgPT4gKHtcbiAgICAgICAgcHJldmlvdXNFbGVtZW50czogcHJldmlvdXNFbGVtZW50cyA/PyBbXSxcbiAgICAgICAgY3VycmVudEVsZW1lbnRzOiBjdXJyZW50RWxlbWVudHMgPz8gW10sXG4gICAgICAgIGN1cnJlbnRFbGVtZW50OiBjdXJyZW50RWxlbWVudHM/LlswXSA/PyBudWxsLFxuICAgICAgICBwcmV2aW91c0VsZW1lbnQ6IHByZXZpb3VzRWxlbWVudHM/LlswXSA/PyBudWxsLFxuICAgICAgfSkpLFxuICAgICksXG4gICAgeyBpbml0aWFsVmFsdWU6IHsgY3VycmVudEVsZW1lbnQ6IG51bGwsIHByZXZpb3VzRWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50czogW10sIGN1cnJlbnRFbGVtZW50czogW10gfSB9LFxuICApO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiBlbFNpZygpLCB7XG4gICAgZXF1YWw6IChhLCBiKSA9PlxuICAgICAgYS5jdXJyZW50RWxlbWVudCA9PT0gYi5jdXJyZW50RWxlbWVudCAmJlxuICAgICAgYS5wcmV2aW91c0VsZW1lbnQgPT09IGIucHJldmlvdXNFbGVtZW50ICYmXG4gICAgICBhLmN1cnJlbnRFbGVtZW50cy5sZW5ndGggPT09IGIuY3VycmVudEVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgYS5jdXJyZW50RWxlbWVudHMuZXZlcnkoKHYsIGkpID0+IHYgPT09IGIuY3VycmVudEVsZW1lbnRzW2ldKSAmJlxuICAgICAgYS5wcmV2aW91c0VsZW1lbnRzLmxlbmd0aCA9PT0gYi5wcmV2aW91c0VsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgYS5wcmV2aW91c0VsZW1lbnRzLmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSBiLnByZXZpb3VzRWxlbWVudHNbaV0pLFxuICB9KTtcbn07XG5cbmNvbnN0IGZpcnN0RWxlbWVudFNpZ25hbCA9IChlbDogRWxlbWVudFNpZ25hbCkgPT4ge1xuICByZXR1cm4gY29tcHV0ZWQoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGVsKCk7XG5cbiAgICAgIGlmIChjdXJyZW50LmN1cnJlbnRFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnTW9yZSB0aGFuIG9uZSBlbGVtZW50IGlzIGJvdW5kIHRvIHRoZSBzaWduYWwuIE9ubHkgdGhlIGZpcnN0IGVsZW1lbnQgd2lsbCBiZSB1c2VkLicsXG4gICAgICAgICAgY3VycmVudC5jdXJyZW50RWxlbWVudHMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnIgPSBjdXJyZW50LmN1cnJlbnRFbGVtZW50c1swXSA/PyBudWxsO1xuICAgICAgY29uc3QgcHJldiA9IGN1cnJlbnQucHJldmlvdXNFbGVtZW50c1swXSA/PyBudWxsO1xuXG4gICAgICByZXR1cm4geyBjdXJyZW50RWxlbWVudDogY3VyciwgcHJldmlvdXNFbGVtZW50OiBwcmV2IH07XG4gICAgfSxcbiAgICB7IGVxdWFsOiAoYSwgYikgPT4gYS5jdXJyZW50RWxlbWVudCA9PT0gYi5jdXJyZW50RWxlbWVudCAmJiBhLnByZXZpb3VzRWxlbWVudCA9PT0gYi5wcmV2aW91c0VsZW1lbnQgfSxcbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTaWduYWxFZmZlY3RzQ29uZmlnPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PiB7XG4gIC8qKiBUaGUgdG9rZW5zIHRvIGFwcGx5IGFuZCB0aGVpciBzaWduYWwgdmFsdWUgICovXG4gIHRva2VuTWFwOiBUO1xuXG4gIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBmb3IgZWxlbWVudHMgdGhhdCB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgc2lnbmFsIGVmZmVjdHMgKi9cbiAgY2xlYW51cEZuOiAoZWw6IEhUTUxFbGVtZW50LCB0b2tlbnM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuXG4gIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCBmb3IgZWxlbWVudHMgdGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBzaWduYWwgZWZmZWN0cyBvciB3aGVuIHRoZWlyIHNpZ25hbCB2YWx1ZSBjaGFuZ2VzICovXG4gIHVwZGF0ZUZuOiAoZWw6IEhUTUxFbGVtZW50LCB0b2tlbnM6IHN0cmluZ1tdLCBjb25kaXRpb25SZXN1bHQ6IHVua25vd24pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFNpZ25hbEVmZmVjdHMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBjb25maWc6IEJ1aWxkU2lnbmFsRWZmZWN0c0NvbmZpZzxUPixcbikgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHsgY3VycmVudEVsZW1lbnRzLCBwcmV2aW91c0VsZW1lbnRzIH0gPSBlbGVtZW50cygpO1xuXG4gICAgZm9yIChjb25zdCBwcmV2aW91c0VsIG9mIHByZXZpb3VzRWxlbWVudHMpIHtcbiAgICAgIGlmIChjdXJyZW50RWxlbWVudHMuaW5jbHVkZXMocHJldmlvdXNFbCkpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB0b2tlbnMgPSBPYmplY3Qua2V5cyhjb25maWcudG9rZW5NYXApXG4gICAgICAgIC5tYXAoKGtleSkgPT4ga2V5LnNwbGl0KCcgJykpXG4gICAgICAgIC5mbGF0KCk7XG5cbiAgICAgIGlmICghdG9rZW5zLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbmZpZy5jbGVhbnVwRm4ocHJldmlvdXNFbCwgdG9rZW5zKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGN1cnJlbnRFbCBvZiBjdXJyZW50RWxlbWVudHMpIHtcbiAgICAgIGlmIChwcmV2aW91c0VsZW1lbnRzLmluY2x1ZGVzKGN1cnJlbnRFbCkpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IFt0b2tlbnMsIGNvbmRpdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLnRva2VuTWFwKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRva2VuQXJyYXkgPSB0b2tlbnMuc3BsaXQoJyAnKTtcbiAgICAgICAgICBpZiAoIXRva2VuQXJyYXkubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgICBjb25maWcudXBkYXRlRm4oY3VycmVudEVsLCB0b2tlbkFycmF5LCBjb25kaXRpb24oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdidWlsZFNpZ25hbEVmZmVjdHMgdXBkYXRlZCBlbGVtZW50cycpO1xuICB9KTtcblxuICBjb25zdCBlZmZlY3RzOiBSZWNvcmQ8c3RyaW5nLCBFZmZlY3RSZWY+ID0ge307XG5cbiAgY29uc3QgaGFzID0gKHRva2Vuczogc3RyaW5nKSA9PiB0b2tlbnMgaW4gZWZmZWN0cztcblxuICBjb25zdCBwdXNoID0gKHRva2Vuczogc3RyaW5nLCBzaWduYWw6IFNpZ25hbDx1bmtub3duPikgPT4ge1xuICAgIGlmIChoYXModG9rZW5zKSkgcmV0dXJuO1xuXG4gICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICBlZmZlY3RzW3Rva2Vuc10gPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRFbGVtZW50cyB9ID0gdW50cmFja2VkKCgpID0+IGVsZW1lbnRzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZWwgb2YgY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgICAgIGlmICghdG9rZW5BcnJheS5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uZmlnLnVwZGF0ZUZuKGVsLCB0b2tlbkFycmF5LCBzaWduYWwoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnYnVpbGRTaWduYWxFZmZlY3RzIHVwZGF0ZWQgYmluZGluZ3MnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHB1c2hNYW55ID0gKG1hcDogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuICAgIGZvciAoY29uc3QgW3Rva2Vucywgc2lnbmFsXSBvZiBPYmplY3QuZW50cmllcyhtYXApKSB7XG4gICAgICBwdXNoKHRva2Vucywgc2lnbmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlID0gKHRva2Vuczogc3RyaW5nKSA9PiB7XG4gICAgZWZmZWN0c1t0b2tlbnNdPy5kZXN0cm95KCk7XG5cbiAgICBkZWxldGUgZWZmZWN0c1t0b2tlbnNdO1xuXG4gICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50cykge1xuICAgICAgY29uc3QgdG9rZW5BcnJheSA9IHRva2Vucy5zcGxpdCgnICcpO1xuICAgICAgaWYgKCF0b2tlbkFycmF5Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbmZpZy5jbGVhbnVwRm4oZWwsIHRva2VuQXJyYXkpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmVNYW55ID0gKHRva2Vuczogc3RyaW5nW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgcmVtb3ZlKHRva2VuKTtcbiAgICB9XG4gIH07XG5cbiAgcHVzaE1hbnkoY29uZmlnLnRva2VuTWFwKTtcblxuICByZXR1cm4geyByZW1vdmUsIHJlbW92ZU1hbnksIGhhcywgcHVzaCwgcHVzaE1hbnkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxJc1JlbmRlcmVkID0gKCkgPT4ge1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBhZnRlck5leHRSZW5kZXIoKCkgPT4gaXNSZW5kZXJlZC5zZXQodHJ1ZSkpO1xuXG4gIHJldHVybiBpc1JlbmRlcmVkLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxDbGFzc2VzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBjbGFzc01hcDogVCkgPT4ge1xuICBjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoZWwsIHtcbiAgICB0b2tlbk1hcDogY2xhc3NNYXAsXG4gICAgY2xlYW51cEZuOiAoZWwsIHRva2VucykgPT4gdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgdG9rZW4pKSxcbiAgICB1cGRhdGVGbjogKGVsLCB0b2tlbnMsIGNvbmRpdGlvbikgPT4ge1xuICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgdG9rZW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gcmVuZGVyZXIuYWRkQ2xhc3MoZWwsIHRva2VuKSk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGNsYXNzTWFwOiBUKSA9PlxuICBzaWduYWxDbGFzc2VzKGluamVjdChFbGVtZW50UmVmKSwgY2xhc3NNYXApO1xuXG5jb25zdCBBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUyA9IFsnZGlzYWJsZWQnLCAncmVhZG9ubHknLCAncmVxdWlyZWQnLCAnY2hlY2tlZCcsICdzZWxlY3RlZCcsICdoaWRkZW4nLCAnaW5lcnQnXTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KFxuICBlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLFxuICBhdHRyaWJ1dGVNYXA6IFQsXG4pID0+IHtcbiAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKGVsLCB7XG4gICAgdG9rZW5NYXA6IGF0dHJpYnV0ZU1hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IGVsLnJlbW92ZUF0dHJpYnV0ZSh0b2tlbikpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBpZiAoQUxXQVlTX1RSVUVfQVRUUklCVVRFX0tFWVMuaW5jbHVkZXModG9rZW4pKSB7XG4gICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCB0b2tlbiwgJycpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZWwsIHRva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsLCB0b2tlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCB0b2tlbiwgYCR7Y29uZGl0aW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGF0dHJpYnV0ZU1hcDogVCkgPT5cbiAgc2lnbmFsQXR0cmlidXRlcyhpbmplY3QoRWxlbWVudFJlZiksIGF0dHJpYnV0ZU1hcCk7XG5cbmV4cG9ydCBjb25zdCBzaWduYWxTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIHN0eWxlTWFwOiBUKSA9PiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgcmV0dXJuIGJ1aWxkU2lnbmFsRWZmZWN0cyhlbCwge1xuICAgIHRva2VuTWFwOiBzdHlsZU1hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCB0b2tlbikpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsIHRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgdG9rZW4sIGAke2NvbmRpdGlvbn1gLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkRhc2hDYXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RTdHlsZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHN0eWxlTWFwOiBUKSA9PlxuICBzaWduYWxTdHlsZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBzdHlsZU1hcCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naWNhbFNpemUge1xuICBpbmxpbmVTaXplOiBudW1iZXI7XG4gIGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREaW1lbnNpb25zIHtcbiAgcmVjdDogRE9NUmVjdFJlYWRPbmx5IHwgbnVsbDtcbiAgYm9yZGVyQm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBjb250ZW50Qm94U2l6ZTogTG9naWNhbFNpemUgfCBudWxsO1xuICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50RGltZW5zaW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICgpID0+ICh7XG4gICAgcmVjdDogZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8gbnVsbCxcbiAgICBib3JkZXJCb3hTaXplOiBudWxsLFxuICAgIGNvbnRlbnRCb3hTaXplOiBudWxsLFxuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zU2lnbmFsID0gc2lnbmFsPEVsZW1lbnREaW1lbnNpb25zPihpbml0aWFsVmFsdWUoKSk7XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGUpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBlWzBdO1xuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjb25zdCBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplID0gZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBib3JkZXJCb3hTaXplID0gZW50cnkuYm9yZGVyQm94U2l6ZT8uWzBdID8/IG51bGw7XG4gICAgICBjb25zdCBjb250ZW50Qm94U2l6ZSA9IGVudHJ5LmNvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcblxuICAgICAgem9uZS5ydW4oKCkgPT5cbiAgICAgICAgZWxlbWVudERpbWVuc2lvbnNTaWduYWwuc2V0KHtcbiAgICAgICAgICByZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBib3JkZXJCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogYm9yZGVyQm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGJvcmRlckJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogY29udGVudEJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBjb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGNvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuaW5saW5lU2l6ZSwgYmxvY2tTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplLmJsb2NrU2l6ZSB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ3NpZ25hbEVsZW1lbnREaW1lbnNpb25zIGNoYW5nZXMnKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoaW5pdGlhbFZhbHVlKCkpO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWREaXNwbGF5ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbHMuY3VycmVudEVsZW1lbnQpLmRpc3BsYXk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbElzQW5ndWxhckNvbXBvbmVudCA9IGVscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctJyk7XG5cbiAgICAgICAgaWYgKGNvbXB1dGVkRGlzcGxheSA9PT0gJ2lubGluZScgJiYgaXNEZXZNb2RlKCkgJiYgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBFbGVtZW50IDwke2Vscy5jdXJyZW50RWxlbWVudD8udGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gaXMgYW4gQW5ndWxhciBjb21wb25lbnQgYW5kIGhhcyBhIGRpc3BsYXkgb2YgJ2lubGluZScuIElubGluZSBlbGVtZW50cyBjYW5ub3QgYmUgb2JzZXJ2ZWQgZm9yIGRpbWVuc2lvbnMuIFBsZWFzZSBjaGFuZ2UgaXQgdG8gJ2Jsb2NrJyBvciBzb21ldGhpbmcgZWxzZS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVscy5jdXJyZW50RWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKCdzaWduYWxFbGVtZW50RGltZW5zaW9ucyBvYnNlcnZlIGNoYW5nZScpO1xuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG5cbiAgcmV0dXJuIGVsZW1lbnREaW1lbnNpb25zU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudERpbWVuc2lvbnMgPSAoKSA9PiBzaWduYWxFbGVtZW50RGltZW5zaW9ucyhpbmplY3QoRWxlbWVudFJlZikpO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsRWxlbWVudE11dGF0aW9ucyA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogTXV0YXRpb25PYnNlcnZlckluaXQpID0+IHtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgY29uc3QgZWxlbWVudE11dGF0aW9uc1NpZ25hbCA9IHNpZ25hbDxNdXRhdGlvblJlY29yZCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGUpID0+IHtcbiAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBlWzBdO1xuXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBjb25zb2xlLmxvZygnc2lnbmFsRWxlbWVudE11dGF0aW9ucyBjaGFuZ2VzOicsIGVudHJ5LnR5cGUpO1xuXG4gICAgICB6b25lLnJ1bigoKSA9PiBlbGVtZW50TXV0YXRpb25zU2lnbmFsLnNldChlbnRyeSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAgIGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuc2V0KG51bGwpO1xuXG4gICAgICBpZiAoZWxzLnByZXZpb3VzRWxlbWVudCkge1xuICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbHMuY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbHMuY3VycmVudEVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZygnc2lnbmFsRWxlbWVudE11dGF0aW9ucyBvYnNlcnZlIGNoYW5nZScpO1xuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRNdXRhdGlvbnNTaWduYWwuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50TXV0YXRpb25zID0gKG9wdGlvbnM/OiBNdXRhdGlvbk9ic2VydmVySW5pdCkgPT5cbiAgc2lnbmFsRWxlbWVudE11dGF0aW9ucyhpbmplY3QoRWxlbWVudFJlZiksIG9wdGlvbnMpO1xuXG5leHBvcnQgdHlwZSBTaWduYWxFbGVtZW50U2Nyb2xsU3RhdGVPcHRpb25zID0ge1xuICAvKiogVGhlIGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9uIHRvIHNjcm9sbCB0by4gT25jZSBhIHRydXRoeSB2YWx1ZSBnZXQncyBlbWl0dGVkLCBhbGwgZnVydGhlciB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkLiAqL1xuICBpbml0aWFsU2Nyb2xsUG9zaXRpb24/OiBTaWduYWw8U2Nyb2xsVG9PcHRpb25zIHwgbnVsbD47XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBTaWduYWxFbGVtZW50U2Nyb2xsU3RhdGVPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgZWxlbWVudERpbWVuc2lvbnMgPSBzaWduYWxFbGVtZW50RGltZW5zaW9ucyhlbGVtZW50cyk7XG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnMgPSBzaWduYWxFbGVtZW50TXV0YXRpb25zKGVsZW1lbnRzLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSB9KTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcblxuICBjb25zdCBpbml0aWFsU2Nyb2xsUG9zaXRpb24gPSBvcHRpb25zPy5pbml0aWFsU2Nyb2xsUG9zaXRpb247XG5cbiAgaWYgKGluaXRpYWxTY3JvbGxQb3NpdGlvbikge1xuICAgIGNvbnN0IHJlZiA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWlzUmVuZGVyZWQoKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IGluaXRpYWxTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmIChzY3JvbGxQb3NpdGlvbiAmJiBlbGVtZW50KSB7XG4gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbi5sZWZ0ICE9PSB1bmRlZmluZWQpIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIGlmIChzY3JvbGxQb3NpdGlvbi50b3AgIT09IHVuZGVmaW5lZCkgZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxQb3NpdGlvbi50b3A7XG4gICAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50O1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBlbGVtZW50RGltZW5zaW9ucygpO1xuXG4gICAgY29uc3Qgbm90U2Nyb2xsYWJsZSA9ICgpID0+ICh7XG4gICAgICBjYW5TY3JvbGw6IGZhbHNlLFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5OiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbFZlcnRpY2FsbHk6IGZhbHNlLFxuICAgICAgc2Nyb2xsV2lkdGg6IGVsZW1lbnQ/LnNjcm9sbFdpZHRoID8/IG51bGwsXG4gICAgICBzY3JvbGxIZWlnaHQ6IGVsZW1lbnQ/LnNjcm9sbEhlaWdodCA/PyBudWxsLFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgLy8gQ2hhbmdlcyB0byB0aGUgRE9NIGNhbiBhZmZlY3QgdGhlIHNjcm9sbCBzdGF0ZSBvZiB0aGUgZWxlbWVudC5cbiAgICBlbGVtZW50TXV0YXRpb25zKCk7XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIWRpbWVuc2lvbnMucmVjdCB8fCAhaXNSZW5kZXJlZCgpKSByZXR1cm4gbm90U2Nyb2xsYWJsZSgpO1xuXG4gICAgY29uc3QgeyBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0IH0gPSBlbGVtZW50O1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZGltZW5zaW9ucy5yZWN0O1xuXG4gICAgY29uc3QgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID0gc2Nyb2xsV2lkdGggPiB3aWR0aDtcbiAgICBjb25zdCBjYW5TY3JvbGxWZXJ0aWNhbGx5ID0gc2Nyb2xsSGVpZ2h0ID4gaGVpZ2h0O1xuXG4gICAgY29uc29sZS5sb2coJ3NpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSBjaGFuZ2VzOicsIGNhblNjcm9sbEhvcml6b250YWxseSwgY2FuU2Nyb2xsVmVydGljYWxseSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2FuU2Nyb2xsOiBjYW5TY3JvbGxIb3Jpem9udGFsbHkgfHwgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgIGNhblNjcm9sbEhvcml6b250YWxseSxcbiAgICAgIGNhblNjcm9sbFZlcnRpY2FsbHksXG4gICAgICBzY3JvbGxXaWR0aCxcbiAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIH07XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEhvc3RFbGVtZW50U2Nyb2xsU3RhdGUgPSAoKSA9PiBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUoaW5qZWN0KEVsZW1lbnRSZWYpKTtcblxuZXhwb3J0IHR5cGUgU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMgPSBPbWl0PEludGVyc2VjdGlvbk9ic2VydmVySW5pdCwgJ3Jvb3QnPiAmIHtcbiAgcm9vdD86IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZTtcbiAgZW5hYmxlZD86IFNpZ25hbDxib29sZWFuPjtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucykgPT4ge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IHJvb3QgPSBmaXJzdEVsZW1lbnRTaWduYWwob3B0aW9ucz8ucm9vdCA/IGJ1aWxkRWxlbWVudFNpZ25hbChvcHRpb25zPy5yb290KSA6IGRvY3VtZW50RWxlbWVudFNpZ25hbCgpKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuICBjb25zdCBpc0VuYWJsZWQgPSBvcHRpb25zPy5lbmFibGVkID8/IHNpZ25hbCh0cnVlKTtcblxuICBjb25zdCBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXT4oW10pO1xuICBjb25zdCBvYnNlcnZlciA9IHNpZ25hbDxJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGN1cnJlbnRseU9ic2VydmVkRWxlbWVudHMgPSBuZXcgU2V0PEhUTUxFbGVtZW50PigpO1xuXG4gIGNvbnN0IHVwZGF0ZUludGVyc2VjdGlvbnMgPSAoZW50cmllczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdKSA9PiB7XG4gICAgbGV0IGN1cnJlbnRWYWx1ZXMgPSBbLi4uZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCgpXTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgZXhpc3RpbmdFbnRyeUluZGV4ID0gY3VycmVudFZhbHVlcy5maW5kSW5kZXgoKHYpID0+IHYudGFyZ2V0ID09PSBlbnRyeS50YXJnZXQpO1xuXG4gICAgICAvLyBSb3VuZCB0aGUgaW50ZXJzZWN0aW9uIHJhdGlvIHRvIHRoZSBuZWFyZXN0IDAuMDEgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgZXJyb3JzIGFuZCBzeXN0ZW0gc2NhbGluZyBpc3N1ZXMuXG4gICAgICBjb25zdCByb3VuZGVkSW50ZXJzZWN0aW9uUmF0aW8gPSBNYXRoLnJvdW5kKGVudHJ5LmludGVyc2VjdGlvblJhdGlvICogMTAwKSAvIDEwMDtcblxuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uRW50cnk6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgPSB7XG4gICAgICAgIGJvdW5kaW5nQ2xpZW50UmVjdDogZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LFxuICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbzogcm91bmRlZEludGVyc2VjdGlvblJhdGlvLFxuICAgICAgICBpbnRlcnNlY3Rpb25SZWN0OiBlbnRyeS5pbnRlcnNlY3Rpb25SZWN0LFxuICAgICAgICBpc0ludGVyc2VjdGluZzogZW50cnkuaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgIHJvb3RCb3VuZHM6IGVudHJ5LnJvb3RCb3VuZHMsXG4gICAgICAgIHRhcmdldDogZW50cnkudGFyZ2V0LFxuICAgICAgICB0aW1lOiBlbnRyeS50aW1lLFxuICAgICAgfTtcblxuICAgICAgaWYgKGV4aXN0aW5nRW50cnlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY3VycmVudFZhbHVlcyA9IFtcbiAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKDAsIGV4aXN0aW5nRW50cnlJbmRleCksXG4gICAgICAgICAgaW50ZXJzZWN0aW9uRW50cnksXG4gICAgICAgICAgLi4uY3VycmVudFZhbHVlcy5zbGljZShleGlzdGluZ0VudHJ5SW5kZXggKyAxKSxcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZXMgPSBbLi4uY3VycmVudFZhbHVlcywgaW50ZXJzZWN0aW9uRW50cnldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uIHVwZGF0ZUludGVyc2VjdGlvbnMnLCBjdXJyZW50VmFsdWVzLmxlbmd0aCk7XG5cbiAgICB6b25lLnJ1bigoKSA9PiBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLnNldChjdXJyZW50VmFsdWVzKSk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSAocmVuZGVyZWQ6IGJvb2xlYW4sIGVuYWJsZWQ6IGJvb2xlYW4sIHJvb3RFbDogSFRNTEVsZW1lbnQgfCBudWxsKSA9PiB7XG4gICAgb2JzZXJ2ZXIoKT8uZGlzY29ubmVjdCgpO1xuICAgIGN1cnJlbnRseU9ic2VydmVkRWxlbWVudHMuY2xlYXIoKTtcblxuICAgIGlmICghcmVuZGVyZWQgfHwgIWVuYWJsZWQgfHwgIXJvb3RFbCkge1xuICAgICAgb2JzZXJ2ZXIuc2V0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld09ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB1cGRhdGVJbnRlcnNlY3Rpb25zKGVudHJpZXMpLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcm9vdDogcm9vdEVsLFxuICAgIH0pO1xuXG4gICAgb2JzZXJ2ZXIuc2V0KG5ld09ic2VydmVyKTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVPYnNlcnZlZEVsZW1lbnRzID0gKG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwsIGVsZW1lbnRzOiBFbGVtZW50U2lnbmFsVmFsdWUpID0+IHtcbiAgICBjb25zdCByb290RWwgPSByb290KCkuY3VycmVudEVsZW1lbnQ7XG4gICAgY29uc3Qgcm9vdEJvdW5kcyA9IHJvb3RFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAoIW9ic2VydmVyIHx8ICFyb290RWwpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJJbnRlcnNlY2lvblZhbHVlID0gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbCgpO1xuICAgIGNvbnN0IG5ld0ludGVyc2VjdGlvblZhbHVlOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICBpZiAoY3VycmVudGx5T2JzZXJ2ZWRFbGVtZW50cy5oYXMoZWwpKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnlJbmRleCA9IGN1cnJJbnRlcnNlY2lvblZhbHVlLmZpbmRJbmRleCgodikgPT4gdi50YXJnZXQgPT09IGVsKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdFbnRyeSA9IGN1cnJJbnRlcnNlY2lvblZhbHVlW2V4aXN0aW5nRW50cnlJbmRleF07XG5cbiAgICAgICAgaWYgKCFleGlzdGluZ0VudHJ5KSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3QgZmluZCBleGlzdGluZyBlbnRyeSBmb3IgZWxlbWVudC4gVGhlIGludGVyc2VjdGlvbiBvYnNlcnZlciBtaWdodCBiZSBicm9rZW4gbm93LicsIGVsKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0ludGVyc2VjdGlvblZhbHVlLnB1c2goZXhpc3RpbmdFbnRyeSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbml0aWFsRWxlbWVudFZpc2liaWxpdHkgPSBpc0VsZW1lbnRWaXNpYmxlKHtcbiAgICAgICAgY29udGFpbmVyOiByb290RWwsXG4gICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghaW5pdGlhbEVsZW1lbnRWaXNpYmlsaXR5KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHZpc2liaWxpdHkgZGF0YSBmb3VuZCBmb3IgZWxlbWVudC4nLCB7XG4gICAgICAgICAgZWxlbWVudDogZWwsXG4gICAgICAgICAgY29udGFpbmVyOiByb290RWwsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbEJvdW5kcyA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCBpbmxpbmVJbnRlcnNlY3Rpb25SYXRpbyA9IGluaXRpYWxFbGVtZW50VmlzaWJpbGl0eS5pbmxpbmVJbnRlcnNlY3Rpb24gLyAxMDA7XG4gICAgICBjb25zdCBibG9ja0ludGVyc2VjdGlvblJhdGlvID0gaW5pdGlhbEVsZW1lbnRWaXNpYmlsaXR5LmJsb2NrSW50ZXJzZWN0aW9uIC8gMTAwO1xuICAgICAgY29uc3QgaXNJbnRlcnNlY3RpbmcgPSBpbmxpbmVJbnRlcnNlY3Rpb25SYXRpbyA+IDAgJiYgYmxvY2tJbnRlcnNlY3Rpb25SYXRpbyA+IDA7XG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb25SYXRpbyA9IE1hdGgubWluKGlubGluZUludGVyc2VjdGlvblJhdGlvLCBibG9ja0ludGVyc2VjdGlvblJhdGlvKTtcblxuICAgICAgLy8gUm91bmQgdGhlIGludGVyc2VjdGlvbiByYXRpbyB0byB0aGUgbmVhcmVzdCAwLjAxIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IGVycm9ycyBhbmQgc3lzdGVtIHNjYWxpbmcgaXNzdWVzLlxuICAgICAgY29uc3Qgcm91bmRlZEludGVyc2VjdGlvblJhdGlvID0gTWF0aC5yb3VuZChpbnRlcnNlY3Rpb25SYXRpbyAqIDEwMCkgLyAxMDA7XG5cbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbkVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5ID0ge1xuICAgICAgICBib3VuZGluZ0NsaWVudFJlY3Q6IGVsQm91bmRzLFxuICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbzogcm91bmRlZEludGVyc2VjdGlvblJhdGlvLFxuICAgICAgICBpbnRlcnNlY3Rpb25SZWN0OiBlbEJvdW5kcyxcbiAgICAgICAgaXNJbnRlcnNlY3RpbmcsXG4gICAgICAgIHJvb3RCb3VuZHM6IHJvb3RCb3VuZHMgPz8gbnVsbCxcbiAgICAgICAgdGFyZ2V0OiBlbCxcbiAgICAgICAgdGltZTogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICB9O1xuXG4gICAgICBuZXdJbnRlcnNlY3Rpb25WYWx1ZS5wdXNoKGludGVyc2VjdGlvbkVudHJ5KTtcblxuICAgICAgY3VycmVudGx5T2JzZXJ2ZWRFbGVtZW50cy5hZGQoZWwpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cy5wcmV2aW91c0VsZW1lbnRzKSB7XG4gICAgICBpZiAoZWxlbWVudHMuY3VycmVudEVsZW1lbnRzLmluY2x1ZGVzKGVsKSkgY29udGludWU7XG5cbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbCk7XG4gICAgICBjdXJyZW50bHlPYnNlcnZlZEVsZW1lbnRzLmRlbGV0ZShlbCk7XG4gICAgfVxuXG4gICAgZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQobmV3SW50ZXJzZWN0aW9uVmFsdWUpO1xuICB9O1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCByb290RWwgPSByb290KCkuY3VycmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCByZW5kZXJlZCA9IGlzUmVuZGVyZWQoKTtcbiAgICAgIGNvbnN0IGVuYWJsZWQgPSBpc0VuYWJsZWQoKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHVwZGF0ZUludGVyc2VjdGlvbk9ic2VydmVyKHJlbmRlcmVkLCBlbmFibGVkLCByb290RWwpKTtcblxuICAgICAgY29uc29sZS5sb2coYHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24gdXBkYXRlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6ICR7cmVuZGVyZWR9ICR7ZW5hYmxlZH1gKTtcbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG4gICAgY29uc3Qgb2JzID0gb2JzZXJ2ZXIoKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB1cGRhdGVPYnNlcnZlZEVsZW1lbnRzKG9icywgZWxzKSk7XG5cbiAgICBjb25zb2xlLmxvZyhgc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbiB1cGRhdGVPYnNlcnZlZEVsZW1lbnRzOiAke2Vscy5jdXJyZW50RWxlbWVudHMubGVuZ3RofWApO1xuICB9KTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlcigpPy5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudEludGVyc2VjdGlvbiA9IChvcHRpb25zPzogU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMpID0+XG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24oaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRDaGlsZHJlbiA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcbiAgY29uc3QgZWxlbWVudE11dGF0aW9ucyA9IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoZWxlbWVudHMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgLy8gQ2hhbmdlcyB0byB0aGUgRE9NIG1heSBhZmZlY3QgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50LlxuICAgIGVsZW1lbnRNdXRhdGlvbnMoKTtcblxuICAgIGlmICghZWxzLmN1cnJlbnRFbGVtZW50KSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVscy5jdXJyZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYHNpZ25hbEVsZW1lbnRDaGlsZHJlbiBjaGFuZ2VzOiAke2NoaWxkcmVuLmxlbmd0aH1gKTtcblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldmlvdXNTaWduYWxWYWx1ZSA9IDxUPihzaWduYWw6IFNpZ25hbDxUPikgPT4ge1xuICBjb25zdCBvYnMgPSB0b09ic2VydmFibGUoc2lnbmFsKS5waXBlKFxuICAgIHBhaXJ3aXNlKCksXG4gICAgbWFwKChbcHJldl0pID0+IHByZXYpLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN5bmNTaWduYWwgPSA8VD4oZnJvbTogU2lnbmFsPFQ+LCB0bzogV3JpdGFibGVTaWduYWw8VD4pID0+IHtcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmb3JtVmFsID0gZnJvbSgpO1xuXG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRvLnNldChmb3JtVmFsKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZWJvdW5jZUZpcnN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnRyb2xWYWx1ZVNpZ25hbCA9IDxUIGV4dGVuZHMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAgfCBGb3JtQXJyYXk+KFxuICBjb250cm9sOiBULFxuICBvcHRpb25zPzogQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCB2Y3NPYnMgPSBvcHRpb25zPy5kZWJvdW5jZVRpbWVcbiAgICA/IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKG9wdGlvbnM/LmRlYm91bmNlVGltZSA/PyAzMDApKVxuICAgIDogY29udHJvbC52YWx1ZUNoYW5nZXM7XG5cbiAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPFJldHVyblR5cGU8VFsnZ2V0UmF3VmFsdWUnXT4+ID0gb3B0aW9ucz8uZGVib3VuY2VGaXJzdFxuICAgID8gbWVyZ2Uob2YoY29udHJvbC52YWx1ZSksIHZjc09icylcbiAgICA6IHZjc09icy5waXBlKHN0YXJ0V2l0aChjb250cm9sLmdldFJhd1ZhbHVlKCkpKTtcblxuICByZXR1cm4gdG9TaWduYWwob2JzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGVxdWFsKGEsIGIpKSksIHtcbiAgICByZXF1aXJlU3luYzogdHJ1ZSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBpdGVtIGluIHRoZSBwYWlyIGlzIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIHRoZSBjdXJyZW50IHZhbHVlLlxuICovXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsV2l0aFByZXZpb3VzID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucykpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBzdGFydFdpdGgoW251bGwsIGNvbnRyb2wuZ2V0UmF3VmFsdWUoKV0pLFxuICApO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgY29udHJvbFZhbHVlU2lnbmFsYCBpbnN0ZWFkIHdpdGggYGRlYm91bmNlVGltZWAgb3B0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgMzAwXG4gICAqL1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBzZXQgdG8gYDMwMGAgYW5kIGBkZWJvdW5jZUZpcnN0YCBzZXQgdG8gYHRydWVgLlxuICovXG5leHBvcnQgY29uc3QgZGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbD4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiBjb250cm9sVmFsdWVTaWduYWwoY29udHJvbCwgb3B0aW9ucyA/PyB7IGRlYm91bmNlVGltZTogMzAwLCBkZWJvdW5jZUZpcnN0OiB0cnVlIH0pO1xuXG5leHBvcnQgdHlwZSBJbmplY3RVdGlsQ29uZmlnID0ge1xuICAvKiogVGhlIGluamVjdG9yIHRvIHVzZSBmb3IgdGhlIGluamVjdGlvbi4gTXVzdCBiZSBwcm92aWRlZCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCBmcm9tIHdpdGhpbiBhIGluamVjdGlvbiBjb250ZXh0LiAqL1xuICBpbmplY3Rvcj86IEluamVjdG9yO1xufTtcblxuZXhwb3J0IHR5cGUgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxJbiwgT3V0PiA9IHtcbiAgLyoqXG4gICAqIEEgdHJhbnNmb3JtIGZ1bmN0aW9uIHNpbWlsYXIgdG8gdGhlIGB0cmFuc2Zvcm1gIGZ1bmN0aW9uIGluIEFuZ3VsYXIgaW5wdXQgYmluZGluZ3MuXG4gICAqIENhbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgdmFsdWUgYmVmb3JlIGl0IGlzIHJldHVybmVkLlxuICAgKiBFLmcuIHRyYW5zZm9ybWluZyBgXCJ0cnVlXCJgIHRvIGB0cnVlYCBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZS5cbiAgICovXG4gIHRyYW5zZm9ybT86ICh2YWx1ZTogSW4pID0+IE91dDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbmplY3RPclJ1bkluQ29udGV4dCA9IDxUPihmbjogKCkgPT4gVCwgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZykgPT4ge1xuICBpZiAoY29uZmlnPy5pbmplY3Rvcikge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoY29uZmlnLmluamVjdG9yLCBmbik7XG4gIH1cblxuICByZXR1cm4gZm4oKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1PclJldHVybiA9IDxJbiwgT3V0PihzcmM6IFNpZ25hbDxJbj4sIGNvbmZpZz86IEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8SW4sIE91dD4pID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjb25maWc/LnRyYW5zZm9ybTtcblxuICBpZiAodHJhbnNmb3JtZXIpIHtcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gdHJhbnNmb3JtZXIoc3JjKCkpKTtcbiAgfVxuXG4gIHJldHVybiBzcmMgYXMgdW5rbm93biBhcyBTaWduYWw8T3V0Pjtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyB0aGUgY3VycmVudCByb3V0ZSBmcmFnbWVudCAodGhlIHBhcnQgYWZ0ZXIgdGhlICMgaW5zaWRlIHRoZSB1cmwgaWYgcHJlc2VudCkgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RGcmFnbWVudCA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gICAgY29uc3Qgc3JjID0gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLmZyYWdtZW50JCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5mcmFnbWVudCB9KTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHF1ZXJ5IHBhcmFtZXRlcnMgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RRdWVyeVBhcmFtcyA9IChjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgICByZXR1cm4gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1zJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtcyB9KTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcm91dGUgZGF0YSBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFJvdXRlRGF0YSA9IChjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgICByZXR1cm4gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLmRhdGEkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLmRhdGEgfSk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IHRoZSBjdXJyZW50IHJvdXRlIHRpdGxlIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVUaXRsZSA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG4gICAgY29uc3Qgc3JjID0gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLnRpdGxlJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS50aXRsZSB9KTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBhdGggcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFBhdGhQYXJhbXMgPSAoY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZykgPT4ge1xuICByZXR1cm4gaW5qZWN0T3JSdW5JbkNvbnRleHQoKCkgPT4ge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIHRvU2lnbmFsKHJvdXRlclN0YXRlU2VydmljZS5wYXRoUGFyYW1zJCwgeyBpbml0aWFsVmFsdWU6IHJvdXRlclN0YXRlU2VydmljZS5wYXRoUGFyYW1zIH0pO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhIHNwZWNpZmljIHF1ZXJ5IHBhcmFtZXRlciBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFF1ZXJ5UGFyYW0gPSA8VCA9IHN0cmluZyB8IG51bGw+KFxuICBrZXk6IHN0cmluZyxcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSBpbmplY3RRdWVyeVBhcmFtcyhjb25maWcpO1xuICBjb25zdCBzcmMgPSBjb21wdXRlZCgoKSA9PiBxdWVyeVBhcmFtcygpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPHN0cmluZyB8IG51bGw+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcm91dGUgZGF0YSBpdGVtIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVEYXRhSXRlbSA9IDxUID0gdW5rbm93bj4oXG4gIGtleTogc3RyaW5nLFxuICBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnICYgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzx1bmtub3duLCBUPixcbikgPT4ge1xuICBjb25zdCBkYXRhID0gaW5qZWN0Um91dGVEYXRhKGNvbmZpZyk7XG4gIGNvbnN0IHNyYyA9IGNvbXB1dGVkKCgpID0+IGRhdGEoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxUPjtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhIHNwZWNpZmljIHBhdGggcGFyYW1ldGVyIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UGF0aFBhcmFtID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHN0cmluZyB8IG51bGwsIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IHBhdGhQYXJhbXMgPSBpbmplY3RQYXRoUGFyYW1zKGNvbmZpZyk7XG4gIGNvbnN0IHNyYyA9IGNvbXB1dGVkKCgpID0+IHBhdGhQYXJhbXMoKVtrZXldID8/IG51bGwpIGFzIFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcblxuICByZXR1cm4gdHJhbnNmb3JtT3JSZXR1cm4oc3JjLCBjb25maWcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUlzUmVuZGVyZWRTaWduYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc2lnbmFsKGZhbHNlKTtcblxuICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgIGlmICghdmFsdWUoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ1JlbmRlciBzaWduYWwgd2FzIG5vdCBzZXQgdG8gdHJ1ZS4gVGhpcyBjYW4gY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvci4gTWFrZSBzdXJlIHRvIC5iaW5kKCkgdGhlIHJlbmRlciBzaWduYWwgYXQgdGhlIGVuZCBvZiB0aGUgY29uc3RydWN0b3IuJyxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB2YWx1ZSxcbiAgICBiaW5kOiAoKSA9PiBlZmZlY3QoKCkgPT4gdmFsdWUuc2V0KHRydWUpLCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbkFuaW1hdGVTaWduYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc2lnbmFsKGZhbHNlKTtcblxuICBuZXh0RnJhbWUoKCkgPT4ge1xuICAgIHZhbHVlLnNldCh0cnVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0ZTogdmFsdWUsXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBDdXJzb3JEcmFnU2Nyb2xsRGlyZWN0aW9uID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyB8ICdib3RoJztcblxuZXhwb3J0IHR5cGUgTWF5YmVTaWduYWw8VD4gPSBUIHwgU2lnbmFsPFQ+O1xuXG5leHBvcnQgY29uc3QgbWF5YmVTaWduYWxWYWx1ZSA9IDxUPih2YWx1ZTogTWF5YmVTaWduYWw8VD4pID0+IHtcbiAgaWYgKGlzU2lnbmFsKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IHR5cGUgQ3Vyc29yRHJhZ1Njcm9sbE9wdGlvbnMgPSB7XG4gIC8qKiBJZiB0cnVlLCBjdXJzb3IgZHJhZyBzY3JvbGxpbmcgd2lsbCBiZSBlbmFibGVkLiAqL1xuICBlbmFibGVkPzogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKiBUaGUgYWxsb3dlZCBzY3JvbGwgZGlyZWN0aW9uLiAqL1xuICBhbGxvd2VkRGlyZWN0aW9uPzogTWF5YmVTaWduYWw8Q3Vyc29yRHJhZ1Njcm9sbERpcmVjdGlvbj47XG59O1xuXG4vKiogVGhlIGRlYWR6b25lIGluIHBpeGVscyBhZnRlciB3aGljaCB0aGUgY3Vyc29yIGRyYWcgc2Nyb2xsIHdpbGwgdGFrZSBlZmZlY3QuICovXG5jb25zdCBDVVJTT1JfRFJBR19TQ1JPTExfREVBRFpPTkUgPSA1O1xuXG4vKiogVGhlIGNsYXNzIHRoYXQgaXMgYWRkZWQgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgY3Vyc29yIGlzIGJlaW5nIGRyYWdnZWQuICovXG5jb25zdCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MgPSAnZXQtY3Vyc29yLWRyYWctc2Nyb2xsLS1zY3JvbGxpbmcnO1xuY29uc3QgQ1VSU09SX0RSQUdfSU5JVF9DTEFTUyA9ICdldC1jdXJzb3ItZHJhZy1zY3JvbGwtLWluaXQnO1xuXG4vKiogQSBmdW5jdGlvbiB0byBhcHBseSBjdXJzb3IgZHJhZyBzY3JvbGwgYmVoYXZpb3IgdG8gYW4gZWxlbWVudC4gKi9cbmV4cG9ydCBjb25zdCB1c2VDdXJzb3JEcmFnU2Nyb2xsID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIG9wdGlvbnM/OiBDdXJzb3JEcmFnU2Nyb2xsT3B0aW9ucykgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaXJzdEVsZW1lbnRTaWduYWwoZWxlbWVudHMpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCB7IGVuYWJsZWQgPSBzaWduYWwodHJ1ZSksIGFsbG93ZWREaXJlY3Rpb24gPSAnYm90aCcgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHNjcm9sbFN0YXRlID0gc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlKGVsZW1lbnRzKTtcbiAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgY29uc3QgaXNEcmFnZ2luZyA9IHNpZ25hbChmYWxzZSk7XG4gIGNvbnN0IGlzSW5pdERyYWdnaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaW5pdGlhbERyYWdQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IGluaXRpYWxTY3JvbGxQb3NpdGlvbiA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IGRyYWdBbW91bnQgPSBzaWduYWwoeyB4OiAwLCB5OiAwIH0pO1xuICBjb25zdCBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgY29uc3QgY2FuU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxTdGF0ZSA9IHNjcm9sbFN0YXRlKCk7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gbWF5YmVTaWduYWxWYWx1ZShhbGxvd2VkRGlyZWN0aW9uKTtcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGxTdGF0ZS5jYW5TY3JvbGxIb3Jpem9udGFsbHkgfHwgY3VycmVudFNjcm9sbFN0YXRlLmNhblNjcm9sbFZlcnRpY2FsbHk7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGxTdGF0ZS5jYW5TY3JvbGxIb3Jpem9udGFsbHk7XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIHJldHVybiBjdXJyZW50U2Nyb2xsU3RhdGUuY2FuU2Nyb2xsVmVydGljYWxseTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIENsZWFudXAgaWYgdGhlIGVsZW1lbnQgdGhlIGN1cnNvciBkcmFnIHNjcm9sbCBpcyBib3VuZCB0byBnZXRzIGNoYW5nZWRcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7IHByZXZpb3VzRWxlbWVudCB9ID0gZWxlbWVudCgpO1xuXG4gICAgaWYgKHByZXZpb3VzRWxlbWVudCkge1xuICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUocHJldmlvdXNFbGVtZW50LCAnY3Vyc29yJyk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDb25kaXRpb25hbGx5IGFwcGx5IHN0eWxlcy9jbGFzc2VzIHRvIHRoZSBlbGVtZW50IGFuZCB0aGUgZG9jdW1lbnRcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyQ2FuU2Nyb2xsID0gY2FuU2Nyb2xsKCk7XG4gICAgY29uc3QgaXNFbmFibGVkID0gZW5hYmxlZCgpO1xuICAgIGNvbnN0IGN1cnJJc0RyYWdnaW5nID0gaXNEcmFnZ2luZygpO1xuICAgIGNvbnN0IGN1cnJJc0luaXREcmFnZ2luZyA9IGlzSW5pdERyYWdnaW5nKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBlbGVtZW50KCkuY3VycmVudEVsZW1lbnQ7XG5cbiAgICAgIGlmICghZWwpIHJldHVybjtcblxuICAgICAgaWYgKCFjdXJyQ2FuU2Nyb2xsIHx8ICFpc0VuYWJsZWQpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICdjdXJzb3InKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICdzY3JvbGxTbmFwVHlwZScpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3Njcm9sbEJlaGF2aW9yJyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBDVVJTT1JfRFJBR19TQ1JPTExJTkdfQ0xBU1MpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgQ1VSU09SX0RSQUdfSU5JVF9DTEFTUyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2N1cnNvcicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJySXNJbml0RHJhZ2dpbmcpIHtcbiAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoZWwsIENVUlNPUl9EUkFHX0lOSVRfQ0xBU1MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycklzRHJhZ2dpbmcpIHtcbiAgICAgICAgcmVuZGVyZXIuYWRkQ2xhc3MoZWwsIENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyk7XG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnc2Nyb2xsU25hcFR5cGUnLCAnbm9uZScpO1xuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ3Njcm9sbEJlaGF2aW9yJywgJ3Vuc2V0Jyk7XG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnY3Vyc29yJywgJ2dyYWJiaW5nJyk7XG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2N1cnNvcicsICdncmFiYmluZycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWN1cnJJc0luaXREcmFnZ2luZyAmJiAhY3VycklzRHJhZ2dpbmcpIHtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdjdXJzb3InLCAnZ3JhYicpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3Njcm9sbFNuYXBUeXBlJyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnc2Nyb2xsQmVoYXZpb3InKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBDVVJTT1JfRFJBR19JTklUX0NMQVNTKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnY3Vyc29yJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFVwZGF0ZSB0aGUgZWxlbWVudCdzIHNjcm9sbCBwb3NpdGlvbiB3aGVuIHRoZSB1c2VyIGRyYWdzXG4gIGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VyckRyYWdBbW91bnQgPSBkcmFnQW1vdW50KCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycklzRHJhZ2dpbmcgPSBpc0RyYWdnaW5nKCk7XG4gICAgICBjb25zdCBlbCA9IGVsZW1lbnQoKS5jdXJyZW50RWxlbWVudDtcbiAgICAgIGNvbnN0IHsgeDogZHJhZ1gsIHk6IGRyYWdZIH0gPSBjdXJyRHJhZ0Ftb3VudDtcbiAgICAgIGNvbnN0IHsgeDogc2Nyb2xsWCwgeTogc2Nyb2xsWSB9ID0gaW5pdGlhbFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICBjb25zdCBjdXJyQWxsb3dlZERpcmVjdGlvbiA9IG1heWJlU2lnbmFsVmFsdWUoYWxsb3dlZERpcmVjdGlvbik7XG5cbiAgICAgIGlmICghZWwgfHwgIWN1cnJJc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICAgIHN3aXRjaCAoY3VyckFsbG93ZWREaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnYm90aCc6XG4gICAgICAgICAgZWwuc2Nyb2xsKHtcbiAgICAgICAgICAgIHRvcDogZHJhZ1kgKyBzY3JvbGxZLFxuICAgICAgICAgICAgbGVmdDogZHJhZ1ggKyBzY3JvbGxYLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICAgICAgZWwuc2Nyb2xsKHtcbiAgICAgICAgICAgIGxlZnQ6IGRyYWdYICsgc2Nyb2xsWCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgICBlbC5zY3JvbGwoe1xuICAgICAgICAgICAgdG9wOiBkcmFnWSArIHNjcm9sbFksXG4gICAgICAgICAgICBiZWhhdmlvcjogJ2luc3RhbnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCB1cGRhdGVEcmFnZ2luZyA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWwgPSBlbGVtZW50KCkuY3VycmVudEVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBjb25zdCBkeCA9IChlLmNsaWVudFggLSBpbml0aWFsRHJhZ1Bvc2l0aW9uKCkueCkgKiAtMTtcbiAgICBjb25zdCBkeSA9IChlLmNsaWVudFkgLSBpbml0aWFsRHJhZ1Bvc2l0aW9uKCkueSkgKiAtMTtcblxuICAgIGRyYWdBbW91bnQuc2V0KHsgeDogZHgsIHk6IGR5IH0pO1xuXG4gICAgaWYgKE1hdGguYWJzKGR4KSA+IENVUlNPUl9EUkFHX1NDUk9MTF9ERUFEWk9ORSB8fCBNYXRoLmFicyhkeSkgPiBDVVJTT1JfRFJBR19TQ1JPTExfREVBRFpPTkUpIHtcbiAgICAgIGlzRHJhZ2dpbmcuc2V0KHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVEcmFnZ2luZ0VuZCA9ICgpID0+IHtcbiAgICBpc0RyYWdnaW5nLnNldChmYWxzZSk7XG4gICAgaXNJbml0RHJhZ2dpbmcuc2V0KGZhbHNlKTtcbiAgICBpbml0aWFsRHJhZ1Bvc2l0aW9uLnNldCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgaW5pdGlhbFNjcm9sbFBvc2l0aW9uLnNldCh7IHg6IDAsIHk6IDAgfSk7XG4gICAgZHJhZ0Ftb3VudC5zZXQoeyB4OiAwLCB5OiAwIH0pO1xuICB9O1xuXG4gIGNvbnN0IHNldHVwRHJhZ2dpbmcgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IG1vdXNlVXAgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJyk7XG4gICAgY29uc3QgbW91c2VNb3ZlID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJyk7XG4gICAgY29uc3QgZWwgPSBlbGVtZW50KCkuY3VycmVudEVsZW1lbnQ7XG5cbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICBtb3VzZU1vdmVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZiksXG4gICAgICAgIHRha2VVbnRpbChtb3VzZVVwKSxcbiAgICAgICAgdGFwKChlKSA9PiB1cGRhdGVEcmFnZ2luZyhlKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBtb3VzZVVwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKGRlc3Ryb3lSZWYpLFxuICAgICAgICB0YXAoKCkgPT4gdXBkYXRlRHJhZ2dpbmdFbmQoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBpbml0aWFsRHJhZ1Bvc2l0aW9uLnNldCh7IHg6IGUuY2xpZW50WCwgeTogZS5jbGllbnRZIH0pO1xuICAgIGluaXRpYWxTY3JvbGxQb3NpdGlvbi5zZXQoeyB4OiBlbC5zY3JvbGxMZWZ0LCB5OiBlbC5zY3JvbGxUb3AgfSk7XG4gICAgaXNJbml0RHJhZ2dpbmcuc2V0KHRydWUpO1xuICB9O1xuXG4gIHRvT2JzZXJ2YWJsZShlbGVtZW50KVxuICAgIC5waXBlKFxuICAgICAgbWFwKChlKSA9PiBlPy5jdXJyZW50RWxlbWVudCksXG4gICAgICBzd2l0Y2hNYXAoKGVsKSA9PiAoZWwgPyBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWwsICdtb3VzZWRvd24nKSA6IG9mKG51bGwpKSksXG4gICAgICBmaWx0ZXIoKGUpOiBlIGlzIE1vdXNlRXZlbnQgPT4gISFlKSxcbiAgICAgIGZpbHRlcigoKSA9PiBlbmFibGVkKCkpLFxuICAgICAgdGFwKChlKSA9PiBzZXR1cERyYWdnaW5nKGUpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nLmFzUmVhZG9ubHkoKSxcbiAgICBjdXJyZW50RHJhZ0Ftb3VudDogZHJhZ0Ftb3VudC5hc1JlYWRvbmx5KCksXG4gIH07XG59O1xuXG4vKipcbiAqIEEgY29tcHV0ZWQgdGhhdCB3aWxsIG9ubHkgYmUgcmVhY3RpdmUgdW50aWwgdGhlIHNvdXJjZSBzaWduYWwgY29udGFpbnMgYSB0cnV0aHkgdmFsdWUuXG4gKiBBbGwgc3Vic2VxdWVudCBjaGFuZ2VzIGluc2lkZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBpZ25vcmVkLlxuICovXG5leHBvcnQgY29uc3QgY29tcHV0ZWRUaWxsVHJ1dGh5ID0gPFQ+KHNvdXJjZTogU2lnbmFsPFQ+KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc2lnbmFsPFQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCByZWYgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gc291cmNlKCk7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdmFsdWUuc2V0KHZhbCk7XG4gICAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgcmV0dXJuIHZhbHVlLmFzUmVhZG9ubHkoKTtcbn07XG5cbi8qKlxuICogQSBjb21wdXRlZCB0aGF0IHdpbGwgb25seSBiZSByZWFjdGl2ZSB1bnRpbCB0aGUgc291cmNlIHNpZ25hbCBjb250YWlucyBhIGZhbHN5IHZhbHVlLlxuICogQWxsIHN1YnNlcXVlbnQgY2hhbmdlcyBpbnNpZGUgdGhlIGNvbXB1dGF0aW9uIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbXB1dGVkVGlsbEZhbHN5ID0gPFQ+KHNvdXJjZTogU2lnbmFsPFQ+KSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc2lnbmFsPFQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCByZWYgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gc291cmNlKCk7XG5cbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHZhbHVlLnNldCh2YWwpO1xuICAgICAgICByZWYuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIHJldHVybiB2YWx1ZS5hc1JlYWRvbmx5KCk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIHhzICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXNYcyA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzWHMkLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyBzbSAqL1xuZXhwb3J0IGNvbnN0IGluamVjdElzU20gPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5pc1NtJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgbWQgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJc01kID0gKCkgPT4ge1xuICByZXR1cm4gdG9TaWduYWwoaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuaXNNZCQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIGxnICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXNMZyA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzTGckLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyB4bCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdElzWGwgPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5pc1hsJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgMnhsICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXMyWGwgPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5pczJYbCQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIEluamVjdCBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gKiBUaGlzIHZhbHVlIGlzIG5vdCByZWFjdGl2ZS4gSWYgeW91IHdhbnQgdG8gcmVhY3QgdG8gY2hhbmdlcywgdXNlIHRoZSB7QGxpbmsgaW5qZWN0T2JzZXJ2ZUJyZWFrcG9pbnR9IGZ1bmN0aW9uIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbmplY3RCcmVha3BvaW50SXNNYXRjaGVkID0gKG9wdGlvbnM6IHsgbWluPzogbnVtYmVyIHwgQnJlYWtwb2ludDsgbWF4PzogbnVtYmVyIHwgQnJlYWtwb2ludCB9KSA9PiB7XG4gIHJldHVybiBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5pc01hdGNoZWQob3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdE9ic2VydmVCcmVha3BvaW50ID0gKG9wdGlvbnM6IHsgbWluPzogbnVtYmVyIHwgQnJlYWtwb2ludDsgbWF4PzogbnVtYmVyIHwgQnJlYWtwb2ludCB9KSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5vYnNlcnZlKG9wdGlvbnMpLCB7IGluaXRpYWxWYWx1ZTogaW5qZWN0QnJlYWtwb2ludElzTWF0Y2hlZChvcHRpb25zKSB9KTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyB0aGUgY3VycmVudCBicmVha3BvaW50LiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEN1cnJlbnRCcmVha3BvaW50ID0gKCkgPT4ge1xuICByZXR1cm4gdG9TaWduYWwoaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuY3VycmVudFZpZXdwb3J0JCwge1xuICAgIGluaXRpYWxWYWx1ZTogaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuY3VycmVudFZpZXdwb3J0LFxuICB9KTtcbn07XG4iXX0=
850
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLFVBQVUsRUFFVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULG1CQUFtQixFQUduQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFFBQVEsRUFDUixxQkFBcUIsRUFDckIsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhGLE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBQ0wsRUFBRSxFQUNGLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQThCdEQsU0FBUyxlQUFlLENBQUMsRUFBVztJQUNsQyxJQUFJLFFBQVEsQ0FBQyxF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LEVBQUUsWUFBWSxFQUFFLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsSCxDQUFDLENBQUM7QUFFRix5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxFQUFFO0lBQzFDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN4RCxZQUFZLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLGVBQWU7S0FDdEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlRWxlbWVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBFZmZlY3RSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBTaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxuICBpc1NpZ25hbCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHBhaXJ3aXNlLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUm91dGVyU3RhdGVTZXJ2aWNlLCBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBCcmVha3BvaW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgbmV4dEZyYW1lIH0gZnJvbSAnLi9hbmltYXRpb24udXRpbHMnO1xuaW1wb3J0IHsgZXF1YWwgfSBmcm9tICcuL2VxdWFsLnV0aWwnO1xuaW1wb3J0IHsgaXNFbGVtZW50VmlzaWJsZSB9IGZyb20gJy4vc2Nyb2xsYWJsZS51dGlscyc7XG5cbnR5cGUgU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSA9XG4gIHwgSFRNTEVsZW1lbnRcbiAgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICB8IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50PlxuICB8IEFycmF5PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZDtcblxudHlwZSBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUgPVxuICB8IEhUTUxFbGVtZW50XG4gIHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgfCBPYnNlcnZhYmxlPFNpZ25hbEVsZW1lbnRCaW5kaW5nQ29tcGxleFR5cGU+XG4gIHwgU2lnbmFsPFNpZ25hbEVsZW1lbnRCaW5kaW5nQ29tcGxleFR5cGU+XG4gIHwgUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQ+XG4gIHwgRWxlbWVudFNpZ25hbDtcblxudHlwZSBFbGVtZW50U2lnbmFsID0gU2lnbmFsPHtcbiAgLyoqIEBkZXByZWNhdGVkIEFsd2F5cyB1c2UgY3VycmVudEVsZW1lbnRzICAqL1xuICBjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCBBbHdheXMgdXNlIHByZXZpb3VzRWxlbWVudHMgICovXG4gIHByZXZpb3VzRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICBjdXJyZW50RWxlbWVudHM6IEhUTUxFbGVtZW50W107XG4gIHByZXZpb3VzRWxlbWVudHM6IEhUTUxFbGVtZW50W107XG59PjtcblxudHlwZSBFbGVtZW50U2lnbmFsVmFsdWUgPSBSZXR1cm5UeXBlPEVsZW1lbnRTaWduYWw+O1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTaWduYWwoZWw6IHVua25vd24pOiBlbCBpcyBFbGVtZW50U2lnbmFsIHtcbiAgaWYgKGlzU2lnbmFsKGVsKSkge1xuICAgIGNvbnN0IHZhbCA9IGVsKCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiAnY3VycmVudEVsZW1lbnQnIGluIHZhbCAmJiAncHJldmlvdXNFbGVtZW50JyBpbiB2YWw7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNvbnN0IGRvY3VtZW50RWxlbWVudFNpZ25hbCA9ICgpOiBFbGVtZW50U2lnbmFsID0+XG4gIHNpZ25hbCh7XG4gICAgY3VycmVudEVsZW1lbnQ6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBwcmV2aW91c0VsZW1lbnQ6IG51bGwsXG4gICAgY3VycmVudEVsZW1lbnRzOiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSxcbiAgICBwcmV2aW91c0VsZW1lbnRzOiBbXSxcbiAgfSk7XG5cbmNvbnN0IGJ1aWxkRWxlbWVudFNpZ25hbCA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IEVsZW1lbnRTaWduYWwgPT4ge1xuICBpZiAoZWwgPT09IG51bGwgfHwgZWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzaWduYWwoeyBjdXJyZW50RWxlbWVudDogbnVsbCwgcHJldmlvdXNFbGVtZW50OiBudWxsLCBjdXJyZW50RWxlbWVudHM6IFtdLCBwcmV2aW91c0VsZW1lbnRzOiBbXSB9KTtcbiAgfVxuXG4gIGlmIChpc0VsZW1lbnRTaWduYWwoZWwpKSB7XG4gICAgcmV0dXJuIGVsO1xuICB9XG5cbiAgbGV0IG1FbFNpZ25hbDogU2lnbmFsPEhUTUxFbGVtZW50W10gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHN3aXRjaEVsZW1lbnQgPSAoKSA9PlxuICAgIHN3aXRjaE1hcCgoZWxPclJlZjogU2lnbmFsRWxlbWVudEJpbmRpbmdDb21wbGV4VHlwZSkgPT4ge1xuICAgICAgaWYgKGVsT3JSZWYgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICAgICAgcmV0dXJuIGVsT3JSZWYuY2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChlbE9yUmVmKSxcbiAgICAgICAgICBtYXAoKCkgPT4gZWxPclJlZi50b0FycmF5KCkubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWxPclJlZikpIHtcbiAgICAgICAgcmV0dXJuIG9mKGVsT3JSZWYubWFwKChyKSA9PiBjb2VyY2VFbGVtZW50KHIpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2VyY2VkRWwgPSBjb2VyY2VFbGVtZW50KGVsT3JSZWYpO1xuICAgICAgICByZXR1cm4gb2YoY29lcmNlZEVsID8gW2NvZXJjZWRFbF0gOiBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBpZiAoZWwgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgbUVsU2lnbmFsID0gdG9TaWduYWwoZWwucGlwZShzd2l0Y2hFbGVtZW50KCkpLCB7IGluaXRpYWxWYWx1ZTogbnVsbCB9KTtcbiAgfSBlbHNlIGlmIChpc1NpZ25hbChlbCkpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbCh0b09ic2VydmFibGUoZWwpLnBpcGUoc3dpdGNoRWxlbWVudCgpKSwgeyBpbml0aWFsVmFsdWU6IG51bGwgfSk7XG4gIH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBRdWVyeUxpc3QpIHtcbiAgICBtRWxTaWduYWwgPSB0b1NpZ25hbChcbiAgICAgIGVsLmNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKGVsKSxcbiAgICAgICAgbWFwKCgpID0+IGVsLnRvQXJyYXkoKS5tYXAoKHIpID0+IGNvZXJjZUVsZW1lbnQocikpKSxcbiAgICAgICksXG4gICAgICB7IGluaXRpYWxWYWx1ZTogbnVsbCB9LFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbUVsU2lnbmFsID0gc2lnbmFsKFtjb2VyY2VFbGVtZW50KGVsKV0pO1xuICB9XG5cbiAgY29uc3QgZWxTaWcgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUobUVsU2lnbmFsKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgoW3ByZXZpb3VzRWxlbWVudHMsIGN1cnJlbnRFbGVtZW50c10pID0+ICh7XG4gICAgICAgIHByZXZpb3VzRWxlbWVudHM6IHByZXZpb3VzRWxlbWVudHMgPz8gW10sXG4gICAgICAgIGN1cnJlbnRFbGVtZW50czogY3VycmVudEVsZW1lbnRzID8/IFtdLFxuICAgICAgICBjdXJyZW50RWxlbWVudDogY3VycmVudEVsZW1lbnRzPy5bMF0gPz8gbnVsbCxcbiAgICAgICAgcHJldmlvdXNFbGVtZW50OiBwcmV2aW91c0VsZW1lbnRzPy5bMF0gPz8gbnVsbCxcbiAgICAgIH0pKSxcbiAgICApLFxuICAgIHsgaW5pdGlhbFZhbHVlOiB7IGN1cnJlbnRFbGVtZW50OiBudWxsLCBwcmV2aW91c0VsZW1lbnQ6IG51bGwsIHByZXZpb3VzRWxlbWVudHM6IFtdLCBjdXJyZW50RWxlbWVudHM6IFtdIH0gfSxcbiAgKTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gZWxTaWcoKSwge1xuICAgIGVxdWFsOiAoYSwgYikgPT5cbiAgICAgIGEuY3VycmVudEVsZW1lbnQgPT09IGIuY3VycmVudEVsZW1lbnQgJiZcbiAgICAgIGEucHJldmlvdXNFbGVtZW50ID09PSBiLnByZXZpb3VzRWxlbWVudCAmJlxuICAgICAgYS5jdXJyZW50RWxlbWVudHMubGVuZ3RoID09PSBiLmN1cnJlbnRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgIGEuY3VycmVudEVsZW1lbnRzLmV2ZXJ5KCh2LCBpKSA9PiB2ID09PSBiLmN1cnJlbnRFbGVtZW50c1tpXSkgJiZcbiAgICAgIGEucHJldmlvdXNFbGVtZW50cy5sZW5ndGggPT09IGIucHJldmlvdXNFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgIGEucHJldmlvdXNFbGVtZW50cy5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYi5wcmV2aW91c0VsZW1lbnRzW2ldKSxcbiAgfSk7XG59O1xuXG5jb25zdCBmaXJzdEVsZW1lbnRTaWduYWwgPSAoZWw6IEVsZW1lbnRTaWduYWwpID0+IHtcbiAgcmV0dXJuIGNvbXB1dGVkKFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBlbCgpO1xuXG4gICAgICBpZiAoY3VycmVudC5jdXJyZW50RWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ01vcmUgdGhhbiBvbmUgZWxlbWVudCBpcyBib3VuZCB0byB0aGUgc2lnbmFsLiBPbmx5IHRoZSBmaXJzdCBlbGVtZW50IHdpbGwgYmUgdXNlZC4nLFxuICAgICAgICAgIGN1cnJlbnQuY3VycmVudEVsZW1lbnRzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyID0gY3VycmVudC5jdXJyZW50RWxlbWVudHNbMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IHByZXYgPSBjdXJyZW50LnByZXZpb3VzRWxlbWVudHNbMF0gPz8gbnVsbDtcblxuICAgICAgcmV0dXJuIHsgY3VycmVudEVsZW1lbnQ6IGN1cnIsIHByZXZpb3VzRWxlbWVudDogcHJldiB9O1xuICAgIH0sXG4gICAgeyBlcXVhbDogKGEsIGIpID0+IGEuY3VycmVudEVsZW1lbnQgPT09IGIuY3VycmVudEVsZW1lbnQgJiYgYS5wcmV2aW91c0VsZW1lbnQgPT09IGIucHJldmlvdXNFbGVtZW50IH0sXG4gICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU2lnbmFsRWZmZWN0c0NvbmZpZzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4ge1xuICAvKiogVGhlIHRva2VucyB0byBhcHBseSBhbmQgdGhlaXIgc2lnbmFsIHZhbHVlICAqL1xuICB0b2tlbk1hcDogVDtcblxuICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgZm9yIGVsZW1lbnRzIHRoYXQgd2VyZSByZW1vdmVkIGZyb20gdGhlIHNpZ25hbCBlZmZlY3RzICovXG4gIGNsZWFudXBGbjogKGVsOiBIVE1MRWxlbWVudCwgdG9rZW5zOiBzdHJpbmdbXSkgPT4gdm9pZDtcblxuICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgZm9yIGVsZW1lbnRzIHRoYXQgd2VyZSBhZGRlZCB0byB0aGUgc2lnbmFsIGVmZmVjdHMgb3Igd2hlbiB0aGVpciBzaWduYWwgdmFsdWUgY2hhbmdlcyAqL1xuICB1cGRhdGVGbjogKGVsOiBIVE1MRWxlbWVudCwgdG9rZW5zOiBzdHJpbmdbXSwgY29uZGl0aW9uUmVzdWx0OiB1bmtub3duKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgYnVpbGRTaWduYWxFZmZlY3RzID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+PihcbiAgZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSxcbiAgY29uZmlnOiBCdWlsZFNpZ25hbEVmZmVjdHNDb25maWc8VD4sXG4pID0+IHtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7IGN1cnJlbnRFbGVtZW50cywgcHJldmlvdXNFbGVtZW50cyB9ID0gZWxlbWVudHMoKTtcblxuICAgIGZvciAoY29uc3QgcHJldmlvdXNFbCBvZiBwcmV2aW91c0VsZW1lbnRzKSB7XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRzLmluY2x1ZGVzKHByZXZpb3VzRWwpKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmtleXMoY29uZmlnLnRva2VuTWFwKVxuICAgICAgICAubWFwKChrZXkpID0+IGtleS5zcGxpdCgnICcpKVxuICAgICAgICAuZmxhdCgpO1xuXG4gICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIGNvbnRpbnVlO1xuXG4gICAgICBjb25maWcuY2xlYW51cEZuKHByZXZpb3VzRWwsIHRva2Vucyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjdXJyZW50RWwgb2YgY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICBpZiAocHJldmlvdXNFbGVtZW50cy5pbmNsdWRlcyhjdXJyZW50RWwpKSBjb250aW51ZTtcblxuICAgICAgZm9yIChjb25zdCBbdG9rZW5zLCBjb25kaXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy50b2tlbk1hcCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0b2tlbkFycmF5ID0gdG9rZW5zLnNwbGl0KCcgJyk7XG4gICAgICAgICAgaWYgKCF0b2tlbkFycmF5Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uZmlnLnVwZGF0ZUZuKGN1cnJlbnRFbCwgdG9rZW5BcnJheSwgY29uZGl0aW9uKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGVmZmVjdHM6IFJlY29yZDxzdHJpbmcsIEVmZmVjdFJlZj4gPSB7fTtcblxuICBjb25zdCBoYXMgPSAodG9rZW5zOiBzdHJpbmcpID0+IHRva2VucyBpbiBlZmZlY3RzO1xuXG4gIGNvbnN0IHB1c2ggPSAodG9rZW5zOiBzdHJpbmcsIHNpZ25hbDogU2lnbmFsPHVua25vd24+KSA9PiB7XG4gICAgaWYgKGhhcyh0b2tlbnMpKSByZXR1cm47XG5cbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIGVmZmVjdHNbdG9rZW5zXSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudEVsZW1lbnRzIH0gPSB1bnRyYWNrZWQoKCkgPT4gZWxlbWVudHMoKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbCBvZiBjdXJyZW50RWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbkFycmF5ID0gdG9rZW5zLnNwbGl0KCcgJyk7XG4gICAgICAgICAgaWYgKCF0b2tlbkFycmF5Lmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgICAgICBjb25maWcudXBkYXRlRm4oZWwsIHRva2VuQXJyYXksIHNpZ25hbCgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgcHVzaE1hbnkgPSAobWFwOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+KSA9PiB7XG4gICAgZm9yIChjb25zdCBbdG9rZW5zLCBzaWduYWxdIG9mIE9iamVjdC5lbnRyaWVzKG1hcCkpIHtcbiAgICAgIHB1c2godG9rZW5zLCBzaWduYWwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAodG9rZW5zOiBzdHJpbmcpID0+IHtcbiAgICBlZmZlY3RzW3Rva2Vuc10/LmRlc3Ryb3koKTtcblxuICAgIGRlbGV0ZSBlZmZlY3RzW3Rva2Vuc107XG5cbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKCkuY3VycmVudEVsZW1lbnRzKSB7XG4gICAgICBjb25zdCB0b2tlbkFycmF5ID0gdG9rZW5zLnNwbGl0KCcgJyk7XG4gICAgICBpZiAoIXRva2VuQXJyYXkubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uZmlnLmNsZWFudXBGbihlbCwgdG9rZW5BcnJheSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU1hbnkgPSAodG9rZW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICByZW1vdmUodG9rZW4pO1xuICAgIH1cbiAgfTtcblxuICBwdXNoTWFueShjb25maWcudG9rZW5NYXApO1xuXG4gIHJldHVybiB7IHJlbW92ZSwgcmVtb3ZlTWFueSwgaGFzLCBwdXNoLCBwdXNoTWFueSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbElzUmVuZGVyZWQgPSAoKSA9PiB7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGFmdGVyTmV4dFJlbmRlcigoKSA9PiBpc1JlbmRlcmVkLnNldCh0cnVlKSk7XG5cbiAgcmV0dXJuIGlzUmVuZGVyZWQuYXNSZWFkb25seSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbENsYXNzZXMgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsIGNsYXNzTWFwOiBUKSA9PiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgcmV0dXJuIGJ1aWxkU2lnbmFsRWZmZWN0cyhlbCwge1xuICAgIHRva2VuTWFwOiBjbGFzc01hcCxcbiAgICBjbGVhbnVwRm46IChlbCwgdG9rZW5zKSA9PiB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCB0b2tlbikpLFxuICAgIHVwZGF0ZUZuOiAoZWwsIHRva2VucywgY29uZGl0aW9uKSA9PiB7XG4gICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCB0b2tlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiByZW5kZXJlci5hZGRDbGFzcyhlbCwgdG9rZW4pKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0Q2xhc3NlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oY2xhc3NNYXA6IFQpID0+XG4gIHNpZ25hbENsYXNzZXMoaW5qZWN0KEVsZW1lbnRSZWYpLCBjbGFzc01hcCk7XG5cbmNvbnN0IEFMV0FZU19UUlVFX0FUVFJJQlVURV9LRVlTID0gWydkaXNhYmxlZCcsICdyZWFkb25seScsICdyZXF1aXJlZCcsICdjaGVja2VkJywgJ3NlbGVjdGVkJywgJ2hpZGRlbicsICdpbmVydCddO1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsQXR0cmlidXRlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oXG4gIGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUsXG4gIGF0dHJpYnV0ZU1hcDogVCxcbikgPT4ge1xuICBjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHJldHVybiBidWlsZFNpZ25hbEVmZmVjdHMoZWwsIHtcbiAgICB0b2tlbk1hcDogYXR0cmlidXRlTWFwLFxuICAgIGNsZWFudXBGbjogKGVsLCB0b2tlbnMpID0+IHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gZWwucmVtb3ZlQXR0cmlidXRlKHRva2VuKSksXG4gICAgdXBkYXRlRm46IChlbCwgdG9rZW5zLCBjb25kaXRpb24pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICAgIGlmIChBTFdBWVNfVFJVRV9BVFRSSUJVVEVfS0VZUy5pbmNsdWRlcyh0b2tlbikpIHtcbiAgICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsIHRva2VuLCAnJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShlbCwgdG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IG51bGwgfHwgY29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoZWwsIHRva2VuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsIHRva2VuLCBgJHtjb25kaXRpb259YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0QXR0cmlidXRlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oYXR0cmlidXRlTWFwOiBUKSA9PlxuICBzaWduYWxBdHRyaWJ1dGVzKGluamVjdChFbGVtZW50UmVmKSwgYXR0cmlidXRlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbFN0eWxlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgc3R5bGVNYXA6IFQpID0+IHtcbiAgY29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICByZXR1cm4gYnVpbGRTaWduYWxFZmZlY3RzKGVsLCB7XG4gICAgdG9rZW5NYXA6IHN0eWxlTWFwLFxuICAgIGNsZWFudXBGbjogKGVsLCB0b2tlbnMpID0+IHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsIHRva2VuKSksXG4gICAgdXBkYXRlRm46IChlbCwgdG9rZW5zLCBjb25kaXRpb24pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IG51bGwgfHwgY29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgdG9rZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCB0b2tlbiwgYCR7Y29uZGl0aW9ufWAsIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdFN0eWxlcyA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oc3R5bGVNYXA6IFQpID0+XG4gIHNpZ25hbFN0eWxlcyhpbmplY3QoRWxlbWVudFJlZiksIHN0eWxlTWFwKTtcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpY2FsU2l6ZSB7XG4gIGlubGluZVNpemU6IG51bWJlcjtcbiAgYmxvY2tTaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudERpbWVuc2lvbnMge1xuICByZWN0OiBET01SZWN0UmVhZE9ubHkgfCBudWxsO1xuICBib3JkZXJCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG4gIGNvbnRlbnRCb3hTaXplOiBMb2dpY2FsU2l6ZSB8IG51bGw7XG4gIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IExvZ2ljYWxTaXplIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnREaW1lbnNpb25zID0gKGVsOiBTaWduYWxFbGVtZW50QmluZGluZ1R5cGUpID0+IHtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgZWxlbWVudHMgPSBidWlsZEVsZW1lbnRTaWduYWwoZWwpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgY29uc3QgaW5pdGlhbFZhbHVlID0gKCkgPT4gKHtcbiAgICByZWN0OiBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA/PyBudWxsLFxuICAgIGJvcmRlckJveFNpemU6IG51bGwsXG4gICAgY29udGVudEJveFNpemU6IG51bGwsXG4gICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogbnVsbCxcbiAgfSk7XG5cbiAgY29uc3QgZWxlbWVudERpbWVuc2lvbnNTaWduYWwgPSBzaWduYWw8RWxlbWVudERpbWVuc2lvbnM+KGluaXRpYWxWYWx1ZSgpKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZSkgPT4ge1xuICAgIGlmICghaXNSZW5kZXJlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGNvbnN0IGRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBlbnRyeS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplPy5bMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGJvcmRlckJveFNpemUgPSBlbnRyeS5ib3JkZXJCb3hTaXplPy5bMF0gPz8gbnVsbDtcbiAgICAgIGNvbnN0IGNvbnRlbnRCb3hTaXplID0gZW50cnkuY29udGVudEJveFNpemU/LlswXSA/PyBudWxsO1xuXG4gICAgICB6b25lLnJ1bigoKSA9PlxuICAgICAgICBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5zZXQoe1xuICAgICAgICAgIHJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGJvcmRlckJveFNpemVcbiAgICAgICAgICAgID8geyBpbmxpbmVTaXplOiBib3JkZXJCb3hTaXplLmlubGluZVNpemUsIGJsb2NrU2l6ZTogYm9yZGVyQm94U2l6ZS5ibG9ja1NpemUgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBjb250ZW50Qm94U2l6ZVxuICAgICAgICAgICAgPyB7IGlubGluZVNpemU6IGNvbnRlbnRCb3hTaXplLmlubGluZVNpemUsIGJsb2NrU2l6ZTogY29udGVudEJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXG4gICAgICAgICAgICA/IHsgaW5saW5lU2l6ZTogZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZS5pbmxpbmVTaXplLCBibG9ja1NpemU6IGRldmljZVBpeGVsQ29udGVudEJveFNpemUuYmxvY2tTaXplIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAgIGVsZW1lbnREaW1lbnNpb25zU2lnbmFsLnNldChpbml0aWFsVmFsdWUoKSk7XG5cbiAgICAgIGlmIChlbHMucHJldmlvdXNFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVscy5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb21wdXRlZERpc3BsYXkgPSBnZXRDb21wdXRlZFN0eWxlKGVscy5jdXJyZW50RWxlbWVudCkuZGlzcGxheTtcbiAgICAgICAgY29uc3QgY3VycmVudEVsSXNBbmd1bGFyQ29tcG9uZW50ID0gZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJy0nKTtcblxuICAgICAgICBpZiAoY29tcHV0ZWREaXNwbGF5ID09PSAnaW5saW5lJyAmJiBpc0Rldk1vZGUoKSAmJiBjdXJyZW50RWxJc0FuZ3VsYXJDb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEVsZW1lbnQgPCR7ZWxzLmN1cnJlbnRFbGVtZW50Py50YWdOYW1lLnRvTG93ZXJDYXNlKCl9PiBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCBhbmQgaGFzIGEgZGlzcGxheSBvZiAnaW5saW5lJy4gSW5saW5lIGVsZW1lbnRzIGNhbm5vdCBiZSBvYnNlcnZlZCBmb3IgZGltZW5zaW9ucy4gUGxlYXNlIGNoYW5nZSBpdCB0byAnYmxvY2snIG9yIHNvbWV0aGluZyBlbHNlLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50RGltZW5zaW9uc1NpZ25hbC5hc1JlYWRvbmx5KCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnREaW1lbnNpb25zID0gKCkgPT4gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoaW5qZWN0KEVsZW1lbnRSZWYpKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IE11dGF0aW9uT2JzZXJ2ZXJJbml0KSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBjb25zdCBpc1JlbmRlcmVkID0gc2lnbmFsSXNSZW5kZXJlZCgpO1xuXG4gIGNvbnN0IGVsZW1lbnRNdXRhdGlvbnNTaWduYWwgPSBzaWduYWw8TXV0YXRpb25SZWNvcmQgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChlKSA9PiB7XG4gICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGVudHJ5ID0gZVswXTtcblxuICAgIGlmIChlbnRyeSkge1xuICAgICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudE11dGF0aW9uc1NpZ25hbC5zZXQoZW50cnkpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuXG4gICAgICBlbGVtZW50TXV0YXRpb25zU2lnbmFsLnNldChudWxsKTtcblxuICAgICAgaWYgKGVscy5wcmV2aW91c0VsZW1lbnQpIHtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxzLmN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxzLmN1cnJlbnRFbGVtZW50LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50TXV0YXRpb25zU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudE11dGF0aW9ucyA9IChvcHRpb25zPzogTXV0YXRpb25PYnNlcnZlckluaXQpID0+XG4gIHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IHR5cGUgU2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlT3B0aW9ucyA9IHtcbiAgLyoqIFRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiB0byBzY3JvbGwgdG8uIE9uY2UgYSB0cnV0aHkgdmFsdWUgZ2V0J3MgZW1pdHRlZCwgYWxsIGZ1cnRoZXIgdmFsdWVzIHdpbGwgYmUgaWdub3JlZC4gKi9cbiAgaW5pdGlhbFNjcm9sbFBvc2l0aW9uPzogU2lnbmFsPFNjcm9sbFRvT3B0aW9ucyB8IG51bGw+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlLCBvcHRpb25zPzogU2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlT3B0aW9ucykgPT4ge1xuICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkRWxlbWVudFNpZ25hbChlbCk7XG4gIGNvbnN0IGVsZW1lbnREaW1lbnNpb25zID0gc2lnbmFsRWxlbWVudERpbWVuc2lvbnMoZWxlbWVudHMpO1xuICBjb25zdCBlbGVtZW50TXV0YXRpb25zID0gc2lnbmFsRWxlbWVudE11dGF0aW9ucyhlbGVtZW50cywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUgfSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG5cbiAgY29uc3QgaW5pdGlhbFNjcm9sbFBvc2l0aW9uID0gb3B0aW9ucz8uaW5pdGlhbFNjcm9sbFBvc2l0aW9uO1xuXG4gIGlmIChpbml0aWFsU2Nyb2xsUG9zaXRpb24pIHtcbiAgICBjb25zdCByZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybjtcblxuICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSBpbml0aWFsU2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50cygpLmN1cnJlbnRFbGVtZW50O1xuXG4gICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gJiYgZWxlbWVudCkge1xuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24ubGVmdCAhPT0gdW5kZWZpbmVkKSBlbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxQb3NpdGlvbi5sZWZ0O1xuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24udG9wICE9PSB1bmRlZmluZWQpIGVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsUG9zaXRpb24udG9wO1xuICAgICAgICByZWYuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHMoKS5jdXJyZW50RWxlbWVudDtcbiAgICBjb25zdCBkaW1lbnNpb25zID0gZWxlbWVudERpbWVuc2lvbnMoKTtcblxuICAgIGNvbnN0IG5vdFNjcm9sbGFibGUgPSAoKSA9PiAoe1xuICAgICAgY2FuU2Nyb2xsOiBmYWxzZSxcbiAgICAgIGNhblNjcm9sbEhvcml6b250YWxseTogZmFsc2UsXG4gICAgICBjYW5TY3JvbGxWZXJ0aWNhbGx5OiBmYWxzZSxcbiAgICAgIHNjcm9sbFdpZHRoOiBlbGVtZW50Py5zY3JvbGxXaWR0aCA/PyBudWxsLFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbGVtZW50Py5zY3JvbGxIZWlnaHQgPz8gbnVsbCxcbiAgICAgIGVsZW1lbnREaW1lbnNpb25zOiBkaW1lbnNpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIHdoYXQgdGhlIG11dGF0aW9uIGlzLCBqdXN0IHRoYXQgdGhlcmUgaXMgb25lLlxuICAgIC8vIENoYW5nZXMgdG8gdGhlIERPTSBjYW4gYWZmZWN0IHRoZSBzY3JvbGwgc3RhdGUgb2YgdGhlIGVsZW1lbnQuXG4gICAgZWxlbWVudE11dGF0aW9ucygpO1xuXG4gICAgaWYgKCFlbGVtZW50IHx8ICFkaW1lbnNpb25zLnJlY3QgfHwgIWlzUmVuZGVyZWQoKSkgcmV0dXJuIG5vdFNjcm9sbGFibGUoKTtcblxuICAgIGNvbnN0IHsgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCB9ID0gZWxlbWVudDtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRpbWVuc2lvbnMucmVjdDtcblxuICAgIGNvbnN0IGNhblNjcm9sbEhvcml6b250YWxseSA9IHNjcm9sbFdpZHRoID4gd2lkdGg7XG4gICAgY29uc3QgY2FuU2Nyb2xsVmVydGljYWxseSA9IHNjcm9sbEhlaWdodCA+IGhlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICBjYW5TY3JvbGw6IGNhblNjcm9sbEhvcml6b250YWxseSB8fCBjYW5TY3JvbGxWZXJ0aWNhbGx5LFxuICAgICAgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5LFxuICAgICAgY2FuU2Nyb2xsVmVydGljYWxseSxcbiAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgZWxlbWVudERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgfTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbmFsSG9zdEVsZW1lbnRTY3JvbGxTdGF0ZSA9ICgpID0+IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZShpbmplY3QoRWxlbWVudFJlZikpO1xuXG5leHBvcnQgdHlwZSBTaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uT3B0aW9ucyA9IE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+ICYge1xuICByb290PzogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlO1xuICBlbmFibGVkPzogU2lnbmFsPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24gPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IFNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb25PcHRpb25zKSA9PiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3Qgcm9vdCA9IGZpcnN0RWxlbWVudFNpZ25hbChvcHRpb25zPy5yb290ID8gYnVpbGRFbGVtZW50U2lnbmFsKG9wdGlvbnM/LnJvb3QpIDogZG9jdW1lbnRFbGVtZW50U2lnbmFsKCkpO1xuICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBzaWduYWxJc1JlbmRlcmVkKCk7XG4gIGNvbnN0IGlzRW5hYmxlZCA9IG9wdGlvbnM/LmVuYWJsZWQgPz8gc2lnbmFsKHRydWUpO1xuXG4gIGNvbnN0IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdPihbXSk7XG4gIGNvbnN0IG9ic2VydmVyID0gc2lnbmFsPEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgY3VycmVudGx5T2JzZXJ2ZWRFbGVtZW50cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgY29uc3QgdXBkYXRlSW50ZXJzZWN0aW9ucyA9IChlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10pID0+IHtcbiAgICBsZXQgY3VycmVudFZhbHVlcyA9IFsuLi5lbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsKCldO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0VudHJ5SW5kZXggPSBjdXJyZW50VmFsdWVzLmZpbmRJbmRleCgodikgPT4gdi50YXJnZXQgPT09IGVudHJ5LnRhcmdldCk7XG5cbiAgICAgIC8vIFJvdW5kIHRoZSBpbnRlcnNlY3Rpb24gcmF0aW8gdG8gdGhlIG5lYXJlc3QgMC4wMSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBlcnJvcnMgYW5kIHN5c3RlbSBzY2FsaW5nIGlzc3Vlcy5cbiAgICAgIGNvbnN0IHJvdW5kZWRJbnRlcnNlY3Rpb25SYXRpbyA9IE1hdGgucm91bmQoZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gKiAxMDApIC8gMTAwO1xuXG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb25FbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSA9IHtcbiAgICAgICAgYm91bmRpbmdDbGllbnRSZWN0OiBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3QsXG4gICAgICAgIGludGVyc2VjdGlvblJhdGlvOiByb3VuZGVkSW50ZXJzZWN0aW9uUmF0aW8sXG4gICAgICAgIGludGVyc2VjdGlvblJlY3Q6IGVudHJ5LmludGVyc2VjdGlvblJlY3QsXG4gICAgICAgIGlzSW50ZXJzZWN0aW5nOiBlbnRyeS5pc0ludGVyc2VjdGluZyxcbiAgICAgICAgcm9vdEJvdW5kczogZW50cnkucm9vdEJvdW5kcyxcbiAgICAgICAgdGFyZ2V0OiBlbnRyeS50YXJnZXQsXG4gICAgICAgIHRpbWU6IGVudHJ5LnRpbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoZXhpc3RpbmdFbnRyeUluZGV4ICE9PSAtMSkge1xuICAgICAgICBjdXJyZW50VmFsdWVzID0gW1xuICAgICAgICAgIC4uLmN1cnJlbnRWYWx1ZXMuc2xpY2UoMCwgZXhpc3RpbmdFbnRyeUluZGV4KSxcbiAgICAgICAgICBpbnRlcnNlY3Rpb25FbnRyeSxcbiAgICAgICAgICAuLi5jdXJyZW50VmFsdWVzLnNsaWNlKGV4aXN0aW5nRW50cnlJbmRleCArIDEpLFxuICAgICAgICBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFZhbHVlcyA9IFsuLi5jdXJyZW50VmFsdWVzLCBpbnRlcnNlY3Rpb25FbnRyeV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgem9uZS5ydW4oKCkgPT4gZWxlbWVudEludGVyc2VjdGlvblNpZ25hbC5zZXQoY3VycmVudFZhbHVlcykpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZUludGVyc2VjdGlvbk9ic2VydmVyID0gKHJlbmRlcmVkOiBib29sZWFuLCBlbmFibGVkOiBib29sZWFuLCByb290RWw6IEhUTUxFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIG9ic2VydmVyKCk/LmRpc2Nvbm5lY3QoKTtcbiAgICBjdXJyZW50bHlPYnNlcnZlZEVsZW1lbnRzLmNsZWFyKCk7XG5cbiAgICBpZiAoIXJlbmRlcmVkIHx8ICFlbmFibGVkIHx8ICFyb290RWwpIHtcbiAgICAgIG9ic2VydmVyLnNldChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4gdXBkYXRlSW50ZXJzZWN0aW9ucyhlbnRyaWVzKSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJvb3Q6IHJvb3RFbCxcbiAgICB9KTtcblxuICAgIG9ic2VydmVyLnNldChuZXdPYnNlcnZlcik7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlT2JzZXJ2ZWRFbGVtZW50cyA9IChvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsLCBlbGVtZW50czogRWxlbWVudFNpZ25hbFZhbHVlKSA9PiB7XG4gICAgY29uc3Qgcm9vdEVsID0gcm9vdCgpLmN1cnJlbnRFbGVtZW50O1xuICAgIGNvbnN0IHJvb3RCb3VuZHMgPSByb290RWw/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKCFvYnNlcnZlciB8fCAhcm9vdEVsKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJySW50ZXJzZWNpb25WYWx1ZSA9IGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwoKTtcbiAgICBjb25zdCBuZXdJbnRlcnNlY3Rpb25WYWx1ZTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzLmN1cnJlbnRFbGVtZW50cykge1xuICAgICAgaWYgKGN1cnJlbnRseU9ic2VydmVkRWxlbWVudHMuaGFzKGVsKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZ0VudHJ5SW5kZXggPSBjdXJySW50ZXJzZWNpb25WYWx1ZS5maW5kSW5kZXgoKHYpID0+IHYudGFyZ2V0ID09PSBlbCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cnkgPSBjdXJySW50ZXJzZWNpb25WYWx1ZVtleGlzdGluZ0VudHJ5SW5kZXhdO1xuXG4gICAgICAgIGlmICghZXhpc3RpbmdFbnRyeSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGZpbmQgZXhpc3RpbmcgZW50cnkgZm9yIGVsZW1lbnQuIFRoZSBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgbWlnaHQgYmUgYnJva2VuIG5vdy4nLCBlbCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdJbnRlcnNlY3Rpb25WYWx1ZS5wdXNoKGV4aXN0aW5nRW50cnkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5pdGlhbEVsZW1lbnRWaXNpYmlsaXR5ID0gaXNFbGVtZW50VmlzaWJsZSh7XG4gICAgICAgIGNvbnRhaW5lcjogcm9vdEVsLFxuICAgICAgICBlbGVtZW50OiBlbCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWluaXRpYWxFbGVtZW50VmlzaWJpbGl0eSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB2aXNpYmlsaXR5IGRhdGEgZm91bmQgZm9yIGVsZW1lbnQuJywge1xuICAgICAgICAgIGVsZW1lbnQ6IGVsLFxuICAgICAgICAgIGNvbnRhaW5lcjogcm9vdEVsLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxCb3VuZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3QgaW5saW5lSW50ZXJzZWN0aW9uUmF0aW8gPSBpbml0aWFsRWxlbWVudFZpc2liaWxpdHkuaW5saW5lSW50ZXJzZWN0aW9uIC8gMTAwO1xuICAgICAgY29uc3QgYmxvY2tJbnRlcnNlY3Rpb25SYXRpbyA9IGluaXRpYWxFbGVtZW50VmlzaWJpbGl0eS5ibG9ja0ludGVyc2VjdGlvbiAvIDEwMDtcbiAgICAgIGNvbnN0IGlzSW50ZXJzZWN0aW5nID0gaW5saW5lSW50ZXJzZWN0aW9uUmF0aW8gPiAwICYmIGJsb2NrSW50ZXJzZWN0aW9uUmF0aW8gPiAwO1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uUmF0aW8gPSBNYXRoLm1pbihpbmxpbmVJbnRlcnNlY3Rpb25SYXRpbywgYmxvY2tJbnRlcnNlY3Rpb25SYXRpbyk7XG5cbiAgICAgIC8vIFJvdW5kIHRoZSBpbnRlcnNlY3Rpb24gcmF0aW8gdG8gdGhlIG5lYXJlc3QgMC4wMSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBlcnJvcnMgYW5kIHN5c3RlbSBzY2FsaW5nIGlzc3Vlcy5cbiAgICAgIGNvbnN0IHJvdW5kZWRJbnRlcnNlY3Rpb25SYXRpbyA9IE1hdGgucm91bmQoaW50ZXJzZWN0aW9uUmF0aW8gKiAxMDApIC8gMTAwO1xuXG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb25FbnRyeTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSA9IHtcbiAgICAgICAgYm91bmRpbmdDbGllbnRSZWN0OiBlbEJvdW5kcyxcbiAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW86IHJvdW5kZWRJbnRlcnNlY3Rpb25SYXRpbyxcbiAgICAgICAgaW50ZXJzZWN0aW9uUmVjdDogZWxCb3VuZHMsXG4gICAgICAgIGlzSW50ZXJzZWN0aW5nLFxuICAgICAgICByb290Qm91bmRzOiByb290Qm91bmRzID8/IG51bGwsXG4gICAgICAgIHRhcmdldDogZWwsXG4gICAgICAgIHRpbWU6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgfTtcblxuICAgICAgbmV3SW50ZXJzZWN0aW9uVmFsdWUucHVzaChpbnRlcnNlY3Rpb25FbnRyeSk7XG5cbiAgICAgIGN1cnJlbnRseU9ic2VydmVkRWxlbWVudHMuYWRkKGVsKTtcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWwpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMucHJldmlvdXNFbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnRzLmN1cnJlbnRFbGVtZW50cy5pbmNsdWRlcyhlbCkpIGNvbnRpbnVlO1xuXG4gICAgICBvYnNlcnZlci51bm9ic2VydmUoZWwpO1xuICAgICAgY3VycmVudGx5T2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZWwpO1xuICAgIH1cblxuICAgIGVsZW1lbnRJbnRlcnNlY3Rpb25TaWduYWwuc2V0KG5ld0ludGVyc2VjdGlvblZhbHVlKTtcbiAgfTtcblxuICBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3Qgcm9vdEVsID0gcm9vdCgpLmN1cnJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgcmVuZGVyZWQgPSBpc1JlbmRlcmVkKCk7XG4gICAgICBjb25zdCBlbmFibGVkID0gaXNFbmFibGVkKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB1cGRhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcihyZW5kZXJlZCwgZW5hYmxlZCwgcm9vdEVsKSk7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbHMgPSBlbGVtZW50cygpO1xuICAgIGNvbnN0IG9icyA9IG9ic2VydmVyKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4gdXBkYXRlT2JzZXJ2ZWRFbGVtZW50cyhvYnMsIGVscykpO1xuICB9KTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBvYnNlcnZlcigpPy5kaXNjb25uZWN0KCkpO1xuXG4gIHJldHVybiBlbGVtZW50SW50ZXJzZWN0aW9uU2lnbmFsLmFzUmVhZG9ubHkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaWduYWxIb3N0RWxlbWVudEludGVyc2VjdGlvbiA9IChvcHRpb25zPzogU2lnbmFsRWxlbWVudEludGVyc2VjdGlvbk9wdGlvbnMpID0+XG4gIHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24oaW5qZWN0KEVsZW1lbnRSZWYpLCBvcHRpb25zKTtcblxuZXhwb3J0IGNvbnN0IHNpZ25hbEVsZW1lbnRDaGlsZHJlbiA9IChlbDogU2lnbmFsRWxlbWVudEJpbmRpbmdUeXBlKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgaXNSZW5kZXJlZCA9IHNpZ25hbElzUmVuZGVyZWQoKTtcbiAgY29uc3QgZWxlbWVudE11dGF0aW9ucyA9IHNpZ25hbEVsZW1lbnRNdXRhdGlvbnMoZWxlbWVudHMsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlIH0pO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCFpc1JlbmRlcmVkKCkpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGVscyA9IGVsZW1lbnRzKCk7XG5cbiAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgd2hhdCB0aGUgbXV0YXRpb24gaXMsIGp1c3QgdGhhdCB0aGVyZSBpcyBvbmUuXG4gICAgLy8gQ2hhbmdlcyB0byB0aGUgRE9NIG1heSBhZmZlY3QgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50LlxuICAgIGVsZW1lbnRNdXRhdGlvbnMoKTtcblxuICAgIGlmICghZWxzLmN1cnJlbnRFbGVtZW50KSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVscy5jdXJyZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbHMuY3VycmVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV2aW91c1NpZ25hbFZhbHVlID0gPFQ+KHNpZ25hbDogU2lnbmFsPFQ+KSA9PiB7XG4gIGNvbnN0IG9icyA9IHRvT2JzZXJ2YWJsZShzaWduYWwpLnBpcGUoXG4gICAgcGFpcndpc2UoKSxcbiAgICBtYXAoKFtwcmV2XSkgPT4gcHJldiksXG4gICk7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc3luY1NpZ25hbCA9IDxUPihmcm9tOiBTaWduYWw8VD4sIHRvOiBXcml0YWJsZVNpZ25hbDxUPikgPT4ge1xuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1WYWwgPSBmcm9tKCk7XG5cbiAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgdG8uc2V0KGZvcm1WYWwpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIGRlYm91bmNlVGltZT86IG51bWJlcjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlYm91bmNlRmlyc3Q/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgY29udHJvbFZhbHVlU2lnbmFsID0gPFQgZXh0ZW5kcyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheT4oXG4gIGNvbnRyb2w6IFQsXG4gIG9wdGlvbnM/OiBDb250cm9sVmFsdWVTaWduYWxPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IHZjc09icyA9IG9wdGlvbnM/LmRlYm91bmNlVGltZVxuICAgID8gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUob3B0aW9ucz8uZGVib3VuY2VUaW1lID8/IDMwMCkpXG4gICAgOiBjb250cm9sLnZhbHVlQ2hhbmdlcztcblxuICBjb25zdCBvYnM6IE9ic2VydmFibGU8UmV0dXJuVHlwZTxUWydnZXRSYXdWYWx1ZSddPj4gPSBvcHRpb25zPy5kZWJvdW5jZUZpcnN0XG4gICAgPyBtZXJnZShvZihjb250cm9sLnZhbHVlKSwgdmNzT2JzKVxuICAgIDogdmNzT2JzLnBpcGUoc3RhcnRXaXRoKGNvbnRyb2wuZ2V0UmF3VmFsdWUoKSkpO1xuXG4gIHJldHVybiB0b1NpZ25hbChvYnMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpKSwge1xuICAgIHJlcXVpcmVTeW5jOiB0cnVlLFxuICB9KTtcbn07XG5cbi8qKlxuICogVGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHBhaXIgaXMgdGhlIHByZXZpb3VzIHZhbHVlIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBjb250cm9sVmFsdWVTaWduYWxXaXRoUHJldmlvdXMgPSA8VCBleHRlbmRzIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIHwgRm9ybUFycmF5PihcbiAgY29udHJvbDogVCxcbiAgb3B0aW9ucz86IENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3Qgb2JzID0gdG9PYnNlcnZhYmxlKGNvbnRyb2xWYWx1ZVNpZ25hbChjb250cm9sLCBvcHRpb25zKSkucGlwZShcbiAgICBwYWlyd2lzZSgpLFxuICAgIHN0YXJ0V2l0aChbbnVsbCwgY29udHJvbC5nZXRSYXdWYWx1ZSgpXSksXG4gICk7XG5cbiAgcmV0dXJuIHRvU2lnbmFsKG9icywgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBjb250cm9sVmFsdWVTaWduYWxgIGluc3RlYWQgd2l0aCBgZGVib3VuY2VUaW1lYCBvcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVib3VuY2VkQ29udHJvbFZhbHVlU2lnbmFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIGRlYm91bmNlVGltZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYGNvbnRyb2xWYWx1ZVNpZ25hbGAgaW5zdGVhZCB3aXRoIGBkZWJvdW5jZVRpbWVgIHNldCB0byBgMzAwYCBhbmQgYGRlYm91bmNlRmlyc3RgIHNldCB0byBgdHJ1ZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBkZWJvdW5jZWRDb250cm9sVmFsdWVTaWduYWwgPSA8VCBleHRlbmRzIEZvcm1Db250cm9sPihcbiAgY29udHJvbDogVCxcbiAgb3B0aW9ucz86IERlYm91bmNlZENvbnRyb2xWYWx1ZVNpZ25hbE9wdGlvbnMsXG4pID0+IGNvbnRyb2xWYWx1ZVNpZ25hbChjb250cm9sLCBvcHRpb25zID8/IHsgZGVib3VuY2VUaW1lOiAzMDAsIGRlYm91bmNlRmlyc3Q6IHRydWUgfSk7XG5cbmV4cG9ydCB0eXBlIEluamVjdFV0aWxDb25maWcgPSB7XG4gIC8qKiBUaGUgaW5qZWN0b3IgdG8gdXNlIGZvciB0aGUgaW5qZWN0aW9uLiBNdXN0IGJlIHByb3ZpZGVkIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGZyb20gd2l0aGluIGEgaW5qZWN0aW9uIGNvbnRleHQuICovXG4gIGluamVjdG9yPzogSW5qZWN0b3I7XG59O1xuXG5leHBvcnQgdHlwZSBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPEluLCBPdXQ+ID0ge1xuICAvKipcbiAgICogQSB0cmFuc2Zvcm0gZnVuY3Rpb24gc2ltaWxhciB0byB0aGUgYHRyYW5zZm9ybWAgZnVuY3Rpb24gaW4gQW5ndWxhciBpbnB1dCBiaW5kaW5ncy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gdHJhbnNmb3JtIHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgcmV0dXJuZWQuXG4gICAqIEUuZy4gdHJhbnNmb3JtaW5nIGBcInRydWVcImAgdG8gYHRydWVgIGZvciBhIGJvb2xlYW4gYXR0cmlidXRlLlxuICAgKi9cbiAgdHJhbnNmb3JtPzogKHZhbHVlOiBJbikgPT4gT3V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGluamVjdE9yUnVuSW5Db250ZXh0ID0gPFQ+KGZuOiAoKSA9PiBULCBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIGlmIChjb25maWc/LmluamVjdG9yKSB7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChjb25maWcuaW5qZWN0b3IsIGZuKTtcbiAgfVxuXG4gIHJldHVybiBmbigpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU9yUmV0dXJuID0gPEluLCBPdXQ+KHNyYzogU2lnbmFsPEluPiwgY29uZmlnPzogSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxJbiwgT3V0PikgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNvbmZpZz8udHJhbnNmb3JtO1xuXG4gIGlmICh0cmFuc2Zvcm1lcikge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB0cmFuc2Zvcm1lcihzcmMoKSkpO1xuICB9XG5cbiAgcmV0dXJuIHNyYyBhcyB1bmtub3duIGFzIFNpZ25hbDxPdXQ+O1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IHJvdXRlIGZyYWdtZW50ICh0aGUgcGFydCBhZnRlciB0aGUgIyBpbnNpZGUgdGhlIHVybCBpZiBwcmVzZW50KSAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEZyYWdtZW50ID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgICBjb25zdCBzcmMgPSB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UuZnJhZ21lbnQkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLmZyYWdtZW50IH0pO1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcXVlcnkgcGFyYW1ldGVycyBhcyBhIHNpZ25hbCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdFF1ZXJ5UGFyYW1zID0gKGNvbmZpZz86IEluamVjdFV0aWxDb25maWcpID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcblxuICAgIHJldHVybiB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1zIH0pO1xuICB9LCBjb25maWcpO1xufTtcblxuLyoqIEluamVjdCBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSByb3V0ZSBkYXRhIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0Um91dGVEYXRhID0gKGNvbmZpZz86IEluamVjdFV0aWxDb25maWcpID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcblxuICAgIHJldHVybiB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UuZGF0YSQsIHsgaW5pdGlhbFZhbHVlOiByb3V0ZXJTdGF0ZVNlcnZpY2UuZGF0YSB9KTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgdGhlIGN1cnJlbnQgcm91dGUgdGl0bGUgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZVRpdGxlID0gPFQgPSBzdHJpbmcgfCBudWxsPihcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgcmV0dXJuIGluamVjdE9yUnVuSW5Db250ZXh0KCgpID0+IHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgICBjb25zdCBzcmMgPSB0b1NpZ25hbChyb3V0ZXJTdGF0ZVNlcnZpY2UudGl0bGUkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLnRpdGxlIH0pO1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbiAgfSwgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgcGF0aCBwYXJhbWV0ZXJzIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UGF0aFBhcmFtcyA9IChjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnKSA9PiB7XG4gIHJldHVybiBpbmplY3RPclJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFJvdXRlclN0YXRlU2VydmljZSk7XG5cbiAgICByZXR1cm4gdG9TaWduYWwocm91dGVyU3RhdGVTZXJ2aWNlLnBhdGhQYXJhbXMkLCB7IGluaXRpYWxWYWx1ZTogcm91dGVyU3RhdGVTZXJ2aWNlLnBhdGhQYXJhbXMgfSk7XG4gIH0sIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcXVlcnkgcGFyYW1ldGVyIGFzIGEgc2lnbmFsICovXG5leHBvcnQgY29uc3QgaW5qZWN0UXVlcnlQYXJhbSA9IDxUID0gc3RyaW5nIHwgbnVsbD4oXG4gIGtleTogc3RyaW5nLFxuICBjb25maWc/OiBJbmplY3RVdGlsQ29uZmlnICYgSW5qZWN0VXRpbFRyYW5zZm9ybUNvbmZpZzxzdHJpbmcgfCBudWxsLCBUPixcbikgPT4ge1xuICBjb25zdCBxdWVyeVBhcmFtcyA9IGluamVjdFF1ZXJ5UGFyYW1zKGNvbmZpZyk7XG4gIGNvbnN0IHNyYyA9IGNvbXB1dGVkKCgpID0+IHF1ZXJ5UGFyYW1zKClba2V5XSA/PyBudWxsKSBhcyBTaWduYWw8c3RyaW5nIHwgbnVsbD47XG5cbiAgcmV0dXJuIHRyYW5zZm9ybU9yUmV0dXJuKHNyYywgY29uZmlnKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzcGVjaWZpYyByb3V0ZSBkYXRhIGl0ZW0gYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RSb3V0ZURhdGFJdGVtID0gPFQgPSB1bmtub3duPihcbiAga2V5OiBzdHJpbmcsXG4gIGNvbmZpZz86IEluamVjdFV0aWxDb25maWcgJiBJbmplY3RVdGlsVHJhbnNmb3JtQ29uZmlnPHVua25vd24sIFQ+LFxuKSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBpbmplY3RSb3V0ZURhdGEoY29uZmlnKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gZGF0YSgpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPFQ+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuXG4vKiogSW5qZWN0IGEgc3BlY2lmaWMgcGF0aCBwYXJhbWV0ZXIgYXMgYSBzaWduYWwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RQYXRoUGFyYW0gPSA8VCA9IHN0cmluZyB8IG51bGw+KFxuICBrZXk6IHN0cmluZyxcbiAgY29uZmlnPzogSW5qZWN0VXRpbENvbmZpZyAmIEluamVjdFV0aWxUcmFuc2Zvcm1Db25maWc8c3RyaW5nIHwgbnVsbCwgVD4sXG4pID0+IHtcbiAgY29uc3QgcGF0aFBhcmFtcyA9IGluamVjdFBhdGhQYXJhbXMoY29uZmlnKTtcbiAgY29uc3Qgc3JjID0gY29tcHV0ZWQoKCkgPT4gcGF0aFBhcmFtcygpW2tleV0gPz8gbnVsbCkgYXMgU2lnbmFsPHN0cmluZyB8IG51bGw+O1xuXG4gIHJldHVybiB0cmFuc2Zvcm1PclJldHVybihzcmMsIGNvbmZpZyk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlSXNSZW5kZXJlZFNpZ25hbCA9ICgpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSgpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnUmVuZGVyIHNpZ25hbCB3YXMgbm90IHNldCB0byB0cnVlLiBUaGlzIGNhbiBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yLiBNYWtlIHN1cmUgdG8gLmJpbmQoKSB0aGUgcmVuZGVyIHNpZ25hbCBhdCB0aGUgZW5kIG9mIHRoZSBjb25zdHJ1Y3Rvci4nLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHZhbHVlLFxuICAgIGJpbmQ6ICgpID0+IGVmZmVjdCgoKSA9PiB2YWx1ZS5zZXQodHJ1ZSksIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ2FuQW5pbWF0ZVNpZ25hbCA9ICgpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgdmFsdWUuc2V0KHRydWUpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB2YWx1ZSxcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIEN1cnNvckRyYWdTY3JvbGxEaXJlY3Rpb24gPSAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnIHwgJ2JvdGgnO1xuXG5leHBvcnQgdHlwZSBNYXliZVNpZ25hbDxUPiA9IFQgfCBTaWduYWw8VD47XG5cbmV4cG9ydCBjb25zdCBtYXliZVNpZ25hbFZhbHVlID0gPFQ+KHZhbHVlOiBNYXliZVNpZ25hbDxUPikgPT4ge1xuICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlKCk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgdHlwZSBDdXJzb3JEcmFnU2Nyb2xsT3B0aW9ucyA9IHtcbiAgLyoqIElmIHRydWUsIGN1cnNvciBkcmFnIHNjcm9sbGluZyB3aWxsIGJlIGVuYWJsZWQuICovXG4gIGVuYWJsZWQ/OiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqIFRoZSBhbGxvd2VkIHNjcm9sbCBkaXJlY3Rpb24uICovXG4gIGFsbG93ZWREaXJlY3Rpb24/OiBNYXliZVNpZ25hbDxDdXJzb3JEcmFnU2Nyb2xsRGlyZWN0aW9uPjtcbn07XG5cbi8qKiBUaGUgZGVhZHpvbmUgaW4gcGl4ZWxzIGFmdGVyIHdoaWNoIHRoZSBjdXJzb3IgZHJhZyBzY3JvbGwgd2lsbCB0YWtlIGVmZmVjdC4gKi9cbmNvbnN0IENVUlNPUl9EUkFHX1NDUk9MTF9ERUFEWk9ORSA9IDU7XG5cbi8qKiBUaGUgY2xhc3MgdGhhdCBpcyBhZGRlZCB0byB0aGUgZWxlbWVudCB3aGVuIHRoZSBjdXJzb3IgaXMgYmVpbmcgZHJhZ2dlZC4gKi9cbmNvbnN0IENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyA9ICdldC1jdXJzb3ItZHJhZy1zY3JvbGwtLXNjcm9sbGluZyc7XG5jb25zdCBDVVJTT1JfRFJBR19JTklUX0NMQVNTID0gJ2V0LWN1cnNvci1kcmFnLXNjcm9sbC0taW5pdCc7XG5cbi8qKiBBIGZ1bmN0aW9uIHRvIGFwcGx5IGN1cnNvciBkcmFnIHNjcm9sbCBiZWhhdmlvciB0byBhbiBlbGVtZW50LiAqL1xuZXhwb3J0IGNvbnN0IHVzZUN1cnNvckRyYWdTY3JvbGwgPSAoZWw6IFNpZ25hbEVsZW1lbnRCaW5kaW5nVHlwZSwgb3B0aW9ucz86IEN1cnNvckRyYWdTY3JvbGxPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRFbGVtZW50U2lnbmFsKGVsKTtcbiAgY29uc3QgZWxlbWVudCA9IGZpcnN0RWxlbWVudFNpZ25hbChlbGVtZW50cyk7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IHsgZW5hYmxlZCA9IHNpZ25hbCh0cnVlKSwgYWxsb3dlZERpcmVjdGlvbiA9ICdib3RoJyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgY29uc3Qgc2Nyb2xsU3RhdGUgPSBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUoZWxlbWVudHMpO1xuICBjb25zdCByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBjb25zdCBpc0RyYWdnaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgaXNJbml0RHJhZ2dpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpbml0aWFsRHJhZ1Bvc2l0aW9uID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgaW5pdGlhbFNjcm9sbFBvc2l0aW9uID0gc2lnbmFsKHsgeDogMCwgeTogMCB9KTtcbiAgY29uc3QgZHJhZ0Ftb3VudCA9IHNpZ25hbCh7IHg6IDAsIHk6IDAgfSk7XG4gIGNvbnN0IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICBjb25zdCBjYW5TY3JvbGwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFNjcm9sbFN0YXRlID0gc2Nyb2xsU3RhdGUoKTtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBtYXliZVNpZ25hbFZhbHVlKGFsbG93ZWREaXJlY3Rpb24pO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFN0YXRlLmNhblNjcm9sbEhvcml6b250YWxseSB8fCBjdXJyZW50U2Nyb2xsU3RhdGUuY2FuU2Nyb2xsVmVydGljYWxseTtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbFN0YXRlLmNhblNjcm9sbEhvcml6b250YWxseTtcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGxTdGF0ZS5jYW5TY3JvbGxWZXJ0aWNhbGx5O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQ2xlYW51cCBpZiB0aGUgZWxlbWVudCB0aGUgY3Vyc29yIGRyYWcgc2Nyb2xsIGlzIGJvdW5kIHRvIGdldHMgY2hhbmdlZFxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHsgcHJldmlvdXNFbGVtZW50IH0gPSBlbGVtZW50KCk7XG5cbiAgICBpZiAocHJldmlvdXNFbGVtZW50KSB7XG4gICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShwcmV2aW91c0VsZW1lbnQsICdjdXJzb3InKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIENvbmRpdGlvbmFsbHkgYXBwbHkgc3R5bGVzL2NsYXNzZXMgdG8gdGhlIGVsZW1lbnQgYW5kIHRoZSBkb2N1bWVudFxuICBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJDYW5TY3JvbGwgPSBjYW5TY3JvbGwoKTtcbiAgICBjb25zdCBpc0VuYWJsZWQgPSBlbmFibGVkKCk7XG4gICAgY29uc3QgY3VycklzRHJhZ2dpbmcgPSBpc0RyYWdnaW5nKCk7XG4gICAgY29uc3QgY3VycklzSW5pdERyYWdnaW5nID0gaXNJbml0RHJhZ2dpbmcoKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGVsZW1lbnQoKS5jdXJyZW50RWxlbWVudDtcblxuICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgICBpZiAoIWN1cnJDYW5TY3JvbGwgfHwgIWlzRW5hYmxlZCkge1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ2N1cnNvcicpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3Njcm9sbFNuYXBUeXBlJyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnc2Nyb2xsQmVoYXZpb3InKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIENVUlNPUl9EUkFHX1NDUk9MTElOR19DTEFTUyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBDVVJTT1JfRFJBR19JTklUX0NMQVNTKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnY3Vyc29yJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJJc0luaXREcmFnZ2luZykge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyhlbCwgQ1VSU09SX0RSQUdfSU5JVF9DTEFTUyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJySXNEcmFnZ2luZykge1xuICAgICAgICByZW5kZXJlci5hZGRDbGFzcyhlbCwgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTKTtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdzY3JvbGxTbmFwVHlwZScsICdub25lJyk7XG4gICAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGVsLCAnc2Nyb2xsQmVoYXZpb3InLCAndW5zZXQnKTtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZWwsICdjdXJzb3InLCAnZ3JhYmJpbmcnKTtcbiAgICAgICAgcmVuZGVyZXIuc2V0U3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnY3Vyc29yJywgJ2dyYWJiaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghY3VycklzSW5pdERyYWdnaW5nICYmICFjdXJySXNEcmFnZ2luZykge1xuICAgICAgICByZW5kZXJlci5zZXRTdHlsZShlbCwgJ2N1cnNvcicsICdncmFiJyk7XG4gICAgICAgIHJlbmRlcmVyLnJlbW92ZVN0eWxlKGVsLCAnc2Nyb2xsU25hcFR5cGUnKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICdzY3JvbGxCZWhhdmlvcicpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgQ1VSU09SX0RSQUdfU0NST0xMSU5HX0NMQVNTKTtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIENVUlNPUl9EUkFHX0lOSVRfQ0xBU1MpO1xuICAgICAgICByZW5kZXJlci5yZW1vdmVTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdjdXJzb3InKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gVXBkYXRlIHRoZSBlbGVtZW50J3Mgc2Nyb2xsIHBvc2l0aW9uIHdoZW4gdGhlIHVzZXIgZHJhZ3NcbiAgZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyRHJhZ0Ftb3VudCA9IGRyYWdBbW91bnQoKTtcblxuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJySXNEcmFnZ2luZyA9IGlzRHJhZ2dpbmcoKTtcbiAgICAgIGNvbnN0IGVsID0gZWxlbWVudCgpLmN1cnJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgeyB4OiBkcmFnWCwgeTogZHJhZ1kgfSA9IGN1cnJEcmFnQW1vdW50O1xuICAgICAgY29uc3QgeyB4OiBzY3JvbGxYLCB5OiBzY3JvbGxZIH0gPSBpbml0aWFsU2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIGNvbnN0IGN1cnJBbGxvd2VkRGlyZWN0aW9uID0gbWF5YmVTaWduYWxWYWx1ZShhbGxvd2VkRGlyZWN0aW9uKTtcblxuICAgICAgaWYgKCFlbCB8fCAhY3VycklzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgICAgc3dpdGNoIChjdXJyQWxsb3dlZERpcmVjdGlvbikge1xuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICBlbC5zY3JvbGwoe1xuICAgICAgICAgICAgdG9wOiBkcmFnWSArIHNjcm9sbFksXG4gICAgICAgICAgICBsZWZ0OiBkcmFnWCArIHNjcm9sbFgsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ2luc3RhbnQnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgICBlbC5zY3JvbGwoe1xuICAgICAgICAgICAgbGVmdDogZHJhZ1ggKyBzY3JvbGxYLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAgIGVsLnNjcm9sbCh7XG4gICAgICAgICAgICB0b3A6IGRyYWdZICsgc2Nyb2xsWSxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnaW5zdGFudCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZURyYWdnaW5nID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQoKS5jdXJyZW50RWxlbWVudDtcblxuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIGNvbnN0IGR4ID0gKGUuY2xpZW50WCAtIGluaXRpYWxEcmFnUG9zaXRpb24oKS54KSAqIC0xO1xuICAgIGNvbnN0IGR5ID0gKGUuY2xpZW50WSAtIGluaXRpYWxEcmFnUG9zaXRpb24oKS55KSAqIC0xO1xuXG4gICAgZHJhZ0Ftb3VudC5zZXQoeyB4OiBkeCwgeTogZHkgfSk7XG5cbiAgICBpZiAoTWF0aC5hYnMoZHgpID4gQ1VSU09SX0RSQUdfU0NST0xMX0RFQURaT05FIHx8IE1hdGguYWJzKGR5KSA+IENVUlNPUl9EUkFHX1NDUk9MTF9ERUFEWk9ORSkge1xuICAgICAgaXNEcmFnZ2luZy5zZXQodHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZURyYWdnaW5nRW5kID0gKCkgPT4ge1xuICAgIGlzRHJhZ2dpbmcuc2V0KGZhbHNlKTtcbiAgICBpc0luaXREcmFnZ2luZy5zZXQoZmFsc2UpO1xuICAgIGluaXRpYWxEcmFnUG9zaXRpb24uc2V0KHsgeDogMCwgeTogMCB9KTtcbiAgICBpbml0aWFsU2Nyb2xsUG9zaXRpb24uc2V0KHsgeDogMCwgeTogMCB9KTtcbiAgICBkcmFnQW1vdW50LnNldCh7IHg6IDAsIHk6IDAgfSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0dXBEcmFnZ2luZyA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgbW91c2VVcCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKTtcbiAgICBjb25zdCBtb3VzZU1vdmUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW1vdmUnKTtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnQoKS5jdXJyZW50RWxlbWVudDtcblxuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIG1vdXNlTW92ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSxcbiAgICAgICAgdGFrZVVudGlsKG1vdXNlVXApLFxuICAgICAgICB0YXAoKGUpID0+IHVwZGF0ZURyYWdnaW5nKGUpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIG1vdXNlVXBcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoZGVzdHJveVJlZiksXG4gICAgICAgIHRhcCgoKSA9PiB1cGRhdGVEcmFnZ2luZ0VuZCgpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGluaXRpYWxEcmFnUG9zaXRpb24uc2V0KHsgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFkgfSk7XG4gICAgaW5pdGlhbFNjcm9sbFBvc2l0aW9uLnNldCh7IHg6IGVsLnNjcm9sbExlZnQsIHk6IGVsLnNjcm9sbFRvcCB9KTtcbiAgICBpc0luaXREcmFnZ2luZy5zZXQodHJ1ZSk7XG4gIH07XG5cbiAgdG9PYnNlcnZhYmxlKGVsZW1lbnQpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGUpID0+IGU/LmN1cnJlbnRFbGVtZW50KSxcbiAgICAgIHN3aXRjaE1hcCgoZWwpID0+IChlbCA/IGZyb21FdmVudDxNb3VzZUV2ZW50PihlbCwgJ21vdXNlZG93bicpIDogb2YobnVsbCkpKSxcbiAgICAgIGZpbHRlcigoZSk6IGUgaXMgTW91c2VFdmVudCA9PiAhIWUpLFxuICAgICAgZmlsdGVyKCgpID0+IGVuYWJsZWQoKSksXG4gICAgICB0YXAoKGUpID0+IHNldHVwRHJhZ2dpbmcoZSkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICByZXR1cm4ge1xuICAgIGlzRHJhZ2dpbmc6IGlzRHJhZ2dpbmcuYXNSZWFkb25seSgpLFxuICAgIGN1cnJlbnREcmFnQW1vdW50OiBkcmFnQW1vdW50LmFzUmVhZG9ubHkoKSxcbiAgfTtcbn07XG5cbi8qKlxuICogQSBjb21wdXRlZCB0aGF0IHdpbGwgb25seSBiZSByZWFjdGl2ZSB1bnRpbCB0aGUgc291cmNlIHNpZ25hbCBjb250YWlucyBhIHRydXRoeSB2YWx1ZS5cbiAqIEFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgaW5zaWRlIHRoZSBjb21wdXRhdGlvbiB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21wdXRlZFRpbGxUcnV0aHkgPSA8VD4oc291cmNlOiBTaWduYWw8VD4pID0+IHtcbiAgY29uc3QgdmFsdWUgPSBzaWduYWw8VCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IHJlZiA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBzb3VyY2UoKTtcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB2YWx1ZS5zZXQodmFsKTtcbiAgICAgICAgcmVmLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgKTtcblxuICByZXR1cm4gdmFsdWUuYXNSZWFkb25seSgpO1xufTtcblxuLyoqXG4gKiBBIGNvbXB1dGVkIHRoYXQgd2lsbCBvbmx5IGJlIHJlYWN0aXZlIHVudGlsIHRoZSBzb3VyY2Ugc2lnbmFsIGNvbnRhaW5zIGEgZmFsc3kgdmFsdWUuXG4gKiBBbGwgc3Vic2VxdWVudCBjaGFuZ2VzIGluc2lkZSB0aGUgY29tcHV0YXRpb24gd2lsbCBiZSBpZ25vcmVkLlxuICovXG5leHBvcnQgY29uc3QgY29tcHV0ZWRUaWxsRmFsc3kgPSA8VD4oc291cmNlOiBTaWduYWw8VD4pID0+IHtcbiAgY29uc3QgdmFsdWUgPSBzaWduYWw8VCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IHJlZiA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBzb3VyY2UoKTtcblxuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgdmFsdWUuc2V0KHZhbCk7XG4gICAgICAgIHJlZi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgcmV0dXJuIHZhbHVlLmFzUmVhZG9ubHkoKTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgeHMgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJc1hzID0gKCkgPT4ge1xuICByZXR1cm4gdG9TaWduYWwoaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuaXNYcyQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIHNtICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXNTbSA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzU20kLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyBtZCAqL1xuZXhwb3J0IGNvbnN0IGluamVjdElzTWQgPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5pc01kJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKiBJbmplY3QgYSBzaWduYWwgY29udGFpbmluZyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgdmlld3BvcnQgaXMgbGcgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJc0xnID0gKCkgPT4ge1xuICByZXR1cm4gdG9TaWduYWwoaW5qZWN0KFZpZXdwb3J0U2VydmljZSkuaXNMZyQsIHsgcmVxdWlyZVN5bmM6IHRydWUgfSk7XG59O1xuXG4vKiogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIHhsICovXG5leHBvcnQgY29uc3QgaW5qZWN0SXNYbCA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzWGwkLCB7IHJlcXVpcmVTeW5jOiB0cnVlIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyAyeGwgKi9cbmV4cG9ydCBjb25zdCBpbmplY3RJczJYbCA9ICgpID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzMlhsJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KTtcbn07XG5cbi8qKlxuICogSW5qZWN0IGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSB2aWV3cG9ydCBpcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAqIFRoaXMgdmFsdWUgaXMgbm90IHJlYWN0aXZlLiBJZiB5b3Ugd2FudCB0byByZWFjdCB0byBjaGFuZ2VzLCB1c2UgdGhlIHtAbGluayBpbmplY3RPYnNlcnZlQnJlYWtwb2ludH0gZnVuY3Rpb24gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluamVjdEJyZWFrcG9pbnRJc01hdGNoZWQgPSAob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pID0+IHtcbiAgcmV0dXJuIGluamVjdChWaWV3cG9ydFNlcnZpY2UpLmlzTWF0Y2hlZChvcHRpb25zKTtcbn07XG5cbi8qKlxuICogSW5qZWN0IGEgc2lnbmFsIGNvbnRhaW5pbmcgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHZpZXdwb3J0IGlzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0T2JzZXJ2ZUJyZWFrcG9pbnQgPSAob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pID0+IHtcbiAgcmV0dXJuIHRvU2lnbmFsKGluamVjdChWaWV3cG9ydFNlcnZpY2UpLm9ic2VydmUob3B0aW9ucyksIHsgaW5pdGlhbFZhbHVlOiBpbmplY3RCcmVha3BvaW50SXNNYXRjaGVkKG9wdGlvbnMpIH0pO1xufTtcblxuLyoqIEluamVjdCBhIHNpZ25hbCBjb250YWluaW5nIHRoZSBjdXJyZW50IGJyZWFrcG9pbnQuICovXG5leHBvcnQgY29uc3QgaW5qZWN0Q3VycmVudEJyZWFrcG9pbnQgPSAoKSA9PiB7XG4gIHJldHVybiB0b1NpZ25hbChpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5jdXJyZW50Vmlld3BvcnQkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKS5jdXJyZW50Vmlld3BvcnQsXG4gIH0pO1xufTtcbiJdfQ==