@pie-lib/editable-html-tip-tap 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/lib/components/CharacterPicker.js +221 -0
  2. package/lib/components/EditableHtml.js +323 -0
  3. package/lib/components/MenuBar.js +693 -0
  4. package/lib/components/TiptapContainer.js +90 -0
  5. package/lib/components/buttons/done-button.js +53 -0
  6. package/lib/components/characters/characterUtils.js +112 -0
  7. package/lib/components/characters/custom-popper.js +73 -0
  8. package/lib/components/common/done-button.js +53 -0
  9. package/lib/components/icons/CssIcon.js +37 -0
  10. package/lib/components/icons/RespArea.js +95 -0
  11. package/lib/components/icons/TableIcons.js +69 -0
  12. package/lib/components/icons/TextAlign.js +194 -0
  13. package/lib/components/icons/index.js +194 -0
  14. package/lib/components/image/ImageToolbar.js +16 -0
  15. package/lib/components/image/InsertImageHandler.js +16 -0
  16. package/lib/components/media/MediaDialog.js +16 -0
  17. package/lib/components/media/MediaToolbar.js +16 -0
  18. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +94 -0
  19. package/lib/components/respArea/DragInTheBlank/choice.js +289 -0
  20. package/lib/components/respArea/DragInTheBlank.js +94 -0
  21. package/lib/components/respArea/ExplicitConstructedResponse.js +120 -0
  22. package/lib/components/respArea/InlineDropdown.js +126 -0
  23. package/lib/components/respArea/ToolbarIcon.js +105 -0
  24. package/lib/components/respArea/choice.js +2 -0
  25. package/lib/extensions/component.js +5 -5
  26. package/lib/extensions/custom-toolbar-wrapper.js +2 -4
  27. package/lib/extensions/extended-table.js +30 -0
  28. package/lib/extensions/index.js +52 -0
  29. package/lib/extensions/media.js +5 -5
  30. package/lib/extensions/responseArea.js +7 -7
  31. package/lib/index.js +16 -1454
  32. package/lib/plugins/index.js +10 -82
  33. package/lib/styles/editorContainerStyles.js +200 -0
  34. package/lib/utils/size.js +34 -0
  35. package/package.json +1 -1
  36. package/src/components/CharacterPicker.jsx +185 -0
  37. package/src/components/EditableHtml.jsx +306 -0
  38. package/src/components/MenuBar.jsx +630 -0
  39. package/src/components/TiptapContainer.jsx +96 -0
  40. package/src/components/characters/characterUtils.js +127 -0
  41. package/src/components/image/ImageToolbar.jsx +1 -0
  42. package/src/components/image/InsertImageHandler.js +1 -0
  43. package/src/components/media/MediaDialog.js +1 -0
  44. package/src/components/media/MediaToolbar.jsx +1 -0
  45. package/src/{plugins/respArea/drag-in-the-blank → components/respArea/DragInTheBlank}/choice.jsx +1 -1
  46. package/src/{plugins/respArea/inline-dropdown/index.jsx → components/respArea/InlineDropdown.jsx} +1 -1
  47. package/src/components/respArea/ToolbarIcon.jsx +68 -0
  48. package/src/extensions/component.jsx +2 -2
  49. package/src/extensions/custom-toolbar-wrapper.jsx +6 -7
  50. package/src/extensions/extended-table.js +27 -0
  51. package/src/extensions/index.js +76 -0
  52. package/src/extensions/media.js +10 -4
  53. package/src/extensions/responseArea.js +7 -7
  54. package/src/index.jsx +3 -1409
  55. package/src/styles/editorContainerStyles.js +203 -0
  56. package/src/utils/size.js +32 -0
  57. package/src/__tests__/editor.test.jsx +0 -363
  58. package/src/__tests__/serialization.test.js +0 -291
  59. package/src/block-tags.js +0 -17
  60. package/src/editor.jsx +0 -1197
  61. package/src/extensions/characters.js +0 -46
  62. package/src/old-index.jsx +0 -162
  63. package/src/parse-html.js +0 -8
  64. package/src/plugins/README.md +0 -27
  65. package/src/plugins/characters/index.jsx +0 -284
  66. package/src/plugins/characters/utils.js +0 -447
  67. package/src/plugins/css/index.jsx +0 -340
  68. package/src/plugins/customPlugin/index.jsx +0 -85
  69. package/src/plugins/html/icons/index.jsx +0 -19
  70. package/src/plugins/html/index.jsx +0 -72
  71. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +0 -51
  72. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +0 -27
  73. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +0 -44
  74. package/src/plugins/image/__tests__/component.test.jsx +0 -41
  75. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +0 -42
  76. package/src/plugins/image/__tests__/image-toolbar.test.jsx +0 -11
  77. package/src/plugins/image/__tests__/index.test.js +0 -95
  78. package/src/plugins/image/__tests__/insert-image-handler.test.js +0 -113
  79. package/src/plugins/image/__tests__/mock-change.js +0 -15
  80. package/src/plugins/image/alt-dialog.jsx +0 -82
  81. package/src/plugins/image/component.jsx +0 -343
  82. package/src/plugins/image/image-toolbar.jsx +0 -100
  83. package/src/plugins/image/index.jsx +0 -227
  84. package/src/plugins/image/insert-image-handler.js +0 -79
  85. package/src/plugins/index.jsx +0 -377
  86. package/src/plugins/list/__tests__/index.test.js +0 -54
  87. package/src/plugins/list/index.jsx +0 -305
  88. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +0 -48
  89. package/src/plugins/math/__tests__/index.test.jsx +0 -245
  90. package/src/plugins/math/index.jsx +0 -379
  91. package/src/plugins/media/__tests__/index.test.js +0 -75
  92. package/src/plugins/media/index.jsx +0 -325
  93. package/src/plugins/media/media-dialog.js +0 -624
  94. package/src/plugins/media/media-toolbar.jsx +0 -56
  95. package/src/plugins/media/media-wrapper.jsx +0 -43
  96. package/src/plugins/rendering/index.js +0 -31
  97. package/src/plugins/respArea/index.jsx +0 -299
  98. package/src/plugins/respArea/math-templated/index.jsx +0 -104
  99. package/src/plugins/respArea/utils.jsx +0 -90
  100. package/src/plugins/table/CustomTablePlugin.js +0 -113
  101. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +0 -44
  102. package/src/plugins/table/__tests__/index.test.jsx +0 -401
  103. package/src/plugins/table/__tests__/table-toolbar.test.jsx +0 -42
  104. package/src/plugins/table/index.jsx +0 -427
  105. package/src/plugins/table/table-toolbar.jsx +0 -136
  106. package/src/plugins/textAlign/index.jsx +0 -23
  107. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +0 -923
  108. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +0 -20
  109. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +0 -36
  110. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +0 -46
  111. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +0 -94
  112. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +0 -37
  113. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +0 -51
  114. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +0 -106
  115. package/src/plugins/toolbar/default-toolbar.jsx +0 -206
  116. package/src/plugins/toolbar/editor-and-toolbar.jsx +0 -257
  117. package/src/plugins/toolbar/index.jsx +0 -23
  118. package/src/plugins/toolbar/toolbar-buttons.jsx +0 -138
  119. package/src/plugins/toolbar/toolbar.jsx +0 -338
  120. package/src/plugins/utils.js +0 -31
  121. package/src/serialization.jsx +0 -621
  122. /package/src/{plugins → components}/characters/custom-popper.js +0 -0
  123. /package/src/{plugins/toolbar → components/common}/done-button.jsx +0 -0
  124. /package/src/{plugins/css/icons/index.jsx → components/icons/CssIcon.jsx} +0 -0
  125. /package/src/{plugins/respArea/icons/index.jsx → components/icons/RespArea.jsx} +0 -0
  126. /package/src/{plugins/table/icons/index.jsx → components/icons/TableIcons.jsx} +0 -0
  127. /package/src/{plugins/textAlign/icons/index.jsx → components/icons/TextAlign.jsx} +0 -0
  128. /package/src/{plugins/respArea/drag-in-the-blank/index.jsx → components/respArea/DragInTheBlank/DragInTheBlank.jsx} +0 -0
  129. /package/src/{plugins/respArea/explicit-constructed-response/index.jsx → components/respArea/ExplicitConstructedResponse.jsx} +0 -0
@@ -0,0 +1,693 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _classnames = _interopRequireDefault(require("classnames"));
19
+
20
+ var _styles = require("@material-ui/core/styles");
21
+
22
+ var _prosemirrorState = require("prosemirror-state");
23
+
24
+ var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
25
+
26
+ var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
27
+
28
+ var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
29
+
30
+ var _Code = _interopRequireDefault(require("@material-ui/icons/Code"));
31
+
32
+ var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
33
+
34
+ var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
35
+
36
+ var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
37
+
38
+ var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
39
+
40
+ var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
41
+
42
+ var _Image = _interopRequireDefault(require("@material-ui/icons/Image"));
43
+
44
+ var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
45
+
46
+ var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
47
+
48
+ var _Theaters = _interopRequireDefault(require("@material-ui/icons/Theaters"));
49
+
50
+ var _VolumeUp = _interopRequireDefault(require("@material-ui/icons/VolumeUp"));
51
+
52
+ var _BorderAll = _interopRequireDefault(require("@material-ui/icons/BorderAll"));
53
+
54
+ var _react2 = require("@tiptap/react");
55
+
56
+ var _constants = require("../constants");
57
+
58
+ var _ToolbarIcon = require("./respArea/ToolbarIcon");
59
+
60
+ var _characterUtils = require("./characters/characterUtils");
61
+
62
+ var _TextAlign = _interopRequireDefault(require("./icons/TextAlign"));
63
+
64
+ var _CssIcon = _interopRequireDefault(require("./icons/CssIcon"));
65
+
66
+ var _tableIcons = require("./icons/tableIcons");
67
+
68
+ var _CharacterPicker = require("./CharacterPicker");
69
+
70
+ var _doneButton = require("./common/done-button");
71
+
72
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
73
+
74
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
75
+
76
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
77
+
78
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
79
+
80
+ var SuperscriptIcon = function SuperscriptIcon() {
81
+ return /*#__PURE__*/_react["default"].createElement("svg", {
82
+ xmlns: "http://www.w3.org/2000/svg",
83
+ height: "24px",
84
+ viewBox: "0 0 24 24",
85
+ width: "24px",
86
+ fill: "none"
87
+ }, /*#__PURE__*/_react["default"].createElement("path", {
88
+ d: "M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z",
89
+ fill: "currentColor"
90
+ }));
91
+ };
92
+
93
+ var SubscriptIcon = function SubscriptIcon() {
94
+ return /*#__PURE__*/_react["default"].createElement("svg", {
95
+ xmlns: "http://www.w3.org/2000/svg",
96
+ height: "24px",
97
+ viewBox: "0 0 24 24",
98
+ width: "24px",
99
+ fill: "none"
100
+ }, /*#__PURE__*/_react["default"].createElement("path", {
101
+ d: "M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z",
102
+ fill: "currentColor"
103
+ }));
104
+ };
105
+
106
+ var HeadingIcon = function HeadingIcon() {
107
+ return /*#__PURE__*/_react["default"].createElement("svg", {
108
+ width: "30",
109
+ height: "28",
110
+ viewBox: "0 0 30 28",
111
+ fill: "none",
112
+ xmlns: "http://www.w3.org/2000/svg",
113
+ style: {
114
+ width: '20px',
115
+ height: '18px'
116
+ }
117
+ }, /*#__PURE__*/_react["default"].createElement("path", {
118
+ d: "M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z",
119
+ fill: "currentColor"
120
+ }));
121
+ };
122
+
123
+ function MenuBar(_ref) {
124
+ var _classNames;
125
+
126
+ var editor = _ref.editor,
127
+ classes = _ref.classes,
128
+ activePlugins = _ref.activePlugins,
129
+ toolOpts = _ref.toolbarOpts,
130
+ responseAreaProps = _ref.responseAreaProps,
131
+ onChange = _ref.onChange;
132
+
133
+ var _useState = (0, _react.useState)(false),
134
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
135
+ showPicker = _useState2[0],
136
+ setShowPicker = _useState2[1];
137
+
138
+ var toolbarOpts = toolOpts !== null && toolOpts !== void 0 ? toolOpts : {};
139
+ var editorState = (0, _react2.useEditorState)({
140
+ editor: editor,
141
+ selector: function selector(ctx) {
142
+ var _ctx$editor, _ctx$editor2, _ctx$editor3, _ctx$editor4, _ctx$editor5, _ctx$editor$isActive, _ctx$editor$can$chain, _ctx$editor$isActive2, _ref3, _ctx$editor$getAttrib, _ctx$editor$can$chain2, _ctx$editor$isActive3, _ctx$editor$can$chain3, _ctx$editor$isActive4, _ctx$editor$can$chain4, _ctx$editor$isActive5, _ctx$editor$can$chain5, _ctx$editor$can$chain6, _ctx$editor$isActive6, _ctx$editor$isActive7, _ctx$editor$isActive8, _ctx$editor$isActive9, _ctx$editor$isActive10, _ctx$editor$isActive11, _ctx$editor$isActive12, _ctx$editor$isActive13, _ctx$editor$isActive14, _ctx$editor$isActive15, _ctx$editor$isActive16, _ctx$editor$isActive17, _ctx$editor$isActive18, _ctx$editor$isActive19, _ctx$editor$can$chain7, _ctx$editor$can$chain8;
143
+
144
+ var _ref2 = ((_ctx$editor = ctx.editor) === null || _ctx$editor === void 0 ? void 0 : _ctx$editor.state) || {},
145
+ selection = _ref2.selection;
146
+
147
+ var currentNode;
148
+
149
+ if (selection instanceof _prosemirrorState.NodeSelection) {
150
+ currentNode = selection.node; // the selected node
151
+ }
152
+
153
+ var hideDefaultToolbar = ((_ctx$editor2 = ctx.editor) === null || _ctx$editor2 === void 0 ? void 0 : _ctx$editor2.isActive('math')) || ((_ctx$editor3 = ctx.editor) === null || _ctx$editor3 === void 0 ? void 0 : _ctx$editor3.isActive('explicit_constructed_response')) || ((_ctx$editor4 = ctx.editor) === null || _ctx$editor4 === void 0 ? void 0 : _ctx$editor4.isActive('imageUploadNode'));
154
+ return {
155
+ currentNode: currentNode,
156
+ hideDefaultToolbar: hideDefaultToolbar,
157
+ isFocused: (_ctx$editor5 = ctx.editor) === null || _ctx$editor5 === void 0 ? void 0 : _ctx$editor5.isFocused,
158
+ isBold: (_ctx$editor$isActive = ctx.editor.isActive('bold')) !== null && _ctx$editor$isActive !== void 0 ? _ctx$editor$isActive : false,
159
+ canBold: (_ctx$editor$can$chain = ctx.editor.can().chain().toggleBold().run()) !== null && _ctx$editor$can$chain !== void 0 ? _ctx$editor$can$chain : false,
160
+ isTable: (_ctx$editor$isActive2 = ctx.editor.isActive('table')) !== null && _ctx$editor$isActive2 !== void 0 ? _ctx$editor$isActive2 : false,
161
+ tableHasBorder: (_ref3 = ((_ctx$editor$getAttrib = ctx.editor.getAttributes('table')) === null || _ctx$editor$getAttrib === void 0 ? void 0 : _ctx$editor$getAttrib.border) === '1') !== null && _ref3 !== void 0 ? _ref3 : false,
162
+ canTable: (_ctx$editor$can$chain2 = ctx.editor.can().chain().insertTable().run()) !== null && _ctx$editor$can$chain2 !== void 0 ? _ctx$editor$can$chain2 : false,
163
+ isItalic: (_ctx$editor$isActive3 = ctx.editor.isActive('italic')) !== null && _ctx$editor$isActive3 !== void 0 ? _ctx$editor$isActive3 : false,
164
+ canItalic: (_ctx$editor$can$chain3 = ctx.editor.can().chain().toggleItalic().run()) !== null && _ctx$editor$can$chain3 !== void 0 ? _ctx$editor$can$chain3 : false,
165
+ isStrike: (_ctx$editor$isActive4 = ctx.editor.isActive('strike')) !== null && _ctx$editor$isActive4 !== void 0 ? _ctx$editor$isActive4 : false,
166
+ canStrike: (_ctx$editor$can$chain4 = ctx.editor.can().chain().toggleStrike().run()) !== null && _ctx$editor$can$chain4 !== void 0 ? _ctx$editor$can$chain4 : false,
167
+ isCode: (_ctx$editor$isActive5 = ctx.editor.isActive('code')) !== null && _ctx$editor$isActive5 !== void 0 ? _ctx$editor$isActive5 : false,
168
+ canCode: (_ctx$editor$can$chain5 = ctx.editor.can().chain().toggleCode().run()) !== null && _ctx$editor$can$chain5 !== void 0 ? _ctx$editor$can$chain5 : false,
169
+ canClearMarks: (_ctx$editor$can$chain6 = ctx.editor.can().chain().unsetAllMarks().run()) !== null && _ctx$editor$can$chain6 !== void 0 ? _ctx$editor$can$chain6 : false,
170
+ isUnderline: (_ctx$editor$isActive6 = ctx.editor.isActive('underline')) !== null && _ctx$editor$isActive6 !== void 0 ? _ctx$editor$isActive6 : false,
171
+ isSubScript: (_ctx$editor$isActive7 = ctx.editor.isActive('subscript')) !== null && _ctx$editor$isActive7 !== void 0 ? _ctx$editor$isActive7 : false,
172
+ isSuperScript: (_ctx$editor$isActive8 = ctx.editor.isActive('superscript')) !== null && _ctx$editor$isActive8 !== void 0 ? _ctx$editor$isActive8 : false,
173
+ isParagraph: (_ctx$editor$isActive9 = ctx.editor.isActive('paragraph')) !== null && _ctx$editor$isActive9 !== void 0 ? _ctx$editor$isActive9 : false,
174
+ isHeading1: (_ctx$editor$isActive10 = ctx.editor.isActive('heading', {
175
+ level: 1
176
+ })) !== null && _ctx$editor$isActive10 !== void 0 ? _ctx$editor$isActive10 : false,
177
+ isHeading2: (_ctx$editor$isActive11 = ctx.editor.isActive('heading', {
178
+ level: 2
179
+ })) !== null && _ctx$editor$isActive11 !== void 0 ? _ctx$editor$isActive11 : false,
180
+ isHeading3: (_ctx$editor$isActive12 = ctx.editor.isActive('heading', {
181
+ level: 3
182
+ })) !== null && _ctx$editor$isActive12 !== void 0 ? _ctx$editor$isActive12 : false,
183
+ isHeading4: (_ctx$editor$isActive13 = ctx.editor.isActive('heading', {
184
+ level: 4
185
+ })) !== null && _ctx$editor$isActive13 !== void 0 ? _ctx$editor$isActive13 : false,
186
+ isHeading5: (_ctx$editor$isActive14 = ctx.editor.isActive('heading', {
187
+ level: 5
188
+ })) !== null && _ctx$editor$isActive14 !== void 0 ? _ctx$editor$isActive14 : false,
189
+ isHeading6: (_ctx$editor$isActive15 = ctx.editor.isActive('heading', {
190
+ level: 6
191
+ })) !== null && _ctx$editor$isActive15 !== void 0 ? _ctx$editor$isActive15 : false,
192
+ isBulletList: (_ctx$editor$isActive16 = ctx.editor.isActive('bulletList')) !== null && _ctx$editor$isActive16 !== void 0 ? _ctx$editor$isActive16 : false,
193
+ isOrderedList: (_ctx$editor$isActive17 = ctx.editor.isActive('orderedList')) !== null && _ctx$editor$isActive17 !== void 0 ? _ctx$editor$isActive17 : false,
194
+ isCodeBlock: (_ctx$editor$isActive18 = ctx.editor.isActive('codeBlock')) !== null && _ctx$editor$isActive18 !== void 0 ? _ctx$editor$isActive18 : false,
195
+ isBlockquote: (_ctx$editor$isActive19 = ctx.editor.isActive('blockquote')) !== null && _ctx$editor$isActive19 !== void 0 ? _ctx$editor$isActive19 : false,
196
+ canUndo: (_ctx$editor$can$chain7 = ctx.editor.can().chain().undo().run()) !== null && _ctx$editor$can$chain7 !== void 0 ? _ctx$editor$can$chain7 : false,
197
+ canRedo: (_ctx$editor$can$chain8 = ctx.editor.can().chain().redo().run()) !== null && _ctx$editor$can$chain8 !== void 0 ? _ctx$editor$can$chain8 : false
198
+ };
199
+ }
200
+ });
201
+ var hasDoneButton = false;
202
+ var autoWidth = false;
203
+ var names = (0, _classnames["default"])(classes.toolbar, _constants.PIE_TOOLBAR__CLASS, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.toolbarWithNoDone, !hasDoneButton), (0, _defineProperty2["default"])(_classNames, classes.toolbarTop, toolbarOpts.position === 'top'), (0, _defineProperty2["default"])(_classNames, classes.toolbarRight, toolbarOpts.alignment === 'right'), (0, _defineProperty2["default"])(_classNames, classes.focused, toolbarOpts.alwaysVisible || editorState.isFocused && !editor._toolbarOpened), (0, _defineProperty2["default"])(_classNames, classes.autoWidth, autoWidth), (0, _defineProperty2["default"])(_classNames, classes.fullWidth, !autoWidth), (0, _defineProperty2["default"])(_classNames, classes.hidden, toolbarOpts.isHidden === true), _classNames));
204
+ var customStyles = toolbarOpts.minWidth !== undefined ? {
205
+ minWidth: toolbarOpts.minWidth
206
+ } : {};
207
+
208
+ var handleMouseDown = function handleMouseDown(e) {
209
+ e.preventDefault();
210
+ };
211
+
212
+ var toolbarButtons = (0, _react.useMemo)(function () {
213
+ return [{
214
+ icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
215
+ onClick: function onClick(editor) {
216
+ return editor.chain().focus().insertTable({
217
+ rows: 2,
218
+ cols: 2,
219
+ withHeaderRow: false
220
+ }).run();
221
+ },
222
+ hidden: function hidden(state) {
223
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('table')) || state.isTable;
224
+ },
225
+ isActive: function isActive(state) {
226
+ return state.isTable;
227
+ },
228
+ isDisabled: function isDisabled(state) {
229
+ return !state.canTable;
230
+ }
231
+ }, {
232
+ icon: /*#__PURE__*/_react["default"].createElement(_tableIcons.AddRow, null),
233
+ onClick: function onClick(editor) {
234
+ return editor.chain().focus().addRowAfter().run();
235
+ },
236
+ hidden: function hidden(state) {
237
+ return !state.isTable;
238
+ },
239
+ isActive: function isActive(state) {
240
+ return state.isTable;
241
+ },
242
+ isDisabled: function isDisabled(state) {
243
+ return !state.canTable;
244
+ }
245
+ }, {
246
+ icon: /*#__PURE__*/_react["default"].createElement(_tableIcons.RemoveRow, null),
247
+ onClick: function onClick(editor) {
248
+ return editor.chain().focus().deleteRow().run();
249
+ },
250
+ hidden: function hidden(state) {
251
+ return !state.isTable;
252
+ },
253
+ isActive: function isActive(state) {
254
+ return state.isTable;
255
+ },
256
+ isDisabled: function isDisabled(state) {
257
+ return !state.canTable;
258
+ }
259
+ }, {
260
+ icon: /*#__PURE__*/_react["default"].createElement(_tableIcons.AddColumn, null),
261
+ onClick: function onClick(editor) {
262
+ return editor.chain().focus().addColumnAfter().run();
263
+ },
264
+ hidden: function hidden(state) {
265
+ return !state.isTable;
266
+ },
267
+ isActive: function isActive(state) {
268
+ return state.isTable;
269
+ },
270
+ isDisabled: function isDisabled(state) {
271
+ return !state.canTable;
272
+ }
273
+ }, {
274
+ icon: /*#__PURE__*/_react["default"].createElement(_tableIcons.RemoveColumn, null),
275
+ onClick: function onClick(editor) {
276
+ return editor.chain().focus().deleteColumn().run();
277
+ },
278
+ hidden: function hidden(state) {
279
+ return !state.isTable;
280
+ },
281
+ isActive: function isActive(state) {
282
+ return state.isTable;
283
+ },
284
+ isDisabled: function isDisabled(state) {
285
+ return !state.canTable;
286
+ }
287
+ }, {
288
+ icon: /*#__PURE__*/_react["default"].createElement(_tableIcons.RemoveTable, null),
289
+ onClick: function onClick(editor) {
290
+ return editor.chain().focus().deleteTable().run();
291
+ },
292
+ hidden: function hidden(state) {
293
+ return !state.isTable;
294
+ },
295
+ isActive: function isActive(state) {
296
+ return state.isTable;
297
+ },
298
+ isDisabled: function isDisabled(state) {
299
+ return !state.canTable;
300
+ }
301
+ }, {
302
+ icon: /*#__PURE__*/_react["default"].createElement(_BorderAll["default"], null),
303
+ onClick: function onClick(editor) {
304
+ var tableAttrs = editor.getAttributes('table');
305
+
306
+ var update = _objectSpread(_objectSpread({}, tableAttrs), {}, {
307
+ border: tableAttrs.border !== '0' ? '0' : '1'
308
+ });
309
+
310
+ editor.commands.updateAttributes('table', update);
311
+ },
312
+ hidden: function hidden(state) {
313
+ return !state.isTable;
314
+ },
315
+ isActive: function isActive(state) {
316
+ return state.tableHasBorder;
317
+ },
318
+ isDisabled: function isDisabled(state) {
319
+ return !state.canTable;
320
+ }
321
+ }, {
322
+ icon: /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null),
323
+ onClick: function onClick(editor) {
324
+ return editor.chain().focus().toggleBold().run();
325
+ },
326
+ hidden: function hidden(state) {
327
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('bold')) || state.isTable;
328
+ },
329
+ isActive: function isActive(state) {
330
+ return state.isBold;
331
+ },
332
+ isDisabled: function isDisabled(state) {
333
+ return !state.canBold;
334
+ }
335
+ }, {
336
+ icon: /*#__PURE__*/_react["default"].createElement(_FormatItalic["default"], null),
337
+ onClick: function onClick(editor) {
338
+ return editor.chain().focus().toggleItalic().run();
339
+ },
340
+ hidden: function hidden(state) {
341
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('italic')) || state.isTable;
342
+ },
343
+ isActive: function isActive(state) {
344
+ return state.isItalic;
345
+ },
346
+ isDisabled: function isDisabled(state) {
347
+ return !state.canItalic;
348
+ }
349
+ }, {
350
+ icon: /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null),
351
+ onClick: function onClick(editor) {
352
+ return editor.chain().focus().toggleStrike().run();
353
+ },
354
+ hidden: function hidden(state) {
355
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('strikethrough')) || state.isTable;
356
+ },
357
+ isActive: function isActive(state) {
358
+ return state.isStrike;
359
+ },
360
+ isDisabled: function isDisabled(state) {
361
+ return !state.canStrike;
362
+ }
363
+ }, {
364
+ icon: /*#__PURE__*/_react["default"].createElement(_Code["default"], null),
365
+ onClick: function onClick(editor) {
366
+ return editor.chain().focus().toggleCode().run();
367
+ },
368
+ hidden: function hidden(state) {
369
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('code')) || state.isTable;
370
+ },
371
+ isActive: function isActive(state) {
372
+ return state.isCode;
373
+ },
374
+ isDisabled: function isDisabled(state) {
375
+ return !state.canCode;
376
+ }
377
+ }, {
378
+ icon: /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null),
379
+ onClick: function onClick(editor) {
380
+ return editor.chain().focus().toggleUnderline().run();
381
+ },
382
+ hidden: function hidden(state) {
383
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('underline')) || state.isTable;
384
+ },
385
+ isActive: function isActive(state) {
386
+ return state.isUnderline;
387
+ }
388
+ }, {
389
+ icon: /*#__PURE__*/_react["default"].createElement(SubscriptIcon, null),
390
+ onClick: function onClick(editor) {
391
+ return editor.chain().focus().toggleSubscript().run();
392
+ },
393
+ hidden: function hidden(state) {
394
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('subscript')) || state.isTable;
395
+ },
396
+ isActive: function isActive(state) {
397
+ return state.isSubScript;
398
+ }
399
+ }, {
400
+ icon: /*#__PURE__*/_react["default"].createElement(SuperscriptIcon, null),
401
+ onClick: function onClick(editor) {
402
+ return editor.chain().focus().toggleSuperscript().run();
403
+ },
404
+ hidden: function hidden(state) {
405
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('superscript')) || state.isTable;
406
+ },
407
+ isActive: function isActive(state) {
408
+ return state.isSuperScript;
409
+ }
410
+ }, {
411
+ icon: /*#__PURE__*/_react["default"].createElement(_Image["default"], null),
412
+ hidden: function hidden(state) {
413
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('image')) || state.isTable;
414
+ },
415
+ onClick: function onClick(editor) {
416
+ return editor.chain().focus().setImageUploadNode().run();
417
+ }
418
+ }, {
419
+ icon: /*#__PURE__*/_react["default"].createElement(_Theaters["default"], null),
420
+ hidden: function hidden(state) {
421
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('video')) || state.isTable;
422
+ },
423
+ onClick: function onClick(editor) {
424
+ return editor.chain().focus().insertMedia({
425
+ tag: 'video'
426
+ }).run();
427
+ }
428
+ }, {
429
+ icon: /*#__PURE__*/_react["default"].createElement(_VolumeUp["default"], null),
430
+ hidden: function hidden(state) {
431
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('audio')) || state.isTable;
432
+ },
433
+ onClick: function onClick(editor) {
434
+ return editor.chain().focus().insertMedia({
435
+ tag: 'audio'
436
+ }).run();
437
+ }
438
+ }, {
439
+ icon: /*#__PURE__*/_react["default"].createElement(_CssIcon["default"], null),
440
+ hidden: function hidden(state) {
441
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('css')) || state.isTable;
442
+ },
443
+ onClick: function onClick(editor) {
444
+ return editor.commands.openCSSClassDialog();
445
+ }
446
+ }, {
447
+ icon: /*#__PURE__*/_react["default"].createElement(HeadingIcon, null),
448
+ hidden: function hidden(state) {
449
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('h3')) || state.isTable;
450
+ },
451
+ onClick: function onClick(editor) {
452
+ return editor.chain().focus().toggleHeading({
453
+ level: 3
454
+ }).run();
455
+ },
456
+ isActive: function isActive(state) {
457
+ return state.isHeading3;
458
+ }
459
+ }, {
460
+ icon: /*#__PURE__*/_react["default"].createElement(_Functions["default"], null),
461
+ hidden: function hidden() {
462
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('math'));
463
+ },
464
+ onClick: function onClick(editor) {
465
+ return editor.chain().focus().insertMath('').run();
466
+ }
467
+ }, {
468
+ icon: /*#__PURE__*/_react["default"].createElement(_CharacterPicker.CharacterIcon, {
469
+ letter: "\xF1"
470
+ }),
471
+ hidden: function hidden(state) {
472
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('languageCharacters')) || state.isTable;
473
+ },
474
+ onClick: function onClick() {
475
+ return setShowPicker(_characterUtils.spanishConfig);
476
+ }
477
+ }, {
478
+ icon: /*#__PURE__*/_react["default"].createElement(_CharacterPicker.CharacterIcon, {
479
+ letter: "\u20AC"
480
+ }),
481
+ hidden: function hidden(state) {
482
+ return (activePlugins === null || activePlugins === void 0 ? void 0 : activePlugins.filter(function (p) {
483
+ return p === 'languageCharacters';
484
+ }).length) !== 2 || state.isTable;
485
+ },
486
+ onClick: function onClick() {
487
+ return setShowPicker(_characterUtils.specialConfig);
488
+ }
489
+ }, {
490
+ icon: /*#__PURE__*/_react["default"].createElement(_TextAlign["default"], {
491
+ editor: editor
492
+ }),
493
+ hidden: function hidden(state) {
494
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('text-align')) || state.isTable;
495
+ },
496
+ onClick: function onClick() {}
497
+ }, {
498
+ icon: /*#__PURE__*/_react["default"].createElement(_FormatListBulleted["default"], null),
499
+ hidden: function hidden(state) {
500
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('bulleted-list')) || state.isTable;
501
+ },
502
+ onClick: function onClick(editor) {
503
+ return editor.chain().focus().toggleBulletList().run();
504
+ },
505
+ isActive: function isActive(state) {
506
+ return state.isBulletList;
507
+ }
508
+ }, {
509
+ icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null),
510
+ hidden: function hidden(state) {
511
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('numbered-list')) || state.isTable;
512
+ },
513
+ onClick: function onClick(editor) {
514
+ return editor.chain().focus().toggleOrderedList().run();
515
+ },
516
+ isActive: function isActive(state) {
517
+ return state.isOrderedList;
518
+ }
519
+ }, {
520
+ icon: /*#__PURE__*/_react["default"].createElement(_Undo["default"], null),
521
+ hidden: function hidden(state) {
522
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('undo')) || state.isTable;
523
+ },
524
+ onClick: function onClick(editor) {
525
+ return editor.chain().focus().undo().run();
526
+ },
527
+ isDisabled: function isDisabled(state) {
528
+ return !state.canUndo;
529
+ }
530
+ }, {
531
+ icon: /*#__PURE__*/_react["default"].createElement(_Redo["default"], null),
532
+ hidden: function hidden(state) {
533
+ return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('redo')) || state.isTable;
534
+ },
535
+ onClick: function onClick(editor) {
536
+ return editor.chain().focus().redo().run();
537
+ },
538
+ isDisabled: function isDisabled(state) {
539
+ return !state.canRedo;
540
+ }
541
+ }];
542
+ }, [activePlugins, editor]);
543
+ return /*#__PURE__*/_react["default"].createElement("div", {
544
+ className: names,
545
+ style: _objectSpread({}, customStyles),
546
+ onMouseDown: handleMouseDown
547
+ }, !editorState.hideDefaultToolbar && /*#__PURE__*/_react["default"].createElement("div", {
548
+ className: classes.defaultToolbar,
549
+ tabIndex: "1"
550
+ }, /*#__PURE__*/_react["default"].createElement("div", {
551
+ className: classes.buttonsContainer
552
+ }, toolbarButtons.filter(function (btn) {
553
+ var _btn$hidden;
554
+
555
+ return !((_btn$hidden = btn.hidden) !== null && _btn$hidden !== void 0 && _btn$hidden.call(btn, editorState));
556
+ }).map(function (btn, index) {
557
+ var _btn$isDisabled, _btn$isActive;
558
+
559
+ var disabled = (_btn$isDisabled = btn.isDisabled) === null || _btn$isDisabled === void 0 ? void 0 : _btn$isDisabled.call(btn, editorState);
560
+ var active = (_btn$isActive = btn.isActive) === null || _btn$isActive === void 0 ? void 0 : _btn$isActive.call(btn, editorState);
561
+ return /*#__PURE__*/_react["default"].createElement("button", {
562
+ key: index,
563
+ disabled: disabled,
564
+ onClick: function onClick(e) {
565
+ e.preventDefault();
566
+ btn.onClick(editor);
567
+ },
568
+ className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, active))
569
+ }, btn.icon);
570
+ })), (activePlugins === null || activePlugins === void 0 ? void 0 : activePlugins.includes('responseArea')) && /*#__PURE__*/_react["default"].createElement("button", {
571
+ onClick: function onClick() {
572
+ editor.chain().focus().insertResponseArea(responseAreaProps.type).run();
573
+ },
574
+ className: classes.button
575
+ }, /*#__PURE__*/_react["default"].createElement(_ToolbarIcon.ToolbarIcon, null)), /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
576
+ onClick: function onClick() {
577
+ onChange === null || onChange === void 0 ? void 0 : onChange(editor.getHTML());
578
+ editor.commands.blur();
579
+ }
580
+ })), showPicker && /*#__PURE__*/_react["default"].createElement(_CharacterPicker.CharacterPicker, {
581
+ editor: editor,
582
+ opts: _objectSpread(_objectSpread({}, showPicker), {}, {
583
+ renderPopOver: function renderPopOver(ev, ch) {
584
+ return console.log('Show popover', ch);
585
+ },
586
+ closePopOver: function closePopOver() {
587
+ return console.log('Close popover');
588
+ }
589
+ }),
590
+ onClose: function onClose() {
591
+ return setShowPicker(false);
592
+ }
593
+ }));
594
+ }
595
+
596
+ var style = function style(theme) {
597
+ return {
598
+ defaultToolbar: {
599
+ display: 'flex',
600
+ width: '100%',
601
+ justifyContent: 'space-between'
602
+ },
603
+ buttonsContainer: {
604
+ alignItems: 'center',
605
+ display: 'flex',
606
+ width: '100%'
607
+ },
608
+ button: {
609
+ color: 'grey',
610
+ display: 'inline-flex',
611
+ padding: '2px',
612
+ background: 'none',
613
+ border: 'none',
614
+ cursor: 'pointer',
615
+ '&:hover': {
616
+ color: 'black'
617
+ },
618
+ '&:focus': {
619
+ outline: "2px solid ".concat(theme.palette.grey[700])
620
+ }
621
+ },
622
+ active: {
623
+ color: 'black'
624
+ },
625
+ disabled: {
626
+ opacity: 0.7,
627
+ cursor: 'not-allowed',
628
+ '& :hover': {
629
+ color: 'grey'
630
+ }
631
+ },
632
+ isActive: {
633
+ background: 'var(--purple)',
634
+ color: 'var(--white)'
635
+ },
636
+ toolbar: {
637
+ position: 'absolute',
638
+ zIndex: 20,
639
+ cursor: 'pointer',
640
+ justifyContent: 'space-between',
641
+ background: 'var(--editable-html-toolbar-bg, #efefef)',
642
+ minWidth: '280px',
643
+ margin: '5px 0 0 0',
644
+ padding: '2px',
645
+ boxShadow: '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',
646
+ boxSizing: 'border-box',
647
+ display: 'flex',
648
+ opacity: 0,
649
+ pointerEvents: 'none'
650
+ },
651
+ toolbarWithNoDone: {
652
+ minWidth: '265px'
653
+ },
654
+ toolbarTop: {
655
+ top: '-45px'
656
+ },
657
+ toolbarRight: {
658
+ right: 0
659
+ },
660
+ fullWidth: {
661
+ width: '100%'
662
+ },
663
+ hidden: {
664
+ visibility: 'hidden'
665
+ },
666
+ autoWidth: {
667
+ width: 'auto'
668
+ },
669
+ focused: {
670
+ opacity: 1,
671
+ pointerEvents: 'auto'
672
+ },
673
+ iconRoot: {
674
+ width: '28px',
675
+ height: '28px',
676
+ padding: '4px',
677
+ verticalAlign: 'top'
678
+ },
679
+ label: {
680
+ color: 'var(--editable-html-toolbar-check, #00bb00)'
681
+ },
682
+ shared: {
683
+ display: 'flex'
684
+ }
685
+ };
686
+ };
687
+
688
+ var StyledMenuBar = (0, _styles.withStyles)(style, {
689
+ index: 1000
690
+ })(MenuBar);
691
+ var _default = StyledMenuBar;
692
+ exports["default"] = _default;
693
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL01lbnVCYXIuanN4Il0sIm5hbWVzIjpbIlN1cGVyc2NyaXB0SWNvbiIsIlN1YnNjcmlwdEljb24iLCJIZWFkaW5nSWNvbiIsIndpZHRoIiwiaGVpZ2h0IiwiTWVudUJhciIsImVkaXRvciIsImNsYXNzZXMiLCJhY3RpdmVQbHVnaW5zIiwidG9vbE9wdHMiLCJ0b29sYmFyT3B0cyIsInJlc3BvbnNlQXJlYVByb3BzIiwib25DaGFuZ2UiLCJzaG93UGlja2VyIiwic2V0U2hvd1BpY2tlciIsImVkaXRvclN0YXRlIiwic2VsZWN0b3IiLCJjdHgiLCJzdGF0ZSIsInNlbGVjdGlvbiIsImN1cnJlbnROb2RlIiwiTm9kZVNlbGVjdGlvbiIsIm5vZGUiLCJoaWRlRGVmYXVsdFRvb2xiYXIiLCJpc0FjdGl2ZSIsImlzRm9jdXNlZCIsImlzQm9sZCIsImNhbkJvbGQiLCJjYW4iLCJjaGFpbiIsInRvZ2dsZUJvbGQiLCJydW4iLCJpc1RhYmxlIiwidGFibGVIYXNCb3JkZXIiLCJnZXRBdHRyaWJ1dGVzIiwiYm9yZGVyIiwiY2FuVGFibGUiLCJpbnNlcnRUYWJsZSIsImlzSXRhbGljIiwiY2FuSXRhbGljIiwidG9nZ2xlSXRhbGljIiwiaXNTdHJpa2UiLCJjYW5TdHJpa2UiLCJ0b2dnbGVTdHJpa2UiLCJpc0NvZGUiLCJjYW5Db2RlIiwidG9nZ2xlQ29kZSIsImNhbkNsZWFyTWFya3MiLCJ1bnNldEFsbE1hcmtzIiwiaXNVbmRlcmxpbmUiLCJpc1N1YlNjcmlwdCIsImlzU3VwZXJTY3JpcHQiLCJpc1BhcmFncmFwaCIsImlzSGVhZGluZzEiLCJsZXZlbCIsImlzSGVhZGluZzIiLCJpc0hlYWRpbmczIiwiaXNIZWFkaW5nNCIsImlzSGVhZGluZzUiLCJpc0hlYWRpbmc2IiwiaXNCdWxsZXRMaXN0IiwiaXNPcmRlcmVkTGlzdCIsImlzQ29kZUJsb2NrIiwiaXNCbG9ja3F1b3RlIiwiY2FuVW5kbyIsInVuZG8iLCJjYW5SZWRvIiwicmVkbyIsImhhc0RvbmVCdXR0b24iLCJhdXRvV2lkdGgiLCJuYW1lcyIsInRvb2xiYXIiLCJQSUVfVE9PTEJBUl9fQ0xBU1MiLCJ0b29sYmFyV2l0aE5vRG9uZSIsInRvb2xiYXJUb3AiLCJwb3NpdGlvbiIsInRvb2xiYXJSaWdodCIsImFsaWdubWVudCIsImZvY3VzZWQiLCJhbHdheXNWaXNpYmxlIiwiX3Rvb2xiYXJPcGVuZWQiLCJmdWxsV2lkdGgiLCJoaWRkZW4iLCJpc0hpZGRlbiIsImN1c3RvbVN0eWxlcyIsIm1pbldpZHRoIiwidW5kZWZpbmVkIiwiaGFuZGxlTW91c2VEb3duIiwiZSIsInByZXZlbnREZWZhdWx0IiwidG9vbGJhckJ1dHRvbnMiLCJpY29uIiwib25DbGljayIsImZvY3VzIiwicm93cyIsImNvbHMiLCJ3aXRoSGVhZGVyUm93IiwiaW5jbHVkZXMiLCJpc0Rpc2FibGVkIiwiYWRkUm93QWZ0ZXIiLCJkZWxldGVSb3ciLCJhZGRDb2x1bW5BZnRlciIsImRlbGV0ZUNvbHVtbiIsImRlbGV0ZVRhYmxlIiwidGFibGVBdHRycyIsInVwZGF0ZSIsImNvbW1hbmRzIiwidXBkYXRlQXR0cmlidXRlcyIsInRvZ2dsZVVuZGVybGluZSIsInRvZ2dsZVN1YnNjcmlwdCIsInRvZ2dsZVN1cGVyc2NyaXB0Iiwic2V0SW1hZ2VVcGxvYWROb2RlIiwiaW5zZXJ0TWVkaWEiLCJ0YWciLCJvcGVuQ1NTQ2xhc3NEaWFsb2ciLCJ0b2dnbGVIZWFkaW5nIiwiaW5zZXJ0TWF0aCIsInNwYW5pc2hDb25maWciLCJmaWx0ZXIiLCJwIiwibGVuZ3RoIiwic3BlY2lhbENvbmZpZyIsInRvZ2dsZUJ1bGxldExpc3QiLCJ0b2dnbGVPcmRlcmVkTGlzdCIsImRlZmF1bHRUb29sYmFyIiwiYnV0dG9uc0NvbnRhaW5lciIsImJ0biIsIm1hcCIsImluZGV4IiwiZGlzYWJsZWQiLCJhY3RpdmUiLCJidXR0b24iLCJpbnNlcnRSZXNwb25zZUFyZWEiLCJ0eXBlIiwiZ2V0SFRNTCIsImJsdXIiLCJyZW5kZXJQb3BPdmVyIiwiZXYiLCJjaCIsImNvbnNvbGUiLCJsb2ciLCJjbG9zZVBvcE92ZXIiLCJzdHlsZSIsInRoZW1lIiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImNvbG9yIiwicGFkZGluZyIsImJhY2tncm91bmQiLCJjdXJzb3IiLCJvdXRsaW5lIiwicGFsZXR0ZSIsImdyZXkiLCJvcGFjaXR5IiwiekluZGV4IiwibWFyZ2luIiwiYm94U2hhZG93IiwiYm94U2l6aW5nIiwicG9pbnRlckV2ZW50cyIsInRvcCIsInJpZ2h0IiwidmlzaWJpbGl0eSIsImljb25Sb290IiwidmVydGljYWxBbGlnbiIsImxhYmVsIiwic2hhcmVkIiwiU3R5bGVkTWVudUJhciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCO0FBQUEsc0JBQ3RCO0FBQUssSUFBQSxLQUFLLEVBQUMsNEJBQVg7QUFBd0MsSUFBQSxNQUFNLEVBQUMsTUFBL0M7QUFBc0QsSUFBQSxPQUFPLEVBQUMsV0FBOUQ7QUFBMEUsSUFBQSxLQUFLLEVBQUMsTUFBaEY7QUFBdUYsSUFBQSxJQUFJLEVBQUM7QUFBNUYsa0JBQ0U7QUFDRSxJQUFBLENBQUMsRUFBQyxnTkFESjtBQUVFLElBQUEsSUFBSSxFQUFDO0FBRlAsSUFERixDQURzQjtBQUFBLENBQXhCOztBQVNBLElBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0I7QUFBQSxzQkFDcEI7QUFBSyxJQUFBLEtBQUssRUFBQyw0QkFBWDtBQUF3QyxJQUFBLE1BQU0sRUFBQyxNQUEvQztBQUFzRCxJQUFBLE9BQU8sRUFB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O0FBREUsS0FoRWE7QUFtRXhCK0UsSUFBQUEsTUFBTSxFQUFFO0FBQ05nRixNQUFBQSxVQUFVLEVBQUU7QUFETixLQW5FZ0I7QUFzRXhCN0YsSUFBQUEsU0FBUyxFQUFFO0FBQ1RsRSxNQUFBQSxLQUFLLEVBQUU7QUFERSxLQXRFYTtBQXlFeEIyRSxJQUFBQSxPQUFPLEVBQUU7QUFDUDRFLE1BQUFBLE9BQU8sRUFBRSxDQURGO0FBRVBLLE1BQUFBLGFBQWEsRUFBRTtBQUZSLEtBekVlO0FBNkV4QkksSUFBQUEsUUFBUSxFQUFFO0FBQ1JoSyxNQUFBQSxLQUFLLEVBQUUsTUFEQztBQUVSQyxNQUFBQSxNQUFNLEVBQUUsTUFGQTtBQUdSZ0osTUFBQUEsT0FBTyxFQUFFLEtBSEQ7QUFJUmdCLE1BQUFBLGFBQWEsRUFBRTtBQUpQLEtBN0VjO0FBbUZ4QkMsSUFBQUEsS0FBSyxFQUFFO0FBQ0xsQixNQUFBQSxLQUFLLEVBQUU7QUFERixLQW5GaUI7QUFzRnhCbUIsSUFBQUEsTUFBTSxFQUFFO0FBQ050QixNQUFBQSxPQUFPLEVBQUU7QUFESDtBQXRGZ0IsR0FBWjtBQUFBLENBQWQ7O0FBMkZBLElBQU11QixhQUFhLEdBQUcsd0JBQVd6QixLQUFYLEVBQWtCO0FBQUVkLEVBQUFBLEtBQUssRUFBRTtBQUFULENBQWxCLEVBQW1DM0gsT0FBbkMsQ0FBdEI7ZUFFZWtLLGEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IHsgTm9kZVNlbGVjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcblxuaW1wb3J0IEJvbGQgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdEJvbGQnO1xuaW1wb3J0IEl0YWxpYyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0SXRhbGljJztcbmltcG9ydCBTdHJpa2V0aHJvdWdoIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRTdHJpa2V0aHJvdWdoJztcbmltcG9ydCBDb2RlIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Db2RlJztcbmltcG9ydCBHcmlkT24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0dyaWRPbic7XG5pbXBvcnQgQnVsbGV0ZWRMaXN0SWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0TGlzdEJ1bGxldGVkJztcbmltcG9ydCBOdW1iZXJlZExpc3RJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRMaXN0TnVtYmVyZWQnO1xuaW1wb3J0IFVuZGVybGluZSBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0VW5kZXJsaW5lZCc7XG5pbXBvcnQgRnVuY3Rpb25zIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9GdW5jdGlvbnMnO1xuaW1wb3J0IEltYWdlSWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvSW1hZ2UnO1xuaW1wb3J0IFJlZG8gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1JlZG8nO1xuaW1wb3J0IFVuZG8gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1VuZG8nO1xuaW1wb3J0IFRoZWF0ZXJzSWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvVGhlYXRlcnMnO1xuaW1wb3J0IFZvbHVtZVVwSWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvVm9sdW1lVXAnO1xuaW1wb3J0IEJvcmRlckFsbCBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvQm9yZGVyQWxsJztcblxuaW1wb3J0IHsgRWRpdG9yQ29udGVudCwgdXNlRWRpdG9yU3RhdGUgfSBmcm9tICdAdGlwdGFwL3JlYWN0JztcblxuaW1wb3J0IHsgUElFX1RPT0xCQVJfX0NMQVNTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRvb2xiYXJJY29uIH0gZnJvbSAnLi9yZXNwQXJlYS9Ub29sYmFySWNvbic7XG5pbXBvcnQgeyBzcGFuaXNoQ29uZmlnLCBzcGVjaWFsQ29uZmlnIH0gZnJvbSAnLi9jaGFyYWN0ZXJzL2NoYXJhY3RlclV0aWxzJztcbmltcG9ydCBUZXh0QWxpZ25JY29uIGZyb20gJy4vaWNvbnMvVGV4dEFsaWduJztcbmltcG9ydCBDU1NJY29uIGZyb20gJy4vaWNvbnMvQ3NzSWNvbic7XG5pbXBvcnQgeyBBZGRDb2x1bW4sIEFkZFJvdywgUmVtb3ZlQ29sdW1uLCBSZW1vdmVSb3csIFJlbW92ZVRhYmxlIH0gZnJvbSAnLi9pY29ucy90YWJsZUljb25zJztcblxuaW1wb3J0IHsgQ2hhcmFjdGVySWNvbiwgQ2hhcmFjdGVyUGlja2VyIH0gZnJvbSAnLi9DaGFyYWN0ZXJQaWNrZXInO1xuaW1wb3J0IHsgRG9uZUJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL2RvbmUtYnV0dG9uJztcblxuY29uc3QgU3VwZXJzY3JpcHRJY29uID0gKCkgPT4gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJub25lXCI+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjIsN2gtMnYxaDN2MWgtNFY3YzAtMC41NSwwLjQ1LTEsMS0xaDJWNWgtM1Y0aDNjMC41NSwwLDEsMC40NSwxLDF2MUMyMyw2LjU1LDIyLjU1LDcsMjIsN3ogTTUuODgsMjBoMi42NmwzLjQtNS40MmgwLjEyIGwzLjQsNS40MmgyLjY2bC00LjY1LTcuMjdMMTcuODEsNmgtMi42OGwtMy4wNyw0Ljk5aC0wLjEyTDguODUsNkg2LjE5bDQuMzIsNi43M0w1Ljg4LDIwelwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmNvbnN0IFN1YnNjcmlwdEljb24gPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNHB4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICA8cGF0aFxuICAgICAgZD1cIk0yMiwxOGgtMnYxaDN2MWgtNHYtMmMwLTAuNTUsMC40NS0xLDEtMWgydi0xaC0zdi0xaDNjMC41NSwwLDEsMC40NSwxLDF2MUMyMywxNy41NSwyMi41NSwxOCwyMiwxOHogTTUuODgsMThoMi42NiBsMy40LTUuNDJoMC4xMmwzLjQsNS40MmgyLjY2bC00LjY1LTcuMjdMMTcuODEsNGgtMi42OGwtMy4wNyw0Ljk5aC0wLjEyTDguODUsNEg2LjE5bDQuMzIsNi43M0w1Ljg4LDE4elwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmNvbnN0IEhlYWRpbmdJY29uID0gKCkgPT4gKFxuICA8c3ZnXG4gICAgd2lkdGg9XCIzMFwiXG4gICAgaGVpZ2h0PVwiMjhcIlxuICAgIHZpZXdCb3g9XCIwIDAgMzAgMjhcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICBzdHlsZT17eyB3aWR0aDogJzIwcHgnLCBoZWlnaHQ6ICcxOHB4JyB9fVxuICA+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjcgNFYyNEgyOUMyOS41IDI0IDMwIDI0LjUgMzAgMjVWMjdDMzAgMjcuNTYyNSAyOS41IDI4IDI5IDI4SDE5QzE4LjQzNzUgMjggMTggMjcuNTYyNSAxOCAyN1YyNUMxOCAyNC41IDE4LjQzNzUgMjQgMTkgMjRIMjFWMTZIOVYyNEgxMUMxMS41IDI0IDEyIDI0LjUgMTIgMjVWMjdDMTIgMjcuNTYyNSAxMS41IDI4IDExIDI4SDFDMC40Mzc1IDI4IDAgMjcuNTYyNSAwIDI3VjI1QzAgMjQuNSAwLjQzNzUgMjQgMSAyNEgzVjRIMUMwLjQzNzUgNCAwIDMuNTYyNSAwIDNWMUMwIDAuNSAwLjQzNzUgMCAxIDBIMTFDMTEuNSAwIDEyIDAuNSAxMiAxVjNDMTIgMy41NjI1IDExLjUgNCAxMSA0SDlWMTJIMjFWNEgxOUMxOC40Mzc1IDQgMTggMy41NjI1IDE4IDNWMUMxOCAwLjUgMTguNDM3NSAwIDE5IDBIMjlDMjkuNSAwIDMwIDAuNSAzMCAxVjNDMzAgMy41NjI1IDI5LjUgNCAyOSA0SDI3WlwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmZ1bmN0aW9uIE1lbnVCYXIoeyBlZGl0b3IsIGNsYXNzZXMsIGFjdGl2ZVBsdWdpbnMsIHRvb2xiYXJPcHRzOiB0b29sT3B0cywgcmVzcG9uc2VBcmVhUHJvcHMsIG9uQ2hhbmdlIH0pIHtcbiAgY29uc3QgW3Nob3dQaWNrZXIsIHNldFNob3dQaWNrZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB0b29sYmFyT3B0cyA9IHRvb2xPcHRzID8/IHt9O1xuXG4gIGNvbnN0IGVkaXRvclN0YXRlID0gdXNlRWRpdG9yU3RhdGUoe1xuICAgIGVkaXRvcixcbiAgICBzZWxlY3RvcjogKGN0eCkgPT4ge1xuICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGN0eC5lZGl0b3I/LnN0YXRlIHx8IHt9O1xuXG4gICAgICBsZXQgY3VycmVudE5vZGU7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBOb2RlU2VsZWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnROb2RlID0gc2VsZWN0aW9uLm5vZGU7IC8vIHRoZSBzZWxlY3RlZCBub2RlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpZGVEZWZhdWx0VG9vbGJhciA9XG4gICAgICAgIGN0eC5lZGl0b3I/LmlzQWN0aXZlKCdtYXRoJykgfHxcbiAgICAgICAgY3R4LmVkaXRvcj8uaXNBY3RpdmUoJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJykgfHxcbiAgICAgICAgY3R4LmVkaXRvcj8uaXNBY3RpdmUoJ2ltYWdlVXBsb2FkTm9kZScpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50Tm9kZSxcbiAgICAgICAgaGlkZURlZmF1bHRUb29sYmFyLFxuICAgICAgICBpc0ZvY3VzZWQ6IGN0eC5lZGl0b3I/LmlzRm9jdXNlZCxcbiAgICAgICAgaXNCb2xkOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdib2xkJykgPz8gZmFsc2UsXG4gICAgICAgIGNhbkJvbGQ6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnRvZ2dsZUJvbGQoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBpc1RhYmxlOiBjdHguZWRpdG9yLmlzQWN0aXZlKCd0YWJsZScpID8/IGZhbHNlLFxuICAgICAgICB0YWJsZUhhc0JvcmRlcjogY3R4LmVkaXRvci5nZXRBdHRyaWJ1dGVzKCd0YWJsZScpPy5ib3JkZXIgPT09ICcxJyA/PyBmYWxzZSxcbiAgICAgICAgY2FuVGFibGU6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmluc2VydFRhYmxlKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgaXNJdGFsaWM6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2l0YWxpYycpID8/IGZhbHNlLFxuICAgICAgICBjYW5JdGFsaWM6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnRvZ2dsZUl0YWxpYygpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICAgIGlzU3RyaWtlOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdzdHJpa2UnKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuU3RyaWtlOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC50b2dnbGVTdHJpa2UoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBpc0NvZGU6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2NvZGUnKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuQ29kZTpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAudG9nZ2xlQ29kZSgpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICAgIGNhbkNsZWFyTWFya3M6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnVuc2V0QWxsTWFya3MoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBpc1VuZGVybGluZTogY3R4LmVkaXRvci5pc0FjdGl2ZSgndW5kZXJsaW5lJykgPz8gZmFsc2UsXG4gICAgICAgIGlzU3ViU2NyaXB0OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdzdWJzY3JpcHQnKSA/PyBmYWxzZSxcbiAgICAgICAgaXNTdXBlclNjcmlwdDogY3R4LmVkaXRvci5pc0FjdGl2ZSgnc3VwZXJzY3JpcHQnKSA/PyBmYWxzZSxcbiAgICAgICAgaXNQYXJhZ3JhcGg6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ3BhcmFncmFwaCcpID8/IGZhbHNlLFxuICAgICAgICBpc0hlYWRpbmcxOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogMSB9KSA/PyBmYWxzZSxcbiAgICAgICAgaXNIZWFkaW5nMjogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDIgfSkgPz8gZmFsc2UsXG4gICAgICAgIGlzSGVhZGluZzM6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiAzIH0pID8/IGZhbHNlLFxuICAgICAgICBpc0hlYWRpbmc0OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogNCB9KSA/PyBmYWxzZSxcbiAgICAgICAgaXNIZWFkaW5nNTogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDUgfSkgPz8gZmFsc2UsXG4gICAgICAgIGlzSGVhZGluZzY6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiA2IH0pID8/IGZhbHNlLFxuICAgICAgICBpc0J1bGxldExpc3Q6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2J1bGxldExpc3QnKSA/PyBmYWxzZSxcbiAgICAgICAgaXNPcmRlcmVkTGlzdDogY3R4LmVkaXRvci5pc0FjdGl2ZSgnb3JkZXJlZExpc3QnKSA/PyBmYWxzZSxcbiAgICAgICAgaXNDb2RlQmxvY2s6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2NvZGVCbG9jaycpID8/IGZhbHNlLFxuICAgICAgICBpc0Jsb2NrcXVvdGU6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2Jsb2NrcXVvdGUnKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuVW5kbzpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAudW5kbygpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICAgIGNhblJlZG86XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnJlZG8oKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgfTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBoYXNEb25lQnV0dG9uID0gZmFsc2U7XG4gIGNvbnN0IGF1dG9XaWR0aCA9IGZhbHNlO1xuXG4gIGNvbnN0IG5hbWVzID0gY2xhc3NOYW1lcyhjbGFzc2VzLnRvb2xiYXIsIFBJRV9UT09MQkFSX19DTEFTUywge1xuICAgIFtjbGFzc2VzLnRvb2xiYXJXaXRoTm9Eb25lXTogIWhhc0RvbmVCdXR0b24sXG4gICAgW2NsYXNzZXMudG9vbGJhclRvcF06IHRvb2xiYXJPcHRzLnBvc2l0aW9uID09PSAndG9wJyxcbiAgICBbY2xhc3Nlcy50b29sYmFyUmlnaHRdOiB0b29sYmFyT3B0cy5hbGlnbm1lbnQgPT09ICdyaWdodCcsXG4gICAgW2NsYXNzZXMuZm9jdXNlZF06IHRvb2xiYXJPcHRzLmFsd2F5c1Zpc2libGUgfHwgKGVkaXRvclN0YXRlLmlzRm9jdXNlZCAmJiAhZWRpdG9yLl90b29sYmFyT3BlbmVkKSxcbiAgICBbY2xhc3Nlcy5hdXRvV2lkdGhdOiBhdXRvV2lkdGgsXG4gICAgW2NsYXNzZXMuZnVsbFdpZHRoXTogIWF1dG9XaWR0aCxcbiAgICBbY2xhc3Nlcy5oaWRkZW5dOiB0b29sYmFyT3B0cy5pc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3QgY3VzdG9tU3R5bGVzID0gdG9vbGJhck9wdHMubWluV2lkdGggIT09IHVuZGVmaW5lZCA/IHsgbWluV2lkdGg6IHRvb2xiYXJPcHRzLm1pbldpZHRoIH0gOiB7fTtcblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSAoZSkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICBjb25zdCB0b29sYmFyQnV0dG9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAge1xuICAgICAgICBpY29uOiA8R3JpZE9uIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuaW5zZXJ0VGFibGUoeyByb3dzOiAyLCBjb2xzOiAyLCB3aXRoSGVhZGVyUm93OiBmYWxzZSB9KVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIWFjdGl2ZVBsdWdpbnM/LmluY2x1ZGVzKCd0YWJsZScpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEFkZFJvdyAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLmFkZFJvd0FmdGVyKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5UYWJsZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxSZW1vdmVSb3cgLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC5kZWxldGVSb3coKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIXN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEFkZENvbHVtbiAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLmFkZENvbHVtbkFmdGVyKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5UYWJsZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxSZW1vdmVDb2x1bW4gLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC5kZWxldGVDb2x1bW4oKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIXN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFJlbW92ZVRhYmxlIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuZGVsZXRlVGFibGUoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIXN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEJvcmRlckFsbCAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlQXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcygndGFibGUnKTtcblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRhYmxlQXR0cnMsXG4gICAgICAgICAgICBib3JkZXI6IHRhYmxlQXR0cnMuYm9yZGVyICE9PSAnMCcgPyAnMCcgOiAnMScsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVkaXRvci5jb21tYW5kcy51cGRhdGVBdHRyaWJ1dGVzKCd0YWJsZScsIHVwZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUudGFibGVIYXNCb3JkZXIsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEJvbGQgLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC50b2dnbGVCb2xkKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygnYm9sZCcpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzQm9sZCxcbiAgICAgICAgaXNEaXNhYmxlZDogKHN0YXRlKSA9PiAhc3RhdGUuY2FuQm9sZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxJdGFsaWMgLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC50b2dnbGVJdGFsaWMoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIWFjdGl2ZVBsdWdpbnM/LmluY2x1ZGVzKCdpdGFsaWMnKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc0l0YWxpYyxcbiAgICAgICAgaXNEaXNhYmxlZDogKHN0YXRlKSA9PiAhc3RhdGUuY2FuSXRhbGljLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFN0cmlrZXRocm91Z2ggLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC50b2dnbGVTdHJpa2UoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIWFjdGl2ZVBsdWdpbnM/LmluY2x1ZGVzKCdzdHJpa2V0aHJvdWdoJykgfHwgc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUuaXNTdHJpa2UsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblN0cmlrZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxDb2RlIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlQ29kZSgpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ2NvZGUnKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc0NvZGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhbkNvZGUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8VW5kZXJsaW5lIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlVW5kZXJsaW5lKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygndW5kZXJsaW5lJykgfHwgc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUuaXNVbmRlcmxpbmUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8U3Vic2NyaXB0SWNvbiAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZVN1YnNjcmlwdCgpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ3N1YnNjcmlwdCcpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzU3ViU2NyaXB0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFN1cGVyc2NyaXB0SWNvbiAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZVN1cGVyc2NyaXB0KClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygnc3VwZXJzY3JpcHQnKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc1N1cGVyU2NyaXB0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEltYWdlSWNvbiAvPixcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygnaW1hZ2UnKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuc2V0SW1hZ2VVcGxvYWROb2RlKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxUaGVhdGVyc0ljb24gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ3ZpZGVvJykgfHwgc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLmluc2VydE1lZGlhKHsgdGFnOiAndmlkZW8nIH0pXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8Vm9sdW1lVXBJY29uIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIWFjdGl2ZVBsdWdpbnM/LmluY2x1ZGVzKCdhdWRpbycpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC5pbnNlcnRNZWRpYSh7IHRhZzogJ2F1ZGlvJyB9KVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPENTU0ljb24gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ2NzcycpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+IGVkaXRvci5jb21tYW5kcy5vcGVuQ1NTQ2xhc3NEaWFsb2coKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxIZWFkaW5nSWNvbiAvPixcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygnaDMnKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlSGVhZGluZyh7IGxldmVsOiAzIH0pXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzSGVhZGluZzMsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8RnVuY3Rpb25zIC8+LFxuICAgICAgICBoaWRkZW46ICgpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygnbWF0aCcpLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuaW5zZXJ0TWF0aCgnJylcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxDaGFyYWN0ZXJJY29uIGxldHRlcj1cIsOxXCIgLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ2xhbmd1YWdlQ2hhcmFjdGVycycpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IHNldFNob3dQaWNrZXIoc3BhbmlzaENvbmZpZyksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8Q2hhcmFjdGVySWNvbiBsZXR0ZXI9XCLigqxcIiAvPixcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+IGFjdGl2ZVBsdWdpbnM/LmZpbHRlcigocCkgPT4gcCA9PT0gJ2xhbmd1YWdlQ2hhcmFjdGVycycpLmxlbmd0aCAhPT0gMiB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBzZXRTaG93UGlja2VyKHNwZWNpYWxDb25maWcpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFRleHRBbGlnbkljb24gZWRpdG9yPXtlZGl0b3J9IC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIWFjdGl2ZVBsdWdpbnM/LmluY2x1ZGVzKCd0ZXh0LWFsaWduJykgfHwgc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8QnVsbGV0ZWRMaXN0SWNvbiAvPixcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygnYnVsbGV0ZWQtbGlzdCcpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC50b2dnbGVCdWxsZXRMaXN0KClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUuaXNCdWxsZXRMaXN0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPE51bWJlcmVkTGlzdEljb24gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ251bWJlcmVkLWxpc3QnKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlT3JkZXJlZExpc3QoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc09yZGVyZWRMaXN0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFVuZG8gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhYWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ3VuZG8nKSB8fCBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudW5kbygpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblVuZG8sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8UmVkbyAvPixcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFhY3RpdmVQbHVnaW5zPy5pbmNsdWRlcygncmVkbycpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC5yZWRvKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaXNEaXNhYmxlZDogKHN0YXRlKSA9PiAhc3RhdGUuY2FuUmVkbyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbYWN0aXZlUGx1Z2lucywgZWRpdG9yXSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtuYW1lc30gc3R5bGU9e3sgLi4uY3VzdG9tU3R5bGVzIH19IG9uTW91c2VEb3duPXtoYW5kbGVNb3VzZURvd259PlxuICAgICAgeyFlZGl0b3JTdGF0ZS5oaWRlRGVmYXVsdFRvb2xiYXIgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5kZWZhdWx0VG9vbGJhcn0gdGFiSW5kZXg9XCIxXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgICB7dG9vbGJhckJ1dHRvbnNcbiAgICAgICAgICAgICAgLmZpbHRlcigoYnRuKSA9PiAhYnRuLmhpZGRlbj8uKGVkaXRvclN0YXRlKSlcbiAgICAgICAgICAgICAgLm1hcCgoYnRuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkID0gYnRuLmlzRGlzYWJsZWQ/LihlZGl0b3JTdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gYnRuLmlzQWN0aXZlPy4oZWRpdG9yU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBidG4ub25DbGljayhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIHsgW2NsYXNzZXMuYWN0aXZlXTogYWN0aXZlIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7YnRuLmljb259XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YWN0aXZlUGx1Z2lucz8uaW5jbHVkZXMoJ3Jlc3BvbnNlQXJlYScpICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgICAuaW5zZXJ0UmVzcG9uc2VBcmVhKHJlc3BvbnNlQXJlYVByb3BzLnR5cGUpXG4gICAgICAgICAgICAgICAgICAucnVuKCk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxUb29sYmFySWNvbiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxEb25lQnV0dG9uXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPy4oZWRpdG9yLmdldEhUTUwoKSk7XG4gICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5ibHVyKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHtzaG93UGlja2VyICYmIChcbiAgICAgICAgPENoYXJhY3RlclBpY2tlclxuICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgIG9wdHM9e3tcbiAgICAgICAgICAgIC4uLnNob3dQaWNrZXIsXG4gICAgICAgICAgICByZW5kZXJQb3BPdmVyOiAoZXYsIGNoKSA9PiBjb25zb2xlLmxvZygnU2hvdyBwb3BvdmVyJywgY2gpLFxuICAgICAgICAgICAgY2xvc2VQb3BPdmVyOiAoKSA9PiBjb25zb2xlLmxvZygnQ2xvc2UgcG9wb3ZlcicpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1BpY2tlcihmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCBzdHlsZSA9ICh0aGVtZSkgPT4gKHtcbiAgZGVmYXVsdFRvb2xiYXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICB9LFxuICBidXR0b25zQ29udGFpbmVyOiB7XG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGNvbG9yOiAnZ3JleScsXG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBwYWRkaW5nOiAnMnB4JyxcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBjb2xvcjogJ2JsYWNrJyxcbiAgICB9LFxuICAgICcmOmZvY3VzJzoge1xuICAgICAgb3V0bGluZTogYDJweCBzb2xpZCAke3RoZW1lLnBhbGV0dGUuZ3JleVs3MDBdfWAsXG4gICAgfSxcbiAgfSxcbiAgYWN0aXZlOiB7XG4gICAgY29sb3I6ICdibGFjaycsXG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgb3BhY2l0eTogMC43LFxuICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkJyxcbiAgICAnJiA6aG92ZXInOiB7XG4gICAgICBjb2xvcjogJ2dyZXknLFxuICAgIH0sXG4gIH0sXG4gIGlzQWN0aXZlOiB7XG4gICAgYmFja2dyb3VuZDogJ3ZhcigtLXB1cnBsZSknLFxuICAgIGNvbG9yOiAndmFyKC0td2hpdGUpJyxcbiAgfSxcbiAgdG9vbGJhcjoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHpJbmRleDogMjAsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZWRpdGFibGUtaHRtbC10b29sYmFyLWJnLCAjZWZlZmVmKScsXG4gICAgbWluV2lkdGg6ICcyODBweCcsXG4gICAgbWFyZ2luOiAnNXB4IDAgMCAwJyxcbiAgICBwYWRkaW5nOiAnMnB4JyxcbiAgICBib3hTaGFkb3c6XG4gICAgICAnMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIG9wYWNpdHk6IDAsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICB9LFxuICB0b29sYmFyV2l0aE5vRG9uZToge1xuICAgIG1pbldpZHRoOiAnMjY1cHgnLFxuICB9LFxuICB0b29sYmFyVG9wOiB7XG4gICAgdG9wOiAnLTQ1cHgnLFxuICB9LFxuICB0b29sYmFyUmlnaHQ6IHtcbiAgICByaWdodDogMCxcbiAgfSxcbiAgZnVsbFdpZHRoOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgfSxcbiAgaGlkZGVuOiB7XG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gIH0sXG4gIGF1dG9XaWR0aDoge1xuICAgIHdpZHRoOiAnYXV0bycsXG4gIH0sXG4gIGZvY3VzZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgfSxcbiAgaWNvblJvb3Q6IHtcbiAgICB3aWR0aDogJzI4cHgnLFxuICAgIGhlaWdodDogJzI4cHgnLFxuICAgIHBhZGRpbmc6ICc0cHgnLFxuICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnLFxuICB9LFxuICBsYWJlbDoge1xuICAgIGNvbG9yOiAndmFyKC0tZWRpdGFibGUtaHRtbC10b29sYmFyLWNoZWNrLCAjMDBiYjAwKScsXG4gIH0sXG4gIHNoYXJlZDoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgfSxcbn0pO1xuXG5jb25zdCBTdHlsZWRNZW51QmFyID0gd2l0aFN0eWxlcyhzdHlsZSwgeyBpbmRleDogMTAwMCB9KShNZW51QmFyKTtcblxuZXhwb3J0IGRlZmF1bHQgU3R5bGVkTWVudUJhcjtcbiJdfQ==