@payloadcms/richtext-lexical 0.6.0 → 0.7.0

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.
Files changed (100) hide show
  1. package/components.js +4 -4
  2. package/dist/cell/index.js +4 -2
  3. package/dist/exports/components.js +4 -4
  4. package/dist/field/Field.d.ts.map +1 -1
  5. package/dist/field/Field.js +9 -3
  6. package/dist/field/features/BlockQuote/index.d.ts.map +1 -1
  7. package/dist/field/features/BlockQuote/index.js +8 -10
  8. package/dist/field/features/Blocks/component/BlockContent.js +4 -2
  9. package/dist/field/features/Blocks/component/index.js +5 -3
  10. package/dist/field/features/Blocks/drawer/index.js +8 -6
  11. package/dist/field/features/Blocks/index.js +4 -2
  12. package/dist/field/features/Blocks/nodes/BlocksNode.js +7 -5
  13. package/dist/field/features/Blocks/plugin/index.d.ts.map +1 -1
  14. package/dist/field/features/Blocks/plugin/index.js +7 -4
  15. package/dist/field/features/Heading/index.d.ts.map +1 -1
  16. package/dist/field/features/Heading/index.js +7 -7
  17. package/dist/field/features/Link/index.js +5 -3
  18. package/dist/field/features/Link/nodes/AutoLinkNode.js +4 -4
  19. package/dist/field/features/Link/nodes/LinkNode.d.ts.map +1 -1
  20. package/dist/field/features/Link/nodes/LinkNode.js +5 -5
  21. package/dist/field/features/Link/plugins/autoLink/index.d.ts.map +1 -1
  22. package/dist/field/features/Link/plugins/autoLink/index.js +7 -6
  23. package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  24. package/dist/field/features/Link/plugins/floatingLinkEditor/LinkEditor/index.js +32 -6
  25. package/dist/field/features/Link/plugins/floatingLinkEditor/index.js +4 -2
  26. package/dist/field/features/Paragraph/index.d.ts.map +1 -1
  27. package/dist/field/features/Paragraph/index.js +6 -8
  28. package/dist/field/features/Relationship/drawer/index.js +4 -2
  29. package/dist/field/features/Relationship/index.js +4 -2
  30. package/dist/field/features/Relationship/nodes/RelationshipNode.js +7 -5
  31. package/dist/field/features/Relationship/nodes/components/RelationshipComponent.js +4 -2
  32. package/dist/field/features/Relationship/plugins/index.d.ts.map +1 -1
  33. package/dist/field/features/Relationship/plugins/index.js +7 -4
  34. package/dist/field/features/Relationship/utils/EnabledRelationshipsCondition.js +4 -2
  35. package/dist/field/features/Upload/component/ExtraFieldsDrawer/index.js +5 -3
  36. package/dist/field/features/Upload/component/index.js +5 -3
  37. package/dist/field/features/Upload/drawer/index.js +4 -2
  38. package/dist/field/features/Upload/index.js +5 -3
  39. package/dist/field/features/Upload/nodes/UploadNode.js +7 -5
  40. package/dist/field/features/Upload/plugin/index.d.ts.map +1 -1
  41. package/dist/field/features/Upload/plugin/index.js +7 -4
  42. package/dist/field/features/align/floatingSelectToolbarAlignDropdownSection.js +4 -2
  43. package/dist/field/features/align/index.d.ts.map +1 -1
  44. package/dist/field/features/align/index.js +17 -2
  45. package/dist/field/features/common/floatingSelectToolbarTextDropdownSection/index.js +4 -2
  46. package/dist/field/features/converters/html/converter/index.js +4 -4
  47. package/dist/field/features/converters/html/field/index.js +3 -3
  48. package/dist/field/features/debug/TestRecorder/index.js +4 -2
  49. package/dist/field/features/debug/TestRecorder/plugin/index.js +7 -5
  50. package/dist/field/features/debug/TreeView/index.js +4 -2
  51. package/dist/field/features/debug/TreeView/plugin.js +4 -2
  52. package/dist/field/features/format/Bold/index.js +4 -2
  53. package/dist/field/features/format/InlineCode/index.js +4 -2
  54. package/dist/field/features/format/Italic/index.js +4 -2
  55. package/dist/field/features/format/strikethrough/index.js +4 -2
  56. package/dist/field/features/format/subscript/index.js +4 -2
  57. package/dist/field/features/format/superscript/index.js +4 -2
  58. package/dist/field/features/format/underline/index.js +4 -2
  59. package/dist/field/features/indent/index.js +4 -2
  60. package/dist/field/features/lists/CheckList/index.js +4 -2
  61. package/dist/field/features/lists/OrderedList/index.js +4 -2
  62. package/dist/field/features/lists/UnorderedList/index.js +4 -2
  63. package/dist/field/features/lists/common/markdown.js +4 -4
  64. package/dist/field/features/migrations/LexicalPluginToLexical/converter/index.js +6 -6
  65. package/dist/field/features/migrations/LexicalPluginToLexical/index.js +2 -2
  66. package/dist/field/features/migrations/LexicalPluginToLexical/nodes/unknownConvertedNode/index.js +7 -5
  67. package/dist/field/features/migrations/SlateToLexical/converter/index.js +8 -8
  68. package/dist/field/features/migrations/SlateToLexical/index.js +2 -2
  69. package/dist/field/features/migrations/SlateToLexical/nodes/unknownConvertedNode/index.js +7 -5
  70. package/dist/field/index.js +4 -2
  71. package/dist/field/lexical/EditorPlugin.js +4 -2
  72. package/dist/field/lexical/LexicalEditor.js +4 -2
  73. package/dist/field/lexical/LexicalProvider.js +4 -2
  74. package/dist/field/lexical/config/EditorConfigProvider.js +4 -2
  75. package/dist/field/lexical/config/default.js +7 -5
  76. package/dist/field/lexical/config/loader.js +4 -4
  77. package/dist/field/lexical/config/sanitize.js +4 -4
  78. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarButton/index.js +4 -2
  79. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/DropDown.js +7 -5
  80. package/dist/field/lexical/plugins/FloatingSelectToolbar/ToolbarDropdown/index.js +7 -5
  81. package/dist/field/lexical/plugins/FloatingSelectToolbar/index.js +4 -2
  82. package/dist/field/lexical/plugins/MarkdownShortcut/index.js +4 -2
  83. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +7 -7
  84. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +13 -11
  85. package/dist/field/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js +4 -4
  86. package/dist/field/lexical/plugins/SlashMenu/index.js +4 -2
  87. package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.d.ts.map +1 -1
  88. package/dist/field/lexical/plugins/handles/AddBlockHandlePlugin/index.js +59 -35
  89. package/dist/field/lexical/plugins/handles/DraggableBlockPlugin/index.js +4 -2
  90. package/dist/field/lexical/theme/EditorTheme.d.ts.map +1 -1
  91. package/dist/field/lexical/theme/EditorTheme.js +2 -1
  92. package/dist/field/lexical/ui/ContentEditable.js +4 -2
  93. package/dist/field/lexical/ui/icons/AlignJustify/index.d.ts +3 -0
  94. package/dist/field/lexical/ui/icons/AlignJustify/index.d.ts.map +1 -0
  95. package/dist/field/lexical/ui/icons/AlignJustify/index.js +40 -0
  96. package/dist/field/lexical/utils/environment.js +15 -15
  97. package/dist/field/lexical/utils/nodeFormat.js +19 -19
  98. package/dist/field/lexical/utils/swipe.js +4 -4
  99. package/dist/index.js +194 -192
  100. package/package.json +14 -14
@@ -10,15 +10,6 @@ function _export(target, all) {
10
10
  });
11
11
  }
12
12
  _export(exports, {
13
- PUNCTUATION: function() {
14
- return PUNCTUATION;
15
- },
16
- getScrollParent: function() {
17
- return getScrollParent;
18
- },
19
- useDynamicPositioning: function() {
20
- return _LexicalMenu.useDynamicPositioning;
21
- },
22
13
  ENABLE_SLASH_MENU_COMMAND: function() {
23
14
  return ENABLE_SLASH_MENU_COMMAND;
24
15
  },
@@ -28,8 +19,17 @@ _export(exports, {
28
19
  MenuTextMatch: function() {
29
20
  return _useMenuTriggerMatch.MenuTextMatch;
30
21
  },
22
+ PUNCTUATION: function() {
23
+ return PUNCTUATION;
24
+ },
31
25
  TriggerFn: function() {
32
26
  return _useMenuTriggerMatch.TriggerFn;
27
+ },
28
+ getScrollParent: function() {
29
+ return getScrollParent;
30
+ },
31
+ useDynamicPositioning: function() {
32
+ return _LexicalMenu.useDynamicPositioning;
33
33
  }
34
34
  });
35
35
  const _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
@@ -59,7 +59,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
59
59
  if (cache && cache.has(obj)) {
60
60
  return cache.get(obj);
61
61
  }
62
- var newObj = {};
62
+ var newObj = {
63
+ __proto__: null
64
+ };
63
65
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
64
66
  for(var key in obj){
65
67
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -271,4 +273,4 @@ function LexicalTypeaheadMenuPlugin({ anchorClassName, anchorElem, groupsWithOpt
271
273
  });
272
274
  }
273
275
 
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHtcbiAgTGV4aWNhbENvbW1hbmQsXG4gIExleGljYWxFZGl0b3IsXG4gIFBhcmFncmFwaE5vZGUsXG4gIFJhbmdlU2VsZWN0aW9uLFxuICBUZXh0Tm9kZSxcbn0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCB9IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQnXG5pbXBvcnQgeyBtZXJnZVJlZ2lzdGVyIH0gZnJvbSAnQGxleGljYWwvdXRpbHMnXG5pbXBvcnQge1xuICAkZ2V0U2VsZWN0aW9uLFxuICAkaXNSYW5nZVNlbGVjdGlvbixcbiAgJGlzVGV4dE5vZGUsXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24gfSBmcm9tICcuL0xleGljYWxNZW51J1xuaW1wb3J0IHR5cGUgeyBTbGFzaE1lbnVHcm91cCwgU2xhc2hNZW51T3B0aW9uIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgTWVudVRleHRNYXRjaCwgVHJpZ2dlckZuIH0gZnJvbSAnLi4vdXNlTWVudVRyaWdnZXJNYXRjaCdcbmltcG9ydCB7IExleGljYWxNZW51LCB1c2VNZW51QW5jaG9yUmVmIH0gZnJvbSAnLi9MZXhpY2FsTWVudSdcblxuZXhwb3J0IGNvbnN0IFBVTkNUVUFUSU9OID0gJ1xcXFwuLFxcXFwrXFxcXCpcXFxcP1xcXFwkXFxcXEBcXFxcfCN7fVxcXFwoXFxcXClcXFxcXlxcXFwtXFxcXFtcXFxcXVxcXFxcXFxcLyElXFwnXCJ+PTw+Xzo7J1xuXG5mdW5jdGlvbiBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb246IFJhbmdlU2VsZWN0aW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgaWYgKGFuY2hvci50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gIGlmICghYW5jaG9yTm9kZS5pc1NpbXBsZVRleHQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gYW5jaG9yLm9mZnNldFxuICByZXR1cm4gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIGFuY2hvck9mZnNldClcbn1cblxuZnVuY3Rpb24gdHJ5VG9Qb3NpdGlvblJhbmdlKGxlYWRPZmZzZXQ6IG51bWJlciwgcmFuZ2U6IFJhbmdlLCBlZGl0b3JXaW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21TZWxlY3Rpb24gPSBlZGl0b3JXaW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgaWYgKGRvbVNlbGVjdGlvbiA9PT0gbnVsbCB8fCAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbGVhZE9mZnNldFxuICBjb25zdCBlbmRPZmZzZXQgPSBkb21TZWxlY3Rpb24uYW5jaG9yT2Zmc2V0XG5cbiAgaWYgKGFuY2hvck5vZGUgPT0gbnVsbCB8fCBlbmRPZmZzZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBzdGFydE9mZnNldClcbiAgICAvLyBpZiBlbmRPZmZzZXQgaXMgMCwgcG9zaXRpb25pbmcgdGhlIHJhbmdlIGZvciB3aGVuIHlvdSBjbGljayB0aGUgcGx1cyBidXR0b24gdG8gb3BlbiB0aGUgc2xhc2ggbWVudSB3aWxsIGZpYWxcbiAgICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgZW5kT2Zmc2V0ID4gMSA/IGVuZE9mZnNldCA6IDEpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVRleHRGb3JTZWFyY2goZWRpdG9yOiBMZXhpY2FsRWRpdG9yKTogbnVsbCB8IHN0cmluZyB7XG4gIGxldCB0ZXh0ID0gbnVsbFxuICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0ID0gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uKVxuICB9KVxuICByZXR1cm4gdGV4dFxufVxuXG5mdW5jdGlvbiBpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAob2Zmc2V0ICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICgkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gICAgICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBhbmNob3JOb2RlLmdldFByZXZpb3VzU2libGluZygpXG4gICAgICByZXR1cm4gJGlzVGV4dE5vZGUocHJldlNpYmxpbmcpICYmIHByZXZTaWJsaW5nLmlzVGV4dEVudGl0eSgpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgaWYgKFJlYWN0LnN0YXJ0VHJhbnNpdGlvbikge1xuICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8gR290IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyNTQzOTA4LzIwMTM1ODBcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuKTogSFRNTEJvZHlFbGVtZW50IHwgSFRNTEVsZW1lbnQge1xuICBsZXQgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gIGNvbnN0IGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuICBjb25zdCBvdmVyZmxvd1JlZ2V4ID0gaW5jbHVkZUhpZGRlbiA/IC8oYXV0b3xzY3JvbGx8aGlkZGVuKS8gOiAvKGF1dG98c2Nyb2xsKS9cbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbiAgfVxuICBmb3IgKGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7IChwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCk7ICkge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgaWYgKGV4Y2x1ZGVTdGF0aWNQYXJlbnQgJiYgc3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keVxufVxuXG5leHBvcnQgeyB1c2VEeW5hbWljUG9zaXRpb25pbmcgfSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5leHBvcnQgdHlwZSBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMgPSB7XG4gIGFuY2hvckNsYXNzTmFtZT86IHN0cmluZ1xuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudFxuICBncm91cHNXaXRoT3B0aW9uczogQXJyYXk8U2xhc2hNZW51R3JvdXA+XG4gIG1lbnVSZW5kZXJGbjogTWVudVJlbmRlckZuXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIG9uT3Blbj86IChyZXNvbHV0aW9uOiBNZW51UmVzb2x1dGlvbikgPT4gdm9pZFxuICBvblF1ZXJ5Q2hhbmdlOiAobWF0Y2hpbmdTdHJpbmc6IG51bGwgfCBzdHJpbmcpID0+IHZvaWRcbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgdHJpZ2dlckZuOiBUcmlnZ2VyRm5cbn1cblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQ6IExleGljYWxDb21tYW5kPHtcbiAgbm9kZTogUGFyYWdyYXBoTm9kZVxufT4gPSBjcmVhdGVDb21tYW5kKCdFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luKHtcbiAgYW5jaG9yQ2xhc3NOYW1lLFxuICBhbmNob3JFbGVtLFxuICBncm91cHNXaXRoT3B0aW9ucyxcbiAgbWVudVJlbmRlckZuLFxuICBvbkNsb3NlLFxuICBvbk9wZW4sXG4gIG9uUXVlcnlDaGFuZ2UsXG4gIG9uU2VsZWN0T3B0aW9uLFxuICB0cmlnZ2VyRm4sXG59OiBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0gPSB1c2VTdGF0ZTxNZW51UmVzb2x1dGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFuY2hvckVsZW1lbnRSZWYgPSB1c2VNZW51QW5jaG9yUmVmKGFuY2hvckVsZW0sIHJlc29sdXRpb24sIHNldFJlc29sdXRpb24sIGFuY2hvckNsYXNzTmFtZSlcblxuICBjb25zdCBjbG9zZVR5cGVhaGVhZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRSZXNvbHV0aW9uKG51bGwpXG4gICAgaWYgKG9uQ2xvc2UgIT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH0sIFtvbkNsb3NlLCByZXNvbHV0aW9uXSlcblxuICBjb25zdCBvcGVuVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlczogTWVudVJlc29sdXRpb24pID0+IHtcbiAgICAgIHNldFJlc29sdXRpb24ocmVzKVxuICAgICAgaWYgKG9uT3BlbiAhPSBudWxsICYmIHJlc29sdXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgb25PcGVuKHJlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbk9wZW4sIHJlc29sdXRpb25dLFxuICApXG5cbiAgLy8gVGhpcyBpcyBtYWlubHkgdXNlZCBmb3IgdGhlIEFkZEJsb2NrSGFuZGxlUGx1Z2luLCBzbyB0aGF0IHRoZSBzbGFzaCBtZW51IGNhbiBiZSBvcGVuZWQgZnJvbSB0aGVyZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCxcbiAgICAgICAgKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaDogTWVudVRleHRNYXRjaCA9IHtcbiAgICAgICAgICAgICAgbGVhZE9mZnNldDogMCxcbiAgICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmc6ICcnLFxuICAgICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yV2luZG93ID0gZWRpdG9yLl93aW5kb3cgPz8gd2luZG93XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgICAgICksXG4gICAgKVxuICB9LCBbZWRpdG9yLCBvcGVuVHlwZWFoZWFkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvcldpbmRvdyA9IGVkaXRvci5fd2luZG93ID8/IHdpbmRvd1xuICAgICAgICBjb25zdCByYW5nZSA9IGVkaXRvcldpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoKGVkaXRvcilcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikgfHxcbiAgICAgICAgICAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHxcbiAgICAgICAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgICAgICAgcmFuZ2UgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmlnZ2VyRm4oeyBlZGl0b3IsIHF1ZXJ5OiB0ZXh0IH0pXG4gICAgICAgIG9uUXVlcnlDaGFuZ2UobWF0Y2ggPyBtYXRjaC5tYXRjaGluZ1N0cmluZyA6IG51bGwpXG5cbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmICFpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yLCBtYXRjaC5sZWFkT2Zmc2V0KSkge1xuICAgICAgICAgIGNvbnN0IGlzUmFuZ2VQb3NpdGlvbmVkID0gdHJ5VG9Qb3NpdGlvblJhbmdlKG1hdGNoLmxlYWRPZmZzZXQsIHJhbmdlLCBlZGl0b3JXaW5kb3cpXG4gICAgICAgICAgaWYgKGlzUmFuZ2VQb3NpdGlvbmVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgb3BlblR5cGVhaGVhZCh7XG4gICAgICAgICAgICAgICAgZ2V0UmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVVcGRhdGVMaXN0ZW5lciA9IGVkaXRvci5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlbW92ZVVwZGF0ZUxpc3RlbmVyKClcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHRyaWdnZXJGbiwgb25RdWVyeUNoYW5nZSwgcmVzb2x1dGlvbiwgY2xvc2VUeXBlYWhlYWQsIG9wZW5UeXBlYWhlYWRdKVxuXG4gIHJldHVybiByZXNvbHV0aW9uID09PSBudWxsIHx8IGVkaXRvciA9PT0gbnVsbCA/IG51bGwgOiAoXG4gICAgPExleGljYWxNZW51XG4gICAgICBhbmNob3JFbGVtZW50UmVmPXthbmNob3JFbGVtZW50UmVmfVxuICAgICAgY2xvc2U9e2Nsb3NlVHlwZWFoZWFkfVxuICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzV2l0aE9wdGlvbnN9XG4gICAgICBtZW51UmVuZGVyRm49e21lbnVSZW5kZXJGbn1cbiAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgIHJlc29sdXRpb249e3Jlc29sdXRpb259XG4gICAgICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnlcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24sIE1lbnVUZXh0TWF0Y2gsIFRyaWdnZXJGbiB9XG4iXSwibmFtZXMiOlsiUFVOQ1RVQVRJT04iLCJnZXRTY3JvbGxQYXJlbnQiLCJ1c2VEeW5hbWljUG9zaXRpb25pbmciLCJFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EIiwiTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4iLCJNZW51VGV4dE1hdGNoIiwiVHJpZ2dlckZuIiwiZ2V0VGV4dFVwVG9BbmNob3IiLCJzZWxlY3Rpb24iLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJhbmNob3JPZmZzZXQiLCJvZmZzZXQiLCJnZXRUZXh0Q29udGVudCIsInNsaWNlIiwidHJ5VG9Qb3NpdGlvblJhbmdlIiwibGVhZE9mZnNldCIsInJhbmdlIiwiZWRpdG9yV2luZG93IiwiZG9tU2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJzdGFydE9mZnNldCIsImVuZE9mZnNldCIsInNldFN0YXJ0Iiwic2V0RW5kIiwiZXJyb3IiLCJnZXRRdWVyeVRleHRGb3JTZWFyY2giLCJlZGl0b3IiLCJ0ZXh0IiwiZ2V0RWRpdG9yU3RhdGUiLCJyZWFkIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5IiwicHJldlNpYmxpbmciLCJnZXRQcmV2aW91c1NpYmxpbmciLCIkaXNUZXh0Tm9kZSIsImlzVGV4dEVudGl0eSIsInN0YXJ0VHJhbnNpdGlvbiIsImNhbGxiYWNrIiwiUmVhY3QiLCJlbGVtZW50IiwiaW5jbHVkZUhpZGRlbiIsInN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImV4Y2x1ZGVTdGF0aWNQYXJlbnQiLCJwb3NpdGlvbiIsIm92ZXJmbG93UmVnZXgiLCJkb2N1bWVudCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckNsYXNzTmFtZSIsImFuY2hvckVsZW0iLCJncm91cHNXaXRoT3B0aW9ucyIsIm1lbnVSZW5kZXJGbiIsIm9uQ2xvc2UiLCJvbk9wZW4iLCJvblF1ZXJ5Q2hhbmdlIiwib25TZWxlY3RPcHRpb24iLCJ0cmlnZ2VyRm4iLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicmVzb2x1dGlvbiIsInNldFJlc29sdXRpb24iLCJ1c2VTdGF0ZSIsImFuY2hvckVsZW1lbnRSZWYiLCJ1c2VNZW51QW5jaG9yUmVmIiwiY2xvc2VUeXBlYWhlYWQiLCJ1c2VDYWxsYmFjayIsIm9wZW5UeXBlYWhlYWQiLCJyZXMiLCJ1c2VFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwibm9kZSIsIm1hdGNoIiwibWF0Y2hpbmdTdHJpbmciLCJyZXBsYWNlYWJsZVN0cmluZyIsIl93aW5kb3ciLCJ3aW5kb3ciLCJjcmVhdGVSYW5nZSIsImlzUmFuZ2VQb3NpdGlvbmVkIiwiZ2V0UmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIkNPTU1BTkRfUFJJT1JJVFlfTE9XIiwidXBkYXRlTGlzdGVuZXIiLCJxdWVyeSIsInJlbW92ZVVwZGF0ZUxpc3RlbmVyIiwicmVnaXN0ZXJVcGRhdGVMaXN0ZW5lciIsIkxleGljYWxNZW51IiwiY2xvc2UiLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7SUEyQmFBLFdBQVc7ZUFBWEE7O0lBNEVHQyxlQUFlO2VBQWZBOztJQXNCUEMscUJBQXFCO2VBQXJCQSxrQ0FBcUI7O0lBbUJqQkMseUJBQXlCO2VBQXpCQTs7SUFJR0MsMEJBQTBCO2VBQTFCQTs7SUFxSXVCQyxhQUFhO2VBQWJBLGtDQUFhOztJQUFFQyxTQUFTO2VBQVRBLDhCQUFTOzs7d0NBaFJyQjt1QkFDWjt5QkFPdkI7K0RBQzBDO3FDQU1SOzZCQUNLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU1OLGNBQWM7QUFFM0IsU0FBU08sa0JBQWtCQyxTQUF5QjtJQUNsRCxNQUFNQyxTQUFTRCxVQUFVQyxNQUFNO0lBQy9CLElBQUlBLE9BQU9DLElBQUksS0FBSyxRQUFRO1FBQzFCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGFBQWFGLE9BQU9HLE9BQU87SUFDakMsSUFBSSxDQUFDRCxXQUFXRSxZQUFZLElBQUk7UUFDOUIsT0FBTztJQUNUO0lBQ0EsTUFBTUMsZUFBZUwsT0FBT00sTUFBTTtJQUNsQyxPQUFPSixXQUFXSyxjQUFjLEdBQUdDLEtBQUssQ0FBQyxHQUFHSDtBQUM5QztBQUVBLFNBQVNJLG1CQUFtQkMsVUFBa0IsRUFBRUMsS0FBWSxFQUFFQyxZQUFvQjtJQUNoRixNQUFNQyxlQUFlRCxhQUFhRSxZQUFZO0lBQzlDLElBQUlELGlCQUFpQixRQUFRLENBQUNBLGFBQWFFLFdBQVcsRUFBRTtRQUN0RCxPQUFPO0lBQ1Q7SUFDQSxNQUFNYixhQUFhVyxhQUFhWCxVQUFVO0lBQzFDLE1BQU1jLGNBQWNOO0lBQ3BCLE1BQU1PLFlBQVlKLGFBQWFSLFlBQVk7SUFFM0MsSUFBSUgsY0FBYyxRQUFRZSxhQUFhLE1BQU07UUFDM0MsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGTixNQUFNTyxRQUFRLENBQUNoQixZQUFZYztRQUMzQiwrR0FBK0c7UUFDL0dMLE1BQU1RLE1BQU0sQ0FBQ2pCLFlBQVllLFlBQVksSUFBSUEsWUFBWTtJQUN2RCxFQUFFLE9BQU9HLE9BQU87UUFDZCxPQUFPO0lBQ1Q7SUFFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTQyxzQkFBc0JDLE1BQXFCO0lBQ2xELElBQUlDLE9BQU87SUFDWEQsT0FBT0UsY0FBYyxHQUFHQyxJQUFJLENBQUM7UUFDM0IsTUFBTTFCLFlBQVkyQixJQUFBQSxzQkFBYTtRQUMvQixJQUFJLENBQUNDLElBQUFBLDBCQUFpQixFQUFDNUIsWUFBWTtZQUNqQztRQUNGO1FBQ0F3QixPQUFPekIsa0JBQWtCQztJQUMzQjtJQUNBLE9BQU93QjtBQUNUO0FBRUEsU0FBU0ssNEJBQTRCTixNQUFxQixFQUFFaEIsTUFBYztJQUN4RSxJQUFJQSxXQUFXLEdBQUc7UUFDaEIsT0FBTztJQUNUO0lBQ0EsT0FBT2dCLE9BQU9FLGNBQWMsR0FBR0MsSUFBSSxDQUFDO1FBQ2xDLE1BQU0xQixZQUFZMkIsSUFBQUEsc0JBQWE7UUFDL0IsSUFBSUMsSUFBQUEsMEJBQWlCLEVBQUM1QixZQUFZO1lBQ2hDLE1BQU1DLFNBQVNELFVBQVVDLE1BQU07WUFDL0IsTUFBTUUsYUFBYUYsT0FBT0csT0FBTztZQUNqQyxNQUFNMEIsY0FBYzNCLFdBQVc0QixrQkFBa0I7WUFDakQsT0FBT0MsSUFBQUEsb0JBQVcsRUFBQ0YsZ0JBQWdCQSxZQUFZRyxZQUFZO1FBQzdEO1FBQ0EsT0FBTztJQUNUO0FBQ0Y7QUFFQSxTQUFTQyxnQkFBZ0JDLFFBQW9CO0lBQzNDLElBQUlDLE9BQU1GLGVBQWUsRUFBRTtRQUN6QkUsT0FBTUYsZUFBZSxDQUFDQztJQUN4QixPQUFPO1FBQ0xBO0lBQ0Y7QUFDRjtBQUdPLFNBQVMxQyxnQkFDZDRDLE9BQW9CLEVBQ3BCQyxhQUFzQjtJQUV0QixJQUFJQyxRQUFRQyxpQkFBaUJIO0lBQzdCLE1BQU1JLHNCQUFzQkYsTUFBTUcsUUFBUSxLQUFLO0lBQy9DLE1BQU1DLGdCQUFnQkwsZ0JBQWdCLHlCQUF5QjtJQUMvRCxJQUFJQyxNQUFNRyxRQUFRLEtBQUssU0FBUztRQUM5QixPQUFPRSxTQUFTQyxJQUFJO0lBQ3RCO0lBQ0EsSUFBSyxJQUFJQyxTQUE2QlQsU0FBVVMsU0FBU0EsT0FBT0MsYUFBYSxFQUFLO1FBQ2hGUixRQUFRQyxpQkFBaUJNO1FBQ3pCLElBQUlMLHVCQUF1QkYsTUFBTUcsUUFBUSxLQUFLLFVBQVU7WUFDdEQ7UUFDRjtRQUNBLElBQUlDLGNBQWNLLElBQUksQ0FBQ1QsTUFBTVUsUUFBUSxHQUFHVixNQUFNVyxTQUFTLEdBQUdYLE1BQU1ZLFNBQVMsR0FBRztZQUMxRSxPQUFPTDtRQUNUO0lBQ0Y7SUFDQSxPQUFPRixTQUFTQyxJQUFJO0FBQ3RCO0FBcUJPLE1BQU1sRCw0QkFFUnlELElBQUFBLHNCQUFhLEVBQUM7QUFFWixTQUFTeEQsMkJBQTJCLEVBQ3pDeUQsZUFBZSxFQUNmQyxVQUFVLEVBQ1ZDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxPQUFPLEVBQ1BDLE1BQU0sRUFDTkMsYUFBYSxFQUNiQyxjQUFjLEVBQ2RDLFNBQVMsRUFDZ0I7SUFDekIsTUFBTSxDQUFDdEMsT0FBTyxHQUFHdUMsSUFBQUEsaURBQXlCO0lBQzFDLE1BQU0sQ0FBQ0MsWUFBWUMsY0FBYyxHQUFHQyxJQUFBQSxlQUFRLEVBQXdCO0lBQ3BFLE1BQU1DLG1CQUFtQkMsSUFBQUEsNkJBQWdCLEVBQUNiLFlBQVlTLFlBQVlDLGVBQWVYO0lBRWpGLE1BQU1lLGlCQUFpQkMsSUFBQUEsa0JBQVcsRUFBQztRQUNqQ0wsY0FBYztRQUNkLElBQUlQLFdBQVcsUUFBUU0sZUFBZSxNQUFNO1lBQzFDTjtRQUNGO0lBQ0YsR0FBRztRQUFDQTtRQUFTTTtLQUFXO0lBRXhCLE1BQU1PLGdCQUFnQkQsSUFBQUEsa0JBQVcsRUFDL0IsQ0FBQ0U7UUFDQ1AsY0FBY087UUFDZCxJQUFJYixVQUFVLFFBQVFLLGVBQWUsTUFBTTtZQUN6Q0wsT0FBT2E7UUFDVDtJQUNGLEdBQ0E7UUFBQ2I7UUFBUUs7S0FBVztJQUd0QixvR0FBb0c7SUFDcEdTLElBQUFBLGdCQUFTLEVBQUM7UUFDUixPQUFPQyxJQUFBQSxvQkFBYSxFQUNsQmxELE9BQU9tRCxlQUFlLENBQ3BCL0UsMkJBQ0EsQ0FBQyxFQUFFZ0YsSUFBSSxFQUFFO1lBQ1BwRCxPQUFPRSxjQUFjLEdBQUdDLElBQUksQ0FBQztnQkFDM0IsTUFBTWtELFFBQXVCO29CQUMzQmpFLFlBQVk7b0JBQ1prRSxnQkFBZ0I7b0JBQ2hCQyxtQkFBbUI7Z0JBQ3JCO2dCQUNBLElBQUlGLFVBQVUsUUFBUSxDQUFDL0MsNEJBQTRCTixRQUFRcUQsTUFBTWpFLFVBQVUsR0FBRztvQkFDNUUsSUFBSWdFLFNBQVMsTUFBTTt3QkFDakIsTUFBTTlELGVBQWVVLE9BQU93RCxPQUFPLElBQUlDO3dCQUN2QyxNQUFNcEUsUUFBUUMsYUFBYStCLFFBQVEsQ0FBQ3FDLFdBQVc7d0JBRS9DLE1BQU1DLG9CQUFvQnhFLG1CQUFtQmtFLE1BQU1qRSxVQUFVLEVBQUVDLE9BQU9DO3dCQUN0RSxJQUFJcUUsc0JBQXNCLE1BQU07NEJBQzlCaEQsZ0JBQWdCLElBQ2RvQyxjQUFjO29DQUNaYSxTQUFTO3dDQUNQLE9BQU92RSxNQUFNd0UscUJBQXFCO29DQUNwQztvQ0FDQVI7Z0NBQ0Y7d0JBRUo7d0JBRUE7b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLE9BQU87UUFDVCxHQUNBUyw2QkFBb0I7SUFHMUIsR0FBRztRQUFDOUQ7UUFBUStDO0tBQWM7SUFFMUJFLElBQUFBLGdCQUFTLEVBQUM7UUFDUixNQUFNYyxpQkFBaUI7WUFDckIvRCxPQUFPRSxjQUFjLEdBQUdDLElBQUksQ0FBQztnQkFDM0IsTUFBTWIsZUFBZVUsT0FBT3dELE9BQU8sSUFBSUM7Z0JBQ3ZDLE1BQU1wRSxRQUFRQyxhQUFhK0IsUUFBUSxDQUFDcUMsV0FBVztnQkFDL0MsTUFBTWpGLFlBQVkyQixJQUFBQSxzQkFBYTtnQkFDL0IsTUFBTUgsT0FBT0Ysc0JBQXNCQztnQkFFbkMsSUFDRSxDQUFDSyxJQUFBQSwwQkFBaUIsRUFBQzVCLGNBQ25CLENBQUNBLFVBQVVnQixXQUFXLE1BQ3RCUSxTQUFTLFFBQ1RaLFVBQVUsTUFDVjtvQkFDQXdEO29CQUNBO2dCQUNGO2dCQUVBLE1BQU1RLFFBQVFmLFVBQVU7b0JBQUV0QztvQkFBUWdFLE9BQU8vRDtnQkFBSztnQkFDOUNtQyxjQUFjaUIsUUFBUUEsTUFBTUMsY0FBYyxHQUFHO2dCQUU3QyxJQUFJRCxVQUFVLFFBQVEsQ0FBQy9DLDRCQUE0Qk4sUUFBUXFELE1BQU1qRSxVQUFVLEdBQUc7b0JBQzVFLE1BQU11RSxvQkFBb0J4RSxtQkFBbUJrRSxNQUFNakUsVUFBVSxFQUFFQyxPQUFPQztvQkFDdEUsSUFBSXFFLHNCQUFzQixNQUFNO3dCQUM5QmhELGdCQUFnQixJQUNkb0MsY0FBYztnQ0FDWmEsU0FBUztvQ0FDUCxPQUFPdkUsTUFBTXdFLHFCQUFxQjtnQ0FDcEM7Z0NBQ0FSOzRCQUNGO3dCQUVGO29CQUNGO2dCQUNGO2dCQUNBUjtZQUNGO1FBQ0Y7UUFFQSxNQUFNb0IsdUJBQXVCakUsT0FBT2tFLHNCQUFzQixDQUFDSDtRQUUzRCxPQUFPO1lBQ0xFO1FBQ0Y7SUFDRixHQUFHO1FBQUNqRTtRQUFRc0M7UUFBV0Y7UUFBZUk7UUFBWUs7UUFBZ0JFO0tBQWM7SUFFaEYsT0FBT1AsZUFBZSxRQUFReEMsV0FBVyxPQUFPLHFCQUM5QyxxQkFBQ21FLHdCQUFXO1FBQ1Z4QixrQkFBa0JBO1FBQ2xCeUIsT0FBT3ZCO1FBQ1A3QyxRQUFRQTtRQUNSZ0MsbUJBQW1CQTtRQUNuQkMsY0FBY0E7UUFDZEksZ0JBQWdCQTtRQUNoQkcsWUFBWUE7UUFDWjZCLDBCQUFBQTs7QUFHTiJ9
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHtcbiAgTGV4aWNhbENvbW1hbmQsXG4gIExleGljYWxFZGl0b3IsXG4gIFBhcmFncmFwaE5vZGUsXG4gIFJhbmdlU2VsZWN0aW9uLFxuICBUZXh0Tm9kZSxcbn0gZnJvbSAnbGV4aWNhbCdcblxuaW1wb3J0IHsgdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCB9IGZyb20gJ0BsZXhpY2FsL3JlYWN0L0xleGljYWxDb21wb3NlckNvbnRleHQnXG5pbXBvcnQgeyBtZXJnZVJlZ2lzdGVyIH0gZnJvbSAnQGxleGljYWwvdXRpbHMnXG5pbXBvcnQge1xuICAkZ2V0U2VsZWN0aW9uLFxuICAkaXNSYW5nZVNlbGVjdGlvbixcbiAgJGlzVGV4dE5vZGUsXG4gIENPTU1BTkRfUFJJT1JJVFlfTE9XLFxuICBjcmVhdGVDb21tYW5kLFxufSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgdHlwZSB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24gfSBmcm9tICcuL0xleGljYWxNZW51J1xuaW1wb3J0IHR5cGUgeyBTbGFzaE1lbnVHcm91cCwgU2xhc2hNZW51T3B0aW9uIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgTWVudVRleHRNYXRjaCwgVHJpZ2dlckZuIH0gZnJvbSAnLi4vdXNlTWVudVRyaWdnZXJNYXRjaCdcbmltcG9ydCB7IExleGljYWxNZW51LCB1c2VNZW51QW5jaG9yUmVmIH0gZnJvbSAnLi9MZXhpY2FsTWVudSdcblxuZXhwb3J0IGNvbnN0IFBVTkNUVUFUSU9OID0gJ1xcXFwuLFxcXFwrXFxcXCpcXFxcP1xcXFwkXFxcXEBcXFxcfCN7fVxcXFwoXFxcXClcXFxcXlxcXFwtXFxcXFtcXFxcXVxcXFxcXFxcLyElXFwnXCJ+PTw+Xzo7J1xuXG5mdW5jdGlvbiBnZXRUZXh0VXBUb0FuY2hvcihzZWxlY3Rpb246IFJhbmdlU2VsZWN0aW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IGFuY2hvciA9IHNlbGVjdGlvbi5hbmNob3JcbiAgaWYgKGFuY2hvci50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGFuY2hvck5vZGUgPSBhbmNob3IuZ2V0Tm9kZSgpXG4gIGlmICghYW5jaG9yTm9kZS5pc1NpbXBsZVRleHQoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gYW5jaG9yLm9mZnNldFxuICByZXR1cm4gYW5jaG9yTm9kZS5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAsIGFuY2hvck9mZnNldClcbn1cblxuZnVuY3Rpb24gdHJ5VG9Qb3NpdGlvblJhbmdlKGxlYWRPZmZzZXQ6IG51bWJlciwgcmFuZ2U6IFJhbmdlLCBlZGl0b3JXaW5kb3c6IFdpbmRvdyk6IGJvb2xlYW4ge1xuICBjb25zdCBkb21TZWxlY3Rpb24gPSBlZGl0b3JXaW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgaWYgKGRvbVNlbGVjdGlvbiA9PT0gbnVsbCB8fCAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgYW5jaG9yTm9kZSA9IGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlXG4gIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gbGVhZE9mZnNldFxuICBjb25zdCBlbmRPZmZzZXQgPSBkb21TZWxlY3Rpb24uYW5jaG9yT2Zmc2V0XG5cbiAgaWYgKGFuY2hvck5vZGUgPT0gbnVsbCB8fCBlbmRPZmZzZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBzdGFydE9mZnNldClcbiAgICAvLyBpZiBlbmRPZmZzZXQgaXMgMCwgcG9zaXRpb25pbmcgdGhlIHJhbmdlIGZvciB3aGVuIHlvdSBjbGljayB0aGUgcGx1cyBidXR0b24gdG8gb3BlbiB0aGUgc2xhc2ggbWVudSB3aWxsIGZpYWxcbiAgICByYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgZW5kT2Zmc2V0ID4gMSA/IGVuZE9mZnNldCA6IDEpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVRleHRGb3JTZWFyY2goZWRpdG9yOiBMZXhpY2FsRWRpdG9yKTogbnVsbCB8IHN0cmluZyB7XG4gIGxldCB0ZXh0ID0gbnVsbFxuICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSAkZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0ID0gZ2V0VGV4dFVwVG9BbmNob3Ioc2VsZWN0aW9uKVxuICB9KVxuICByZXR1cm4gdGV4dFxufVxuXG5mdW5jdGlvbiBpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yOiBMZXhpY2FsRWRpdG9yLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICBpZiAob2Zmc2V0ICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgIGlmICgkaXNSYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yXG4gICAgICBjb25zdCBhbmNob3JOb2RlID0gYW5jaG9yLmdldE5vZGUoKVxuICAgICAgY29uc3QgcHJldlNpYmxpbmcgPSBhbmNob3JOb2RlLmdldFByZXZpb3VzU2libGluZygpXG4gICAgICByZXR1cm4gJGlzVGV4dE5vZGUocHJldlNpYmxpbmcpICYmIHByZXZTaWJsaW5nLmlzVGV4dEVudGl0eSgpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgaWYgKFJlYWN0LnN0YXJ0VHJhbnNpdGlvbikge1xuICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbihjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuLy8gR290IGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQyNTQzOTA4LzIwMTM1ODBcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuKTogSFRNTEJvZHlFbGVtZW50IHwgSFRNTEVsZW1lbnQge1xuICBsZXQgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gIGNvbnN0IGV4Y2x1ZGVTdGF0aWNQYXJlbnQgPSBzdHlsZS5wb3NpdGlvbiA9PT0gJ2Fic29sdXRlJ1xuICBjb25zdCBvdmVyZmxvd1JlZ2V4ID0gaW5jbHVkZUhpZGRlbiA/IC8oYXV0b3xzY3JvbGx8aGlkZGVuKS8gOiAvKGF1dG98c2Nyb2xsKS9cbiAgaWYgKHN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmJvZHlcbiAgfVxuICBmb3IgKGxldCBwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7IChwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudCk7ICkge1xuICAgIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgaWYgKGV4Y2x1ZGVTdGF0aWNQYXJlbnQgJiYgc3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3ZlcmZsb3dSZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93ICsgc3R5bGUub3ZlcmZsb3dZICsgc3R5bGUub3ZlcmZsb3dYKSkge1xuICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH1cbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keVxufVxuXG5leHBvcnQgeyB1c2VEeW5hbWljUG9zaXRpb25pbmcgfSBmcm9tICcuL0xleGljYWxNZW51J1xuXG5leHBvcnQgdHlwZSBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMgPSB7XG4gIGFuY2hvckNsYXNzTmFtZT86IHN0cmluZ1xuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudFxuICBncm91cHNXaXRoT3B0aW9uczogQXJyYXk8U2xhc2hNZW51R3JvdXA+XG4gIG1lbnVSZW5kZXJGbjogTWVudVJlbmRlckZuXG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIG9uT3Blbj86IChyZXNvbHV0aW9uOiBNZW51UmVzb2x1dGlvbikgPT4gdm9pZFxuICBvblF1ZXJ5Q2hhbmdlOiAobWF0Y2hpbmdTdHJpbmc6IG51bGwgfCBzdHJpbmcpID0+IHZvaWRcbiAgb25TZWxlY3RPcHRpb246IChcbiAgICBvcHRpb246IFNsYXNoTWVudU9wdGlvbixcbiAgICB0ZXh0Tm9kZUNvbnRhaW5pbmdRdWVyeTogVGV4dE5vZGUgfCBudWxsLFxuICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICBtYXRjaGluZ1N0cmluZzogc3RyaW5nLFxuICApID0+IHZvaWRcbiAgdHJpZ2dlckZuOiBUcmlnZ2VyRm5cbn1cblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQ6IExleGljYWxDb21tYW5kPHtcbiAgbm9kZTogUGFyYWdyYXBoTm9kZVxufT4gPSBjcmVhdGVDb21tYW5kKCdFTkFCTEVfU0xBU0hfTUVOVV9DT01NQU5EJylcblxuZXhwb3J0IGZ1bmN0aW9uIExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luKHtcbiAgYW5jaG9yQ2xhc3NOYW1lLFxuICBhbmNob3JFbGVtLFxuICBncm91cHNXaXRoT3B0aW9ucyxcbiAgbWVudVJlbmRlckZuLFxuICBvbkNsb3NlLFxuICBvbk9wZW4sXG4gIG9uUXVlcnlDaGFuZ2UsXG4gIG9uU2VsZWN0T3B0aW9uLFxuICB0cmlnZ2VyRm4sXG59OiBUeXBlYWhlYWRNZW51UGx1Z2luUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbZWRpdG9yXSA9IHVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKVxuICBjb25zdCBbcmVzb2x1dGlvbiwgc2V0UmVzb2x1dGlvbl0gPSB1c2VTdGF0ZTxNZW51UmVzb2x1dGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFuY2hvckVsZW1lbnRSZWYgPSB1c2VNZW51QW5jaG9yUmVmKGFuY2hvckVsZW0sIHJlc29sdXRpb24sIHNldFJlc29sdXRpb24sIGFuY2hvckNsYXNzTmFtZSlcblxuICBjb25zdCBjbG9zZVR5cGVhaGVhZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRSZXNvbHV0aW9uKG51bGwpXG4gICAgaWYgKG9uQ2xvc2UgIT0gbnVsbCAmJiByZXNvbHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH0sIFtvbkNsb3NlLCByZXNvbHV0aW9uXSlcblxuICBjb25zdCBvcGVuVHlwZWFoZWFkID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlczogTWVudVJlc29sdXRpb24pID0+IHtcbiAgICAgIHNldFJlc29sdXRpb24ocmVzKVxuICAgICAgaWYgKG9uT3BlbiAhPSBudWxsICYmIHJlc29sdXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgb25PcGVuKHJlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbk9wZW4sIHJlc29sdXRpb25dLFxuICApXG5cbiAgLy8gVGhpcyBpcyBtYWlubHkgdXNlZCBmb3IgdGhlIEFkZEJsb2NrSGFuZGxlUGx1Z2luLCBzbyB0aGF0IHRoZSBzbGFzaCBtZW51IGNhbiBiZSBvcGVuZWQgZnJvbSB0aGVyZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZVJlZ2lzdGVyKFxuICAgICAgZWRpdG9yLnJlZ2lzdGVyQ29tbWFuZChcbiAgICAgICAgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCxcbiAgICAgICAgKHsgbm9kZSB9KSA9PiB7XG4gICAgICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaDogTWVudVRleHRNYXRjaCA9IHtcbiAgICAgICAgICAgICAgbGVhZE9mZnNldDogMCxcbiAgICAgICAgICAgICAgbWF0Y2hpbmdTdHJpbmc6ICcnLFxuICAgICAgICAgICAgICByZXBsYWNlYWJsZVN0cmluZzogJycsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwgJiYgIWlzU2VsZWN0aW9uT25FbnRpdHlCb3VuZGFyeShlZGl0b3IsIG1hdGNoLmxlYWRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yV2luZG93ID0gZWRpdG9yLl93aW5kb3cgPz8gd2luZG93XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBlZGl0b3JXaW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVBvc2l0aW9uZWQgPSB0cnlUb1Bvc2l0aW9uUmFuZ2UobWF0Y2gubGVhZE9mZnNldCwgcmFuZ2UsIGVkaXRvcldpbmRvdylcbiAgICAgICAgICAgICAgICBpZiAoaXNSYW5nZVBvc2l0aW9uZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBvcGVuVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRSZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDT01NQU5EX1BSSU9SSVRZX0xPVyxcbiAgICAgICksXG4gICAgKVxuICB9LCBbZWRpdG9yLCBvcGVuVHlwZWFoZWFkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvcldpbmRvdyA9IGVkaXRvci5fd2luZG93ID8/IHdpbmRvd1xuICAgICAgICBjb25zdCByYW5nZSA9IGVkaXRvcldpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9ICRnZXRTZWxlY3Rpb24oKVxuICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0UXVlcnlUZXh0Rm9yU2VhcmNoKGVkaXRvcilcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISRpc1JhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikgfHxcbiAgICAgICAgICAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKCkgfHxcbiAgICAgICAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgICAgICAgcmFuZ2UgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmlnZ2VyRm4oeyBlZGl0b3IsIHF1ZXJ5OiB0ZXh0IH0pXG4gICAgICAgIG9uUXVlcnlDaGFuZ2UobWF0Y2ggPyBtYXRjaC5tYXRjaGluZ1N0cmluZyA6IG51bGwpXG5cbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsICYmICFpc1NlbGVjdGlvbk9uRW50aXR5Qm91bmRhcnkoZWRpdG9yLCBtYXRjaC5sZWFkT2Zmc2V0KSkge1xuICAgICAgICAgIGNvbnN0IGlzUmFuZ2VQb3NpdGlvbmVkID0gdHJ5VG9Qb3NpdGlvblJhbmdlKG1hdGNoLmxlYWRPZmZzZXQsIHJhbmdlLCBlZGl0b3JXaW5kb3cpXG4gICAgICAgICAgaWYgKGlzUmFuZ2VQb3NpdGlvbmVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT5cbiAgICAgICAgICAgICAgb3BlblR5cGVhaGVhZCh7XG4gICAgICAgICAgICAgICAgZ2V0UmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VUeXBlYWhlYWQoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdmVVcGRhdGVMaXN0ZW5lciA9IGVkaXRvci5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUxpc3RlbmVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlbW92ZVVwZGF0ZUxpc3RlbmVyKClcbiAgICB9XG4gIH0sIFtlZGl0b3IsIHRyaWdnZXJGbiwgb25RdWVyeUNoYW5nZSwgcmVzb2x1dGlvbiwgY2xvc2VUeXBlYWhlYWQsIG9wZW5UeXBlYWhlYWRdKVxuXG4gIHJldHVybiByZXNvbHV0aW9uID09PSBudWxsIHx8IGVkaXRvciA9PT0gbnVsbCA/IG51bGwgOiAoXG4gICAgPExleGljYWxNZW51XG4gICAgICBhbmNob3JFbGVtZW50UmVmPXthbmNob3JFbGVtZW50UmVmfVxuICAgICAgY2xvc2U9e2Nsb3NlVHlwZWFoZWFkfVxuICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICBncm91cHNXaXRoT3B0aW9ucz17Z3JvdXBzV2l0aE9wdGlvbnN9XG4gICAgICBtZW51UmVuZGVyRm49e21lbnVSZW5kZXJGbn1cbiAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgIHJlc29sdXRpb249e3Jlc29sdXRpb259XG4gICAgICBzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnlcbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IE1lbnVSZW5kZXJGbiwgTWVudVJlc29sdXRpb24sIE1lbnVUZXh0TWF0Y2gsIFRyaWdnZXJGbiB9XG4iXSwibmFtZXMiOlsiRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCIsIkxleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luIiwiTWVudVRleHRNYXRjaCIsIlBVTkNUVUFUSU9OIiwiVHJpZ2dlckZuIiwiZ2V0U2Nyb2xsUGFyZW50IiwidXNlRHluYW1pY1Bvc2l0aW9uaW5nIiwiZ2V0VGV4dFVwVG9BbmNob3IiLCJzZWxlY3Rpb24iLCJhbmNob3IiLCJ0eXBlIiwiYW5jaG9yTm9kZSIsImdldE5vZGUiLCJpc1NpbXBsZVRleHQiLCJhbmNob3JPZmZzZXQiLCJvZmZzZXQiLCJnZXRUZXh0Q29udGVudCIsInNsaWNlIiwidHJ5VG9Qb3NpdGlvblJhbmdlIiwibGVhZE9mZnNldCIsInJhbmdlIiwiZWRpdG9yV2luZG93IiwiZG9tU2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJzdGFydE9mZnNldCIsImVuZE9mZnNldCIsInNldFN0YXJ0Iiwic2V0RW5kIiwiZXJyb3IiLCJnZXRRdWVyeVRleHRGb3JTZWFyY2giLCJlZGl0b3IiLCJ0ZXh0IiwiZ2V0RWRpdG9yU3RhdGUiLCJyZWFkIiwiJGdldFNlbGVjdGlvbiIsIiRpc1JhbmdlU2VsZWN0aW9uIiwiaXNTZWxlY3Rpb25PbkVudGl0eUJvdW5kYXJ5IiwicHJldlNpYmxpbmciLCJnZXRQcmV2aW91c1NpYmxpbmciLCIkaXNUZXh0Tm9kZSIsImlzVGV4dEVudGl0eSIsInN0YXJ0VHJhbnNpdGlvbiIsImNhbGxiYWNrIiwiUmVhY3QiLCJlbGVtZW50IiwiaW5jbHVkZUhpZGRlbiIsInN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImV4Y2x1ZGVTdGF0aWNQYXJlbnQiLCJwb3NpdGlvbiIsIm92ZXJmbG93UmVnZXgiLCJkb2N1bWVudCIsImJvZHkiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwidGVzdCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIiwiY3JlYXRlQ29tbWFuZCIsImFuY2hvckNsYXNzTmFtZSIsImFuY2hvckVsZW0iLCJncm91cHNXaXRoT3B0aW9ucyIsIm1lbnVSZW5kZXJGbiIsIm9uQ2xvc2UiLCJvbk9wZW4iLCJvblF1ZXJ5Q2hhbmdlIiwib25TZWxlY3RPcHRpb24iLCJ0cmlnZ2VyRm4iLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicmVzb2x1dGlvbiIsInNldFJlc29sdXRpb24iLCJ1c2VTdGF0ZSIsImFuY2hvckVsZW1lbnRSZWYiLCJ1c2VNZW51QW5jaG9yUmVmIiwiY2xvc2VUeXBlYWhlYWQiLCJ1c2VDYWxsYmFjayIsIm9wZW5UeXBlYWhlYWQiLCJyZXMiLCJ1c2VFZmZlY3QiLCJtZXJnZVJlZ2lzdGVyIiwicmVnaXN0ZXJDb21tYW5kIiwibm9kZSIsIm1hdGNoIiwibWF0Y2hpbmdTdHJpbmciLCJyZXBsYWNlYWJsZVN0cmluZyIsIl93aW5kb3ciLCJ3aW5kb3ciLCJjcmVhdGVSYW5nZSIsImlzUmFuZ2VQb3NpdGlvbmVkIiwiZ2V0UmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIkNPTU1BTkRfUFJJT1JJVFlfTE9XIiwidXBkYXRlTGlzdGVuZXIiLCJxdWVyeSIsInJlbW92ZVVwZGF0ZUxpc3RlbmVyIiwicmVnaXN0ZXJVcGRhdGVMaXN0ZW5lciIsIkxleGljYWxNZW51IiwiY2xvc2UiLCJzaG91bGRTcGxpdE5vZGVXaXRoUXVlcnkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7SUFnSmFBLHlCQUF5QjtlQUF6QkE7O0lBSUdDLDBCQUEwQjtlQUExQkE7O0lBcUl1QkMsYUFBYTtlQUFiQSxrQ0FBYTs7SUE5UHZDQyxXQUFXO2VBQVhBOztJQThQeUNDLFNBQVM7ZUFBVEEsOEJBQVM7O0lBbEwvQ0MsZUFBZTtlQUFmQTs7SUFzQlBDLHFCQUFxQjtlQUFyQkEsa0NBQXFCOzs7d0NBcEhZO3VCQUNaO3lCQU92QjsrREFDMEM7cUNBTVI7NkJBQ0s7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV2QyxNQUFNSCxjQUFjO0FBRTNCLFNBQVNJLGtCQUFrQkMsU0FBeUI7SUFDbEQsTUFBTUMsU0FBU0QsVUFBVUMsTUFBTTtJQUMvQixJQUFJQSxPQUFPQyxJQUFJLEtBQUssUUFBUTtRQUMxQixPQUFPO0lBQ1Q7SUFDQSxNQUFNQyxhQUFhRixPQUFPRyxPQUFPO0lBQ2pDLElBQUksQ0FBQ0QsV0FBV0UsWUFBWSxJQUFJO1FBQzlCLE9BQU87SUFDVDtJQUNBLE1BQU1DLGVBQWVMLE9BQU9NLE1BQU07SUFDbEMsT0FBT0osV0FBV0ssY0FBYyxHQUFHQyxLQUFLLENBQUMsR0FBR0g7QUFDOUM7QUFFQSxTQUFTSSxtQkFBbUJDLFVBQWtCLEVBQUVDLEtBQVksRUFBRUMsWUFBb0I7SUFDaEYsTUFBTUMsZUFBZUQsYUFBYUUsWUFBWTtJQUM5QyxJQUFJRCxpQkFBaUIsUUFB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
@@ -9,11 +9,11 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- SlashMenuOption: function() {
13
- return SlashMenuOption;
14
- },
15
12
  SlashMenuGroup: function() {
16
13
  return SlashMenuGroup;
14
+ },
15
+ SlashMenuOption: function() {
16
+ return SlashMenuOption;
17
17
  }
18
18
  });
19
19
  class SlashMenuOption {
@@ -54,4 +54,4 @@ class SlashMenuGroup {
54
54
  options;
55
55
  }
56
56
 
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgaTE4biB9IGZyb20gJ2kxOG5leHQnXG5pbXBvcnQgdHlwZSB7IExleGljYWxFZGl0b3IgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNsYXNzIFNsYXNoTWVudU9wdGlvbiB7XG4gIC8vIEljb24gZm9yIGRpc3BsYXlcbiAgSWNvbjogKCkgPT4gUHJvbWlzZTxSZWFjdC5GQz5cblxuICBkaXNwbGF5TmFtZT86ICgoeyBpMThuIH06IHsgaTE4bjogaTE4biB9KSA9PiBzdHJpbmcpIHwgc3RyaW5nXG4gIC8vIFVzZWQgZm9yIGNsYXNzIG5hbWVzIGFuZCwgaWYgZGlzcGxheU5hbWUgaXMgbm90IHByb3ZpZGVkLCBmb3IgZGlzcGxheS5cbiAga2V5OiBzdHJpbmdcbiAgLy8gVEJEXG4gIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgLy8gRm9yIGV4dHJhIHNlYXJjaGluZy5cbiAga2V5d29yZHM6IEFycmF5PHN0cmluZz5cbiAgLy8gV2hhdCBoYXBwZW5zIHdoZW4geW91IHNlbGVjdCB0aGlzIG9wdGlvbj9cbiAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuXG4gIHJlZj86IE11dGFibGVSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIEljb246ICgpID0+IFByb21pc2U8UmVhY3QuRkM+XG4gICAgICBkaXNwbGF5TmFtZT86ICgoeyBpMThuIH06IHsgaTE4bjogaTE4biB9KSA9PiBzdHJpbmcpIHwgc3RyaW5nXG4gICAgICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gICAgICBrZXl3b3Jkcz86IEFycmF5PHN0cmluZz5cbiAgICAgIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMucmVmID0geyBjdXJyZW50OiBudWxsIH1cbiAgICB0aGlzLnNldFJlZkVsZW1lbnQgPSB0aGlzLnNldFJlZkVsZW1lbnQuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWVcbiAgICB0aGlzLmtleXdvcmRzID0gb3B0aW9ucy5rZXl3b3JkcyB8fCBbXVxuICAgIHRoaXMuSWNvbiA9IG9wdGlvbnMuSWNvblxuICAgIHRoaXMua2V5Ym9hcmRTaG9ydGN1dCA9IG9wdGlvbnMua2V5Ym9hcmRTaG9ydGN1dFxuICAgIHRoaXMub25TZWxlY3QgPSBvcHRpb25zLm9uU2VsZWN0LmJpbmQodGhpcylcbiAgfVxuXG4gIHNldFJlZkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKSB7XG4gICAgdGhpcy5yZWYgPSB7IGN1cnJlbnQ6IGVsZW1lbnQgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVHcm91cCB7XG4gIC8vIFVzZWQgZm9yIGNsYXNzIG5hbWVzIGFuZCwgaWYgZGlzcGxheU5hbWUgaXMgbm90IHByb3ZpZGVkLCBmb3IgZGlzcGxheS5cbiAgZGlzcGxheU5hbWU/OiAoKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICBrZXk6IHN0cmluZ1xuICBvcHRpb25zOiBBcnJheTxTbGFzaE1lbnVPcHRpb24+XG59XG4iXSwibmFtZXMiOlsiU2xhc2hNZW51T3B0aW9uIiwiU2xhc2hNZW51R3JvdXAiLCJJY29uIiwiZGlzcGxheU5hbWUiLCJrZXkiLCJrZXlib2FyZFNob3J0Y3V0Iiwia2V5d29yZHMiLCJvblNlbGVjdCIsInJlZiIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImN1cnJlbnQiLCJzZXRSZWZFbGVtZW50IiwiYmluZCIsImVsZW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBS2FBLGVBQWU7ZUFBZkE7O0lBMENBQyxjQUFjO2VBQWRBOzs7QUExQ04sTUFBTUQ7SUFDWCxtQkFBbUI7SUFDbkJFLEtBQTZCO0lBRTdCQyxZQUE2RDtJQUM3RCx5RUFBeUU7SUFDekVDLElBQVc7SUFDWCxNQUFNO0lBQ05DLGlCQUF5QjtJQUN6Qix1QkFBdUI7SUFDdkJDLFNBQXVCO0lBQ3ZCLDRDQUE0QztJQUM1Q0MsU0FBMkY7SUFFM0ZDLElBQTBDO0lBRTFDQyxZQUNFTCxHQUFXLEVBQ1hNLE9BTUMsQ0FDRDtRQUNBLElBQUksQ0FBQ04sR0FBRyxHQUFHQTtRQUNYLElBQUksQ0FBQ0ksR0FBRyxHQUFHO1lBQUVHLFNBQVM7UUFBSztRQUMzQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUNBLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDLElBQUk7UUFFakQsSUFBSSxDQUFDVixXQUFXLEdBQUdPLFFBQVFQLFdBQVc7UUFDdEMsSUFBSSxDQUFDRyxRQUFRLEdBQUdJLFFBQVFKLFFBQVEsSUFBSSxFQUFFO1FBQ3RDLElBQUksQ0FBQ0osSUFBSSxHQUFHUSxRQUFRUixJQUFJO1FBQ3hCLElBQUksQ0FBQ0csZ0JBQWdCLEdBQUdLLFFBQVFMLGdCQUFnQjtRQUNoRCxJQUFJLENBQUNFLFFBQVEsR0FBR0csUUFBUUgsUUFBUSxDQUFDTSxJQUFJLENBQUMsSUFBSTtJQUM1QztJQUVBRCxjQUFjRSxPQUEyQixFQUFFO1FBQ3pDLElBQUksQ0FBQ04sR0FBRyxHQUFHO1lBQUVHLFNBQVNHO1FBQVE7SUFDaEM7QUFDRjtBQUVPLE1BQU1iO0lBQ1gseUVBQXlFO0lBQ3pFRSxZQUE2RDtJQUM3REMsSUFBVztJQUNYTSxRQUErQjtBQUNqQyJ9
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L0xleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgaTE4biB9IGZyb20gJ2kxOG5leHQnXG5pbXBvcnQgdHlwZSB7IExleGljYWxFZGl0b3IgfSBmcm9tICdsZXhpY2FsJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNsYXNzIFNsYXNoTWVudU9wdGlvbiB7XG4gIC8vIEljb24gZm9yIGRpc3BsYXlcbiAgSWNvbjogKCkgPT4gUHJvbWlzZTxSZWFjdC5GQz5cblxuICBkaXNwbGF5TmFtZT86ICgoeyBpMThuIH06IHsgaTE4bjogaTE4biB9KSA9PiBzdHJpbmcpIHwgc3RyaW5nXG4gIC8vIFVzZWQgZm9yIGNsYXNzIG5hbWVzIGFuZCwgaWYgZGlzcGxheU5hbWUgaXMgbm90IHByb3ZpZGVkLCBmb3IgZGlzcGxheS5cbiAga2V5OiBzdHJpbmdcbiAgLy8gVEJEXG4gIGtleWJvYXJkU2hvcnRjdXQ/OiBzdHJpbmdcbiAgLy8gRm9yIGV4dHJhIHNlYXJjaGluZy5cbiAga2V5d29yZHM6IEFycmF5PHN0cmluZz5cbiAgLy8gV2hhdCBoYXBwZW5zIHdoZW4geW91IHNlbGVjdCB0aGlzIG9wdGlvbj9cbiAgb25TZWxlY3Q6ICh7IGVkaXRvciwgcXVlcnlTdHJpbmcgfTogeyBlZGl0b3I6IExleGljYWxFZGl0b3I7IHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfSkgPT4gdm9pZFxuXG4gIHJlZj86IE11dGFibGVSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIEljb246ICgpID0+IFByb21pc2U8UmVhY3QuRkM+XG4gICAgICBkaXNwbGF5TmFtZT86ICgoeyBpMThuIH06IHsgaTE4bjogaTE4biB9KSA9PiBzdHJpbmcpIHwgc3RyaW5nXG4gICAgICBrZXlib2FyZFNob3J0Y3V0Pzogc3RyaW5nXG4gICAgICBrZXl3b3Jkcz86IEFycmF5PHN0cmluZz5cbiAgICAgIG9uU2VsZWN0OiAoeyBlZGl0b3IsIHF1ZXJ5U3RyaW5nIH06IHsgZWRpdG9yOiBMZXhpY2FsRWRpdG9yOyBxdWVyeVN0cmluZzogc3RyaW5nIH0pID0+IHZvaWRcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMucmVmID0geyBjdXJyZW50OiBudWxsIH1cbiAgICB0aGlzLnNldFJlZkVsZW1lbnQgPSB0aGlzLnNldFJlZkVsZW1lbnQuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWVcbiAgICB0aGlzLmtleXdvcmRzID0gb3B0aW9ucy5rZXl3b3JkcyB8fCBbXVxuICAgIHRoaXMuSWNvbiA9IG9wdGlvbnMuSWNvblxuICAgIHRoaXMua2V5Ym9hcmRTaG9ydGN1dCA9IG9wdGlvbnMua2V5Ym9hcmRTaG9ydGN1dFxuICAgIHRoaXMub25TZWxlY3QgPSBvcHRpb25zLm9uU2VsZWN0LmJpbmQodGhpcylcbiAgfVxuXG4gIHNldFJlZkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKSB7XG4gICAgdGhpcy5yZWYgPSB7IGN1cnJlbnQ6IGVsZW1lbnQgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTbGFzaE1lbnVHcm91cCB7XG4gIC8vIFVzZWQgZm9yIGNsYXNzIG5hbWVzIGFuZCwgaWYgZGlzcGxheU5hbWUgaXMgbm90IHByb3ZpZGVkLCBmb3IgZGlzcGxheS5cbiAgZGlzcGxheU5hbWU/OiAoKHsgaTE4biB9OiB7IGkxOG46IGkxOG4gfSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICBrZXk6IHN0cmluZ1xuICBvcHRpb25zOiBBcnJheTxTbGFzaE1lbnVPcHRpb24+XG59XG4iXSwibmFtZXMiOlsiU2xhc2hNZW51R3JvdXAiLCJTbGFzaE1lbnVPcHRpb24iLCJJY29uIiwiZGlzcGxheU5hbWUiLCJrZXkiLCJrZXlib2FyZFNob3J0Y3V0Iiwia2V5d29yZHMiLCJvblNlbGVjdCIsInJlZiIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImN1cnJlbnQiLCJzZXRSZWZFbGVtZW50IiwiYmluZCIsImVsZW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBK0NhQSxjQUFjO2VBQWRBOztJQTFDQUMsZUFBZTtlQUFmQTs7O0FBQU4sTUFBTUE7SUFDWCxtQkFBbUI7SUFDbkJDLEtBQTZCO0lBRTdCQyxZQUE2RDtJQUM3RCx5RUFBeUU7SUFDekVDLElBQVc7SUFDWCxNQUFNO0lBQ05DLGlCQUF5QjtJQUN6Qix1QkFBdUI7SUFDdkJDLFNBQXVCO0lBQ3ZCLDRDQUE0QztJQUM1Q0MsU0FBMkY7SUFFM0ZDLElBQTBDO0lBRTFDQyxZQUNFTCxHQUFXLEVBQ1hNLE9BTUMsQ0FDRDtRQUNBLElBQUksQ0FBQ04sR0FBRyxHQUFHQTtRQUNYLElBQUksQ0FBQ0ksR0FBRyxHQUFHO1lBQUVHLFNBQVM7UUFBSztRQUMzQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUNBLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDLElBQUk7UUFFakQsSUFBSSxDQUFDVixXQUFXLEdBQUdPLFFBQVFQLFdBQVc7UUFDdEMsSUFBSSxDQUFDRyxRQUFRLEdBQUdJLFFBQVFKLFFBQVEsSUFBSSxFQUFFO1FBQ3RDLElBQUksQ0FBQ0osSUFBSSxHQUFHUSxRQUFRUixJQUFJO1FBQ3hCLElBQUksQ0FBQ0csZ0JBQWdCLEdBQUdLLFFBQVFMLGdCQUFnQjtRQUNoRCxJQUFJLENBQUNFLFFBQVEsR0FBR0csUUFBUUgsUUFBUSxDQUFDTSxJQUFJLENBQUMsSUFBSTtJQUM1QztJQUVBRCxjQUFjRSxPQUEyQixFQUFFO1FBQ3pDLElBQUksQ0FBQ04sR0FBRyxHQUFHO1lBQUVHLFNBQVNHO1FBQVE7SUFDaEM7QUFDRjtBQUVPLE1BQU1kO0lBQ1gseUVBQXlFO0lBQ3pFRyxZQUE2RDtJQUM3REMsSUFBVztJQUNYTSxRQUErQjtBQUNqQyJ9
@@ -38,7 +38,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
38
38
  if (cache && cache.has(obj)) {
39
39
  return cache.get(obj);
40
40
  }
41
- var newObj = {};
41
+ var newObj = {
42
+ __proto__: null
43
+ };
42
44
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
45
  for(var key in obj){
44
46
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -223,4 +225,4 @@ function SlashMenuPlugin({ anchorElem = document.body }) {
223
225
  }));
224
226
  }
225
227
 
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB0eXBlIHsgU2xhc2hNZW51R3JvdXAsIFNsYXNoTWVudU9wdGlvbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4vdHlwZXMnXG5cbmltcG9ydCB7IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi8uLi9jb25maWcvRWRpdG9yQ29uZmlnUHJvdmlkZXInXG5pbXBvcnQgeyBMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4nXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZU1lbnVUcmlnZ2VyTWF0Y2ggfSBmcm9tICcuL3VzZU1lbnVUcmlnZ2VyTWF0Y2gnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzbGFzaC1tZW51LXBvcHVwJ1xuXG5mdW5jdGlvbiBTbGFzaE1lbnVJdGVtKHtcbiAgaXNTZWxlY3RlZCxcbiAgb25DbGljayxcbiAgb25Nb3VzZUVudGVyLFxuICBvcHRpb24sXG59OiB7XG4gIGluZGV4OiBudW1iZXJcbiAgaXNTZWxlY3RlZDogYm9vbGVhblxuICBvbkNsaWNrOiAoKSA9PiB2b2lkXG4gIG9uTW91c2VFbnRlcjogKCkgPT4gdm9pZFxuICBvcHRpb246IFNsYXNoTWVudU9wdGlvblxufSkge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdmaWVsZHMnKVxuXG4gIGxldCBjbGFzc05hbWUgPSBgJHtiYXNlQ2xhc3N9X19pdGVtICR7YmFzZUNsYXNzfV9faXRlbS0ke29wdGlvbi5rZXl9YFxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNsYXNzTmFtZSArPSBgICR7YmFzZUNsYXNzfV9faXRlbS0tc2VsZWN0ZWRgXG4gIH1cblxuICBsZXQgdGl0bGUgPSBvcHRpb24ua2V5XG4gIGlmIChvcHRpb24uZGlzcGxheU5hbWUpIHtcbiAgICB0aXRsZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uLmRpc3BsYXlOYW1lID09PSAnZnVuY3Rpb24nID8gb3B0aW9uLmRpc3BsYXlOYW1lKHsgaTE4biB9KSA6IG9wdGlvbi5kaXNwbGF5TmFtZVxuICB9XG4gIC8vIENyb3AgdGl0bGUgdG8gbWF4LiA1MCBjaGFyYWN0ZXJzXG4gIGlmICh0aXRsZS5sZW5ndGggPiAyNSkge1xuICAgIHRpdGxlID0gdGl0bGUuc3Vic3RyaW5nKDAsIDI1KSArICcuLi4nXG4gIH1cblxuICBjb25zdCBMYXp5SWNvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBvcHRpb24/Lkljb25cbiAgICAgID8gUmVhY3QubGF6eSgoKSA9PlxuICAgICAgICAgIG9wdGlvbi5JY29uKCkudGhlbigocmVzb2x2ZWRJY29uKSA9PiAoe1xuICAgICAgICAgICAgZGVmYXVsdDogcmVzb2x2ZWRJY29uLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG4gIH0sIFtvcHRpb25dKVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgaWQ9e2Jhc2VDbGFzcyArICdfX2l0ZW0tJyArIG9wdGlvbi5rZXl9XG4gICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Nb3VzZUVudGVyPXtvbk1vdXNlRW50ZXJ9XG4gICAgICByZWY9e29wdGlvbi5zZXRSZWZFbGVtZW50fVxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICB7TGF6eUljb24gJiYgKFxuICAgICAgICA8UmVhY3QuU3VzcGVuc2U+XG4gICAgICAgICAgPExhenlJY29uIC8+XG4gICAgICAgIDwvUmVhY3QuU3VzcGVuc2U+XG4gICAgICApfVxuXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2l0ZW0tdGV4dGB9Pnt0aXRsZX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNsYXNoTWVudVBsdWdpbih7XG4gIGFuY2hvckVsZW0gPSBkb2N1bWVudC5ib2R5LFxufToge1xuICBhbmNob3JFbGVtPzogSFRNTEVsZW1lbnRcbn0pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIGNvbnN0IFtxdWVyeVN0cmluZywgc2V0UXVlcnlTdHJpbmddID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcbiAgY29uc3QgeyBlZGl0b3JDb25maWcgfSA9IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdmaWVsZHMnKVxuXG4gIGNvbnN0IGNoZWNrRm9yVHJpZ2dlck1hdGNoID0gdXNlTWVudVRyaWdnZXJNYXRjaCgnLycsIHtcbiAgICBtaW5MZW5ndGg6IDAsXG4gIH0pXG5cbiAgY29uc3QgZ2V0RHluYW1pY09wdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbGV0IGdyb3VwV2l0aE9wdGlvbnM6IEFycmF5PFNsYXNoTWVudUdyb3VwPiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGR5bmFtaWNPcHRpb24gb2YgZWRpdG9yQ29uZmlnLmZlYXR1cmVzLnNsYXNoTWVudS5keW5hbWljT3B0aW9ucykge1xuICAgICAgY29uc3QgZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMgPSBkeW5hbWljT3B0aW9uKHtcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBxdWVyeVN0cmluZyxcbiAgICAgIH0pXG4gICAgICBncm91cFdpdGhPcHRpb25zID0gZ3JvdXBXaXRoT3B0aW9ucy5jb25jYXQoZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwV2l0aE9wdGlvbnNcbiAgfSwgW2VkaXRvciwgcXVlcnlTdHJpbmcsIGVkaXRvckNvbmZpZz8uZmVhdHVyZXNdKVxuXG4gIGNvbnN0IGdyb3VwczogU2xhc2hNZW51R3JvdXBbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBncm91cHNXaXRoT3B0aW9uczogU2xhc2hNZW51R3JvdXBbXSA9IFtdXG4gICAgZm9yIChjb25zdCBncm91cFdpdGhPcHRpb24gb2YgZWRpdG9yQ29uZmlnPy5mZWF0dXJlcy5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnMgPz8gW10pIHtcbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLnB1c2goZ3JvdXBXaXRoT3B0aW9uKVxuICAgIH1cblxuICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgLy8gRmlsdGVyIGN1cnJlbnQgZ3JvdXBzIGZpcnN0XG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZ3JvdXAub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIGxldCBvcHRpb25UaXRsZSA9IG9wdGlvbi5rZXlcbiAgICAgICAgICBpZiAob3B0aW9uLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICBvcHRpb25UaXRsZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBvcHRpb24uZGlzcGxheU5hbWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IG9wdGlvbi5kaXNwbGF5TmFtZSh7IGkxOG4gfSlcbiAgICAgICAgICAgICAgICA6IG9wdGlvbi5kaXNwbGF5TmFtZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHF1ZXJ5U3RyaW5nLCAnZ2knKS5leGVjKG9wdGlvblRpdGxlKSB8fCBvcHRpb24ua2V5d29yZHMgIT0gbnVsbFxuICAgICAgICAgICAgPyBvcHRpb24ua2V5d29yZHMuc29tZSgoa2V5d29yZCkgPT4gbmV3IFJlZ0V4cChxdWVyeVN0cmluZywgJ2dpJykuZXhlYyhrZXl3b3JkKSlcbiAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9KVxuXG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwICE9IG51bGwpXG5cbiAgICAgIC8vIE5vdyBhZGQgZHluYW1pYyBncm91cHNcbiAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25Hcm91cHMgPSBnZXREeW5hbWljT3B0aW9ucygpXG5cbiAgICAgIC8vIG1lcmdlIGR5bmFtaWMgb3B0aW9ucyBpbnRvIGdyb3Vwc1xuICAgICAgZm9yIChjb25zdCBkeW5hbWljR3JvdXAgb2YgZHluYW1pY09wdGlvbkdyb3Vwcykge1xuICAgICAgICAvLyAxLiBmaW5kIHRoZSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgb3IgY3JlYXRlIG5ldyBvbmVcbiAgICAgICAgbGV0IGdyb3VwID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmluZCgoZ3JvdXApID0+IGdyb3VwLmtleSA9PT0gZHluYW1pY0dyb3VwLmtleSlcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgIGdyb3VwID0ge1xuICAgICAgICAgICAgLi4uZHluYW1pY0dyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAua2V5ICE9PSBkeW5hbWljR3JvdXAua2V5KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gQWRkIG9wdGlvbnMgdG8gZ3JvdXAgb3B0aW9ucyBhcnJheSBhbmQgYWRkIHRvIHNhbml0aXplZC5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnNcbiAgICAgICAgaWYgKGdyb3VwPy5vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBncm91cC5vcHRpb25zID0gZ3JvdXAub3B0aW9ucy5jb25jYXQoZ3JvdXAub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5wdXNoKGdyb3VwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cHNXaXRoT3B0aW9uc1xuICB9LCBbZ2V0RHluYW1pY09wdGlvbnMsIHF1ZXJ5U3RyaW5nLCBlZGl0b3JDb25maWc/LmZlYXR1cmVzLCBpMThuXSlcblxuICBjb25zdCBvblNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24sXG4gICAgICBub2RlVG9SZW1vdmU6IFRleHROb2RlIHwgbnVsbCxcbiAgICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICAgIG1hdGNoaW5nU3RyaW5nOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBlZGl0b3IudXBkYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkge1xuICAgICAgICAgIG5vZGVUb1JlbW92ZS5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLm9uU2VsZWN0KHsgZWRpdG9yLCBxdWVyeVN0cmluZzogbWF0Y2hpbmdTdHJpbmcgfSlcbiAgICAgICAgY2xvc2VNZW51KClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZWRpdG9yXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luXG4gICAgICAgIGFuY2hvckVsZW09e2FuY2hvckVsZW19XG4gICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zPXtncm91cHN9XG4gICAgICAgIG1lbnVSZW5kZXJGbj17KFxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYsXG4gICAgICAgICAgeyBzZWxlY3RPcHRpb25BbmRDbGVhblVwLCBzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXkgfSxcbiAgICAgICAgKSA9PlxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCAmJiBncm91cHMubGVuZ3RoXG4gICAgICAgICAgICA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgIHtncm91cHMubWFwKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBUaXRsZSA9IGdyb3VwLmtleVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFRpdGxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBncm91cC5kaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdyb3VwLmRpc3BsYXlOYW1lKHsgaTE4biB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdyb3VwLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZ3JvdXAgJHtiYXNlQ2xhc3N9X19ncm91cC0ke2dyb3VwLmtleX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtncm91cC5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2dyb3VwLXRpdGxlYH0+e2dyb3VwVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbiwgb2k6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2xhc2hNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtvaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZE9wdGlvbktleSA9PT0gb3B0aW9uLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAob3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShvcHRpb24ua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uPXtvcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+LFxuICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgb25RdWVyeUNoYW5nZT17c2V0UXVlcnlTdHJpbmd9XG4gICAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgICAgdHJpZ2dlckZuPXtjaGVja0ZvclRyaWdnZXJNYXRjaH1cbiAgICAgIC8+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlNsYXNoTWVudVBsdWdpbiIsImJhc2VDbGFzcyIsIlNsYXNoTWVudUl0ZW0iLCJpc1NlbGVjdGVkIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsIm9wdGlvbiIsImkxOG4iLCJ1c2VUcmFuc2xhdGlvbiIsImNsYXNzTmFtZSIsImtleSIsInRpdGxlIiwiZGlzcGxheU5hbWUiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJMYXp5SWNvbiIsInVzZU1lbW8iLCJJY29uIiwiUmVhY3QiLCJsYXp5IiwidGhlbiIsInJlc29sdmVkSWNvbiIsImRlZmF1bHQiLCJidXR0b24iLCJhcmlhLXNlbGVjdGVkIiwiaWQiLCJyZWYiLCJzZXRSZWZFbGVtZW50Iiwicm9sZSIsInRhYkluZGV4IiwidHlwZSIsIlN1c3BlbnNlIiwic3BhbiIsImFuY2hvckVsZW0iLCJkb2N1bWVudCIsImJvZHkiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicXVlcnlTdHJpbmciLCJzZXRRdWVyeVN0cmluZyIsInVzZVN0YXRlIiwiZWRpdG9yQ29uZmlnIiwidXNlRWRpdG9yQ29uZmlnQ29udGV4dCIsImNoZWNrRm9yVHJpZ2dlck1hdGNoIiwidXNlTWVudVRyaWdnZXJNYXRjaCIsIm1pbkxlbmd0aCIsImdldER5bmFtaWNPcHRpb25zIiwidXNlQ2FsbGJhY2siLCJncm91cFdpdGhPcHRpb25zIiwiZHluYW1pY09wdGlvbiIsImZlYXR1cmVzIiwic2xhc2hNZW51IiwiZHluYW1pY09wdGlvbnMiLCJkeW5hbWljR3JvdXBXaXRoT3B0aW9ucyIsImNvbmNhdCIsImdyb3VwcyIsImdyb3Vwc1dpdGhPcHRpb25zIiwiZ3JvdXBXaXRoT3B0aW9uIiwicHVzaCIsIm1hcCIsImdyb3VwIiwiZmlsdGVyZWRPcHRpb25zIiwib3B0aW9ucyIsImZpbHRlciIsIm9wdGlvblRpdGxlIiwiUmVnRXhwIiwiZXhlYyIsImtleXdvcmRzIiwic29tZSIsImtleXdvcmQiLCJkeW5hbWljT3B0aW9uR3JvdXBzIiwiZHluYW1pY0dyb3VwIiwiZmluZCIsIm9uU2VsZWN0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJub2RlVG9SZW1vdmUiLCJjbG9zZU1lbnUiLCJtYXRjaGluZ1N0cmluZyIsInVwZGF0ZSIsInJlbW92ZSIsIm9uU2VsZWN0IiwiRnJhZ21lbnQiLCJMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiIsIm1lbnVSZW5kZXJGbiIsImFuY2hvckVsZW1lbnRSZWYiLCJzZWxlY3RPcHRpb25BbmRDbGVhblVwIiwic2VsZWN0ZWRPcHRpb25LZXkiLCJzZXRTZWxlY3RlZE9wdGlvbktleSIsImN1cnJlbnQiLCJSZWFjdERPTSIsImNyZWF0ZVBvcnRhbCIsImRpdiIsImdyb3VwVGl0bGUiLCJvaSIsImluZGV4Iiwib25RdWVyeUNoYW5nZSIsInRyaWdnZXJGbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OytCQWlGZ0JBOzs7ZUFBQUE7Ozt3Q0E5RTBCOytEQUNLO2tFQUVyQjs4QkFDSztzQ0FJUTs0Q0FDSTtRQUNwQztxQ0FDNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEMsTUFBTUMsWUFBWTtBQUVsQixTQUFTQyxjQUFjLEVBQ3JCQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDUEMsWUFBWSxFQUNaQyxNQUFNLEVBT1A7SUFDQyxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyxJQUFBQSw0QkFBYyxFQUFDO0lBRWhDLElBQUlDLFlBQVksQ0FBQyxFQUFFUixVQUFVLE9BQU8sRUFBRUEsVUFBVSxPQUFPLEVBQUVLLE9BQU9JLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLElBQUlQLFlBQVk7UUFDZE0sYUFBYSxDQUFDLENBQUMsRUFBRVIsVUFBVSxnQkFBZ0IsQ0FBQztJQUM5QztJQUVBLElBQUlVLFFBQVFMLE9BQU9JLEdBQUc7SUFDdEIsSUFBSUosT0FBT00sV0FBVyxFQUFFO1FBQ3RCRCxRQUNFLE9BQU9MLE9BQU9NLFdBQVcsS0FBSyxhQUFhTixPQUFPTSxXQUFXLENBQUM7WUFBRUw7UUFBSyxLQUFLRCxPQUFPTSxXQUFXO0lBQ2hHO0lBQ0EsbUNBQW1DO0lBQ25DLElBQUlELE1BQU1FLE1BQU0sR0FBRyxJQUFJO1FBQ3JCRixRQUFRQSxNQUFNRyxTQUFTLENBQUMsR0FBRyxNQUFNO0lBQ25DO0lBRUEsTUFBTUMsV0FBV0MsSUFBQUEsY0FBTyxFQUFDO1FBQ3ZCLE9BQU9WLFFBQVFXLHFCQUNYQyxPQUFNQyxJQUFJLENBQUMsSUFDVGIsT0FBT1csSUFBSSxH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
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvU2xhc2hNZW51L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgVGV4dE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB0eXBlIHsgU2xhc2hNZW51R3JvdXAsIFNsYXNoTWVudU9wdGlvbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4vdHlwZXMnXG5cbmltcG9ydCB7IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQgfSBmcm9tICcuLi8uLi9jb25maWcvRWRpdG9yQ29uZmlnUHJvdmlkZXInXG5pbXBvcnQgeyBMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiB9IGZyb20gJy4vTGV4aWNhbFR5cGVhaGVhZE1lbnVQbHVnaW4nXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcbmltcG9ydCB7IHVzZU1lbnVUcmlnZ2VyTWF0Y2ggfSBmcm9tICcuL3VzZU1lbnVUcmlnZ2VyTWF0Y2gnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdzbGFzaC1tZW51LXBvcHVwJ1xuXG5mdW5jdGlvbiBTbGFzaE1lbnVJdGVtKHtcbiAgaXNTZWxlY3RlZCxcbiAgb25DbGljayxcbiAgb25Nb3VzZUVudGVyLFxuICBvcHRpb24sXG59OiB7XG4gIGluZGV4OiBudW1iZXJcbiAgaXNTZWxlY3RlZDogYm9vbGVhblxuICBvbkNsaWNrOiAoKSA9PiB2b2lkXG4gIG9uTW91c2VFbnRlcjogKCkgPT4gdm9pZFxuICBvcHRpb246IFNsYXNoTWVudU9wdGlvblxufSkge1xuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdmaWVsZHMnKVxuXG4gIGxldCBjbGFzc05hbWUgPSBgJHtiYXNlQ2xhc3N9X19pdGVtICR7YmFzZUNsYXNzfV9faXRlbS0ke29wdGlvbi5rZXl9YFxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNsYXNzTmFtZSArPSBgICR7YmFzZUNsYXNzfV9faXRlbS0tc2VsZWN0ZWRgXG4gIH1cblxuICBsZXQgdGl0bGUgPSBvcHRpb24ua2V5XG4gIGlmIChvcHRpb24uZGlzcGxheU5hbWUpIHtcbiAgICB0aXRsZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9uLmRpc3BsYXlOYW1lID09PSAnZnVuY3Rpb24nID8gb3B0aW9uLmRpc3BsYXlOYW1lKHsgaTE4biB9KSA6IG9wdGlvbi5kaXNwbGF5TmFtZVxuICB9XG4gIC8vIENyb3AgdGl0bGUgdG8gbWF4LiA1MCBjaGFyYWN0ZXJzXG4gIGlmICh0aXRsZS5sZW5ndGggPiAyNSkge1xuICAgIHRpdGxlID0gdGl0bGUuc3Vic3RyaW5nKDAsIDI1KSArICcuLi4nXG4gIH1cblxuICBjb25zdCBMYXp5SWNvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBvcHRpb24/Lkljb25cbiAgICAgID8gUmVhY3QubGF6eSgoKSA9PlxuICAgICAgICAgIG9wdGlvbi5JY29uKCkudGhlbigocmVzb2x2ZWRJY29uKSA9PiAoe1xuICAgICAgICAgICAgZGVmYXVsdDogcmVzb2x2ZWRJY29uLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG4gIH0sIFtvcHRpb25dKVxuXG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgaWQ9e2Jhc2VDbGFzcyArICdfX2l0ZW0tJyArIG9wdGlvbi5rZXl9XG4gICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25Nb3VzZUVudGVyPXtvbk1vdXNlRW50ZXJ9XG4gICAgICByZWY9e29wdGlvbi5zZXRSZWZFbGVtZW50fVxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICB7TGF6eUljb24gJiYgKFxuICAgICAgICA8UmVhY3QuU3VzcGVuc2U+XG4gICAgICAgICAgPExhenlJY29uIC8+XG4gICAgICAgIDwvUmVhY3QuU3VzcGVuc2U+XG4gICAgICApfVxuXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2l0ZW0tdGV4dGB9Pnt0aXRsZX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNsYXNoTWVudVBsdWdpbih7XG4gIGFuY2hvckVsZW0gPSBkb2N1bWVudC5ib2R5LFxufToge1xuICBhbmNob3JFbGVtPzogSFRNTEVsZW1lbnRcbn0pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIGNvbnN0IFtxdWVyeVN0cmluZywgc2V0UXVlcnlTdHJpbmddID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcbiAgY29uc3QgeyBlZGl0b3JDb25maWcgfSA9IHVzZUVkaXRvckNvbmZpZ0NvbnRleHQoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdmaWVsZHMnKVxuXG4gIGNvbnN0IGNoZWNrRm9yVHJpZ2dlck1hdGNoID0gdXNlTWVudVRyaWdnZXJNYXRjaCgnLycsIHtcbiAgICBtaW5MZW5ndGg6IDAsXG4gIH0pXG5cbiAgY29uc3QgZ2V0RHluYW1pY09wdGlvbnMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgbGV0IGdyb3VwV2l0aE9wdGlvbnM6IEFycmF5PFNsYXNoTWVudUdyb3VwPiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGR5bmFtaWNPcHRpb24gb2YgZWRpdG9yQ29uZmlnLmZlYXR1cmVzLnNsYXNoTWVudS5keW5hbWljT3B0aW9ucykge1xuICAgICAgY29uc3QgZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMgPSBkeW5hbWljT3B0aW9uKHtcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBxdWVyeVN0cmluZyxcbiAgICAgIH0pXG4gICAgICBncm91cFdpdGhPcHRpb25zID0gZ3JvdXBXaXRoT3B0aW9ucy5jb25jYXQoZHluYW1pY0dyb3VwV2l0aE9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwV2l0aE9wdGlvbnNcbiAgfSwgW2VkaXRvciwgcXVlcnlTdHJpbmcsIGVkaXRvckNvbmZpZz8uZmVhdHVyZXNdKVxuXG4gIGNvbnN0IGdyb3VwczogU2xhc2hNZW51R3JvdXBbXSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBncm91cHNXaXRoT3B0aW9uczogU2xhc2hNZW51R3JvdXBbXSA9IFtdXG4gICAgZm9yIChjb25zdCBncm91cFdpdGhPcHRpb24gb2YgZWRpdG9yQ29uZmlnPy5mZWF0dXJlcy5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnMgPz8gW10pIHtcbiAgICAgIGdyb3Vwc1dpdGhPcHRpb25zLnB1c2goZ3JvdXBXaXRoT3B0aW9uKVxuICAgIH1cblxuICAgIGlmIChxdWVyeVN0cmluZykge1xuICAgICAgLy8gRmlsdGVyIGN1cnJlbnQgZ3JvdXBzIGZpcnN0XG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZ3JvdXAub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIGxldCBvcHRpb25UaXRsZSA9IG9wdGlvbi5rZXlcbiAgICAgICAgICBpZiAob3B0aW9uLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICBvcHRpb25UaXRsZSA9XG4gICAgICAgICAgICAgIHR5cGVvZiBvcHRpb24uZGlzcGxheU5hbWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IG9wdGlvbi5kaXNwbGF5TmFtZSh7IGkxOG4gfSlcbiAgICAgICAgICAgICAgICA6IG9wdGlvbi5kaXNwbGF5TmFtZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHF1ZXJ5U3RyaW5nLCAnZ2knKS5leGVjKG9wdGlvblRpdGxlKSB8fCBvcHRpb24ua2V5d29yZHMgIT0gbnVsbFxuICAgICAgICAgICAgPyBvcHRpb24ua2V5d29yZHMuc29tZSgoa2V5d29yZCkgPT4gbmV3IFJlZ0V4cChxdWVyeVN0cmluZywgJ2dpJykuZXhlYyhrZXl3b3JkKSlcbiAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWx0ZXJlZE9wdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9KVxuXG4gICAgICBncm91cHNXaXRoT3B0aW9ucyA9IGdyb3Vwc1dpdGhPcHRpb25zLmZpbHRlcigoZ3JvdXApID0+IGdyb3VwICE9IG51bGwpXG5cbiAgICAgIC8vIE5vdyBhZGQgZHluYW1pYyBncm91cHNcbiAgICAgIGNvbnN0IGR5bmFtaWNPcHRpb25Hcm91cHMgPSBnZXREeW5hbWljT3B0aW9ucygpXG5cbiAgICAgIC8vIG1lcmdlIGR5bmFtaWMgb3B0aW9ucyBpbnRvIGdyb3Vwc1xuICAgICAgZm9yIChjb25zdCBkeW5hbWljR3JvdXAgb2YgZHluYW1pY09wdGlvbkdyb3Vwcykge1xuICAgICAgICAvLyAxLiBmaW5kIHRoZSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgb3IgY3JlYXRlIG5ldyBvbmVcbiAgICAgICAgbGV0IGdyb3VwID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmluZCgoZ3JvdXApID0+IGdyb3VwLmtleSA9PT0gZHluYW1pY0dyb3VwLmtleSlcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgIGdyb3VwID0ge1xuICAgICAgICAgICAgLi4uZHluYW1pY0dyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zID0gZ3JvdXBzV2l0aE9wdGlvbnMuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAua2V5ICE9PSBkeW5hbWljR3JvdXAua2V5KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gQWRkIG9wdGlvbnMgdG8gZ3JvdXAgb3B0aW9ucyBhcnJheSBhbmQgYWRkIHRvIHNhbml0aXplZC5zbGFzaE1lbnUuZ3JvdXBzV2l0aE9wdGlvbnNcbiAgICAgICAgaWYgKGdyb3VwPy5vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBncm91cC5vcHRpb25zID0gZ3JvdXAub3B0aW9ucy5jb25jYXQoZ3JvdXAub3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBncm91cHNXaXRoT3B0aW9ucy5wdXNoKGdyb3VwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cHNXaXRoT3B0aW9uc1xuICB9LCBbZ2V0RHluYW1pY09wdGlvbnMsIHF1ZXJ5U3RyaW5nLCBlZGl0b3JDb25maWc/LmZlYXR1cmVzLCBpMThuXSlcblxuICBjb25zdCBvblNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbGVjdGVkT3B0aW9uOiBTbGFzaE1lbnVPcHRpb24sXG4gICAgICBub2RlVG9SZW1vdmU6IFRleHROb2RlIHwgbnVsbCxcbiAgICAgIGNsb3NlTWVudTogKCkgPT4gdm9pZCxcbiAgICAgIG1hdGNoaW5nU3RyaW5nOiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBlZGl0b3IudXBkYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKG5vZGVUb1JlbW92ZSkge1xuICAgICAgICAgIG5vZGVUb1JlbW92ZS5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLm9uU2VsZWN0KHsgZWRpdG9yLCBxdWVyeVN0cmluZzogbWF0Y2hpbmdTdHJpbmcgfSlcbiAgICAgICAgY2xvc2VNZW51KClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZWRpdG9yXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPExleGljYWxUeXBlYWhlYWRNZW51UGx1Z2luXG4gICAgICAgIGFuY2hvckVsZW09e2FuY2hvckVsZW19XG4gICAgICAgIGdyb3Vwc1dpdGhPcHRpb25zPXtncm91cHN9XG4gICAgICAgIG1lbnVSZW5kZXJGbj17KFxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYsXG4gICAgICAgICAgeyBzZWxlY3RPcHRpb25BbmRDbGVhblVwLCBzZWxlY3RlZE9wdGlvbktleSwgc2V0U2VsZWN0ZWRPcHRpb25LZXkgfSxcbiAgICAgICAgKSA9PlxuICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCAmJiBncm91cHMubGVuZ3RoXG4gICAgICAgICAgICA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgIHtncm91cHMubWFwKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBUaXRsZSA9IGdyb3VwLmtleVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBncm91cFRpdGxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBncm91cC5kaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGdyb3VwLmRpc3BsYXlOYW1lKHsgaTE4biB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdyb3VwLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZ3JvdXAgJHtiYXNlQ2xhc3N9X19ncm91cC0ke2dyb3VwLmtleX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtncm91cC5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2dyb3VwLXRpdGxlYH0+e2dyb3VwVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbiwgb2k6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2xhc2hNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtvaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZE9wdGlvbktleSA9PT0gb3B0aW9uLmtleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e29wdGlvbi5rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRPcHRpb25LZXkob3B0aW9uLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbkFuZENsZWFuVXAob3B0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbktleShvcHRpb24ua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uPXtvcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+LFxuICAgICAgICAgICAgICAgIGFuY2hvckVsZW1lbnRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgb25RdWVyeUNoYW5nZT17c2V0UXVlcnlTdHJpbmd9XG4gICAgICAgIG9uU2VsZWN0T3B0aW9uPXtvblNlbGVjdE9wdGlvbn1cbiAgICAgICAgdHJpZ2dlckZuPXtjaGVja0ZvclRyaWdnZXJNYXRjaH1cbiAgICAgIC8+XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlNsYXNoTWVudVBsdWdpbiIsImJhc2VDbGFzcyIsIlNsYXNoTWVudUl0ZW0iLCJpc1NlbGVjdGVkIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsIm9wdGlvbiIsImkxOG4iLCJ1c2VUcmFuc2xhdGlvbiIsImNsYXNzTmFtZSIsImtleSIsInRpdGxlIiwiZGlzcGxheU5hbWUiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJMYXp5SWNvbiIsInVzZU1lbW8iLCJJY29uIiwiUmVhY3QiLCJsYXp5IiwidGhlbiIsInJlc29sdmVkSWNvbiIsImRlZmF1bHQiLCJidXR0b24iLCJhcmlhLXNlbGVjdGVkIiwiaWQiLCJyZWYiLCJzZXRSZWZFbGVtZW50Iiwicm9sZSIsInRhYkluZGV4IiwidHlwZSIsIlN1c3BlbnNlIiwic3BhbiIsImFuY2hvckVsZW0iLCJkb2N1bWVudCIsImJvZHkiLCJlZGl0b3IiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwicXVlcnlTdHJpbmciLCJzZXRRdWVyeVN0cmluZyIsInVzZVN0YXRlIiwiZWRpdG9yQ29uZmlnIiwidXNlRWRpdG9yQ29uZmlnQ29udGV4dCIsImNoZWNrRm9yVHJpZ2dlck1hdGNoIiwidXNlTWVudVRyaWdnZXJNYXRjaCIsIm1pbkxlbmd0aCIsImdldER5bmFtaWNPcHRpb25zIiwidXNlQ2FsbGJhY2siLCJncm91cFdpdGhPcHRpb25zIiwiZHluYW1pY09wdGlvbiIsImZlYXR1cmVzIiwic2xhc2hNZW51IiwiZHluYW1pY09wdGlvbnMiLCJkeW5hbWljR3JvdXBXaXRoT3B0aW9ucyIsImNvbmNhdCIsImdyb3VwcyIsImdyb3Vwc1dpdGhPcHRpb25zIiwiZ3JvdXBXaXRoT3B0aW9uIiwicHVzaCIsIm1hcCIsImdyb3VwIiwiZmlsdGVyZWRPcHRpb25zIiwib3B0aW9ucyIsImZpbHRlciIsIm9wdGlvblRpdGxlIiwiUmVnRXhwIiwiZXhlYyIsImtleXdvcmRzIiwic29tZSIsImtleXdvcmQiLCJkeW5hbWljT3B0aW9uR3JvdXBzIiwiZHluYW1pY0dyb3VwIiwiZmluZCIsIm9uU2VsZWN0T3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJub2RlVG9SZW1vdmUiLCJjbG9zZU1lbnUiLCJtYXRjaGluZ1N0cmluZyIsInVwZGF0ZSIsInJlbW92ZSIsIm9uU2VsZWN0IiwiRnJhZ21lbnQiLCJMZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbiIsIm1lbnVSZW5kZXJGbiIsImFuY2hvckVsZW1lbnRSZWYiLCJzZWxlY3RPcHRpb25BbmRDbGVhblVwIiwic2VsZWN0ZWRPcHRpb25LZXkiLCJzZXRTZWxlY3RlZE9wdGlvbktleSIsImN1cnJlbnQiLCJSZWFjdERPTSIsImNyZWF0ZVBvcnRhbCIsImRpdiIsImdyb3VwVGl0bGUiLCJvaSIsImluZGV4Iiwib25RdWVyeUNoYW5nZSIsInRyaWdnZXJGbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OytCQWlGZ0JBOzs7ZUFBQUE7Ozt3Q0E5RTBCOytEQUNLO2tFQUVyQjs4QkFDSztzQ0FJUTs0Q0FDSTtRQUNwQztxQ0FDNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwQyxNQUFNQyxZQUFZO0FBRWxCLFNBQVNDLGNBQWMsRUFDckJDLFVBQVUsRUFDVkMsT0FBTyxFQUNQQyxZQUFZLEVBQ1pDLE1BQU0sRUFPUDtJQUNDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLElBQUFBLDRCQUFjLEVBQUM7SUFFaEMsSUFBSUMsWUFBWSxDQUFDLEVBQUVSLFVBQVUsT0FBTyxFQUFFQSxVQUFVLE9BQU8sRUFBRUssT0FBT0ksR0FBRyxDQUFDLENBQUM7SUFDckUsSUFBSVAsWUFBWTtRQUNkTSxhQUFhLENBQUMsQ0FBQyxFQUFFUixVQUFVLGdCQUFnQixDQUFDO0lBQzlDO0lBRUEsSUFBSVUsUUFBUUwsT0FBT0ksR0FBRztJQUN0QixJQUFJSixPQUFPTSxXQUFXLEVBQUU7UUFDdEJELFFBQ0UsT0FBT0wsT0FBT00sV0FBVyxLQUFLLGFBQWFOLE9BQU9NLFdBQVcsQ0FBQztZQUFFTDtRQUFLLEtBQUtELE9BQU9NLFdBQVc7SUFDaEc7SUFDQSxtQ0FBbUM7SUFDbkMsSUFBSUQsTUFBTUUsTUFBTSxHQUFHLElBQUk7UUFDckJGLFFBQVFBLE1BQU1HLFNBQVMsQ0FBQyxHQUFHLE1BQU07SUFDbkM7SUFFQSxNQUFNQyxXQUFXQyxJQUFBQSxjQUFPLEVBQUM7UUFDdkIsT0FBT1YsUUFBUVcscUJBQ1hDLE9BQU1DLElBQUksQ0FBQyxJQUNUYixPQUFPVyxJQUFJ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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx"],"names":[],"mappings":";AAsBA,OAAO,cAAc,CAAA;AAkQrB,wBAAgB,oBAAoB,CAAC,EACnC,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,GAAG,CAAC,OAAO,CAGd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/field/lexical/plugins/handles/AddBlockHandlePlugin/index.tsx"],"names":[],"mappings":";AAkBA,OAAO,cAAc,CAAA;AAwSrB,wBAAgB,oBAAoB,CAAC,EACnC,UAA0B,GAC3B,EAAE;IACD,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB,GAAG,GAAG,CAAC,OAAO,CAGd"}
@@ -43,7 +43,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
43
43
  if (cache && cache.has(obj)) {
44
44
  return cache.get(obj);
45
45
  }
46
- var newObj = {};
46
+ var newObj = {
47
+ __proto__: null
48
+ };
47
49
  var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
48
50
  for(var key in obj){
49
51
  if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
@@ -81,7 +83,6 @@ function getBlockElement(anchorElem, editor, event, useEdgeAsDefault = false, ho
81
83
  const topLevelNodeKeys = (0, _getTopLevelNodeKeys.getTopLevelNodeKeys)(editor);
82
84
  let blockElem = null;
83
85
  let blockNode = null;
84
- let shouldRemove = false;
85
86
  // Return null if matching block element is the first or last node
86
87
  editor.getEditorState().read(()=>{
87
88
  if (useEdgeAsDefault) {
@@ -101,8 +102,7 @@ function getBlockElement(anchorElem, editor, event, useEdgeAsDefault = false, ho
101
102
  }
102
103
  if (blockElem) {
103
104
  return {
104
- blockElem: null,
105
- shouldRemove
105
+ blockElem: null
106
106
  };
107
107
  }
108
108
  }
@@ -130,11 +130,6 @@ function getBlockElement(anchorElem, editor, event, useEdgeAsDefault = false, ho
130
130
  blockElem = elem;
131
131
  blockNode = (0, _lexical.$getNodeByKey)(key);
132
132
  prevIndex = index;
133
- // Check if blockNode is an empty text node
134
- if (!blockNode || blockNode.getType() !== 'paragraph' || blockNode.getTextContent() !== '') {
135
- blockElem = null;
136
- shouldRemove = true;
137
- }
138
133
  break;
139
134
  }
140
135
  if (direction === Indeterminate) {
@@ -151,14 +146,14 @@ function getBlockElement(anchorElem, editor, event, useEdgeAsDefault = false, ho
151
146
  }
152
147
  });
153
148
  return {
154
- blockElem: blockElem,
155
- shouldRemove
149
+ blockElem,
150
+ blockNode
156
151
  };
157
152
  }
158
153
  function useAddBlockHandle(editor, anchorElem, isEditable) {
159
154
  const scrollerElem = anchorElem.parentElement;
160
155
  const menuRef = (0, _react.useRef)(null);
161
- const [emptyBlockElem, setEmptyBlockElem] = (0, _react.useState)(null);
156
+ const [hoveredElement, setHoveredElement] = (0, _react.useState)(null);
162
157
  (0, _react.useEffect)(()=>{
163
158
  function onDocumentMouseMove(event) {
164
159
  const target = event.target;
@@ -175,7 +170,7 @@ function useAddBlockHandle(editor, anchorElem, isEditable) {
175
170
  const adjustedTop = top + window.scrollY;
176
171
  const adjustedBottom = bottom + window.scrollY;
177
172
  if (pageY < adjustedTop - verticalBuffer || pageY > adjustedBottom + verticalBuffer || pageX < left - horizontalBuffer || pageX > right + horizontalBuffer) {
178
- setEmptyBlockElem(null);
173
+ setHoveredElement(null);
179
174
  return;
180
175
  }
181
176
  // This is used to allow the _emptyBlockElem to be found when the mouse is in the
@@ -187,14 +182,17 @@ function useAddBlockHandle(editor, anchorElem, isEditable) {
187
182
  if ((0, _isOnHandleElement.isOnHandleElement)(target, ADD_BLOCK_MENU_CLASSNAME)) {
188
183
  return;
189
184
  }
190
- const { blockElem: _emptyBlockElem, shouldRemove } = getBlockElement(anchorElem, editor, event, false, -distanceFromScrollerElem);
191
- if (!_emptyBlockElem && !shouldRemove) {
185
+ const { blockElem: _emptyBlockElem, blockNode } = getBlockElement(anchorElem, editor, event, false, -distanceFromScrollerElem);
186
+ if (!_emptyBlockElem) {
192
187
  return;
193
188
  }
194
- setEmptyBlockElem(_emptyBlockElem);
189
+ setHoveredElement({
190
+ elem: _emptyBlockElem,
191
+ node: blockNode
192
+ });
195
193
  }
196
194
  // Since the draggableBlockElem is outside the actual editor, we need to listen to the document
197
- // to be able to detect when the mouse is outside the editor and respect a buffer around the
195
+ // to be able to detect when the mouse is outside the editor and respect a buffer around
198
196
  // the scrollerElem to avoid the draggableBlockElem disappearing too early.
199
197
  document?.addEventListener('mousemove', onDocumentMouseMove);
200
198
  return ()=>{
@@ -206,40 +204,66 @@ function useAddBlockHandle(editor, anchorElem, isEditable) {
206
204
  editor
207
205
  ]);
208
206
  (0, _react.useEffect)(()=>{
209
- if (menuRef.current) {
210
- (0, _setHandlePosition.setHandlePosition)(emptyBlockElem, menuRef.current, anchorElem, SPACE);
207
+ if (menuRef.current && hoveredElement?.node) {
208
+ editor.getEditorState().read(()=>{
209
+ // Check if blockNode is an empty text node
210
+ let isEmptyParagraph = true;
211
+ if (hoveredElement.node.getType() !== 'paragraph' || hoveredElement.node.getTextContent() !== '') {
212
+ isEmptyParagraph = false;
213
+ }
214
+ (0, _setHandlePosition.setHandlePosition)(hoveredElement?.elem, menuRef.current, anchorElem, isEmptyParagraph ? SPACE : SPACE - 20);
215
+ });
211
216
  }
212
217
  }, [
213
218
  anchorElem,
214
- emptyBlockElem
219
+ hoveredElement,
220
+ editor
215
221
  ]);
216
222
  const handleAddClick = (0, _react.useCallback)((event)=>{
217
- if (!emptyBlockElem) {
223
+ let hoveredElementToUse = hoveredElement;
224
+ if (!hoveredElementToUse?.node) {
218
225
  return;
219
226
  }
220
- let node;
227
+ // 1. Update hoveredElement.node to a new paragraph node if the hoveredElement.node is not a paragraph node
221
228
  editor.update(()=>{
222
- node = (0, _lexical.$getNearestNodeFromDOMNode)(emptyBlockElem);
223
- if (!node || node.getType() !== 'paragraph') {
224
- return;
229
+ // Check if blockNode is an empty text node
230
+ let isEmptyParagraph = true;
231
+ if (hoveredElementToUse.node.getType() !== 'paragraph' || hoveredElementToUse.node.getTextContent() !== '') {
232
+ isEmptyParagraph = false;
233
+ }
234
+ if (!isEmptyParagraph) {
235
+ const newParagraph = (0, _lexical.$createParagraphNode)();
236
+ hoveredElementToUse.node.insertAfter(newParagraph);
237
+ setTimeout(()=>{
238
+ hoveredElementToUse = {
239
+ elem: editor.getElementByKey(newParagraph.getKey()),
240
+ node: newParagraph
241
+ };
242
+ setHoveredElement(hoveredElementToUse);
243
+ }, 0);
225
244
  }
226
- editor.focus();
227
- node.select();
228
- /*const ns = $createNodeSelection();
229
- ns.add(node.getKey())
230
- $setSelection(ns)*/ });
231
- // Make sure this is called AFTER the editorfocus() event has been processed by the browser
245
+ });
246
+ // 2. Focus on the new paragraph node
247
+ setTimeout(()=>{
248
+ editor.update(()=>{
249
+ editor.focus();
250
+ if (hoveredElementToUse.node && 'select' in hoveredElementToUse.node && typeof hoveredElementToUse.node.select === 'function') {
251
+ hoveredElementToUse.node.select();
252
+ }
253
+ });
254
+ }, 1);
255
+ // Make sure this is called AFTER the focusing has been processed by the browser
232
256
  // Otherwise, this won't work
233
257
  setTimeout(()=>{
234
258
  editor.dispatchCommand(_LexicalTypeaheadMenuPlugin.ENABLE_SLASH_MENU_COMMAND, {
235
- node: node
259
+ node: hoveredElementToUse.node
236
260
  });
237
- }, 0);
261
+ }, 2);
238
262
  event.stopPropagation();
239
263
  event.preventDefault();
240
264
  }, [
241
265
  editor,
242
- emptyBlockElem
266
+ hoveredElement
243
267
  ]);
244
268
  return /*#__PURE__*/ (0, _reactdom.createPortal)(/*#__PURE__*/ _react.createElement(_react.Fragment, null, /*#__PURE__*/ _react.createElement("button", {
245
269
  className: "icon add-block-menu",
@@ -257,4 +281,4 @@ function AddBlockHandlePlugin({ anchorElem = document.body }) {
257
281
  return useAddBlockHandle(editor, anchorElem, editor._editable);
258
282
  }
259
283
 
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvaGFuZGxlcy9BZGRCbG9ja0hhbmRsZVBsdWdpbi9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFBhcmFncmFwaE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7XG4gICRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlLFxuICAkZ2V0Tm9kZUJ5S2V5LFxuICB0eXBlIExleGljYWxFZGl0b3IsXG4gIHR5cGUgTGV4aWNhbE5vZGUsXG59IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcblxuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2d1YXJkJ1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9wb2ludCdcbmltcG9ydCB7IFJlY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZWN0J1xuaW1wb3J0IHsgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCB9IGZyb20gJy4uLy4uL1NsYXNoTWVudS9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbidcbmltcG9ydCB7IGdldENvbGxhcHNlZE1hcmdpbnMgfSBmcm9tICcuLi91dGlscy9nZXRDb2xsYXBzZWRNYXJnaW5zJ1xuaW1wb3J0IHsgZ2V0VG9wTGV2ZWxOb2RlS2V5cyB9IGZyb20gJy4uL3V0aWxzL2dldFRvcExldmVsTm9kZUtleXMnXG5pbXBvcnQgeyBpc09uSGFuZGxlRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL2lzT25IYW5kbGVFbGVtZW50J1xuaW1wb3J0IHsgc2V0SGFuZGxlUG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9zZXRIYW5kbGVQb3NpdGlvbidcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBTUEFDRSA9IC0yNFxuY29uc3QgQUREX0JMT0NLX01FTlVfQ0xBU1NOQU1FID0gJ2FkZC1ibG9jay1tZW51J1xuXG5jb25zdCBEb3dud2FyZCA9IDFcbmNvbnN0IFVwd2FyZCA9IC0xXG5jb25zdCBJbmRldGVybWluYXRlID0gMFxuXG5sZXQgcHJldkluZGV4ID0gSW5maW5pdHlcblxuZnVuY3Rpb24gZ2V0Q3VycmVudEluZGV4KGtleXNMZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChrZXlzTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEluZmluaXR5XG4gIH1cbiAgaWYgKHByZXZJbmRleCA+PSAwICYmIHByZXZJbmRleCA8IGtleXNMZW5ndGgpIHtcbiAgICByZXR1cm4gcHJldkluZGV4XG4gIH1cblxuICByZXR1cm4gTWF0aC5mbG9vcihrZXlzTGVuZ3RoIC8gMilcbn1cblxuZnVuY3Rpb24gZ2V0QmxvY2tFbGVtZW50KFxuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudCxcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yLFxuICBldmVudDogTW91c2VFdmVudCxcbiAgdXNlRWRnZUFzRGVmYXVsdCA9IGZhbHNlLFxuICBob3Jpem9udGFsT2Zmc2V0ID0gMCxcbik6IHtcbiAgYmxvY2tFbGVtOiBIVE1MRWxlbWVudCB8IG51bGxcbiAgc2hvdWxkUmVtb3ZlOiBib29sZWFuXG59IHtcbiAgY29uc3QgYW5jaG9yRWxlbWVudFJlY3QgPSBhbmNob3JFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIGNvbnN0IHRvcExldmVsTm9kZUtleXMgPSBnZXRUb3BMZXZlbE5vZGVLZXlzKGVkaXRvcilcblxuICBsZXQgYmxvY2tFbGVtOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBibG9ja05vZGU6IExleGljYWxOb2RlIHwgbnVsbCA9IG51bGxcbiAgbGV0IHNob3VsZFJlbW92ZSA9IGZhbHNlXG5cbiAgLy8gUmV0dXJuIG51bGwgaWYgbWF0Y2hpbmcgYmxvY2sgZWxlbWVudCBpcyB0aGUgZmlyc3Qgb3IgbGFzdCBub2RlXG4gIGVkaXRvci5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCkgPT4ge1xuICAgIGlmICh1c2VFZGdlQXNEZWZhdWx0KSB7XG4gICAgICBjb25zdCBbZmlyc3ROb2RlLCBsYXN0Tm9kZV0gPSBbXG4gICAgICAgIGVkaXRvci5nZXRFbGVtZW50QnlLZXkodG9wTGV2ZWxOb2RlS2V5c1swXSksXG4gICAgICAgIGVkaXRvci5nZXRFbGVtZW50QnlLZXkodG9wTGV2ZWxOb2RlS2V5c1t0b3BMZXZlbE5vZGVLZXlzLmxlbmd0aCAtIDFdKSxcbiAgICAgIF1cblxuICAgICAgY29uc3QgW2ZpcnN0Tm9kZVJlY3QsIGxhc3ROb2RlUmVjdF0gPSBbXG4gICAgICAgIGZpcnN0Tm9kZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIGxhc3ROb2RlPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIF1cblxuICAgICAgaWYgKGZpcnN0Tm9kZVJlY3QgJiYgbGFzdE5vZGVSZWN0KSB7XG4gICAgICAgIGlmIChldmVudC55IDwgZmlyc3ROb2RlUmVjdC50b3ApIHtcbiAgICAgICAgICBibG9ja0VsZW0gPSBmaXJzdE5vZGVcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC55ID4gbGFzdE5vZGVSZWN0LmJvdHRvbSkge1xuICAgICAgICAgIGJsb2NrRWxlbSA9IGxhc3ROb2RlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmxvY2tFbGVtKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJsb2NrRWxlbTogbnVsbCxcbiAgICAgICAgICAgIHNob3VsZFJlbW92ZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaW5kIG1hdGNoaW5nIGJsb2NrIGVsZW1lbnRcbiAgICBsZXQgaW5kZXggPSBnZXRDdXJyZW50SW5kZXgodG9wTGV2ZWxOb2RlS2V5cy5sZW5ndGgpXG4gICAgbGV0IGRpcmVjdGlvbiA9IEluZGV0ZXJtaW5hdGVcblxuICAgIHdoaWxlIChpbmRleCA+PSAwICYmIGluZGV4IDwgdG9wTGV2ZWxOb2RlS2V5cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRvcExldmVsTm9kZUtleXNbaW5kZXhdXG4gICAgICBjb25zdCBlbGVtID0gZWRpdG9yLmdldEVsZW1lbnRCeUtleShrZXkpXG4gICAgICBpZiAoZWxlbSA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY29uc3QgcG9pbnQgPSBuZXcgUG9pbnQoZXZlbnQueCArIGhvcml6b250YWxPZmZzZXQsIGV2ZW50LnkpXG4gICAgICBjb25zdCBkb21SZWN0ID0gUmVjdC5mcm9tRE9NKGVsZW0pXG4gICAgICBjb25zdCB7IG1hcmdpbkJvdHRvbSwgbWFyZ2luVG9wIH0gPSBnZXRDb2xsYXBzZWRNYXJnaW5zKGVsZW0pXG5cbiAgICAgIGNvbnN0IHJlY3QgPSBkb21SZWN0LmdlbmVyYXRlTmV3UmVjdCh7XG4gICAgICAgIGJvdHRvbTogZG9tUmVjdC5ib3R0b20gKyBtYXJnaW5Cb3R0b20sXG4gICAgICAgIGxlZnQ6IGFuY2hvckVsZW1lbnRSZWN0LmxlZnQsXG4gICAgICAgIHJpZ2h0OiBhbmNob3JFbGVtZW50UmVjdC5yaWdodCxcbiAgICAgICAgdG9wOiBkb21SZWN0LnRvcCAtIG1hcmdpblRvcCxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcmVhc29uOiB7IGlzT25Cb3R0b21TaWRlLCBpc09uVG9wU2lkZSB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICB9ID0gcmVjdC5jb250YWlucyhwb2ludClcblxuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBibG9ja0VsZW0gPSBlbGVtXG4gICAgICAgIGJsb2NrTm9kZSA9ICRnZXROb2RlQnlLZXkoa2V5KVxuICAgICAgICBwcmV2SW5kZXggPSBpbmRleFxuXG4gICAgICAgIC8vIENoZWNrIGlmIGJsb2NrTm9kZSBpcyBhbiBlbXB0eSB0ZXh0IG5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFibG9ja05vZGUgfHxcbiAgICAgICAgICBibG9ja05vZGUuZ2V0VHlwZSgpICE9PSAncGFyYWdyYXBoJyB8fFxuICAgICAgICAgIGJsb2NrTm9kZS5nZXRUZXh0Q29udGVudCgpICE9PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICBibG9ja0VsZW0gPSBudWxsXG4gICAgICAgICAgc2hvdWxkUmVtb3ZlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09IEluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgaWYgKGlzT25Ub3BTaWRlKSB7XG4gICAgICAgICAgZGlyZWN0aW9uID0gVXB3YXJkXG4gICAgICAgIH0gZWxzZSBpZiAoaXNPbkJvdHRvbVNpZGUpIHtcbiAgICAgICAgICBkaXJlY3Rpb24gPSBEb3dud2FyZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHN0b3Agc2VhcmNoIGJsb2NrIGVsZW1lbnRcbiAgICAgICAgICBkaXJlY3Rpb24gPSBJbmZpbml0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluZGV4ICs9IGRpcmVjdGlvblxuICAgIH1cbiAgfSlcblxuICByZXR1cm4ge1xuICAgIGJsb2NrRWxlbTogYmxvY2tFbGVtLFxuICAgIHNob3VsZFJlbW92ZSxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VBZGRCbG9ja0hhbmRsZShcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yLFxuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudCxcbiAgaXNFZGl0YWJsZTogYm9vbGVhbixcbik6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qgc2Nyb2xsZXJFbGVtID0gYW5jaG9yRWxlbS5wYXJlbnRFbGVtZW50XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgY29uc3QgW2VtcHR5QmxvY2tFbGVtLCBzZXRFbXB0eUJsb2NrRWxlbV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBvbkRvY3VtZW50TW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXRcbiAgICAgIGlmICghaXNIVE1MRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgZGlzdGFuY2VGcm9tU2Nyb2xsZXJFbGVtID0gMFxuICAgICAgLy8gQ2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4gc2Nyb2xsZXJFbGVtIGFuZCB0YXJnZXQgaWYgdGFyZ2V0IGlzIG5vdCBpbiBzY3JvbGxlckVsZW1cbiAgICAgIGlmIChzY3JvbGxlckVsZW0gJiYgIXNjcm9sbGVyRWxlbS5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IHsgYm90dG9tLCBsZWZ0LCByaWdodCwgdG9wIH0gPSBzY3JvbGxlckVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgY29uc3QgeyBwYWdlWCwgcGFnZVkgfSA9IGV2ZW50XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxCdWZmZXIgPSA1MFxuICAgICAgICBjb25zdCB2ZXJ0aWNhbEJ1ZmZlciA9IDI1XG4gICAgICAgIGNvbnN0IGFkanVzdGVkVG9wID0gdG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRCb3R0b20gPSBib3R0b20gKyB3aW5kb3cuc2Nyb2xsWVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYWdlWSA8IGFkanVzdGVkVG9wIC0gdmVydGljYWxCdWZmZXIgfHxcbiAgICAgICAgICBwYWdlWSA+IGFkanVzdGVkQm90dG9tICsgdmVydGljYWxCdWZmZXIgfHxcbiAgICAgICAgICBwYWdlWCA8IGxlZnQgLSBob3Jpem9udGFsQnVmZmVyIHx8XG4gICAgICAgICAgcGFnZVggPiByaWdodCArIGhvcml6b250YWxCdWZmZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2V0RW1wdHlCbG9ja0VsZW0obnVsbClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBhbGxvdyB0aGUgX2VtcHR5QmxvY2tFbGVtIHRvIGJlIGZvdW5kIHdoZW4gdGhlIG1vdXNlIGlzIGluIHRoZVxuICAgICAgICAvLyBidWZmZXIgem9uZSBhcm91bmQgdGhlIHNjcm9sbGVyRWxlbS5cbiAgICAgICAgaWYgKHBhZ2VYIDwgbGVmdCB8fCBwYWdlWCA+IHJpZ2h0KSB7XG4gICAgICAgICAgZGlzdGFuY2VGcm9tU2Nyb2xsZXJFbGVtID0gcGFnZVggPCBsZWZ0ID8gcGFnZVggLSBsZWZ0IDogcGFnZVggLSByaWdodFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09uSGFuZGxlRWxlbWVudCh0YXJnZXQsIEFERF9CTE9DS19NRU5VX0NMQVNTTkFNRSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCB7IGJsb2NrRWxlbTogX2VtcHR5QmxvY2tFbGVtLCBzaG91bGRSZW1vdmUgfSA9IGdldEJsb2NrRWxlbWVudChcbiAgICAgICAgYW5jaG9yRWxlbSxcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBldmVudCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIC1kaXN0YW5jZUZyb21TY3JvbGxlckVsZW0sXG4gICAgICApXG4gICAgICBpZiAoIV9lbXB0eUJsb2NrRWxlbSAmJiAhc2hvdWxkUmVtb3ZlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0RW1wdHlCbG9ja0VsZW0oX2VtcHR5QmxvY2tFbGVtKVxuICAgIH1cblxuICAgIC8vIFNpbmNlIHRoZSBkcmFnZ2FibGVCbG9ja0VsZW0gaXMgb3V0c2lkZSB0aGUgYWN0dWFsIGVkaXRvciwgd2UgbmVlZCB0byBsaXN0ZW4gdG8gdGhlIGRvY3VtZW50XG4gICAgLy8gdG8gYmUgYWJsZSB0byBkZXRlY3Qgd2hlbiB0aGUgbW91c2UgaXMgb3V0c2lkZSB0aGUgZWRpdG9yIGFuZCByZXNwZWN0IGEgYnVmZmVyIGFyb3VuZCB0aGVcbiAgICAvLyB0aGUgc2Nyb2xsZXJFbGVtIHRvIGF2b2lkIHRoZSBkcmFnZ2FibGVCbG9ja0VsZW0gZGlzYXBwZWFyaW5nIHRvbyBlYXJseS5cbiAgICBkb2N1bWVudD8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Eb2N1bWVudE1vdXNlTW92ZSlcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Eb2N1bWVudE1vdXNlTW92ZSlcbiAgICB9XG4gIH0sIFtzY3JvbGxlckVsZW0sIGFuY2hvckVsZW0sIGVkaXRvcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVudVJlZi5jdXJyZW50KSB7XG4gICAgICBzZXRIYW5kbGVQb3NpdGlvbihlbXB0eUJsb2NrRWxlbSwgbWVudVJlZi5jdXJyZW50LCBhbmNob3JFbGVtLCBTUEFDRSlcbiAgICB9XG4gIH0sIFthbmNob3JFbGVtLCBlbXB0eUJsb2NrRWxlbV0pXG5cbiAgY29uc3QgaGFuZGxlQWRkQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZW1wdHlCbG9ja0VsZW0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBsZXQgbm9kZTogUGFyYWdyYXBoTm9kZVxuICAgICAgZWRpdG9yLnVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIG5vZGUgPSAkZ2V0TmVhcmVzdE5vZGVGcm9tRE9NTm9kZShlbXB0eUJsb2NrRWxlbSkgYXMgUGFyYWdyYXBoTm9kZVxuICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS5nZXRUeXBlKCkgIT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmZvY3VzKClcblxuICAgICAgICBub2RlLnNlbGVjdCgpXG4gICAgICAgIC8qY29uc3QgbnMgPSAkY3JlYXRlTm9kZVNlbGVjdGlvbigpO1xuICAgICAgICBucy5hZGQobm9kZS5nZXRLZXkoKSlcbiAgICAgICAgJHNldFNlbGVjdGlvbihucykqL1xuICAgICAgfSlcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoaXMgaXMgY2FsbGVkIEFGVEVSIHRoZSBlZGl0b3Jmb2N1cygpIGV2ZW50IGhhcyBiZWVuIHByb2Nlc3NlZCBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIHdvbid0IHdvcmtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3IuZGlzcGF0Y2hDb21tYW5kKEVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQsIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB9KVxuICAgICAgfSwgMClcblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9LFxuICAgIFtlZGl0b3IsIGVtcHR5QmxvY2tFbGVtXSxcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9XCJpY29uIGFkZC1ibG9jay1tZW51XCJcbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgaGFuZGxlQWRkQ2xpY2soZXZlbnQpXG4gICAgICAgIH19XG4gICAgICAgIHJlZj17bWVudVJlZn1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtpc0VkaXRhYmxlID8gJ2ljb24nIDogJyd9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L1JlYWN0LkZyYWdtZW50PixcbiAgICBhbmNob3JFbGVtLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZGRCbG9ja0hhbmRsZVBsdWdpbih7XG4gIGFuY2hvckVsZW0gPSBkb2N1bWVudC5ib2R5LFxufToge1xuICBhbmNob3JFbGVtPzogSFRNTEVsZW1lbnRcbn0pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIHJldHVybiB1c2VBZGRCbG9ja0hhbmRsZShlZGl0b3IsIGFuY2hvckVsZW0sIGVkaXRvci5fZWRpdGFibGUpXG59XG4iXSwibmFtZXMiOlsiQWRkQmxvY2tIYW5kbGVQbHVnaW4iLCJTUEFDRSIsIkFERF9CTE9DS19NRU5VX0NMQVNTTkFNRSIsIkRvd253YXJkIiwiVXB3YXJkIiwiSW5kZXRlcm1pbmF0ZSIsInByZXZJbmRleCIsIkluZmluaXR5IiwiZ2V0Q3VycmVudEluZGV4Iiwia2V5c0xlbmd0aCIsIk1hdGgiLCJmbG9vciIsImdldEJsb2NrRWxlbWVudCIsImFuY2hvckVsZW0iLCJlZGl0b3IiLCJldmVudCIsInVzZUVkZ2VBc0RlZmF1bHQiLCJob3Jpem9udGFsT2Zmc2V0IiwiYW5jaG9yRWxlbWVudFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3BMZXZlbE5vZGVLZXlzIiwiZ2V0VG9wTGV2ZWxOb2RlS2V5cyIsImJsb2NrRWxlbSIsImJsb2NrTm9kZSIsInNob3VsZFJlbW92ZSIsImdldEVkaXRvclN0YXRlIiwicmVhZCIsImZpcnN0Tm9kZSIsImxhc3ROb2RlIiwiZ2V0RWxlbWVudEJ5S2V5IiwibGVuZ3RoIiwiZmlyc3ROb2RlUmVjdCIsImxhc3ROb2RlUmVjdCIsInkiLCJ0b3AiLCJib3R0b20iLCJpbmRleCIsImRpcmVjdGlvbiIsImtleSIsImVsZW0iLCJwb2ludCIsIlBvaW50IiwieCIsImRvbVJlY3QiLCJSZWN0IiwiZnJvbURPTSIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblRvcCIsImdldENvbGxhcHNlZE1hcmdpbnMiLCJyZWN0IiwiZ2VuZXJhdGVOZXdSZWN0IiwibGVmdCIsInJpZ2h0IiwicmVhc29uIiwiaXNPbkJvdHRvbVNpZGUiLCJpc09uVG9wU2lkZSIsInJlc3VsdCIsImNvbnRhaW5zIiwiJGdldE5vZGVCeUtleSIsImdldFR5cGUiLCJnZXRUZXh0Q29udGVudCIsInVzZUFkZEJsb2NrSGFuZGxlIiwiaXNFZGl0YWJsZSIsInNjcm9sbGVyRWxlbSIsInBhcmVudEVsZW1lbnQiLCJtZW51UmVmIiwidXNlUmVmIiwiZW1wdHlCbG9ja0VsZW0iLCJzZXRFbXB0eUJsb2NrRWxlbSIsInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwib25Eb2N1bWVudE1vdXNlTW92ZSIsInRhcmdldCIsImlzSFRNTEVsZW1lbnQiLCJkaXN0YW5jZUZyb21TY3JvbGxlckVsZW0iLCJwYWdlWCIsInBhZ2VZIiwiaG9yaXpvbnRhbEJ1ZmZlciIsInZlcnRpY2FsQnVmZmVyIiwiYWRqdXN0ZWRUb3AiLCJ3aW5kb3ciLCJzY3JvbGxZIiwiYWRqdXN0ZWRCb3R0b20iLCJpc09uSGFuZGxlRWxlbWVudCIsIl9lbXB0eUJsb2NrRWxlbSIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjdXJyZW50Iiwic2V0SGFuZGxlUG9zaXRpb24iLCJoYW5kbGVBZGRDbGljayIsInVzZUNhbGxiYWNrIiwibm9kZSIsInVwZGF0ZSIsIiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlIiwiZm9jdXMiLCJzZWxlY3QiLCJzZXRUaW1lb3V0IiwiZGlzcGF0Y2hDb21tYW5kIiwiRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiY3JlYXRlUG9ydGFsIiwiUmVhY3QiLCJGcmFnbWVudCIsImJ1dHRvbiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJyZWYiLCJ0eXBlIiwiZGl2IiwiYm9keSIsInVzZUxleGljYWxDb21wb3NlckNvbnRleHQiLCJfZWRpdGFibGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OzsrQkF3UmdCQTs7O2VBQUFBOzs7d0NBclIwQjt5QkFNbkM7K0RBQ2dCOzBCQUVNO3VCQUVDO3VCQUNSO3NCQUNEOzRDQUNxQjtxQ0FDTjtxQ0FDQTttQ0FDRjttQ0FDQTtRQUMzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVQLE1BQU1DLFFBQVEsQ0FBQztBQUNmLE1BQU1DLDJCQUEyQjtBQUVqQyxNQUFNQyxXQUFXO0FBQ2pCLE1BQU1DLFNBQVMsQ0FBQztBQUNoQixNQUFNQyxnQkFBZ0I7QUFFdEIsSUFBSUMsWUFBWUM7QUFFaEIsU0FBU0MsZ0JBQWdCQyxVQUFrQjtJQUN6QyxJQUFJQSxlQUFlLEdBQUc7UUFDcEIsT0FBT0Y7SUFDVDtJQUNBLElBQUlELGFBQWEsS0FBS0EsWUFBWUcsWUFBWTtRQUM1QyxPQUFPSDtJQUNUO0lBRUEsT0FBT0ksS0FBS0MsS0FBSyxDQUFDRixhQUFhO0FBQ2pDO0FBRUEsU0FBU0csZ0JBQ1BDLFVBQXVCLEVBQ3ZCQyxNQUFxQixFQUNyQkMsS0FBaUIsRUFDakJDLG1CQUFtQixLQUFLLEVBQ3hCQyxtQkFBbUIsQ0FBQztJQUtwQixNQUFNQyxvQkFBb0JMLFdBQVdNLHFCQUFxQjtJQUMxRCxNQUFNQyxtQkFBbUJDLElBQUFBLHdDQUFtQixFQUFDUDtJQUU3QyxJQUFJUSxZQUFnQztJQUNwQyxJQUFJQyxZQUFnQztJQUNwQyxJQUFJQyxlQUFlO0lBRW5CLGtFQUFrRTtJQUNsRVYsT0FBT1csY0FBYyxHQUFHQyxJQUFJLENBQUM7UUFDM0IsSUFBSVYsa0JBQWtCO1lBQ3BCLE1BQU0sQ0FBQ1csV0FBV0MsU0FB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
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9maWVsZC9sZXhpY2FsL3BsdWdpbnMvaGFuZGxlcy9BZGRCbG9ja0hhbmRsZVBsdWdpbi9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5pbXBvcnQgdHlwZSB7IFBhcmFncmFwaE5vZGUgfSBmcm9tICdsZXhpY2FsJ1xuXG5pbXBvcnQgeyB1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IH0gZnJvbSAnQGxleGljYWwvcmVhY3QvTGV4aWNhbENvbXBvc2VyQ29udGV4dCdcbmltcG9ydCB7ICRjcmVhdGVQYXJhZ3JhcGhOb2RlIH0gZnJvbSAnbGV4aWNhbCdcbmltcG9ydCB7ICRnZXROb2RlQnlLZXksIHR5cGUgTGV4aWNhbEVkaXRvciwgdHlwZSBMZXhpY2FsTm9kZSB9IGZyb20gJ2xleGljYWwnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcblxuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2d1YXJkJ1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9wb2ludCdcbmltcG9ydCB7IFJlY3QgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZWN0J1xuaW1wb3J0IHsgRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCB9IGZyb20gJy4uLy4uL1NsYXNoTWVudS9MZXhpY2FsVHlwZWFoZWFkTWVudVBsdWdpbidcbmltcG9ydCB7IGdldENvbGxhcHNlZE1hcmdpbnMgfSBmcm9tICcuLi91dGlscy9nZXRDb2xsYXBzZWRNYXJnaW5zJ1xuaW1wb3J0IHsgZ2V0VG9wTGV2ZWxOb2RlS2V5cyB9IGZyb20gJy4uL3V0aWxzL2dldFRvcExldmVsTm9kZUtleXMnXG5pbXBvcnQgeyBpc09uSGFuZGxlRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL2lzT25IYW5kbGVFbGVtZW50J1xuaW1wb3J0IHsgc2V0SGFuZGxlUG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9zZXRIYW5kbGVQb3NpdGlvbidcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBTUEFDRSA9IC0yNFxuY29uc3QgQUREX0JMT0NLX01FTlVfQ0xBU1NOQU1FID0gJ2FkZC1ibG9jay1tZW51J1xuXG5jb25zdCBEb3dud2FyZCA9IDFcbmNvbnN0IFVwd2FyZCA9IC0xXG5jb25zdCBJbmRldGVybWluYXRlID0gMFxuXG5sZXQgcHJldkluZGV4ID0gSW5maW5pdHlcblxuZnVuY3Rpb24gZ2V0Q3VycmVudEluZGV4KGtleXNMZW5ndGg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChrZXlzTGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEluZmluaXR5XG4gIH1cbiAgaWYgKHByZXZJbmRleCA+PSAwICYmIHByZXZJbmRleCA8IGtleXNMZW5ndGgpIHtcbiAgICByZXR1cm4gcHJldkluZGV4XG4gIH1cblxuICByZXR1cm4gTWF0aC5mbG9vcihrZXlzTGVuZ3RoIC8gMilcbn1cblxuZnVuY3Rpb24gZ2V0QmxvY2tFbGVtZW50KFxuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudCxcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yLFxuICBldmVudDogTW91c2VFdmVudCxcbiAgdXNlRWRnZUFzRGVmYXVsdCA9IGZhbHNlLFxuICBob3Jpem9udGFsT2Zmc2V0ID0gMCxcbik6IHtcbiAgYmxvY2tFbGVtOiBIVE1MRWxlbWVudCB8IG51bGxcbiAgYmxvY2tOb2RlOiBMZXhpY2FsTm9kZSB8IG51bGxcbn0ge1xuICBjb25zdCBhbmNob3JFbGVtZW50UmVjdCA9IGFuY2hvckVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgY29uc3QgdG9wTGV2ZWxOb2RlS2V5cyA9IGdldFRvcExldmVsTm9kZUtleXMoZWRpdG9yKVxuXG4gIGxldCBibG9ja0VsZW06IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IGJsb2NrTm9kZTogTGV4aWNhbE5vZGUgfCBudWxsID0gbnVsbFxuXG4gIC8vIFJldHVybiBudWxsIGlmIG1hdGNoaW5nIGJsb2NrIGVsZW1lbnQgaXMgdGhlIGZpcnN0IG9yIGxhc3Qgbm9kZVxuICBlZGl0b3IuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpID0+IHtcbiAgICBpZiAodXNlRWRnZUFzRGVmYXVsdCkge1xuICAgICAgY29uc3QgW2ZpcnN0Tm9kZSwgbGFzdE5vZGVdID0gW1xuICAgICAgICBlZGl0b3IuZ2V0RWxlbWVudEJ5S2V5KHRvcExldmVsTm9kZUtleXNbMF0pLFxuICAgICAgICBlZGl0b3IuZ2V0RWxlbWVudEJ5S2V5KHRvcExldmVsTm9kZUtleXNbdG9wTGV2ZWxOb2RlS2V5cy5sZW5ndGggLSAxXSksXG4gICAgICBdXG5cbiAgICAgIGNvbnN0IFtmaXJzdE5vZGVSZWN0LCBsYXN0Tm9kZVJlY3RdID0gW1xuICAgICAgICBmaXJzdE5vZGU/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICBsYXN0Tm9kZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICBdXG5cbiAgICAgIGlmIChmaXJzdE5vZGVSZWN0ICYmIGxhc3ROb2RlUmVjdCkge1xuICAgICAgICBpZiAoZXZlbnQueSA8IGZpcnN0Tm9kZVJlY3QudG9wKSB7XG4gICAgICAgICAgYmxvY2tFbGVtID0gZmlyc3ROb2RlXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQueSA+IGxhc3ROb2RlUmVjdC5ib3R0b20pIHtcbiAgICAgICAgICBibG9ja0VsZW0gPSBsYXN0Tm9kZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJsb2NrRWxlbSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBibG9ja0VsZW06IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmluZCBtYXRjaGluZyBibG9jayBlbGVtZW50XG4gICAgbGV0IGluZGV4ID0gZ2V0Q3VycmVudEluZGV4KHRvcExldmVsTm9kZUtleXMubGVuZ3RoKVxuICAgIGxldCBkaXJlY3Rpb24gPSBJbmRldGVybWluYXRlXG5cbiAgICB3aGlsZSAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRvcExldmVsTm9kZUtleXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBrZXkgPSB0b3BMZXZlbE5vZGVLZXlzW2luZGV4XVxuICAgICAgY29uc3QgZWxlbSA9IGVkaXRvci5nZXRFbGVtZW50QnlLZXkoa2V5KVxuICAgICAgaWYgKGVsZW0gPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IFBvaW50KGV2ZW50LnggKyBob3Jpem9udGFsT2Zmc2V0LCBldmVudC55KVxuICAgICAgY29uc3QgZG9tUmVjdCA9IFJlY3QuZnJvbURPTShlbGVtKVxuICAgICAgY29uc3QgeyBtYXJnaW5Cb3R0b20sIG1hcmdpblRvcCB9ID0gZ2V0Q29sbGFwc2VkTWFyZ2lucyhlbGVtKVxuXG4gICAgICBjb25zdCByZWN0ID0gZG9tUmVjdC5nZW5lcmF0ZU5ld1JlY3Qoe1xuICAgICAgICBib3R0b206IGRvbVJlY3QuYm90dG9tICsgbWFyZ2luQm90dG9tLFxuICAgICAgICBsZWZ0OiBhbmNob3JFbGVtZW50UmVjdC5sZWZ0LFxuICAgICAgICByaWdodDogYW5jaG9yRWxlbWVudFJlY3QucmlnaHQsXG4gICAgICAgIHRvcDogZG9tUmVjdC50b3AgLSBtYXJnaW5Ub3AsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlYXNvbjogeyBpc09uQm90dG9tU2lkZSwgaXNPblRvcFNpZGUgfSxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgfSA9IHJlY3QuY29udGFpbnMocG9pbnQpXG5cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgYmxvY2tFbGVtID0gZWxlbVxuICAgICAgICBibG9ja05vZGUgPSAkZ2V0Tm9kZUJ5S2V5KGtleSlcbiAgICAgICAgcHJldkluZGV4ID0gaW5kZXhcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gSW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBpZiAoaXNPblRvcFNpZGUpIHtcbiAgICAgICAgICBkaXJlY3Rpb24gPSBVcHdhcmRcbiAgICAgICAgfSBlbHNlIGlmIChpc09uQm90dG9tU2lkZSkge1xuICAgICAgICAgIGRpcmVjdGlvbiA9IERvd253YXJkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc3RvcCBzZWFyY2ggYmxvY2sgZWxlbWVudFxuICAgICAgICAgIGRpcmVjdGlvbiA9IEluZmluaXR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5kZXggKz0gZGlyZWN0aW9uXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYmxvY2tFbGVtLFxuICAgIGJsb2NrTm9kZSxcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VBZGRCbG9ja0hhbmRsZShcbiAgZWRpdG9yOiBMZXhpY2FsRWRpdG9yLFxuICBhbmNob3JFbGVtOiBIVE1MRWxlbWVudCxcbiAgaXNFZGl0YWJsZTogYm9vbGVhbixcbik6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qgc2Nyb2xsZXJFbGVtID0gYW5jaG9yRWxlbS5wYXJlbnRFbGVtZW50XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgY29uc3QgW2hvdmVyZWRFbGVtZW50LCBzZXRIb3ZlcmVkRWxlbWVudF0gPSB1c2VTdGF0ZTx7XG4gICAgZWxlbTogSFRNTEVsZW1lbnRcbiAgICBub2RlOiBMZXhpY2FsTm9kZVxuICB9IHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIG9uRG9jdW1lbnRNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldFxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBkaXN0YW5jZUZyb21TY3JvbGxlckVsZW0gPSAwXG4gICAgICAvLyBDYWxjdWxhdGUgZGlzdGFuY2UgYmV0d2VlbiBzY3JvbGxlckVsZW0gYW5kIHRhcmdldCBpZiB0YXJnZXQgaXMgbm90IGluIHNjcm9sbGVyRWxlbVxuICAgICAgaWYgKHNjcm9sbGVyRWxlbSAmJiAhc2Nyb2xsZXJFbGVtLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgY29uc3QgeyBib3R0b20sIGxlZnQsIHJpZ2h0LCB0b3AgfSA9IHNjcm9sbGVyRWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBjb25zdCB7IHBhZ2VYLCBwYWdlWSB9ID0gZXZlbnRcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEJ1ZmZlciA9IDUwXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsQnVmZmVyID0gMjVcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRUb3AgPSB0b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgICBjb25zdCBhZGp1c3RlZEJvdHRvbSA9IGJvdHRvbSArIHdpbmRvdy5zY3JvbGxZXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhZ2VZIDwgYWRqdXN0ZWRUb3AgLSB2ZXJ0aWNhbEJ1ZmZlciB8fFxuICAgICAgICAgIHBhZ2VZID4gYWRqdXN0ZWRCb3R0b20gKyB2ZXJ0aWNhbEJ1ZmZlciB8fFxuICAgICAgICAgIHBhZ2VYIDwgbGVmdCAtIGhvcml6b250YWxCdWZmZXIgfHxcbiAgICAgICAgICBwYWdlWCA+IHJpZ2h0ICsgaG9yaXpvbnRhbEJ1ZmZlclxuICAgICAgICApIHtcbiAgICAgICAgICBzZXRIb3ZlcmVkRWxlbWVudChudWxsKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGFsbG93IHRoZSBfZW1wdHlCbG9ja0VsZW0gdG8gYmUgZm91bmQgd2hlbiB0aGUgbW91c2UgaXMgaW4gdGhlXG4gICAgICAgIC8vIGJ1ZmZlciB6b25lIGFyb3VuZCB0aGUgc2Nyb2xsZXJFbGVtLlxuICAgICAgICBpZiAocGFnZVggPCBsZWZ0IHx8IHBhZ2VYID4gcmlnaHQpIHtcbiAgICAgICAgICBkaXN0YW5jZUZyb21TY3JvbGxlckVsZW0gPSBwYWdlWCA8IGxlZnQgPyBwYWdlWCAtIGxlZnQgOiBwYWdlWCAtIHJpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzT25IYW5kbGVFbGVtZW50KHRhcmdldCwgQUREX0JMT0NLX01FTlVfQ0xBU1NOQU1FKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYmxvY2tFbGVtOiBfZW1wdHlCbG9ja0VsZW0sIGJsb2NrTm9kZSB9ID0gZ2V0QmxvY2tFbGVtZW50KFxuICAgICAgICBhbmNob3JFbGVtLFxuICAgICAgICBlZGl0b3IsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgLWRpc3RhbmNlRnJvbVNjcm9sbGVyRWxlbSxcbiAgICAgIClcbiAgICAgIGlmICghX2VtcHR5QmxvY2tFbGVtKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0SG92ZXJlZEVsZW1lbnQoe1xuICAgICAgICBlbGVtOiBfZW1wdHlCbG9ja0VsZW0sXG4gICAgICAgIG5vZGU6IGJsb2NrTm9kZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gU2luY2UgdGhlIGRyYWdnYWJsZUJsb2NrRWxlbSBpcyBvdXRzaWRlIHRoZSBhY3R1YWwgZWRpdG9yLCB3ZSBuZWVkIHRvIGxpc3RlbiB0byB0aGUgZG9jdW1lbnRcbiAgICAvLyB0byBiZSBhYmxlIHRvIGRldGVjdCB3aGVuIHRoZSBtb3VzZSBpcyBvdXRzaWRlIHRoZSBlZGl0b3IgYW5kIHJlc3BlY3QgYSBidWZmZXIgYXJvdW5kXG4gICAgLy8gdGhlIHNjcm9sbGVyRWxlbSB0byBhdm9pZCB0aGUgZHJhZ2dhYmxlQmxvY2tFbGVtIGRpc2FwcGVhcmluZyB0b28gZWFybHkuXG4gICAgZG9jdW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uRG9jdW1lbnRNb3VzZU1vdmUpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uRG9jdW1lbnRNb3VzZU1vdmUpXG4gICAgfVxuICB9LCBbc2Nyb2xsZXJFbGVtLCBhbmNob3JFbGVtLCBlZGl0b3JdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lbnVSZWYuY3VycmVudCAmJiBob3ZlcmVkRWxlbWVudD8ubm9kZSkge1xuICAgICAgZWRpdG9yLmdldEVkaXRvclN0YXRlKCkucmVhZCgoKSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGlmIGJsb2NrTm9kZSBpcyBhbiBlbXB0eSB0ZXh0IG5vZGVcbiAgICAgICAgbGV0IGlzRW1wdHlQYXJhZ3JhcGggPSB0cnVlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBob3ZlcmVkRWxlbWVudC5ub2RlLmdldFR5cGUoKSAhPT0gJ3BhcmFncmFwaCcgfHxcbiAgICAgICAgICBob3ZlcmVkRWxlbWVudC5ub2RlLmdldFRleHRDb250ZW50KCkgIT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgIGlzRW1wdHlQYXJhZ3JhcGggPSBmYWxzZVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0SGFuZGxlUG9zaXRpb24oXG4gICAgICAgICAgaG92ZXJlZEVsZW1lbnQ/LmVsZW0sXG4gICAgICAgICAgbWVudVJlZi5jdXJyZW50LFxuICAgICAgICAgIGFuY2hvckVsZW0sXG4gICAgICAgICAgaXNFbXB0eVBhcmFncmFwaCA/IFNQQUNFIDogU1BBQ0UgLSAyMCxcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFthbmNob3JFbGVtLCBob3ZlcmVkRWxlbWVudCwgZWRpdG9yXSlcblxuICBjb25zdCBoYW5kbGVBZGRDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudCkgPT4ge1xuICAgICAgbGV0IGhvdmVyZWRFbGVtZW50VG9Vc2UgPSBob3ZlcmVkRWxlbWVudFxuICAgICAgaWYgKCFob3ZlcmVkRWxlbWVudFRvVXNlPy5ub2RlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAxLiBVcGRhdGUgaG92ZXJlZEVsZW1lbnQubm9kZSB0byBhIG5ldyBwYXJhZ3JhcGggbm9kZSBpZiB0aGUgaG92ZXJlZEVsZW1lbnQubm9kZSBpcyBub3QgYSBwYXJhZ3JhcGggbm9kZVxuICAgICAgZWRpdG9yLnVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIC8vIENoZWNrIGlmIGJsb2NrTm9kZSBpcyBhbiBlbXB0eSB0ZXh0IG5vZGVcbiAgICAgICAgbGV0IGlzRW1wdHlQYXJhZ3JhcGggPSB0cnVlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBob3ZlcmVkRWxlbWVudFRvVXNlLm5vZGUuZ2V0VHlwZSgpICE9PSAncGFyYWdyYXBoJyB8fFxuICAgICAgICAgIGhvdmVyZWRFbGVtZW50VG9Vc2Uubm9kZS5nZXRUZXh0Q29udGVudCgpICE9PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICBpc0VtcHR5UGFyYWdyYXBoID0gZmFsc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNFbXB0eVBhcmFncmFwaCkge1xuICAgICAgICAgIGNvbnN0IG5ld1BhcmFncmFwaCA9ICRjcmVhdGVQYXJhZ3JhcGhOb2RlKClcbiAgICAgICAgICBob3ZlcmVkRWxlbWVudFRvVXNlLm5vZGUuaW5zZXJ0QWZ0ZXIobmV3UGFyYWdyYXBoKVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBob3ZlcmVkRWxlbWVudFRvVXNlID0ge1xuICAgICAgICAgICAgICBlbGVtOiBlZGl0b3IuZ2V0RWxlbWVudEJ5S2V5KG5ld1BhcmFncmFwaC5nZXRLZXkoKSksXG4gICAgICAgICAgICAgIG5vZGU6IG5ld1BhcmFncmFwaCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdmVyZWRFbGVtZW50KGhvdmVyZWRFbGVtZW50VG9Vc2UpXG4gICAgICAgICAgfSwgMClcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gMi4gRm9jdXMgb24gdGhlIG5ldyBwYXJhZ3JhcGggbm9kZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVkaXRvci51cGRhdGUoKCkgPT4ge1xuICAgICAgICAgIGVkaXRvci5mb2N1cygpXG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBob3ZlcmVkRWxlbWVudFRvVXNlLm5vZGUgJiZcbiAgICAgICAgICAgICdzZWxlY3QnIGluIGhvdmVyZWRFbGVtZW50VG9Vc2Uubm9kZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGhvdmVyZWRFbGVtZW50VG9Vc2Uubm9kZS5zZWxlY3QgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGhvdmVyZWRFbGVtZW50VG9Vc2Uubm9kZS5zZWxlY3QoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0sIDEpXG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGlzIGlzIGNhbGxlZCBBRlRFUiB0aGUgZm9jdXNpbmcgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBPdGhlcndpc2UsIHRoaXMgd29uJ3Qgd29ya1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVkaXRvci5kaXNwYXRjaENvbW1hbmQoRU5BQkxFX1NMQVNIX01FTlVfQ09NTUFORCwge1xuICAgICAgICAgIG5vZGU6IGhvdmVyZWRFbGVtZW50VG9Vc2Uubm9kZSBhcyBQYXJhZ3JhcGhOb2RlLFxuICAgICAgICB9KVxuICAgICAgfSwgMilcblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9LFxuICAgIFtlZGl0b3IsIGhvdmVyZWRFbGVtZW50XSxcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9XCJpY29uIGFkZC1ibG9jay1tZW51XCJcbiAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgaGFuZGxlQWRkQ2xpY2soZXZlbnQpXG4gICAgICAgIH19XG4gICAgICAgIHJlZj17bWVudVJlZn1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtpc0VkaXRhYmxlID8gJ2ljb24nIDogJyd9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L1JlYWN0LkZyYWdtZW50PixcbiAgICBhbmNob3JFbGVtLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZGRCbG9ja0hhbmRsZVBsdWdpbih7XG4gIGFuY2hvckVsZW0gPSBkb2N1bWVudC5ib2R5LFxufToge1xuICBhbmNob3JFbGVtPzogSFRNTEVsZW1lbnRcbn0pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IFtlZGl0b3JdID0gdXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpXG4gIHJldHVybiB1c2VBZGRCbG9ja0hhbmRsZShlZGl0b3IsIGFuY2hvckVsZW0sIGVkaXRvci5fZWRpdGFibGUpXG59XG4iXSwibmFtZXMiOlsiQWRkQmxvY2tIYW5kbGVQbHVnaW4iLCJTUEFDRSIsIkFERF9CTE9DS19NRU5VX0NMQVNTTkFNRSIsIkRvd253YXJkIiwiVXB3YXJkIiwiSW5kZXRlcm1pbmF0ZSIsInByZXZJbmRleCIsIkluZmluaXR5IiwiZ2V0Q3VycmVudEluZGV4Iiwia2V5c0xlbmd0aCIsIk1hdGgiLCJmbG9vciIsImdldEJsb2NrRWxlbWVudCIsImFuY2hvckVsZW0iLCJlZGl0b3IiLCJldmVudCIsInVzZUVkZ2VBc0RlZmF1bHQiLCJob3Jpem9udGFsT2Zmc2V0IiwiYW5jaG9yRWxlbWVudFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3BMZXZlbE5vZGVLZXlzIiwiZ2V0VG9wTGV2ZWxOb2RlS2V5cyIsImJsb2NrRWxlbSIsImJsb2NrTm9kZSIsImdldEVkaXRvclN0YXRlIiwicmVhZCIsImZpcnN0Tm9kZSIsImxhc3ROb2RlIiwiZ2V0RWxlbWVudEJ5S2V5IiwibGVuZ3RoIiwiZmlyc3ROb2RlUmVjdCIsImxhc3ROb2RlUmVjdCIsInkiLCJ0b3AiLCJib3R0b20iLCJpbmRleCIsImRpcmVjdGlvbiIsImtleSIsImVsZW0iLCJwb2ludCIsIlBvaW50IiwieCIsImRvbVJlY3QiLCJSZWN0IiwiZnJvbURPTSIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblRvcCIsImdldENvbGxhcHNlZE1hcmdpbnMiLCJyZWN0IiwiZ2VuZXJhdGVOZXdSZWN0IiwibGVmdCIsInJpZ2h0IiwicmVhc29uIiwiaXNPbkJvdHRvbVNpZGUiLCJpc09uVG9wU2lkZSIsInJlc3VsdCIsImNvbnRhaW5zIiwiJGdldE5vZGVCeUtleSIsInVzZUFkZEJsb2NrSGFuZGxlIiwiaXNFZGl0YWJsZSIsInNjcm9sbGVyRWxlbSIsInBhcmVudEVsZW1lbnQiLCJtZW51UmVmIiwidXNlUmVmIiwiaG92ZXJlZEVsZW1lbnQiLCJzZXRIb3ZlcmVkRWxlbWVudCIsInVzZVN0YXRlIiwidXNlRWZmZWN0Iiwib25Eb2N1bWVudE1vdXNlTW92ZSIsInRhcmdldCIsImlzSFRNTEVsZW1lbnQiLCJkaXN0YW5jZUZyb21TY3JvbGxlckVsZW0iLCJwYWdlWCIsInBhZ2VZIiwiaG9yaXpvbnRhbEJ1ZmZlciIsInZlcnRpY2FsQnVmZmVyIiwiYWRqdXN0ZWRUb3AiLCJ3aW5kb3ciLCJzY3JvbGxZIiwiYWRqdXN0ZWRCb3R0b20iLCJpc09uSGFuZGxlRWxlbWVudCIsIl9lbXB0eUJsb2NrRWxlbSIsIm5vZGUiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY3VycmVudCIsImlzRW1wdHlQYXJhZ3JhcGgiLCJnZXRUeXBlIiwiZ2V0VGV4dENvbnRlbnQiLCJzZXRIYW5kbGVQb3NpdGlvbiIsImhhbmRsZUFkZENsaWNrIiwidXNlQ2FsbGJhY2siLCJob3ZlcmVkRWxlbWVudFRvVXNlIiwidXBkYXRlIiwibmV3UGFyYWdyYXBoIiwiJGNyZWF0ZVBhcmFncmFwaE5vZGUiLCJpbnNlcnRBZnRlciIsInNldFRpbWVvdXQiLCJnZXRLZXkiLCJmb2N1cyIsInNlbGVjdCIsImRpc3BhdGNoQ29tbWFuZCIsIkVOQUJMRV9TTEFTSF9NRU5VX0NPTU1BTkQiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImNyZWF0ZVBvcnRhbCIsIlJlYWN0IiwiRnJhZ21lbnQiLCJidXR0b24iLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwicmVmIiwidHlwZSIsImRpdiIsImJvZHkiLCJ1c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0IiwiX2VkaXRhYmxlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7K0JBMFRnQkE7OztlQUFBQTs7O3dDQXZUMEI7eUJBQ0w7K0RBRWQ7MEJBRU07dUJBRUM7dUJBQ1I7c0JBQ0Q7NENBQ3FCO3FDQUNOO3FDQUNBO21DQUNGO21DQUNBO1FBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFUCxNQUFNQyxRQUFRLENBQUM7QUFDZixNQUFNQywyQkFBMkI7QUFFakMsTUFBTUMsV0FBVztBQUNqQixNQUFNQyxTQUFTLENBQUM7QUFDaEIsTUFBTUMsZ0JBQWdCO0FBRXRCLElBQUlDLFlBQVlDO0FBRWhCLFNBQVNDLGdCQUFnQkMsVUFBa0I7SUFDekMsSUFBSUEsZUFBZSxHQUFHO1FBQ3BCLE9BQU9GO0lBQ1Q7SUFDQSxJQUFJRCxhQUFhLEtBQUtBLFlBQVlHLFlBQVk7UUFDNUMsT0FBT0g7SUFDVDtJQUVBLE9B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