@projectcor/maia-components 2.11.103 → 2.11.104-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,35 +1,65 @@
1
1
  import { useCallback } from 'react';
2
+ var toCaretRect = function toCaretRect(rect) {
3
+ return {
4
+ top: rect.top,
5
+ left: rect.left,
6
+ bottom: rect.bottom,
7
+ right: rect.right,
8
+ height: rect.height
9
+ };
10
+ };
11
+ var measureRangeRect = function measureRangeRect(range) {
12
+ var _span$parentNode;
13
+ var rects = range.getClientRects();
14
+ if (rects.length > 0) return rects.item(0);
15
+ var span = document.createElement('span');
16
+ span.textContent = "\u200B";
17
+ var liveRange = range.cloneRange();
18
+ liveRange.collapse(true);
19
+ liveRange.insertNode(span);
20
+ var rect = span.getBoundingClientRect();
21
+ (_span$parentNode = span.parentNode) === null || _span$parentNode === void 0 || _span$parentNode.removeChild(span);
22
+ return rect;
23
+ };
24
+
25
+ /** Offset del trigger activo (`@` / `@@`, o `/`). */
26
+ var findOpenerOffset = function findOpenerOffset(text, caret, opener) {
27
+ var i = caret - 1;
28
+ if (i < 0) return null;
29
+ while (i >= 0 && text[i] !== opener) i -= 1;
30
+ if (i < 0 || text[i] !== opener) return null;
31
+ if (opener === '@') {
32
+ while (i > 0 && text[i - 1] === '@') i -= 1;
33
+ }
34
+ return i;
35
+ };
36
+
2
37
  /**
3
- * Devuelve el rect del caret actual dentro de un contenedor contenteditable.
38
+ * Rect del carácter que abre el popover (`@` o `/`) o, si no hay trigger, del caret.
4
39
  * Si no hay selección válida, retorna null.
5
40
  */
6
41
  export var useCaretPosition = function useCaretPosition() {
7
42
  return useCallback(function () {
43
+ var opener = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '@';
8
44
  var selection = window.getSelection();
9
45
  if (!selection || selection.rangeCount === 0) return null;
10
- var range = selection.getRangeAt(0).cloneRange();
11
- range.collapse(true);
12
- var rects = range.getClientRects();
13
- var rect = null;
14
- if (rects.length > 0) {
15
- rect = rects.item(0);
16
- } else {
17
- var _span$parentNode;
18
- // Fallback: insertar un span vacío para medir
19
- var span = document.createElement('span');
20
- span.textContent = "\u200B";
21
- range.insertNode(span);
22
- rect = span.getBoundingClientRect();
23
- (_span$parentNode = span.parentNode) === null || _span$parentNode === void 0 || _span$parentNode.removeChild(span);
46
+ var range = selection.getRangeAt(0);
47
+ var node = range.startContainer;
48
+ if (node.nodeType === Node.TEXT_NODE) {
49
+ var openerOffset = findOpenerOffset(node.data, range.startOffset, opener);
50
+ if (openerOffset != null) {
51
+ var markerRange = document.createRange();
52
+ markerRange.setStart(node, openerOffset);
53
+ markerRange.setEnd(node, openerOffset + 1);
54
+ var openerRect = measureRangeRect(markerRange);
55
+ if (openerRect) return toCaretRect(openerRect);
56
+ }
24
57
  }
25
- if (!rect) return null;
26
- return {
27
- top: rect.top,
28
- left: rect.left,
29
- bottom: rect.bottom,
30
- right: rect.right,
31
- height: rect.height
32
- };
58
+ var collapsed = range.cloneRange();
59
+ collapsed.collapse(true);
60
+ var caretRect = measureRangeRect(collapsed);
61
+ if (!caretRect) return null;
62
+ return toCaretRect(caretRect);
33
63
  }, []);
34
64
  };
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUNhcmV0UG9zaXRpb24iLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwicmFuZ2UiLCJnZXRSYW5nZUF0IiwiY2xvbmVSYW5nZSIsImNvbGxhcHNlIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInJlY3QiLCJsZW5ndGgiLCJpdGVtIiwiX3NwYW4kcGFyZW50Tm9kZSIsInNwYW4iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImluc2VydE5vZGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiLCJoZWlnaHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ2FyZXRQb3NpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBDYXJldFJlY3QgPSB7XG4gIHRvcDogbnVtYmVyXG4gIGxlZnQ6IG51bWJlclxuICBib3R0b206IG51bWJlclxuICByaWdodDogbnVtYmVyXG4gIGhlaWdodDogbnVtYmVyXG59XG5cbi8qKlxuICogRGV2dWVsdmUgZWwgcmVjdCBkZWwgY2FyZXQgYWN0dWFsIGRlbnRybyBkZSB1biBjb250ZW5lZG9yIGNvbnRlbnRlZGl0YWJsZS5cbiAqIFNpIG5vIGhheSBzZWxlY2Npw7NuIHbDoWxpZGEsIHJldG9ybmEgbnVsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUNhcmV0UG9zaXRpb24gPSAoKSA9PiB7XG4gIHJldHVybiB1c2VDYWxsYmFjaygoKTogQ2FyZXRSZWN0IHwgbnVsbCA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKClcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuXG4gICAgY29uc3QgcmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpXG4gICAgbGV0IHJlY3Q6IERPTVJlY3QgfCBudWxsID0gbnVsbFxuICAgIGlmIChyZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICByZWN0ID0gcmVjdHMuaXRlbSgwKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogaW5zZXJ0YXIgdW4gc3BhbiB2YWPDrW8gcGFyYSBtZWRpclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICAgICAgc3Bhbi50ZXh0Q29udGVudCA9ICdcXHUyMDBiJ1xuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKVxuICAgICAgcmVjdCA9IHNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHNwYW4ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoc3BhbilcbiAgICB9XG5cbiAgICBpZiAoIXJlY3QpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiByZWN0LnRvcCxcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgICByaWdodDogcmVjdC5yaWdodCxcbiAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgfVxuICB9LCBbXSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsV0FBVyxRQUFRLE9BQU87QUFVbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUEsRUFBUztFQUNwQyxPQUFPRCxXQUFXLENBQUMsWUFBd0I7SUFDekMsSUFBTUUsU0FBUyxHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ0YsU0FBUyxJQUFJQSxTQUFTLENBQUNHLFVBQVUsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJO0lBQ3pELElBQU1DLEtBQUssR0FBR0osU0FBUyxDQUFDSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xERixLQUFLLENBQUNHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFcEIsSUFBTUMsS0FBSyxHQUFHSixLQUFLLENBQUNLLGNBQWMsQ0FBQyxDQUFDO0lBQ3BDLElBQUlDLElBQW9CLEdBQUcsSUFBSTtJQUMvQixJQUFJRixLQUFLLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDcEJELElBQUksR0FBR0YsS0FBSyxDQUFDSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsTUFBTTtNQUFBLElBQUFDLGdCQUFBO01BQ0w7TUFDQSxJQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLE1BQU0sQ0FBQztNQUMzQ0YsSUFBSSxDQUFDRyxXQUFXLEdBQUcsUUFBUTtNQUMzQmIsS0FBSyxDQUFDYyxVQUFVLENBQUNKLElBQUksQ0FBQztNQUN0QkosSUFBSSxHQUFHSSxJQUFJLENBQUNLLHFCQUFxQixDQUFDLENBQUM7TUFDbkMsQ0FBQU4sZ0JBQUEsR0FBQUMsSUFBSSxDQUFDTSxVQUFVLGNBQUFQLGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCUSxXQUFXLENBQUNQLElBQUksQ0FBQztJQUNwQztJQUVBLElBQUksQ0FBQ0osSUFBSSxFQUFFLE9BQU8sSUFBSTtJQUV0QixPQUFPO01BQ0xZLEdBQUcsRUFBRVosSUFBSSxDQUFDWSxHQUFHO01BQ2JDLElBQUksRUFBRWIsSUFBSSxDQUFDYSxJQUFJO01BQ2ZDLE1BQU0sRUFBRWQsSUFBSSxDQUFDYyxNQUFNO01BQ25CQyxLQUFLLEVBQUVmLElBQUksQ0FBQ2UsS0FBSztNQUNqQkMsTUFBTSxFQUFFaEIsSUFBSSxDQUFDZ0I7SUFDZixDQUFDO0VBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNSLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
65
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInRvQ2FyZXRSZWN0IiwicmVjdCIsInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCIsImhlaWdodCIsIm1lYXN1cmVSYW5nZVJlY3QiLCJyYW5nZSIsIl9zcGFuJHBhcmVudE5vZGUiLCJyZWN0cyIsImdldENsaWVudFJlY3RzIiwibGVuZ3RoIiwiaXRlbSIsInNwYW4iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ0ZXh0Q29udGVudCIsImxpdmVSYW5nZSIsImNsb25lUmFuZ2UiLCJjb2xsYXBzZSIsImluc2VydE5vZGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJmaW5kT3BlbmVyT2Zmc2V0IiwidGV4dCIsImNhcmV0Iiwib3BlbmVyIiwiaSIsInVzZUNhcmV0UG9zaXRpb24iLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsIm5vZGUiLCJzdGFydENvbnRhaW5lciIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsIm9wZW5lck9mZnNldCIsImRhdGEiLCJzdGFydE9mZnNldCIsIm1hcmtlclJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsIm9wZW5lclJlY3QiLCJjb2xsYXBzZWQiLCJjYXJldFJlY3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ2FyZXRQb3NpdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBDYXJldFJlY3QgPSB7XG4gIHRvcDogbnVtYmVyXG4gIGxlZnQ6IG51bWJlclxuICBib3R0b206IG51bWJlclxuICByaWdodDogbnVtYmVyXG4gIGhlaWdodDogbnVtYmVyXG59XG5cbmNvbnN0IHRvQ2FyZXRSZWN0ID0gKHJlY3Q6IERPTVJlY3QpOiBDYXJldFJlY3QgPT4gKHtcbiAgdG9wOiByZWN0LnRvcCxcbiAgbGVmdDogcmVjdC5sZWZ0LFxuICBib3R0b206IHJlY3QuYm90dG9tLFxuICByaWdodDogcmVjdC5yaWdodCxcbiAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbn0pXG5cbmNvbnN0IG1lYXN1cmVSYW5nZVJlY3QgPSAocmFuZ2U6IFJhbmdlKTogRE9NUmVjdCB8IG51bGwgPT4ge1xuICBjb25zdCByZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKClcbiAgaWYgKHJlY3RzLmxlbmd0aCA+IDApIHJldHVybiByZWN0cy5pdGVtKDApXG5cbiAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBzcGFuLnRleHRDb250ZW50ID0gJ1xcdTIwMGInXG4gIGNvbnN0IGxpdmVSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKVxuICBsaXZlUmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgbGl2ZVJhbmdlLmluc2VydE5vZGUoc3BhbilcbiAgY29uc3QgcmVjdCA9IHNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgc3Bhbi5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChzcGFuKVxuICByZXR1cm4gcmVjdFxufVxuXG4vKiogT2Zmc2V0IGRlbCB0cmlnZ2VyIGFjdGl2byAoYEBgIC8gYEBAYCwgbyBgL2ApLiAqL1xuY29uc3QgZmluZE9wZW5lck9mZnNldCA9ICh0ZXh0OiBzdHJpbmcsIGNhcmV0OiBudW1iZXIsIG9wZW5lcjogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkgcmV0dXJuIG51bGxcbiAgd2hpbGUgKGkgPj0gMCAmJiB0ZXh0W2ldICE9PSBvcGVuZXIpIGkgLT0gMVxuICBpZiAoaSA8IDAgfHwgdGV4dFtpXSAhPT0gb3BlbmVyKSByZXR1cm4gbnVsbFxuICBpZiAob3BlbmVyID09PSAnQCcpIHtcbiAgICB3aGlsZSAoaSA+IDAgJiYgdGV4dFtpIC0gMV0gPT09ICdAJykgaSAtPSAxXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLyoqXG4gKiBSZWN0IGRlbCBjYXLDoWN0ZXIgcXVlIGFicmUgZWwgcG9wb3ZlciAoYEBgIG8gYC9gKSBvLCBzaSBubyBoYXkgdHJpZ2dlciwgZGVsIGNhcmV0LlxuICogU2kgbm8gaGF5IHNlbGVjY2nDs24gdsOhbGlkYSwgcmV0b3JuYSBudWxsLlxuICovXG5leHBvcnQgY29uc3QgdXNlQ2FyZXRQb3NpdGlvbiA9ICgpID0+IHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKChvcGVuZXI6IHN0cmluZyA9ICdAJyk6IENhcmV0UmVjdCB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICBjb25zdCBub2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXJcblxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc3Qgb3BlbmVyT2Zmc2V0ID0gZmluZE9wZW5lck9mZnNldCgobm9kZSBhcyBUZXh0KS5kYXRhLCByYW5nZS5zdGFydE9mZnNldCwgb3BlbmVyKVxuICAgICAgaWYgKG9wZW5lck9mZnNldCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlclJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICBtYXJrZXJSYW5nZS5zZXRTdGFydChub2RlLCBvcGVuZXJPZmZzZXQpXG4gICAgICAgIG1hcmtlclJhbmdlLnNldEVuZChub2RlLCBvcGVuZXJPZmZzZXQgKyAxKVxuICAgICAgICBjb25zdCBvcGVuZXJSZWN0ID0gbWVhc3VyZVJhbmdlUmVjdChtYXJrZXJSYW5nZSlcbiAgICAgICAgaWYgKG9wZW5lclJlY3QpIHJldHVybiB0b0NhcmV0UmVjdChvcGVuZXJSZWN0KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbGxhcHNlZCA9IHJhbmdlLmNsb25lUmFuZ2UoKVxuICAgIGNvbGxhcHNlZC5jb2xsYXBzZSh0cnVlKVxuICAgIGNvbnN0IGNhcmV0UmVjdCA9IG1lYXN1cmVSYW5nZVJlY3QoY29sbGFwc2VkKVxuICAgIGlmICghY2FyZXRSZWN0KSByZXR1cm4gbnVsbFxuICAgIHJldHVybiB0b0NhcmV0UmVjdChjYXJldFJlY3QpXG4gIH0sIFtdKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxXQUFXLFFBQVEsT0FBTztBQVVuQyxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsSUFBYTtFQUFBLE9BQWlCO0lBQ2pEQyxHQUFHLEVBQUVELElBQUksQ0FBQ0MsR0FBRztJQUNiQyxJQUFJLEVBQUVGLElBQUksQ0FBQ0UsSUFBSTtJQUNmQyxNQUFNLEVBQUVILElBQUksQ0FBQ0csTUFBTTtJQUNuQkMsS0FBSyxFQUFFSixJQUFJLENBQUNJLEtBQUs7SUFDakJDLE1BQU0sRUFBRUwsSUFBSSxDQUFDSztFQUNmLENBQUM7QUFBQSxDQUFDO0FBRUYsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSUMsS0FBWSxFQUFxQjtFQUFBLElBQUFDLGdCQUFBO0VBQ3pELElBQU1DLEtBQUssR0FBR0YsS0FBSyxDQUFDRyxjQUFjLENBQUMsQ0FBQztFQUNwQyxJQUFJRCxLQUFLLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUUsT0FBT0YsS0FBSyxDQUFDRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBRTFDLElBQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsTUFBTSxDQUFDO0VBQzNDRixJQUFJLENBQUNHLFdBQVcsR0FBRyxRQUFRO0VBQzNCLElBQU1DLFNBQVMsR0FBR1YsS0FBSyxDQUFDVyxVQUFVLENBQUMsQ0FBQztFQUNwQ0Qs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
@@ -3,7 +3,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
7
7
  import { ContextMentionPopover, MAIA_TASK_PANEL_OVERLAY_ATTR, SCMPAnchor } from '../components/atoms/ContextMentionPopover';
8
8
  import { useMaiaTaskPanelZIndex } from './useMaiaTaskPanelZIndex';
9
9
  import { useGlobalContext } from '../context/global-context';
@@ -15,6 +15,9 @@ import { useCaretPosition } from './useCaretPosition';
15
15
  import { EVENTS, useEvent } from './useEvent';
16
16
  import { getAtRunTabTypes, getTriggerSequenceFromType, getTypeFromTriggerSequence } from '../utils/contextMentionTriggers';
17
17
  import { jsx as _jsx } from "react/jsx-runtime";
18
+ var MENTION_POPOVER_GAP_PX = 4;
19
+ var MENTION_POPOVER_VIEWPORT_PAD_PX = 8;
20
+ var MENTION_POPOVER_FALLBACK_WIDTH_PX = 320;
18
21
  /**
19
22
  * Deriva clientId, projectId, agentEntity y MCP desde el contexto global (incl.
20
23
  * `entityValues` y `chipsProject`) para filtrar recents y búsqueda GraphQL.
@@ -118,33 +121,24 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
118
121
  }
119
122
  }, [allowedTypes, activeType, defaultType]);
120
123
  var positionPopover = useCallback(function () {
121
- var _popoverAnchorRef$cur, _editorRef$current$ge, _editorRef$current, _editorRef$current$ge2;
124
+ var _popoverAnchorRef$cur, _editorRef$current$ge, _editorRef$current, _editorRef$current$ge2, _caret$top;
122
125
  var fromAnchor = popoverAnchorRef === null || popoverAnchorRef === void 0 || (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
123
126
  var fromEditor = (_editorRef$current$ge = (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || (_editorRef$current$ge2 = _editorRef$current.getEditorClientRect) === null || _editorRef$current$ge2 === void 0 ? void 0 : _editorRef$current$ge2.call(_editorRef$current)) !== null && _editorRef$current$ge !== void 0 ? _editorRef$current$ge : null;
124
- var rect = fromAnchor !== null && fromAnchor !== void 0 ? fromAnchor : fromEditor;
125
- if (!rect || rect.width <= 0) {
126
- var caret = getCaretRect();
127
- if (!caret) return;
128
- var _viewportH = window.innerHeight;
129
- var _viewportW = window.innerWidth;
130
- var fallbackW = 320;
131
- var _left = Math.max(8, Math.min(_viewportW - fallbackW - 8, caret.left));
132
- setPopoverPos({
133
- width: fallbackW,
134
- left: _left,
135
- bottom: _viewportH - caret.top + 4
136
- });
137
- return;
138
- }
127
+ var widthRect = fromAnchor !== null && fromAnchor !== void 0 ? fromAnchor : fromEditor;
128
+ var caret = getCaretRect('@');
129
+ var width = widthRect && widthRect.width > 0 ? widthRect.width : MENTION_POPOVER_FALLBACK_WIDTH_PX;
130
+ var leftSource = widthRect && widthRect.width > 0 ? widthRect.left : caret === null || caret === void 0 ? void 0 : caret.left;
131
+ var topSource = (_caret$top = caret === null || caret === void 0 ? void 0 : caret.top) !== null && _caret$top !== void 0 ? _caret$top : widthRect && widthRect.width > 0 ? widthRect.top : null;
132
+ if (leftSource == null || topSource == null) return;
139
133
  var viewportW = window.innerWidth;
140
134
  var viewportH = window.innerHeight;
141
- var width = rect.width;
142
- var left = Math.max(8, Math.min(viewportW - width - 8, rect.left));
143
- /** Popover siempre arriba del input: borde inferior del popover ~4px sobre el borde superior del ancla. */
135
+ var left = Math.max(MENTION_POPOVER_VIEWPORT_PAD_PX, Math.min(viewportW - width - MENTION_POPOVER_VIEWPORT_PAD_PX, leftSource));
136
+
137
+ /** Ancho del input; borde inferior ~4px por encima del `@` que abre las menciones. */
144
138
  setPopoverPos({
145
139
  width: width,
146
140
  left: left,
147
- bottom: viewportH - rect.top + 4
141
+ bottom: viewportH - topSource + MENTION_POPOVER_GAP_PX
148
142
  });
149
143
  }, [popoverAnchorRef, editorRef, getCaretRect]);
150
144
  var resetMentionOpenTracking = useCallback(function () {
@@ -283,8 +277,9 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
283
277
  }
284
278
  return false;
285
279
  }, [popoverOpen, items, allowedTypes, activeType, activeIndex, insertSelectedItem, close, handleTypeChange]);
286
- useEffect(function () {
280
+ useLayoutEffect(function () {
287
281
  if (!popoverOpen) return undefined;
282
+ positionPopover();
288
283
  var handler = function handler() {
289
284
  return positionPopover();
290
285
  };
@@ -368,4 +363,4 @@ export var useMentionPopover = function useMentionPopover(_ref4) {
368
363
  close: close
369
364
  };
370
365
  };
371
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsInVzZUNhcmV0UG9zaXRpb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldEF0UnVuVGFiVHlwZXMiLCJnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSIsImdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlIiwianN4IiwiX2pzeCIsInVzZURlcml2ZWRTY29wZSIsIl9yZWYiLCJfY3R4JGNsaWVudCRpZCIsIl9jdHgkY2xpZW50IiwiX2N0eCRlbnRpdHlWYWx1ZXMiLCJfcmVmMiIsIl9yZWYzIiwiX2N0eCRwcm9qZWN0JGlkIiwiX2N0eCRwcm9qZWN0IiwiX2N0eCRlbnRpdHlWYWx1ZXMyIiwiX2N0eCRjaGlwc1Byb2plY3QiLCJfY3R4JGFnZW50JGVudGl0eSIsIl9jdHgkYWdlbnQiLCJfY3R4JGFnZW50JGNvbm5lY3RvcnMiLCJfY3R4JGFnZW50MiIsImN0eCIsImNsaWVudElkIiwiY2xpZW50IiwiaWQiLCJlbnRpdHlWYWx1ZXMiLCJwcm9qZWN0SWQiLCJwcm9qZWN0IiwiY2hpcHNQcm9qZWN0IiwiYWdlbnRFbnRpdHkiLCJhZ2VudCIsImVudGl0eSIsIm1jcFNsdWdzS2V5IiwiY29ubmVjdG9ycyIsImZpbmQiLCJjIiwiZ3JvdXAiLCJzbHVncyIsImpvaW4iLCJtY3BTbHVncyIsIl9jdHgkYWdlbnQkY29ubmVjdG9yczIiLCJfY3R4JGFnZW50MyIsInJhdyIsIl90b0NvbnN1bWFibGVBcnJheSIsIlNldCIsImZpbHRlciIsInMiLCJ0cmltIiwibGVuZ3RoIiwic29ydCIsInVzZU1lbnRpb25Qb3BvdmVyIiwiX3JlZjQiLCJlZGl0b3JSZWYiLCJwb3BvdmVyQW5jaG9yUmVmIiwiZW5hYmxlZFR5cGVzIiwic2tpbGxzIiwib25NZW50aW9uQWRkZWQiLCJfdXNlVCIsInQiLCJldmVudCIsIl91c2VNZW50aW9uQWxsb3dlZFR5cCIsImFsbG93ZWRUeXBlcyIsImRlZmF1bHRUeXBlIiwibWVudGlvblBvcG92ZXJaSW5kZXgiLCJ0b29sdGlwWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aXZlVHlwZSIsInNldEFjdGl2ZVR5cGUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInBvcG92ZXJPcGVuIiwic2V0UG9wb3Zlck9wZW4iLCJfdXNlU3RhdGU1IiwiYm90dG9tIiwibGVmdCIsIndpZHRoIiwiX3VzZVN0YXRlNiIsInBvcG92ZXJQb3MiLCJzZXRQb3BvdmVyUG9zIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJhY3RpdmVJbmRleCIsInNldEFjdGl2ZUluZGV4IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJpc0tleWJvYXJkTmF2QWN0aXZlIiwic2V0SXNLZXlib2FyZE5hdkFjdGl2ZSIsImhhc0VtaXR0ZWRPcGVuIiwicG9wb3ZlclJlZiIsImdldENhcmV0UmVjdCIsImRlcml2ZWRTY29wZSIsInNjb3BlIiwiX29iamVjdFNwcmVhZCIsIl91c2VFbnRpdHlTZWFyY2giLCJpdGVtcyIsImxvYWRpbmciLCJlcnJvciIsImhpZGVSZWNlbnRzTGFiZWwiLCJoYXNNb3JlIiwiaXNMb2FkaW5nTW9yZSIsImxvYWRNb3JlIiwic2VhcmNoVmFsdWUiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsInNraWxsc0NhdGFsb2dFbXB0eSIsImluY2x1ZGVzIiwicG9zaXRpb25Qb3BvdmVyIiwiX3BvcG92ZXJBbmNob3JSZWYkY3VyIiwiX2VkaXRvclJlZiRjdXJyZW50JGdlIiwiX2VkaXRvclJlZiRjdXJyZW50IiwiX2VkaXRvclJlZiRjdXJyZW50JGdlMiIsImZyb21BbmNob3IiLCJjdXJyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZnJvbUVkaXRvciIsImdldEVkaXRvckNsaWVudFJlY3QiLCJjYWxsIiwicmVjdCIsImNhcmV0Iiwidmlld3BvcnRIIiwid2luZG93IiwiaW5uZXJIZWlnaHQiLCJ2aWV3cG9ydFciLCJpbm5lcldpZHRoIiwiZmFsbGJhY2tXIiwiTWF0aCIsIm1heCIsIm1pbiIsInRvcCIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImNsb3NlIiwiaGFuZGxlVHJpZ2dlciIsInRyaWdnZXIiLCJhY3RpdmUiLCJpc1NraWxsVHJpZ2dlciIsImF0UnVuTGVuZ3RoIiwiYXRSdW5UYWJUeXBlcyIsImF0UnVuVHlwZXNPckFsbCIsInR5cGUiLCJpc1NsYXNoVHJpZ2dlciIsInR5cGVGcm9tQXQiLCJlZmZlY3RpdmVRdWVyeSIsInF1ZXJ5Iiwib3ZlcmZsb3dBdENvdW50IiwiZWZmZWN0aXZlQXRSdW5MZW5ndGgiLCJjb25jYXQiLCJyZXBlYXQiLCJhaUNoYXRNZW50aW9uT3BlbiIsImluc2VydFNlbGVjdGVkSXRlbSIsIml0ZW0iLCJfaXRlbSRyYXckY2xpZW50SWQiLCJfaXRlbSRyYXckY2xpZW50TmFtZSIsIl9pdGVtJHJhdyRwcm9qZWN0TmFtZSIsIl9pdGVtJHJhdyRmZWVJZCIsIl9pdGVtJHJhdyRmYXRoZXJJZCIsIl9pdGVtJHJhdyRmYXRoZXJUaXRsZSIsIl9pdGVtJHJhdyR0b3RhbFByb3llYyIsIl9pdGVtJHJhdyRuYW1lIiwiX2l0ZW0kcmF3JHBpY3R1cmUiLCJfaXRlbSRyYXckcG9zaXRpb25OYW0iLCJfaXRlbSRyYXckZW1haWwiLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwibWVudGlvbiIsImxhYmVsIiwicHJpbWFyeSIsIm1ldGFkYXRhIiwiY2xpZW50TmFtZSIsInByb2plY3ROYW1lIiwiZmVlSWQiLCJmYXRoZXJJZCIsImZhdGhlclRpdGxlIiwidG90YWxQcm95ZWN0b3MiLCJuYW1lIiwicGljdHVyZSIsInBvc2l0aW9uTmFtZSIsImVtYWlsIiwiaW5zZXJ0TWVudGlvbiIsImFpQ2hhdE1lbnRpb25TZWxlY3QiLCJTdHJpbmciLCJoYW5kbGVUeXBlQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsInN5bmNTa2lsbFRyaWdnZXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQ0IiwibmV4dFJ1bkxlbmd0aCIsImVudGl0eVR5cGUiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwiYWlDaGF0TWVudGlvblR5cGVTd2l0Y2giLCJoYW5kbGVLZXlEb3duIiwiZSIsImtleSIsInByZXZlbnREZWZhdWx0IiwibWV0YUtleSIsImFsdEtleSIsImlkeCIsImluZGV4T2YiLCJkZWx0YSIsIm5leHRJZHgiLCJwcmV2IiwidW5kZWZpbmVkIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlIiwibW91c2VFdmVudCIsIl9wb3BvdmVyUmVmJGN1cnJlbnQiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIyIiwidGFyZ2V0IiwiY29udGFpbnMiLCJkb2N1bWVudCIsInByZXZJc0xvYWRpbmdNb3JlUmVmIiwicG9wb3Zlck5vZGUiLCJyZWYiLCJfZGVmaW5lUHJvcGVydHkiLCIkYm90dG9tIiwiJGxlZnQiLCIkd2lkdGgiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJzdG9wUHJvcGFnYXRpb24iLCJjaGlsZHJlbiIsIm9uVHlwZUNoYW5nZSIsIm9uUmVhY2hMaXN0RW5kIiwia2V5Ym9hcmRIaW50IiwiZGVmYXVsdFZhbHVlIiwib25JdGVtU2VsZWN0ZWQiLCJvbkFjdGl2ZUluZGV4Q2hhbmdlIiwib25Nb3VzZU1vdmVJbkxpc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTWVudGlvblBvcG92ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleWJvYXJkRXZlbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25FZGl0b3InXG5pbXBvcnQge1xuICBDb250ZXh0TWVudGlvblBvcG92ZXIsXG4gIE1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIsXG4gIFNDTVBBbmNob3IsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25Qb3BvdmVyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4vdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IEVudGl0eVNlYXJjaFNjb3BlLCB1c2VFbnRpdHlTZWFyY2ggfSBmcm9tICcuL3VzZUVudGl0eVNlYXJjaCdcbmltcG9ydCB7IHVzZU1lbnRpb25BbGxvd2VkVHlwZXMgfSBmcm9tICcuL3VzZU1lbnRpb25BbGxvd2VkVHlwZXMnXG5pbXBvcnQgeyB1c2VDYXJldFBvc2l0aW9uIH0gZnJvbSAnLi91c2VDYXJldFBvc2l0aW9uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4vdXNlRXZlbnQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb24sIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHR5cGUgeyBTa2lsbCB9IGZyb20gJy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHtcbiAgZ2V0QXRSdW5UYWJUeXBlcyxcbiAgZ2V0VHJpZ2dlclNlcXVlbmNlRnJvbVR5cGUsXG4gIGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlLFxufSBmcm9tICcuLi91dGlscy9jb250ZXh0TWVudGlvblRyaWdnZXJzJ1xuXG5leHBvcnQgdHlwZSBVc2VNZW50aW9uUG9wb3Zlck9wdGlvbnMgPSB7XG4gIGVkaXRvclJlZjogUmVmT2JqZWN0PENvbnRleHRNZW50aW9uRWRpdG9ySGFuZGxlPlxuICAvKipcbiAgICogTm9kbyBjdXlvIGFuY2hvIHkgYm9yZGUgc3VwZXJpb3IgZGVmaW5lbiBlbCBwb3BvdmVyIChwLiBlai4gd3JhcHBlciBkZWwgaW5wdXQgZW4gTUFJQSkuXG4gICAqIFNpIG5vIHNlIHBhc2EsIHNlIHVzYSBlbCByZWN0IGRlbCBjb250ZW50ZWRpdGFibGUgKGBnZXRFZGl0b3JDbGllbnRSZWN0YCkuXG4gICAqL1xuICBwb3BvdmVyQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIE92ZXJyaWRlIGRlbCBzZXQgZGUgdGFicyBwZXJtaXRpZGFzOyBzaSBubyBzZSBwYXNhIHNlIGRlcml2YSBkZWwgYWdlbnQuICovXG4gIGVuYWJsZWRUeXBlcz86IENvbnRleHRFbnRpdHlUeXBlW11cbiAgLyoqIFNraWxscyBpbnllY3RhZGFzIGRpcmVjdGFtZW50ZSAoZGV2L3Rlc3RpbmcpLiBTaSBzZSBwcm92ZWVuLCBzZSBvbWl0ZSBlbCBmZXRjaCBSRVNULiAqL1xuICBza2lsbHM/OiBTa2lsbFtdXG4gIC8qKiBDYWxsYmFjayBjdWFuZG8gZWwgdXN1YXJpbyBpbnNlcnRhIHVuYSBtZW50aW9uIHbDrWEgY2xpY2svdGVjbGFkby4gKi9cbiAgb25NZW50aW9uQWRkZWQ/OiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPSB7XG4gIHBvcG92ZXJPcGVuOiBib29sZWFuXG4gIC8qKlxuICAgKiBSZWluaWNpYSBlbCB0cmFja2luZyBkZSBgQUlfQ0hBVF9NRU5USU9OX09QRU5gIChwcmltZXJhIGFwZXJ0dXJhIHBvciBtZW5zYWplKS5cbiAgICogTGxhbWFyIHRyYXMgZW52aWFyIGVsIG1lbnNhamUgbyBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24uXG4gICAqL1xuICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmc6ICgpID0+IHZvaWRcbiAgLyoqIFByb2Nlc2EgZWwgdHJpZ2dlciBwcm92ZW5pZW50ZSBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yLm9uSW5wdXRgLiAqL1xuICBoYW5kbGVUcmlnZ2VyOiAodHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfSkgPT4gdm9pZFxuICAvKipcbiAgICogTWFuZWpvIGRlIHRlY2xhcyByZWxhdGl2YXMgYWwgcG9wb3ZlciAobmF2ZWdhY2nDs24sIHNlbGVjY2nDs24sIGNhbWJpbyBkZVxuICAgKiB0YWIgeSBlc2NhcGUpLiBEZXZ1ZWx2ZSBgdHJ1ZWAgc2kgY29uc3VtacOzIGxhIGtleSwgcGFyYSBxdWUgZWwgY29uc3VtZXJcbiAgICogcHVlZGEgZGVjaWRpciBzaSBzZWd1aXIgcHJvY2VzYW5kbyBvdHJhcyB0ZWNsYXMgKHAuZWouIEVudGVyIHBhcmEgZW52aWFyKS5cbiAgICovXG4gIGhhbmRsZUtleURvd246IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gYm9vbGVhblxuICAvKiogTm9kbyBkZWwgcG9wb3ZlcjsgZWwgY29uc3VtZXIgZGViZSBwb3J0YXJsbyBjb24gYGNyZWF0ZVBvcnRhbGAuICovXG4gIHBvcG92ZXJOb2RlOiBSZWFjdE5vZGUgfCBudWxsXG4gIC8qKiBDaWVycmEgZWwgcG9wb3ZlciB5IGxpbXBpYSBlbCBxdWVyeS4gKi9cbiAgY2xvc2U6ICgpID0+IHZvaWRcbn1cblxuLyoqXG4gKiBEZXJpdmEgY2xpZW50SWQsIHByb2plY3RJZCwgYWdlbnRFbnRpdHkgeSBNQ1AgZGVzZGUgZWwgY29udGV4dG8gZ2xvYmFsIChpbmNsLlxuICogYGVudGl0eVZhbHVlc2AgeSBgY2hpcHNQcm9qZWN0YCkgcGFyYSBmaWx0cmFyIHJlY2VudHMgeSBiw7pzcXVlZGEgR3JhcGhRTC5cbiAqL1xuY29uc3QgdXNlRGVyaXZlZFNjb3BlID0gKCk6IEVudGl0eVNlYXJjaFNjb3BlID0+IHtcbiAgY29uc3QgY3R4ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGNsaWVudElkID0gY3R4LmNsaWVudD8uaWQgPz8gY3R4LmVudGl0eVZhbHVlcz8uY2xpZW50SWQgPz8gbnVsbFxuICBjb25zdCBwcm9qZWN0SWQgPSBjdHgucHJvamVjdD8uaWQgPz8gY3R4LmVudGl0eVZhbHVlcz8ucHJvamVjdElkID8/IGN0eC5jaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsXG4gIGNvbnN0IGFnZW50RW50aXR5ID0gY3R4LmFnZW50Py5lbnRpdHkgPz8gbnVsbFxuICBjb25zdCBtY3BTbHVnc0tleSA9IChjdHguYWdlbnQ/LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJyk/LnNsdWdzID8/IFtdKS5qb2luKCd8JylcblxuICBjb25zdCBtY3BTbHVncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9IGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW11cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQocmF3LmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHR5cGVvZiBzID09PSAnc3RyaW5nJyAmJiBzLnRyaW0oKS5sZW5ndGggPiAwKSldLnNvcnQoKVxuICB9LCBbbWNwU2x1Z3NLZXldKVxuXG4gIHJldHVybiB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoeyBjbGllbnRJZCwgcHJvamVjdElkLCBtY3BTbHVncywgYWdlbnRFbnRpdHkgfSksXG4gICAgW2NsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eV0gLy8gc2tpbGxzIHNlIGlueWVjdGEgZW4gdXNlTWVudGlvblBvcG92ZXJcbiAgKVxufVxuXG4vKipcbiAqIEVuY2Fwc3VsYSBsYSBsw7NnaWNhIGRlbCBwb3BvdmVyIGRlIEAtbWVudGlvbnMgKGVzdGFkbywgZmV0Y2ggcG9yIHRhYiwgYW5hbHl0aWNzLFxuICogcG9zaWNpb25hbWllbnRvKS4gRWwgY29uc3VtZXIgbWFudGllbmUgZWwgZWRpdG9yIHkgZWwgZW52w61vIGRlbCBtZW5zYWplLlxuICogTG9zIGZpbHRyb3MgZGUgYsO6c3F1ZWRhIHVzYW4gYHVzZURlcml2ZWRTY29wZWA6IGVzcGVjaWFsaXN0YSBwcm95ZWN0byBhY290YSB0YXJlYXNcbiAqIGFsIGBwcm9qZWN0SWRgIGRlbCBjb250ZXh0bzsgZXNwZWNpYWxpc3RhIGNsaWVudGUsIHByb3llY3RvcyBhbCBgY2xpZW50SWRgIChlbiBgZXh0cmFgIGRlIHNlYXJjaCkuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VNZW50aW9uUG9wb3ZlciA9ICh7XG4gIGVkaXRvclJlZixcbiAgcG9wb3ZlckFuY2hvclJlZixcbiAgZW5hYmxlZFR5cGVzLFxuICBza2lsbHMsXG4gIG9uTWVudGlvbkFkZGVkLFxufTogVXNlTWVudGlvblBvcG92ZXJPcHRpb25zKTogVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlIH0gPSB1c2VNZW50aW9uQWxsb3dlZFR5cGVzKGVuYWJsZWRUeXBlcylcbiAgY29uc3QgbWVudGlvblBvcG92ZXJaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oZGVmYXVsdFR5cGUpXG4gIGNvbnN0IFtwb3BvdmVyT3Blbiwgc2V0UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwb3BvdmVyUG9zLCBzZXRQb3BvdmVyUG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gIH0pXG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzS2V5Ym9hcmROYXZBY3RpdmUsIHNldElzS2V5Ym9hcmROYXZBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGhhc0VtaXR0ZWRPcGVuID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBwb3BvdmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ2V0Q2FyZXRSZWN0ID0gdXNlQ2FyZXRQb3NpdGlvbigpXG5cbiAgY29uc3QgZGVyaXZlZFNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3Qgc2NvcGUgPSB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoc2tpbGxzID8geyAuLi5kZXJpdmVkU2NvcGUsIHNraWxscyB9IDogZGVyaXZlZFNjb3BlKSxcbiAgICBbZGVyaXZlZFNjb3BlLCBza2lsbHNdXG4gIClcbiAgY29uc3Qge1xuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUsXG4gICAgc2tpbGxzQ2F0YWxvZ0VtcHR5LFxuICB9ID0gdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHJlY3QgPSBmcm9tQW5jaG9yID8/IGZyb21FZGl0b3JcbiAgICBpZiAoIXJlY3QgfHwgcmVjdC53aWR0aCA8PSAwKSB7XG4gICAgICBjb25zdCBjYXJldCA9IGdldENhcmV0UmVjdCgpXG4gICAgICBpZiAoIWNhcmV0KSByZXR1cm5cbiAgICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgIGNvbnN0IGZhbGxiYWNrVyA9IDMyMFxuICAgICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDgsIE1hdGgubWluKHZpZXdwb3J0VyAtIGZhbGxiYWNrVyAtIDgsIGNhcmV0LmxlZnQpKVxuICAgICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICAgIHdpZHRoOiBmYWxsYmFja1csXG4gICAgICAgIGxlZnQsXG4gICAgICAgIGJvdHRvbTogdmlld3BvcnRIIC0gY2FyZXQudG9wICsgNCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHJlY3RcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoOCwgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSA4LCByZWN0LmxlZnQpKVxuICAgIC8qKiBQb3BvdmVyIHNpZW1wcmUgYXJyaWJhIGRlbCBpbnB1dDogYm9yZGUgaW5mZXJpb3IgZGVsIHBvcG92ZXIgfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZWwgYW5jbGEuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHJlY3QudG9wICsgNCxcbiAgICB9KVxuICB9LCBbcG9wb3ZlckFuY2hvclJlZiwgZWRpdG9yUmVmLCBnZXRDYXJldFJlY3RdKVxuXG4gIGNvbnN0IHJlc2V0TWVudGlvbk9wZW5UcmFja2luZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3QgY2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKFxuICAgICh0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9KSA9PiB7XG4gICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAocG9wb3Zlck9wZW4pIGNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0cmlnZ2VyLmFjdGl2ZSkge1xuICAgICAgICAvLyBkZXRlY3RNZW50aW9uVHJpZ2dlciBtYXJjYSBALyBjb21vIGF0UnVuTGVuZ3RoID09PSAtMSAoc2xhc2ggY29uc3VtaWRvLCBubyBxdWVkYSBlbiBxdWVyeSlcbiAgICAgICAgY29uc3QgaXNTa2lsbFRyaWdnZXIgPSBhbGxvd2VkVHlwZXMuaW5jbHVkZXMoJ3NraWxsJykgJiYgdHJpZ2dlci5hdFJ1bkxlbmd0aCA9PT0gLTFcbiAgICAgICAgY29uc3QgYXRSdW5UYWJUeXBlcyA9IGdldEF0UnVuVGFiVHlwZXMoYWxsb3dlZFR5cGVzKVxuICAgICAgICBjb25zdCBhdFJ1blR5cGVzT3JBbGwgPSBhdFJ1blRhYlR5cGVzLmxlbmd0aCA+IDAgPyBhdFJ1blRhYlR5cGVzIDogYWxsb3dlZFR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUgIT09ICdza2lsbCcpXG4gICAgICAgIGNvbnN0IGlzU2xhc2hUcmlnZ2VyID0gdHJpZ2dlci5hdFJ1bkxlbmd0aCA8IDBcblxuICAgICAgICBsZXQgdHlwZUZyb21BdDogQ29udGV4dEVudGl0eVR5cGVcbiAgICAgICAgbGV0IGVmZmVjdGl2ZVF1ZXJ5OiBzdHJpbmdcblxuICAgICAgICBpZiAoaXNTa2lsbFRyaWdnZXIpIHtcbiAgICAgICAgICB0eXBlRnJvbUF0ID0gJ3NraWxsJ1xuICAgICAgICAgIGVmZmVjdGl2ZVF1ZXJ5ID0gdHJpZ2dlci5xdWVyeVxuICAgICAgICB9IGVsc2UgaWYgKGlzU2xhc2hUcmlnZ2VyKSB7XG4gICAgICAgICAgdHlwZUZyb21BdCA9IGdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlKHRyaWdnZXIuYXRSdW5MZW5ndGgsIGFsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUpXG4gICAgICAgICAgZWZmZWN0aXZlUXVlcnkgPSB0cmlnZ2VyLnF1ZXJ5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3ZlcmZsb3dBdENvdW50ID0gTWF0aC5tYXgoMCwgdHJpZ2dlci5hdFJ1bkxlbmd0aCAtIGF0UnVuVGFiVHlwZXMubGVuZ3RoKVxuICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUF0UnVuTGVuZ3RoID0gTWF0aC5taW4odHJpZ2dlci5hdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLmxlbmd0aClcbiAgICAgICAgICBlZmZlY3RpdmVRdWVyeSA9IGAkeydAJy5yZXBlYXQob3ZlcmZsb3dBdENvdW50KX0ke3RyaWdnZXIucXVlcnl9YFxuICAgICAgICAgIHR5cGVGcm9tQXQgPSBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZShlZmZlY3RpdmVBdFJ1bkxlbmd0aCwgYXRSdW5UeXBlc09yQWxsLCBkZWZhdWx0VHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICBzZXRQb3BvdmVyT3Blbih0cnVlKVxuICAgICAgICAgIHNldEFjdGl2ZVR5cGUodHlwZUZyb21BdClcbiAgICAgICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgICAgIGlmICghaGFzRW1pdHRlZE9wZW4uY3VycmVudCkge1xuICAgICAgICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25PcGVuLCB7IHR5cGU6IHR5cGVGcm9tQXQgfSlcbiAgICAgICAgICAgIGhhc0VtaXR0ZWRPcGVuLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFjdGl2ZVR5cGUodHlwZUZyb21BdClcbiAgICAgICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNlYXJjaFZhbHVlKGVmZmVjdGl2ZVF1ZXJ5KVxuICAgICAgfSBlbHNlIGlmIChwb3BvdmVyT3Blbikge1xuICAgICAgICBjbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBkZWZhdWx0VHlwZSwgcG9wb3Zlck9wZW4sIHBvc2l0aW9uUG9wb3ZlciwgdXBkYXRlU2VhcmNoVmFsdWUsIGV2ZW50LCBjbG9zZV1cbiAgKVxuXG4gIGNvbnN0IGluc2VydFNlbGVjdGVkSXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChpdGVtOiBDb250ZXh0TWVudGlvbkl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgICBsYWJlbDogaXRlbS5wcmltYXJ5LFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGNsaWVudElkOiBpdGVtLnJhdy5jbGllbnRJZCA/PyBudWxsLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGl0ZW0ucmF3LmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogaXRlbS5yYXcucHJvamVjdE5hbWUgPz8gbnVsbCxcbiAgICAgICAgICBmZWVJZDogaXRlbS5yYXcuZmVlSWQgPz8gbnVsbCxcbiAgICAgICAgICBmYXRoZXJJZDogaXRlbS5yYXcuZmF0aGVySWQgPz8gbnVsbCxcbiAgICAgICAgICBmYXRoZXJUaXRsZTogaXRlbS5yYXcuZmF0aGVyVGl0bGUgPz8gbnVsbCxcbiAgICAgICAgICB0b3RhbFByb3llY3RvczogaXRlbS5yYXcudG90YWxQcm95ZWN0b3MgPz8gbnVsbCxcbiAgICAgICAgICBuYW1lOiBpdGVtLnJhdy5uYW1lID8/IG51bGwsXG4gICAgICAgICAgcGljdHVyZTogaXRlbS5yYXcucGljdHVyZSA/PyBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uTmFtZTogaXRlbS5yYXcucG9zaXRpb25OYW1lID8/IG51bGwsXG4gICAgICAgICAgZW1haWw6IGl0ZW0ucmF3LmVtYWlsID8/IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvbihtZW50aW9uKVxuICAgICAgb25NZW50aW9uQWRkZWQ/LihtZW50aW9uKVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdE1lbnRpb25TZWxlY3QsIHsgdHlwZTogbWVudGlvbi50eXBlLCBpZDogU3RyaW5nKG1lbnRpb24uaWQpIH0pXG4gICAgICBjbG9zZSgpXG4gICAgfSxcbiAgICBbZWRpdG9yUmVmLCBvbk1lbnRpb25BZGRlZCwgZXZlbnQsIGNsb3NlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlVHlwZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSkgPT4ge1xuICAgICAgc2V0QWN0aXZlVHlwZSh0eXBlKVxuICAgICAgaWYgKHR5cGUgPT09ICdza2lsbCcpIHtcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNTa2lsbFRyaWdnZXIoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFJ1bkxlbmd0aCA9IGdldFRyaWdnZXJTZXF1ZW5jZUZyb21UeXBlKFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgYWxsb3dlZFR5cGVzLmZpbHRlcihlbnRpdHlUeXBlID0+IGVudGl0eVR5cGUgIT09ICdza2lsbCcpXG4gICAgICAgIClcbiAgICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnN5bmNUcmlnZ2VyQXRSdW5MZW5ndGgobmV4dFJ1bkxlbmd0aClcbiAgICAgIH1cbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uVHlwZVN3aXRjaCwgeyB0eXBlIH0pXG4gICAgfSxcbiAgICBbYWxsb3dlZFR5cGVzLCBlZGl0b3JSZWYsIGV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFwb3BvdmVyT3BlbiB8fCBhbGxvd2VkVHlwZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY2xvc2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZS5rZXkgPT09ICdBcnJvd0xlZnQnKSAmJiAoZS5tZXRhS2V5IHx8IGUuYWx0S2V5KSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgaWR4ID0gYWxsb3dlZFR5cGVzLmluZGV4T2YoYWN0aXZlVHlwZSlcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmtleSA9PT0gJ0Fycm93UmlnaHQnID8gMSA6IC0xXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSAoaWR4ICsgZGVsdGEgKyBhbGxvd2VkVHlwZXMubGVuZ3RoKSAlIGFsbG93ZWRUeXBlcy5sZW5ndGhcbiAgICAgICAgaGFuZGxlVHlwZUNoYW5nZShhbGxvd2VkVHlwZXNbbmV4dElkeF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gKGl0ZW1zLmxlbmd0aCA+IDAgPyBNYXRoLm1pbihwcmV2ICsgMSwgaXRlbXMubGVuZ3RoIC0gMSkgOiAwKSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzZXRJc0tleWJvYXJkTmF2QWN0aXZlKHRydWUpXG4gICAgICAgIHNldEFjdGl2ZUluZGV4KHByZXYgPT4gTWF0aC5tYXgocHJldiAtIDEsIDApKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnVGFiJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaW5zZXJ0U2VsZWN0ZWRJdGVtKGl0ZW1zW2FjdGl2ZUluZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG4gICAgW3BvcG92ZXJPcGVuLCBpdGVtcywgYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBhY3RpdmVJbmRleCwgaW5zZXJ0U2VsZWN0ZWRJdGVtLCBjbG9zZSwgaGFuZGxlVHlwZUNoYW5nZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3BvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIE5vZGUgfCBudWxsXG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgICBpZiAocG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW3BvcG92ZXJPcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZl0pXG5cbiAgY29uc3QgcHJldklzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHByZXZJc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlXG4gICAgfVxuICB9LCBbaXNMb2FkaW5nTW9yZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldklzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgfSwgW2l0ZW1zLmxlbmd0aCwgYWN0aXZlVHlwZV0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8U0NNUEFuY2hvclxuICAgICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9wb3ZlclBvcy5ib3R0b219XG4gICAgICAgICRsZWZ0PXtwb3BvdmVyUG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9wb3ZlclBvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17bWVudGlvblBvcG92ZXJaSW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17aGFuZGxlVHlwZUNoYW5nZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBza2lsbHNDYXRhbG9nRW1wdHk9e3NraWxsc0NhdGFsb2dFbXB0eX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBrZXlib2FyZEhpbnQ9e3QoJ2NvbnRleHRNZW50aW9uLmtleWJvYXJkSGludCcsIHtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ05hdmVnYWNpw7NuIGVudHJlIHBlc3Rhw7FhczogQCwgQEAsIEBAQOKApiBlbiBvcmRlbi4gVGFtYmnDqW4gQWx0L0NtZCArIOKGkC/ihpInLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2luc2VydFNlbGVjdGVkSXRlbX1cbiAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XG4gICAgICAgICAgb25BY3RpdmVJbmRleENoYW5nZT17c2V0QWN0aXZlSW5kZXh9XG4gICAgICAgICAgaXNLZXlib2FyZE5hdkFjdGl2ZT17aXNLZXlib2FyZE5hdkFjdGl2ZX1cbiAgICAgICAgICBvbk1vdXNlTW92ZUluTGlzdD17KCkgPT4gc2V0SXNLZXlib2FyZE5hdkFjdGl2ZShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICA8L1NDTVBBbmNob3I+XG4gICAgKVxuICB9LCBbXG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcG9wb3ZlclBvcyxcbiAgICBtZW50aW9uUG9wb3ZlclpJbmRleCxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlLFxuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBza2lsbHNDYXRhbG9nRW1wdHksXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIHRvb2x0aXBaSW5kZXgsXG4gICAgaW5zZXJ0U2VsZWN0ZWRJdGVtLFxuICAgIGFjdGl2ZUluZGV4LFxuICAgIGlzS2V5Ym9hcmROYXZBY3RpdmUsXG4gIF0pXG5cbiAgcmV0dXJuIHsgcG9wb3Zlck9wZW4sIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgaGFuZGxlVHJpZ2dlciwgaGFuZGxlS2V5RG93biwgcG9wb3Zlck5vZGUsIGNsb3NlIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxTQUE4Q0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUU5RyxTQUNFQyxxQkFBcUIsRUFDckJDLDRCQUE0QixFQUM1QkMsVUFBVSxRQUNMLDJDQUEyQztB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
366
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwidXNlTWVudGlvbkFsbG93ZWRUeXBlcyIsInVzZUNhcmV0UG9zaXRpb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldEF0UnVuVGFiVHlwZXMiLCJnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZSIsImdldFR5cGVGcm9tVHJpZ2dlclNlcXVlbmNlIiwianN4IiwiX2pzeCIsIk1FTlRJT05fUE9QT1ZFUl9HQVBfUFgiLCJNRU5USU9OX1BPUE9WRVJfVklFV1BPUlRfUEFEX1BYIiwiTUVOVElPTl9QT1BPVkVSX0ZBTExCQUNLX1dJRFRIX1BYIiwidXNlRGVyaXZlZFNjb3BlIiwiX3JlZiIsIl9jdHgkY2xpZW50JGlkIiwiX2N0eCRjbGllbnQiLCJfY3R4JGVudGl0eVZhbHVlcyIsIl9yZWYyIiwiX3JlZjMiLCJfY3R4JHByb2plY3QkaWQiLCJfY3R4JHByb2plY3QiLCJfY3R4JGVudGl0eVZhbHVlczIiLCJfY3R4JGNoaXBzUHJvamVjdCIsIl9jdHgkYWdlbnQkZW50aXR5IiwiX2N0eCRhZ2VudCIsIl9jdHgkYWdlbnQkY29ubmVjdG9ycyIsIl9jdHgkYWdlbnQyIiwiY3R4IiwiY2xpZW50SWQiLCJjbGllbnQiLCJpZCIsImVudGl0eVZhbHVlcyIsInByb2plY3RJZCIsInByb2plY3QiLCJjaGlwc1Byb2plY3QiLCJhZ2VudEVudGl0eSIsImFnZW50IiwiZW50aXR5IiwibWNwU2x1Z3NLZXkiLCJjb25uZWN0b3JzIiwiZmluZCIsImMiLCJncm91cCIsInNsdWdzIiwiam9pbiIsIm1jcFNsdWdzIiwiX2N0eCRhZ2VudCRjb25uZWN0b3JzMiIsIl9jdHgkYWdlbnQzIiwicmF3IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwiZmlsdGVyIiwicyIsInRyaW0iLCJsZW5ndGgiLCJzb3J0IiwidXNlTWVudGlvblBvcG92ZXIiLCJfcmVmNCIsImVkaXRvclJlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJlbmFibGVkVHlwZXMiLCJza2lsbHMiLCJvbk1lbnRpb25BZGRlZCIsIl91c2VUIiwidCIsImV2ZW50IiwiX3VzZU1lbnRpb25BbGxvd2VkVHlwIiwiYWxsb3dlZFR5cGVzIiwiZGVmYXVsdFR5cGUiLCJtZW50aW9uUG9wb3ZlclpJbmRleCIsInRvb2x0aXBaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicG9wb3Zlck9wZW4iLCJzZXRQb3BvdmVyT3BlbiIsIl91c2VTdGF0ZTUiLCJib3R0b20iLCJsZWZ0Iiwid2lkdGgiLCJfdXNlU3RhdGU2IiwicG9wb3ZlclBvcyIsInNldFBvcG92ZXJQb3MiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImFjdGl2ZUluZGV4Iiwic2V0QWN0aXZlSW5kZXgiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsImlzS2V5Ym9hcmROYXZBY3RpdmUiLCJzZXRJc0tleWJvYXJkTmF2QWN0aXZlIiwiaGFzRW1pdHRlZE9wZW4iLCJwb3BvdmVyUmVmIiwiZ2V0Q2FyZXRSZWN0IiwiZGVyaXZlZFNjb3BlIiwic2NvcGUiLCJfb2JqZWN0U3ByZWFkIiwiX3VzZUVudGl0eVNlYXJjaCIsIml0ZW1zIiwibG9hZGluZyIsImVycm9yIiwiaGlkZVJlY2VudHNMYWJlbCIsImhhc01vcmUiLCJpc0xvYWRpbmdNb3JlIiwibG9hZE1vcmUiLCJzZWFyY2hWYWx1ZSIsInVwZGF0ZVNlYXJjaFZhbHVlIiwic2tpbGxzQ2F0YWxvZ0VtcHR5IiwiaW5jbHVkZXMiLCJwb3NpdGlvblBvcG92ZXIiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJfZWRpdG9yUmVmJGN1cnJlbnQkZ2UyIiwiX2NhcmV0JHRvcCIsImZyb21BbmNob3IiLCJjdXJyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZnJvbUVkaXRvciIsImdldEVkaXRvckNsaWVudFJlY3QiLCJjYWxsIiwid2lkdGhSZWN0IiwiY2FyZXQiLCJsZWZ0U291cmNlIiwidG9wU291cmNlIiwidG9wIiwidmlld3BvcnRXIiwid2luZG93IiwiaW5uZXJXaWR0aCIsInZpZXdwb3J0SCIsImlubmVySGVpZ2h0IiwiTWF0aCIsIm1heCIsIm1pbiIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImNsb3NlIiwiaGFuZGxlVHJpZ2dlciIsInRyaWdnZXIiLCJhY3RpdmUiLCJpc1NraWxsVHJpZ2dlciIsImF0UnVuTGVuZ3RoIiwiYXRSdW5UYWJUeXBlcyIsImF0UnVuVHlwZXNPckFsbCIsInR5cGUiLCJpc1NsYXNoVHJpZ2dlciIsInR5cGVGcm9tQXQiLCJlZmZlY3RpdmVRdWVyeSIsInF1ZXJ5Iiwib3ZlcmZsb3dBdENvdW50IiwiZWZmZWN0aXZlQXRSdW5MZW5ndGgiLCJjb25jYXQiLCJyZXBlYXQiLCJhaUNoYXRNZW50aW9uT3BlbiIsImluc2VydFNlbGVjdGVkSXRlbSIsIml0ZW0iLCJfaXRlbSRyYXckY2xpZW50SWQiLCJfaXRlbSRyYXckY2xpZW50TmFtZSIsIl9pdGVtJHJhdyRwcm9qZWN0TmFtZSIsIl9pdGVtJHJhdyRmZWVJZCIsIl9pdGVtJHJhdyRmYXRoZXJJZCIsIl9pdGVtJHJhdyRmYXRoZXJUaXRsZSIsIl9pdGVtJHJhdyR0b3RhbFByb3llYyIsIl9pdGVtJHJhdyRuYW1lIiwiX2l0ZW0kcmF3JHBpY3R1cmUiLCJfaXRlbSRyYXckcG9zaXRpb25OYW0iLCJfaXRlbSRyYXckZW1haWwiLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwibWVudGlvbiIsImxhYmVsIiwicHJpbWFyeSIsIm1ldGFkYXRhIiwiY2xpZW50TmFtZSIsInByb2plY3ROYW1lIiwiZmVlSWQiLCJmYXRoZXJJZCIsImZhdGhlclRpdGxlIiwidG90YWxQcm95ZWN0b3MiLCJuYW1lIiwicGljdHVyZSIsInBvc2l0aW9uTmFtZSIsImVtYWlsIiwiaW5zZXJ0TWVudGlvbiIsImFpQ2hhdE1lbnRpb25TZWxlY3QiLCJTdHJpbmciLCJoYW5kbGVUeXBlQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsInN5bmNTa2lsbFRyaWdnZXIiLCJfZWRpdG9yUmVmJGN1cnJlbnQ0IiwibmV4dFJ1bkxlbmd0aCIsImVudGl0eVR5cGUiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwiYWlDaGF0TWVudGlvblR5cGVTd2l0Y2giLCJoYW5kbGVLZXlEb3duIiwiZSIsImtleSIsInByZXZlbnREZWZhdWx0IiwibWV0YUtleSIsImFsdEtleSIsImlkeCIsImluZGV4T2YiLCJkZWx0YSIsIm5leHRJZHgiLCJwcmV2IiwidW5kZWZpbmVkIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlIiwibW91c2VFdmVudCIsIl9wb3BvdmVyUmVmJGN1cnJlbnQiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIyIiwidGFyZ2V0IiwiY29udGFpbnMiLCJkb2N1bWVudCIsInByZXZJc0xvYWRpbmdNb3JlUmVmIiwicG9wb3Zlck5vZGUiLCJyZWYiLCJfZGVmaW5lUHJvcGVydHkiLCIkYm90dG9tIiwiJGxlZnQiLCIkd2lkdGgiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJzdG9wUHJvcGFnYXRpb24iLCJjaGlsZHJlbiIsIm9uVHlwZUNoYW5nZSIsIm9uUmVhY2hMaXN0RW5kIiwia2V5Ym9hcmRIaW50IiwiZGVmYXVsdFZhbHVlIiwib25JdGVtU2VsZWN0ZWQiLCJvbkFjdGl2ZUluZGV4Q2hhbmdlIiwib25Nb3VzZU1vdmVJbkxpc3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlTWVudGlvblBvcG92ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuaW1wb3J0IHtcbiAgQ29udGV4dE1lbnRpb25Qb3BvdmVyLFxuICBNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSLFxuICBTQ01QQW5jaG9yLFxufSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL0NvbnRleHRNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuL3VzZVQnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQgeyBFbnRpdHlTZWFyY2hTY29wZSwgdXNlRW50aXR5U2VhcmNoIH0gZnJvbSAnLi91c2VFbnRpdHlTZWFyY2gnXG5pbXBvcnQgeyB1c2VNZW50aW9uQWxsb3dlZFR5cGVzIH0gZnJvbSAnLi91c2VNZW50aW9uQWxsb3dlZFR5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FyZXRQb3NpdGlvbiB9IGZyb20gJy4vdXNlQ2FyZXRQb3NpdGlvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuL3VzZUV2ZW50J1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVudGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB0eXBlIHsgU2tpbGwgfSBmcm9tICcuLi90eXBlcy9za2lsbCdcbmltcG9ydCB7XG4gIGdldEF0UnVuVGFiVHlwZXMsXG4gIGdldFRyaWdnZXJTZXF1ZW5jZUZyb21UeXBlLFxuICBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZSxcbn0gZnJvbSAnLi4vdXRpbHMvY29udGV4dE1lbnRpb25UcmlnZ2VycydcblxuY29uc3QgTUVOVElPTl9QT1BPVkVSX0dBUF9QWCA9IDRcbmNvbnN0IE1FTlRJT05fUE9QT1ZFUl9WSUVXUE9SVF9QQURfUFggPSA4XG5jb25zdCBNRU5USU9OX1BPUE9WRVJfRkFMTEJBQ0tfV0lEVEhfUFggPSAzMjBcblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvblBvcG92ZXJPcHRpb25zID0ge1xuICBlZGl0b3JSZWY6IFJlZk9iamVjdDxDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZT5cbiAgLyoqXG4gICAqIE5vZG8gY3V5byBhbmNobyB5IGFsaW5lYWNpw7NuIGhvcml6b250YWwgZGVmaW5lbiBlbCBwb3BvdmVyIChwLiBlai4gd3JhcHBlciBkZWwgaW5wdXQgZW4gTUFJQSkuXG4gICAqIEVsIGFuY2xhIHZlcnRpY2FsIGVzIGVsIGNhcmV0IC8gdGV4dG8gZGVsIHRyaWdnZXIgYEBgLiBTaSBubyBoYXkgY2FyZXQsIHNlIHVzYSBlbCBib3JkZSBzdXBlcmlvciBkZSBlc3RlIG5vZG8uXG4gICAqL1xuICBwb3BvdmVyQW5jaG9yUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIE92ZXJyaWRlIGRlbCBzZXQgZGUgdGFicyBwZXJtaXRpZGFzOyBzaSBubyBzZSBwYXNhIHNlIGRlcml2YSBkZWwgYWdlbnQuICovXG4gIGVuYWJsZWRUeXBlcz86IENvbnRleHRFbnRpdHlUeXBlW11cbiAgLyoqIFNraWxscyBpbnllY3RhZGFzIGRpcmVjdGFtZW50ZSAoZGV2L3Rlc3RpbmcpLiBTaSBzZSBwcm92ZWVuLCBzZSBvbWl0ZSBlbCBmZXRjaCBSRVNULiAqL1xuICBza2lsbHM/OiBTa2lsbFtdXG4gIC8qKiBDYWxsYmFjayBjdWFuZG8gZWwgdXN1YXJpbyBpbnNlcnRhIHVuYSBtZW50aW9uIHbDrWEgY2xpY2svdGVjbGFkby4gKi9cbiAgb25NZW50aW9uQWRkZWQ/OiAobWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPSB7XG4gIHBvcG92ZXJPcGVuOiBib29sZWFuXG4gIC8qKlxuICAgKiBSZWluaWNpYSBlbCB0cmFja2luZyBkZSBgQUlfQ0hBVF9NRU5USU9OX09QRU5gIChwcmltZXJhIGFwZXJ0dXJhIHBvciBtZW5zYWplKS5cbiAgICogTGxhbWFyIHRyYXMgZW52aWFyIGVsIG1lbnNhamUgbyBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24uXG4gICAqL1xuICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmc6ICgpID0+IHZvaWRcbiAgLyoqIFByb2Nlc2EgZWwgdHJpZ2dlciBwcm92ZW5pZW50ZSBkZWwgYENvbnRleHRNZW50aW9uRWRpdG9yLm9uSW5wdXRgLiAqL1xuICBoYW5kbGVUcmlnZ2VyOiAodHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfSkgPT4gdm9pZFxuICAvKipcbiAgICogTWFuZWpvIGRlIHRlY2xhcyByZWxhdGl2YXMgYWwgcG9wb3ZlciAobmF2ZWdhY2nDs24sIHNlbGVjY2nDs24sIGNhbWJpbyBkZVxuICAgKiB0YWIgeSBlc2NhcGUpLiBEZXZ1ZWx2ZSBgdHJ1ZWAgc2kgY29uc3VtacOzIGxhIGtleSwgcGFyYSBxdWUgZWwgY29uc3VtZXJcbiAgICogcHVlZGEgZGVjaWRpciBzaSBzZWd1aXIgcHJvY2VzYW5kbyBvdHJhcyB0ZWNsYXMgKHAuZWouIEVudGVyIHBhcmEgZW52aWFyKS5cbiAgICovXG4gIGhhbmRsZUtleURvd246IChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gYm9vbGVhblxuICAvKiogTm9kbyBkZWwgcG9wb3ZlcjsgZWwgY29uc3VtZXIgZGViZSBwb3J0YXJsbyBjb24gYGNyZWF0ZVBvcnRhbGAuICovXG4gIHBvcG92ZXJOb2RlOiBSZWFjdE5vZGUgfCBudWxsXG4gIC8qKiBDaWVycmEgZWwgcG9wb3ZlciB5IGxpbXBpYSBlbCBxdWVyeS4gKi9cbiAgY2xvc2U6ICgpID0+IHZvaWRcbn1cblxuLyoqXG4gKiBEZXJpdmEgY2xpZW50SWQsIHByb2plY3RJZCwgYWdlbnRFbnRpdHkgeSBNQ1AgZGVzZGUgZWwgY29udGV4dG8gZ2xvYmFsIChpbmNsLlxuICogYGVudGl0eVZhbHVlc2AgeSBgY2hpcHNQcm9qZWN0YCkgcGFyYSBmaWx0cmFyIHJlY2VudHMgeSBiw7pzcXVlZGEgR3JhcGhRTC5cbiAqL1xuY29uc3QgdXNlRGVyaXZlZFNjb3BlID0gKCk6IEVudGl0eVNlYXJjaFNjb3BlID0+IHtcbiAgY29uc3QgY3R4ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGNsaWVudElkID0gY3R4LmNsaWVudD8uaWQgPz8gY3R4LmVudGl0eVZhbHVlcz8uY2xpZW50SWQgPz8gbnVsbFxuICBjb25zdCBwcm9qZWN0SWQgPSBjdHgucHJvamVjdD8uaWQgPz8gY3R4LmVudGl0eVZhbHVlcz8ucHJvamVjdElkID8/IGN0eC5jaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsXG4gIGNvbnN0IGFnZW50RW50aXR5ID0gY3R4LmFnZW50Py5lbnRpdHkgPz8gbnVsbFxuICBjb25zdCBtY3BTbHVnc0tleSA9IChjdHguYWdlbnQ/LmNvbm5lY3RvcnM/LmZpbmQoYyA9PiBjLmdyb3VwID09PSAnTUNQJyk/LnNsdWdzID8/IFtdKS5qb2luKCd8JylcblxuICBjb25zdCBtY3BTbHVncyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9IGN0eC5hZ2VudD8uY29ubmVjdG9ycz8uZmluZChjID0+IGMuZ3JvdXAgPT09ICdNQ1AnKT8uc2x1Z3MgPz8gW11cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQocmF3LmZpbHRlcigocyk6IHMgaXMgc3RyaW5nID0+IHR5cGVvZiBzID09PSAnc3RyaW5nJyAmJiBzLnRyaW0oKS5sZW5ndGggPiAwKSldLnNvcnQoKVxuICB9LCBbbWNwU2x1Z3NLZXldKVxuXG4gIHJldHVybiB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoeyBjbGllbnRJZCwgcHJvamVjdElkLCBtY3BTbHVncywgYWdlbnRFbnRpdHkgfSksXG4gICAgW2NsaWVudElkLCBwcm9qZWN0SWQsIG1jcFNsdWdzLCBhZ2VudEVudGl0eV0gLy8gc2tpbGxzIHNlIGlueWVjdGEgZW4gdXNlTWVudGlvblBvcG92ZXJcbiAgKVxufVxuXG4vKipcbiAqIEVuY2Fwc3VsYSBsYSBsw7NnaWNhIGRlbCBwb3BvdmVyIGRlIEAtbWVudGlvbnMgKGVzdGFkbywgZmV0Y2ggcG9yIHRhYiwgYW5hbHl0aWNzLFxuICogcG9zaWNpb25hbWllbnRvKS4gRWwgY29uc3VtZXIgbWFudGllbmUgZWwgZWRpdG9yIHkgZWwgZW52w61vIGRlbCBtZW5zYWplLlxuICogTG9zIGZpbHRyb3MgZGUgYsO6c3F1ZWRhIHVzYW4gYHVzZURlcml2ZWRTY29wZWA6IGVzcGVjaWFsaXN0YSBwcm95ZWN0byBhY290YSB0YXJlYXNcbiAqIGFsIGBwcm9qZWN0SWRgIGRlbCBjb250ZXh0bzsgZXNwZWNpYWxpc3RhIGNsaWVudGUsIHByb3llY3RvcyBhbCBgY2xpZW50SWRgIChlbiBgZXh0cmFgIGRlIHNlYXJjaCkuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VNZW50aW9uUG9wb3ZlciA9ICh7XG4gIGVkaXRvclJlZixcbiAgcG9wb3ZlckFuY2hvclJlZixcbiAgZW5hYmxlZFR5cGVzLFxuICBza2lsbHMsXG4gIG9uTWVudGlvbkFkZGVkLFxufTogVXNlTWVudGlvblBvcG92ZXJPcHRpb25zKTogVXNlTWVudGlvblBvcG92ZXJSZXR1cm4gPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlIH0gPSB1c2VNZW50aW9uQWxsb3dlZFR5cGVzKGVuYWJsZWRUeXBlcylcbiAgY29uc3QgbWVudGlvblBvcG92ZXJaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oZGVmYXVsdFR5cGUpXG4gIGNvbnN0IFtwb3BvdmVyT3Blbiwgc2V0UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtwb3BvdmVyUG9zLCBzZXRQb3BvdmVyUG9zXSA9IHVzZVN0YXRlPHsgYm90dG9tOiBudW1iZXI7IGxlZnQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9Pih7XG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgd2lkdGg6IDAsXG4gIH0pXG4gIGNvbnN0IFthY3RpdmVJbmRleCwgc2V0QWN0aXZlSW5kZXhdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzS2V5Ym9hcmROYXZBY3RpdmUsIHNldElzS2V5Ym9hcmROYXZBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGhhc0VtaXR0ZWRPcGVuID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBwb3BvdmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ2V0Q2FyZXRSZWN0ID0gdXNlQ2FyZXRQb3NpdGlvbigpXG5cbiAgY29uc3QgZGVyaXZlZFNjb3BlID0gdXNlRGVyaXZlZFNjb3BlKClcbiAgY29uc3Qgc2NvcGUgPSB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoc2tpbGxzID8geyAuLi5kZXJpdmVkU2NvcGUsIHNraWxscyB9IDogZGVyaXZlZFNjb3BlKSxcbiAgICBbZGVyaXZlZFNjb3BlLCBza2lsbHNdXG4gIClcbiAgY29uc3Qge1xuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBoYXNNb3JlLFxuICAgIGlzTG9hZGluZ01vcmUsXG4gICAgbG9hZE1vcmUsXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUsXG4gICAgc2tpbGxzQ2F0YWxvZ0VtcHR5LFxuICB9ID0gdXNlRW50aXR5U2VhcmNoKGFjdGl2ZVR5cGUsIHNjb3BlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoYWN0aXZlVHlwZSkpIHtcbiAgICAgIHNldEFjdGl2ZVR5cGUoZGVmYXVsdFR5cGUpXG4gICAgfVxuICB9LCBbYWxsb3dlZFR5cGVzLCBhY3RpdmVUeXBlLCBkZWZhdWx0VHlwZV0pXG5cbiAgY29uc3QgcG9zaXRpb25Qb3BvdmVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21BbmNob3IgPSBwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IGZyb21FZGl0b3IgPSBlZGl0b3JSZWYuY3VycmVudD8uZ2V0RWRpdG9yQ2xpZW50UmVjdD8uKCkgPz8gbnVsbFxuICAgIGNvbnN0IHdpZHRoUmVjdCA9IGZyb21BbmNob3IgPz8gZnJvbUVkaXRvclxuICAgIGNvbnN0IGNhcmV0ID0gZ2V0Q2FyZXRSZWN0KCdAJylcblxuICAgIGNvbnN0IHdpZHRoID0gd2lkdGhSZWN0ICYmIHdpZHRoUmVjdC53aWR0aCA+IDAgPyB3aWR0aFJlY3Qud2lkdGggOiBNRU5USU9OX1BPUE9WRVJfRkFMTEJBQ0tfV0lEVEhfUFhcbiAgICBjb25zdCBsZWZ0U291cmNlID0gd2lkdGhSZWN0ICYmIHdpZHRoUmVjdC53aWR0aCA+IDAgPyB3aWR0aFJlY3QubGVmdCA6IGNhcmV0Py5sZWZ0XG4gICAgY29uc3QgdG9wU291cmNlID0gY2FyZXQ/LnRvcCA/PyAod2lkdGhSZWN0ICYmIHdpZHRoUmVjdC53aWR0aCA+IDAgPyB3aWR0aFJlY3QudG9wIDogbnVsbClcblxuICAgIGlmIChsZWZ0U291cmNlID09IG51bGwgfHwgdG9wU291cmNlID09IG51bGwpIHJldHVyblxuXG4gICAgY29uc3Qgdmlld3BvcnRXID0gd2luZG93LmlubmVyV2lkdGhcbiAgICBjb25zdCB2aWV3cG9ydEggPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoXG4gICAgICBNRU5USU9OX1BPUE9WRVJfVklFV1BPUlRfUEFEX1BYLFxuICAgICAgTWF0aC5taW4odmlld3BvcnRXIC0gd2lkdGggLSBNRU5USU9OX1BPUE9WRVJfVklFV1BPUlRfUEFEX1BYLCBsZWZ0U291cmNlKVxuICAgIClcblxuICAgIC8qKiBBbmNobyBkZWwgaW5wdXQ7IGJvcmRlIGluZmVyaW9yIH40cHggcG9yIGVuY2ltYSBkZWwgYEBgIHF1ZSBhYnJlIGxhcyBtZW5jaW9uZXMuICovXG4gICAgc2V0UG9wb3ZlclBvcyh7XG4gICAgICB3aWR0aCxcbiAgICAgIGxlZnQsXG4gICAgICBib3R0b206IHZpZXdwb3J0SCAtIHRvcFNvdXJjZSArIE1FTlRJT05fUE9QT1ZFUl9HQVBfUFgsXG4gICAgfSlcbiAgfSwgW3BvcG92ZXJBbmNob3JSZWYsIGVkaXRvclJlZiwgZ2V0Q2FyZXRSZWN0XSlcblxuICBjb25zdCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaGFzRW1pdHRlZE9wZW4uY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlKCcnKVxuICB9LCBbdXBkYXRlU2VhcmNoVmFsdWVdKVxuXG4gIGNvbnN0IGhhbmRsZVRyaWdnZXIgPSB1c2VDYWxsYmFjayhcbiAgICAodHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmc7IGF0UnVuTGVuZ3RoOiBudW1iZXIgfSkgPT4ge1xuICAgICAgaWYgKGFsbG93ZWRUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKHBvcG92ZXJPcGVuKSBjbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHJpZ2dlci5hY3RpdmUpIHtcbiAgICAgICAgLy8gZGV0ZWN0TWVudGlvblRyaWdnZXIgbWFyY2EgQC8gY29tbyBhdFJ1bkxlbmd0aCA9PT0gLTEgKHNsYXNoIGNvbnN1bWlkbywgbm8gcXVlZGEgZW4gcXVlcnkpXG4gICAgICAgIGNvbnN0IGlzU2tpbGxUcmlnZ2VyID0gYWxsb3dlZFR5cGVzLmluY2x1ZGVzKCdza2lsbCcpICYmIHRyaWdnZXIuYXRSdW5MZW5ndGggPT09IC0xXG4gICAgICAgIGNvbnN0IGF0UnVuVGFiVHlwZXMgPSBnZXRBdFJ1blRhYlR5cGVzKGFsbG93ZWRUeXBlcylcbiAgICAgICAgY29uc3QgYXRSdW5UeXBlc09yQWxsID0gYXRSdW5UYWJUeXBlcy5sZW5ndGggPiAwID8gYXRSdW5UYWJUeXBlcyA6IGFsbG93ZWRUeXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlICE9PSAnc2tpbGwnKVxuICAgICAgICBjb25zdCBpc1NsYXNoVHJpZ2dlciA9IHRyaWdnZXIuYXRSdW5MZW5ndGggPCAwXG5cbiAgICAgICAgbGV0IHR5cGVGcm9tQXQ6IENvbnRleHRFbnRpdHlUeXBlXG4gICAgICAgIGxldCBlZmZlY3RpdmVRdWVyeTogc3RyaW5nXG5cbiAgICAgICAgaWYgKGlzU2tpbGxUcmlnZ2VyKSB7XG4gICAgICAgICAgdHlwZUZyb21BdCA9ICdza2lsbCdcbiAgICAgICAgICBlZmZlY3RpdmVRdWVyeSA9IHRyaWdnZXIucXVlcnlcbiAgICAgICAgfSBlbHNlIGlmIChpc1NsYXNoVHJpZ2dlcikge1xuICAgICAgICAgIHR5cGVGcm9tQXQgPSBnZXRUeXBlRnJvbVRyaWdnZXJTZXF1ZW5jZSh0cmlnZ2VyLmF0UnVuTGVuZ3RoLCBhbGxvd2VkVHlwZXMsIGRlZmF1bHRUeXBlKVxuICAgICAgICAgIGVmZmVjdGl2ZVF1ZXJ5ID0gdHJpZ2dlci5xdWVyeVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG92ZXJmbG93QXRDb3VudCA9IE1hdGgubWF4KDAsIHRyaWdnZXIuYXRSdW5MZW5ndGggLSBhdFJ1blRhYlR5cGVzLmxlbmd0aClcbiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVBdFJ1bkxlbmd0aCA9IE1hdGgubWluKHRyaWdnZXIuYXRSdW5MZW5ndGgsIGF0UnVuVHlwZXNPckFsbC5sZW5ndGgpXG4gICAgICAgICAgZWZmZWN0aXZlUXVlcnkgPSBgJHsnQCcucmVwZWF0KG92ZXJmbG93QXRDb3VudCl9JHt0cmlnZ2VyLnF1ZXJ5fWBcbiAgICAgICAgICB0eXBlRnJvbUF0ID0gZ2V0VHlwZUZyb21UcmlnZ2VyU2VxdWVuY2UoZWZmZWN0aXZlQXRSdW5MZW5ndGgsIGF0UnVuVHlwZXNPckFsbCwgZGVmYXVsdFR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgICAgc2V0UG9wb3Zlck9wZW4odHJ1ZSlcbiAgICAgICAgICBzZXRBY3RpdmVUeXBlKHR5cGVGcm9tQXQpXG4gICAgICAgICAgcG9zaXRpb25Qb3BvdmVyKClcbiAgICAgICAgICBpZiAoIWhhc0VtaXR0ZWRPcGVuLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uT3BlbiwgeyB0eXBlOiB0eXBlRnJvbUF0IH0pXG4gICAgICAgICAgICBoYXNFbWl0dGVkT3Blbi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRBY3RpdmVUeXBlKHR5cGVGcm9tQXQpXG4gICAgICAgICAgcG9zaXRpb25Qb3BvdmVyKClcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTZWFyY2hWYWx1ZShlZmZlY3RpdmVRdWVyeSlcbiAgICAgIH0gZWxzZSBpZiAocG9wb3Zlck9wZW4pIHtcbiAgICAgICAgY2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FsbG93ZWRUeXBlcywgZGVmYXVsdFR5cGUsIHBvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXIsIHVwZGF0ZVNlYXJjaFZhbHVlLCBldmVudCwgY2xvc2VdXG4gIClcblxuICBjb25zdCBpbnNlcnRTZWxlY3RlZEl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoaXRlbTogQ29udGV4dE1lbnRpb25JdGVtKSA9PiB7XG4gICAgICBjb25zdCBtZW50aW9uOiBDb250ZXh0TWVudGlvbiA9IHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ucHJpbWFyeSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBjbGllbnRJZDogaXRlbS5yYXcuY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgICAgICBjbGllbnROYW1lOiBpdGVtLnJhdy5jbGllbnROYW1lID8/IG51bGwsXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGl0ZW0ucmF3LnByb2plY3ROYW1lID8/IG51bGwsXG4gICAgICAgICAgZmVlSWQ6IGl0ZW0ucmF3LmZlZUlkID8/IG51bGwsXG4gICAgICAgICAgZmF0aGVySWQ6IGl0ZW0ucmF3LmZhdGhlcklkID8/IG51bGwsXG4gICAgICAgICAgZmF0aGVyVGl0bGU6IGl0ZW0ucmF3LmZhdGhlclRpdGxlID8/IG51bGwsXG4gICAgICAgICAgdG90YWxQcm95ZWN0b3M6IGl0ZW0ucmF3LnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gICAgICAgICAgbmFtZTogaXRlbS5yYXcubmFtZSA/PyBudWxsLFxuICAgICAgICAgIHBpY3R1cmU6IGl0ZW0ucmF3LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgICAgICBwb3NpdGlvbk5hbWU6IGl0ZW0ucmF3LnBvc2l0aW9uTmFtZSA/PyBudWxsLFxuICAgICAgICAgIGVtYWlsOiBpdGVtLnJhdy5lbWFpbCA/PyBudWxsLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydE1lbnRpb24obWVudGlvbilcbiAgICAgIG9uTWVudGlvbkFkZGVkPy4obWVudGlvbilcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRNZW50aW9uU2VsZWN0LCB7IHR5cGU6IG1lbnRpb24udHlwZSwgaWQ6IFN0cmluZyhtZW50aW9uLmlkKSB9KVxuICAgICAgY2xvc2UoKVxuICAgIH0sXG4gICAgW2VkaXRvclJlZiwgb25NZW50aW9uQWRkZWQsIGV2ZW50LCBjbG9zZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVR5cGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodHlwZTogQ29udGV4dEVudGl0eVR5cGUpID0+IHtcbiAgICAgIHNldEFjdGl2ZVR5cGUodHlwZSlcbiAgICAgIGlmICh0eXBlID09PSAnc2tpbGwnKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5zeW5jU2tpbGxUcmlnZ2VyKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHRSdW5MZW5ndGggPSBnZXRUcmlnZ2VyU2VxdWVuY2VGcm9tVHlwZShcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGFsbG93ZWRUeXBlcy5maWx0ZXIoZW50aXR5VHlwZSA9PiBlbnRpdHlUeXBlICE9PSAnc2tpbGwnKVxuICAgICAgICApXG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5zeW5jVHJpZ2dlckF0UnVuTGVuZ3RoKG5leHRSdW5MZW5ndGgpXG4gICAgICB9XG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0TWVudGlvblR5cGVTd2l0Y2gsIHsgdHlwZSB9KVxuICAgIH0sXG4gICAgW2FsbG93ZWRUeXBlcywgZWRpdG9yUmVmLCBldmVudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghcG9wb3Zlck9wZW4gfHwgYWxsb3dlZFR5cGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGNsb3NlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKChlLmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGUua2V5ID09PSAnQXJyb3dMZWZ0JykgJiYgKGUubWV0YUtleSB8fCBlLmFsdEtleSkpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGNvbnN0IGlkeCA9IGFsbG93ZWRUeXBlcy5pbmRleE9mKGFjdGl2ZVR5cGUpXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5rZXkgPT09ICdBcnJvd1JpZ2h0JyA/IDEgOiAtMVxuICAgICAgICBjb25zdCBuZXh0SWR4ID0gKGlkeCArIGRlbHRhICsgYWxsb3dlZFR5cGVzLmxlbmd0aCkgJSBhbGxvd2VkVHlwZXMubGVuZ3RoXG4gICAgICAgIGhhbmRsZVR5cGVDaGFuZ2UoYWxsb3dlZFR5cGVzW25leHRJZHhdKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcblxuICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgc2V0SXNLZXlib2FyZE5hdkFjdGl2ZSh0cnVlKVxuICAgICAgICBzZXRBY3RpdmVJbmRleChwcmV2ID0+IChpdGVtcy5sZW5ndGggPiAwID8gTWF0aC5taW4ocHJldiArIDEsIGl0ZW1zLmxlbmd0aCAtIDEpIDogMCkpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgc2V0SXNLZXlib2FyZE5hdkFjdGl2ZSh0cnVlKVxuICAgICAgICBzZXRBY3RpdmVJbmRleChwcmV2ID0+IE1hdGgubWF4KHByZXYgLSAxLCAwKSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGluc2VydFNlbGVjdGVkSXRlbShpdGVtc1thY3RpdmVJbmRleF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuICAgIFtwb3BvdmVyT3BlbiwgaXRlbXMsIGFsbG93ZWRUeXBlcywgYWN0aXZlVHlwZSwgYWN0aXZlSW5kZXgsIGluc2VydFNlbGVjdGVkSXRlbSwgY2xvc2UsIGhhbmRsZVR5cGVDaGFuZ2VdXG4gIClcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcG9wb3Zlck9wZW4pIHJldHVybiB1bmRlZmluZWRcbiAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW3BvcG92ZXJPcGVuLCBwb3NpdGlvblBvcG92ZXJdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3BvdmVyT3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlID0gKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIE5vZGUgfCBudWxsXG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgICBpZiAocG9wb3ZlclJlZi5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmPy5jdXJyZW50Py5jb250YWlucyh0YXJnZXQpKSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSlcbiAgfSwgW3BvcG92ZXJPcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZl0pXG5cbiAgY29uc3QgcHJldklzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHByZXZJc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlXG4gICAgfVxuICB9LCBbaXNMb2FkaW5nTW9yZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJldklzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgc2V0QWN0aXZlSW5kZXgoMClcbiAgfSwgW2l0ZW1zLmxlbmd0aCwgYWN0aXZlVHlwZV0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIXBvcG92ZXJPcGVuKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8U0NNUEFuY2hvclxuICAgICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9wb3ZlclBvcy5ib3R0b219XG4gICAgICAgICRsZWZ0PXtwb3BvdmVyUG9zLmxlZnR9XG4gICAgICAgICR3aWR0aD17cG9wb3ZlclBvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17bWVudGlvblBvcG92ZXJaSW5kZXh9XG4gICAgICAgIG9uTW91c2VEb3duPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICA+XG4gICAgICAgIDxDb250ZXh0TWVudGlvblBvcG92ZXJcbiAgICAgICAgICBhbGxvd2VkVHlwZXM9e2FsbG93ZWRUeXBlc31cbiAgICAgICAgICBhY3RpdmVUeXBlPXthY3RpdmVUeXBlfVxuICAgICAgICAgIG9uVHlwZUNoYW5nZT17aGFuZGxlVHlwZUNoYW5nZX1cbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgICAgaGlkZVJlY2VudHNMYWJlbD17aGlkZVJlY2VudHNMYWJlbH1cbiAgICAgICAgICBza2lsbHNDYXRhbG9nRW1wdHk9e3NraWxsc0NhdGFsb2dFbXB0eX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgICAgb25SZWFjaExpc3RFbmQ9e2xvYWRNb3JlfVxuICAgICAgICAgIHNlYXJjaFZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICBrZXlib2FyZEhpbnQ9e3QoJ2NvbnRleHRNZW50aW9uLmtleWJvYXJkSGludCcsIHtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ05hdmVnYWNpw7NuIGVudHJlIHBlc3Rhw7FhczogQCwgQEAsIEBAQOKApiBlbiBvcmRlbi4gVGFtYmnDqW4gQWx0L0NtZCArIOKGkC/ihpInLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2luc2VydFNlbGVjdGVkSXRlbX1cbiAgICAgICAgICBhY3RpdmVJbmRleD17YWN0aXZlSW5kZXh9XG4gICAgICAgICAgb25BY3RpdmVJbmRleENoYW5nZT17c2V0QWN0aXZlSW5kZXh9XG4gICAgICAgICAgaXNLZXlib2FyZE5hdkFjdGl2ZT17aXNLZXlib2FyZE5hdkFjdGl2ZX1cbiAgICAgICAgICBvbk1vdXNlTW92ZUluTGlzdD17KCkgPT4gc2V0SXNLZXlib2FyZE5hdkFjdGl2ZShmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICA8L1NDTVBBbmNob3I+XG4gICAgKVxuICB9LCBbXG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcG9wb3ZlclBvcyxcbiAgICBtZW50aW9uUG9wb3ZlclpJbmRleCxcbiAgICBhbGxvd2VkVHlwZXMsXG4gICAgYWN0aXZlVHlwZSxcbiAgICBoYW5kbGVUeXBlQ2hhbmdlLFxuICAgIGl0ZW1zLFxuICAgIGxvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgaGlkZVJlY2VudHNMYWJlbCxcbiAgICBza2lsbHNDYXRhbG9nRW1wdHksXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIHRvb2x0aXBaSW5kZXgsXG4gICAgaW5zZXJ0U2VsZWN0ZWRJdGVtLFxuICAgIGFjdGl2ZUluZGV4LFxuICAgIGlzS2V5Ym9hcmROYXZBY3RpdmUsXG4gIF0pXG5cbiAgcmV0dXJuIHsgcG9wb3Zlck9wZW4sIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgaGFuZGxlVHJpZ2dlciwgaGFuZGxlS2V5RG93biwgcG9wb3Zlck5vZGUsIGNsb3NlIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxTQUlFQSxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsZUFBZSxFQUNmQyxPQUFPLEVBQ1BDLE1BQU0sRUFDTkMsUUFBUSxRQUNILE9BQU87QUFFZCxTQUNFQyxxQkFBcUIsRUFDckJDLDRCQUE0QixFQUM1QkMsVUFBVSxRQUNMLDJDQUEyQztBQUNsRCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsMkJBQTJCO0FBQzVELFNBQVNDLElBQUksUUFBUSxRQUFRO0FBQzdCO0FBQ0EsU0FBNEJDLGVBQWUsUUFBUSxtQkFBbUI7QUFDdEUsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLG9CQUFvQjtBQUNyRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxZQUFZO0FBRzdDLFNBQ0VDLGdCQUFnQixFQUNoQkMsMEJBQTBCLEVBQzFCQywwQkFBMEIsUUFDckIsaUNBQWlDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRXhDLElBQU1DLHNCQUFzQixHQUFHLENBQUM7QUFDaEMsSUFBTUMsK0JBQStCLEdBQUcsQ0FBQztBQUN6QyxJQUFNQyxpQ0FBaUMsR0FBRyxHQUFHO0FBc0M3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUE0QjtFQUFBLElBQUFDLElBQUEsRUFBQUMsY0FB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