@dextinity/cms-admin 10.6.0 → 10.7.0-canary-20260914141930
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/blocks/tipTap/TipTapToolbar.d.ts.map +1 -1
- package/lib/blocks/tipTap/TipTapToolbar.js +9 -7
- package/lib/blocks/tipTap/createTipTapRichTextBlock.d.ts +17 -2
- package/lib/blocks/tipTap/createTipTapRichTextBlock.d.ts.map +1 -1
- package/lib/blocks/tipTap/createTipTapRichTextBlock.js +98 -26
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TipTapToolbar.d.ts","sourceRoot":"","sources":["../../../src/blocks/tipTap/TipTapToolbar.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,eAAe,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAc,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EACR,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EAEvB,MAAM,6BAA6B,CAAC;AA+GrC,eAAO,MAAM,aAAa,GAAI,iJAW3B;IACC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,qBAAqB,CAAC;IACvC,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC,
|
|
1
|
+
{"version":3,"file":"TipTapToolbar.d.ts","sourceRoot":"","sources":["../../../src/blocks/tipTap/TipTapToolbar.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAAE,KAAK,MAAM,EAAkB,MAAM,eAAe,CAAC;AAI5D,OAAO,KAAK,EAAE,cAAc,EAAc,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EACR,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EAEvB,MAAM,6BAA6B,CAAC;AA+GrC,eAAO,MAAM,aAAa,GAAI,iJAW3B;IACC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,qBAAqB,CAAC;IACvC,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC,4CAyjBA,CAAC"}
|
|
@@ -164,6 +164,7 @@ export var TipTapToolbar = function TipTapToolbar(_ref3) {
|
|
|
164
164
|
var specialChars = resolvedOptions.nonBreakingSpace || resolvedOptions.softHyphen;
|
|
165
165
|
var hasLink = resolvedOptions.link && !!linkBlock;
|
|
166
166
|
var headingLevels = resolvedOptions.heading ? resolvedOptions.heading.levels : [];
|
|
167
|
+
var hasParagraph = resolvedOptions.paragraph;
|
|
167
168
|
var hasPlaceholders = placeholders.length > 0;
|
|
168
169
|
var hasChildBlocks = Object.keys(childBlocks).length > 0;
|
|
169
170
|
var editorState = useEditorState({
|
|
@@ -179,7 +180,7 @@ export var TipTapToolbar = function TipTapToolbar(_ref3) {
|
|
|
179
180
|
return String(level);
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
|
-
return "paragraph";
|
|
183
|
+
return hasParagraph || resolvedOptions.heading === false ? "paragraph" : String(resolvedOptions.heading.defaultLevel);
|
|
183
184
|
}();
|
|
184
185
|
var activeTipTapTextBlockType = function () {
|
|
185
186
|
if (e.isActive("orderedList")) {
|
|
@@ -197,10 +198,11 @@ export var TipTapToolbar = function TipTapToolbar(_ref3) {
|
|
|
197
198
|
}
|
|
198
199
|
return "paragraph";
|
|
199
200
|
}();
|
|
200
|
-
var attrs = e.isActive("heading") ? e.getAttributes("heading") : e.getAttributes("paragraph");
|
|
201
|
+
var attrs = e.isActive("heading") || !hasParagraph ? e.getAttributes("heading") : e.getAttributes("paragraph");
|
|
201
202
|
|
|
202
|
-
// Calculate current list nesting depth for listLevelMax enforcement
|
|
203
|
-
|
|
203
|
+
// Calculate current list nesting depth for listLevelMax enforcement.
|
|
204
|
+
// The list item node only exists in the schema when lists are enabled.
|
|
205
|
+
var canIndent = lists && e.can().sinkListItem("listItem");
|
|
204
206
|
if (canIndent && listLevelMax !== undefined) {
|
|
205
207
|
var $from = e.state.selection.$from;
|
|
206
208
|
var listDepth = 0;
|
|
@@ -221,7 +223,7 @@ export var TipTapToolbar = function TipTapToolbar(_ref3) {
|
|
|
221
223
|
canUndo: e.can().undo(),
|
|
222
224
|
canRedo: e.can().redo(),
|
|
223
225
|
canIndent: canIndent,
|
|
224
|
-
canDedent: e.can().liftListItem("listItem"),
|
|
226
|
+
canDedent: lists && e.can().liftListItem("listItem"),
|
|
225
227
|
isBoldActive: e.isActive("bold"),
|
|
226
228
|
isItalicActive: e.isActive("italic"),
|
|
227
229
|
isUnderlineActive: e.isActive("underline"),
|
|
@@ -350,7 +352,7 @@ export var TipTapToolbar = function TipTapToolbar(_ref3) {
|
|
|
350
352
|
};
|
|
351
353
|
var handleTextBlockStyleChange = function handleTextBlockStyleChange(e) {
|
|
352
354
|
var value = e.target.value || null;
|
|
353
|
-
var nodeType = editor.isActive("heading") ? "heading" : "paragraph";
|
|
355
|
+
var nodeType = editor.isActive("heading") || !hasParagraph ? "heading" : "paragraph";
|
|
354
356
|
editor.chain().focus().updateAttributes(nodeType, {
|
|
355
357
|
textBlockStyle: value
|
|
356
358
|
}).run();
|
|
@@ -403,7 +405,7 @@ export var TipTapToolbar = function TipTapToolbar(_ref3) {
|
|
|
403
405
|
elevation: 1
|
|
404
406
|
},
|
|
405
407
|
sx: selectSx,
|
|
406
|
-
children: [/*#__PURE__*/_jsx(MenuItem, {
|
|
408
|
+
children: [hasParagraph && /*#__PURE__*/_jsx(MenuItem, {
|
|
407
409
|
value: "paragraph",
|
|
408
410
|
dense: true,
|
|
409
411
|
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type SvgIconProps } from "@mui/material";
|
|
2
|
-
import type
|
|
2
|
+
import { type Level as HeadingLevel } from "@tiptap/extension-heading";
|
|
3
3
|
import { type JSONContent } from "@tiptap/react";
|
|
4
4
|
import { type ComponentType, type ForwardRefExoticComponent, type HTMLAttributes, type ReactNode, type RefAttributes } from "react";
|
|
5
5
|
import { type BlockInterface, type LinkBlockInterface, type ReadOnlyBlockRenderInterface } from "../types";
|
|
@@ -10,6 +10,11 @@ interface TipTapHeadingOptions {
|
|
|
10
10
|
* Must be a non-empty array of unique integers between 1 and 6, otherwise an error is thrown.
|
|
11
11
|
*/
|
|
12
12
|
levels?: number[];
|
|
13
|
+
/**
|
|
14
|
+
* Heading level used for newly created headings. Defaults to the lowest allowed level.
|
|
15
|
+
* Must be one of `levels`, otherwise an error is thrown.
|
|
16
|
+
*/
|
|
17
|
+
defaultLevel?: number;
|
|
13
18
|
}
|
|
14
19
|
/**
|
|
15
20
|
* The block's options with the defaults applied and the heading levels validated.
|
|
@@ -22,8 +27,10 @@ export interface TipTapResolvedOptions {
|
|
|
22
27
|
strike: boolean;
|
|
23
28
|
sub: boolean;
|
|
24
29
|
sup: boolean;
|
|
30
|
+
paragraph: boolean;
|
|
25
31
|
heading: false | {
|
|
26
32
|
levels: HeadingLevel[];
|
|
33
|
+
defaultLevel: HeadingLevel;
|
|
27
34
|
};
|
|
28
35
|
orderedList: boolean;
|
|
29
36
|
unorderedList: boolean;
|
|
@@ -107,9 +114,17 @@ interface TipTapRichTextBlockFactoryOptions {
|
|
|
107
114
|
* Enables superscript text. Defaults to `true`.
|
|
108
115
|
*/
|
|
109
116
|
sup?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Enables paragraphs. Defaults to `true`.
|
|
119
|
+
*
|
|
120
|
+
* Pass `false` for a heading-only block (e.g. a headline): the editor starts with a heading
|
|
121
|
+
* instead of a paragraph and the text block type select only offers headings. Requires
|
|
122
|
+
* headings, and disables lists, because a list item's content starts with a paragraph.
|
|
123
|
+
*/
|
|
124
|
+
paragraph?: boolean;
|
|
110
125
|
/**
|
|
111
126
|
* Enables headings. Defaults to `true` (all levels).
|
|
112
|
-
* Pass an options object to limit the selectable heading `levels`.
|
|
127
|
+
* Pass an options object to limit the selectable heading `levels` or to set the `defaultLevel`.
|
|
113
128
|
*/
|
|
114
129
|
heading?: boolean | TipTapHeadingOptions;
|
|
115
130
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTipTapRichTextBlock.d.ts","sourceRoot":"","sources":["../../../src/blocks/tipTap/createTipTapRichTextBlock.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"createTipTapRichTextBlock.d.ts","sourceRoot":"","sources":["../../../src/blocks/tipTap/createTipTapRichTextBlock.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAW,KAAK,KAAK,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGhF,OAAO,EAAiB,KAAK,WAAW,EAAa,MAAM,eAAe,CAAC;AAE3E,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAGrB,MAAM,OAAO,CAAC;AAIf,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAiB1H,YAAY,EAAE,WAAW,IAAI,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE9E,UAAU,oBAAoB;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,KAAK,GAAG;QAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QAAC,YAAY,EAAE,YAAY,CAAA;KAAE,CAAC;IACxE,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAuED,MAAM,MAAM,mBAAmB,GACzB,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,cAAc,GACd,gBAAgB,CAAC;AAEvB,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD;;OAEG;IACH,IAAI,CAAC,EAAE,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;CAC9F;AAED,MAAM,WAAW,wBAAwB;IACrC,aAAa,EAAE,WAAW,CAAC;CAC9B;AAED,UAAU,uBAAuB;IAC7B,aAAa,EAAE,WAAW,CAAC;CAC9B;AAED,UAAU,wBAAwB;IAC9B,aAAa,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B;AAED,UAAU,iCAAiC;IACvC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;IACzC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;IAC3C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC/C;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAyFD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,WAAW,CAoB1F;AAGD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvH;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,WAAW,CAejH;AAGD,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAe9I;AAuHD,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,wBAAwB,CAAC;IAChC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC5E,eAAe,EAAE,qBAAqB,CAAC;IACvC,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,GAAI,iKAa1B,iBAAiB,mDAmJnB,CAAC;AAEF,KAAK,4BAA4B,GAAG,cAAc,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,GAC3H,4BAA4B,CAAC,wBAAwB,CAAC,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAS,iCAAsC,KAAG,4BA+I3F,CAAC"}
|
|
@@ -4,26 +4,27 @@ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLim
|
|
|
4
4
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
|
-
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
8
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
-
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
10
|
-
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
11
7
|
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
12
8
|
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
9
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
13
10
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
11
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
12
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
16
13
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
17
14
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
18
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
19
15
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
16
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
17
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
20
18
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
19
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
20
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
21
21
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
22
22
|
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
23
23
|
import { greyPalette, useContentTranslationService, useErrorDialog } from "@dextinity/admin";
|
|
24
24
|
import { Box } from "@mui/material";
|
|
25
25
|
import { styled } from "@mui/material/styles";
|
|
26
26
|
import { Extension } from "@tiptap/core";
|
|
27
|
+
import { Heading } from "@tiptap/extension-heading";
|
|
27
28
|
import Subscript from "@tiptap/extension-subscript";
|
|
28
29
|
import Superscript from "@tiptap/extension-superscript";
|
|
29
30
|
import { EditorContent, useEditor } from "@tiptap/react";
|
|
@@ -59,7 +60,7 @@ function isValidHeadingLevels(headingLevels) {
|
|
|
59
60
|
});
|
|
60
61
|
}
|
|
61
62
|
function resolveTipTapOptions() {
|
|
62
|
-
var
|
|
63
|
+
var _headingOptions$level, _headingOptions$defau;
|
|
63
64
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
64
65
|
_ref$undoRedoButtons = _ref.undoRedoButtons,
|
|
65
66
|
undoRedoButtons = _ref$undoRedoButtons === void 0 ? true : _ref$undoRedoButtons,
|
|
@@ -75,12 +76,12 @@ function resolveTipTapOptions() {
|
|
|
75
76
|
sub = _ref$sub === void 0 ? true : _ref$sub,
|
|
76
77
|
_ref$sup = _ref.sup,
|
|
77
78
|
sup = _ref$sup === void 0 ? true : _ref$sup,
|
|
79
|
+
_ref$paragraph = _ref.paragraph,
|
|
80
|
+
paragraph = _ref$paragraph === void 0 ? true : _ref$paragraph,
|
|
78
81
|
_ref$heading = _ref.heading,
|
|
79
82
|
heading = _ref$heading === void 0 ? true : _ref$heading,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
_ref$unorderedList = _ref.unorderedList,
|
|
83
|
-
unorderedList = _ref$unorderedList === void 0 ? true : _ref$unorderedList,
|
|
83
|
+
orderedList = _ref.orderedList,
|
|
84
|
+
unorderedList = _ref.unorderedList,
|
|
84
85
|
_ref$nonBreakingSpace = _ref.nonBreakingSpace,
|
|
85
86
|
nonBreakingSpace = _ref$nonBreakingSpace === void 0 ? true : _ref$nonBreakingSpace,
|
|
86
87
|
_ref$softHyphen = _ref.softHyphen,
|
|
@@ -88,10 +89,23 @@ function resolveTipTapOptions() {
|
|
|
88
89
|
link = _ref.link,
|
|
89
90
|
_ref$contentTranslati = _ref.contentTranslation,
|
|
90
91
|
contentTranslation = _ref$contentTranslati === void 0 ? true : _ref$contentTranslati;
|
|
91
|
-
var
|
|
92
|
+
var headingOptions = heading !== false && heading !== true ? heading : {};
|
|
93
|
+
var headingLevels = (_headingOptions$level = headingOptions.levels) !== null && _headingOptions$level !== void 0 ? _headingOptions$level : allHeadingLevels;
|
|
92
94
|
if (!isValidHeadingLevels(headingLevels)) {
|
|
93
95
|
throw new Error("heading levels must be a non-empty array of unique integers between 1 and 6");
|
|
94
96
|
}
|
|
97
|
+
if (headingOptions.defaultLevel !== undefined && !headingLevels.includes(headingOptions.defaultLevel)) {
|
|
98
|
+
throw new Error("heading defaultLevel must be one of the allowed levels (".concat(headingLevels.join(", "), ")"));
|
|
99
|
+
}
|
|
100
|
+
var defaultHeadingLevel = (_headingOptions$defau = headingOptions.defaultLevel) !== null && _headingOptions$defau !== void 0 ? _headingOptions$defau : Math.min.apply(Math, _toConsumableArray(headingLevels));
|
|
101
|
+
if (!paragraph) {
|
|
102
|
+
if (heading === false) {
|
|
103
|
+
throw new Error("paragraph: false requires headings, otherwise no text block type is left");
|
|
104
|
+
}
|
|
105
|
+
if (orderedList || unorderedList) {
|
|
106
|
+
throw new Error("Lists require paragraphs, because a list item's content starts with a paragraph");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
95
109
|
return {
|
|
96
110
|
undoRedoButtons: undoRedoButtons,
|
|
97
111
|
bold: bold,
|
|
@@ -100,11 +114,14 @@ function resolveTipTapOptions() {
|
|
|
100
114
|
strike: strike,
|
|
101
115
|
sub: sub,
|
|
102
116
|
sup: sup,
|
|
117
|
+
paragraph: paragraph,
|
|
103
118
|
heading: heading === false ? false : {
|
|
104
|
-
levels: headingLevels
|
|
119
|
+
levels: headingLevels,
|
|
120
|
+
defaultLevel: defaultHeadingLevel
|
|
105
121
|
},
|
|
106
|
-
|
|
107
|
-
|
|
122
|
+
// Lists are enabled by default, but cannot exist without a paragraph to build their items from.
|
|
123
|
+
orderedList: orderedList !== null && orderedList !== void 0 ? orderedList : paragraph,
|
|
124
|
+
unorderedList: unorderedList !== null && unorderedList !== void 0 ? unorderedList : paragraph,
|
|
108
125
|
nonBreakingSpace: nonBreakingSpace,
|
|
109
126
|
softHyphen: softHyphen,
|
|
110
127
|
link: !!link,
|
|
@@ -132,11 +149,60 @@ function getPlainTextFromContent(content) {
|
|
|
132
149
|
}
|
|
133
150
|
return text;
|
|
134
151
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
152
|
+
|
|
153
|
+
// TipTap's own priority for the paragraph extension, which makes the paragraph the schema's first
|
|
154
|
+
// block node and therefore ProseMirror's default block type.
|
|
155
|
+
var paragraphPriority = 1000;
|
|
156
|
+
var buildEmptyContent = function buildEmptyContent(resolvedOptions) {
|
|
157
|
+
return {
|
|
158
|
+
type: "doc",
|
|
159
|
+
content: [resolvedOptions.paragraph || resolvedOptions.heading === false ? {
|
|
160
|
+
type: "paragraph"
|
|
161
|
+
} : {
|
|
162
|
+
type: "heading",
|
|
163
|
+
attrs: {
|
|
164
|
+
level: resolvedOptions.heading.defaultLevel
|
|
165
|
+
}
|
|
166
|
+
}]
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Sets the default heading level and, for heading-only blocks, makes the heading the schema's
|
|
172
|
+
* default block type (the position paragraphs would otherwise take, by priority) and replaces the
|
|
173
|
+
* heading keyboard shortcuts, which would otherwise toggle back to a paragraph.
|
|
174
|
+
*/
|
|
175
|
+
var buildHeadingExtension = function buildHeadingExtension(_ref2) {
|
|
176
|
+
var base = _ref2.base,
|
|
177
|
+
levels = _ref2.levels,
|
|
178
|
+
defaultLevel = _ref2.defaultLevel,
|
|
179
|
+
hasParagraph = _ref2.hasParagraph;
|
|
180
|
+
return base.extend(_objectSpread(_objectSpread({}, hasParagraph ? {} : {
|
|
181
|
+
priority: paragraphPriority,
|
|
182
|
+
addKeyboardShortcuts: function addKeyboardShortcuts() {
|
|
183
|
+
var _this = this;
|
|
184
|
+
return Object.fromEntries(levels.map(function (level) {
|
|
185
|
+
return ["Mod-Alt-".concat(level), function () {
|
|
186
|
+
return _this.editor.commands.setHeading({
|
|
187
|
+
level: level
|
|
188
|
+
});
|
|
189
|
+
}];
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
}), {}, {
|
|
193
|
+
addAttributes: function addAttributes() {
|
|
194
|
+
var _this$parent;
|
|
195
|
+
return _objectSpread(_objectSpread({}, (_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.call(this)), {}, {
|
|
196
|
+
// `rendered: false` keeps TipTap from adding a `level` HTML attribute, the level is the tag name.
|
|
197
|
+
level: {
|
|
198
|
+
"default": defaultLevel,
|
|
199
|
+
rendered: false
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
})).configure({
|
|
204
|
+
levels: levels
|
|
205
|
+
});
|
|
140
206
|
};
|
|
141
207
|
var isCmsBlockNode = function isCmsBlockNode(content) {
|
|
142
208
|
return content.type === "cmsBlock" || content.type === "cmsInlineBlock";
|
|
@@ -426,18 +492,23 @@ function buildTipTapExtensions(_ref4) {
|
|
|
426
492
|
italic: resolvedOptions.italic ? {} : false,
|
|
427
493
|
underline: resolvedOptions.underline ? {} : false,
|
|
428
494
|
strike: resolvedOptions.strike ? {} : false,
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
paragraph: hasTextBlockStyles ? false : undefined,
|
|
495
|
+
// The heading extension is added separately below to set the default heading level.
|
|
496
|
+
heading: false,
|
|
497
|
+
paragraph: resolvedOptions.paragraph && !hasTextBlockStyles ? undefined : false,
|
|
433
498
|
orderedList: resolvedOptions.orderedList ? {} : false,
|
|
434
499
|
bulletList: resolvedOptions.unorderedList ? {} : false,
|
|
500
|
+
// A list item's content starts with a paragraph, so lists cannot exist without one.
|
|
501
|
+
listItem: resolvedOptions.paragraph ? undefined : false,
|
|
502
|
+
listKeymap: resolvedOptions.paragraph ? undefined : false,
|
|
435
503
|
blockquote: false,
|
|
436
504
|
code: false,
|
|
437
505
|
codeBlock: false,
|
|
438
506
|
link: false
|
|
439
|
-
})].concat(_toConsumableArray(hasTextBlockStyles ? [TextBlockStyleParagraph] : []), _toConsumableArray(
|
|
440
|
-
|
|
507
|
+
})].concat(_toConsumableArray(resolvedOptions.paragraph && hasTextBlockStyles ? [TextBlockStyleParagraph] : []), _toConsumableArray(resolvedOptions.heading ? [buildHeadingExtension({
|
|
508
|
+
base: hasTextBlockStyles ? TextBlockStyleHeading : Heading,
|
|
509
|
+
levels: resolvedOptions.heading.levels,
|
|
510
|
+
defaultLevel: resolvedOptions.heading.defaultLevel,
|
|
511
|
+
hasParagraph: resolvedOptions.paragraph
|
|
441
512
|
})] : []), _toConsumableArray(hasInlineStyles ? [InlineStyleMark] : []), _toConsumableArray(resolvedOptions.sup ? [Superscript] : []), _toConsumableArray(resolvedOptions.sub ? [Subscript] : []), _toConsumableArray(resolvedOptions.nonBreakingSpace ? [NonBreakingSpace] : []), _toConsumableArray(resolvedOptions.softHyphen ? [SoftHyphen] : []), _toConsumableArray(hasPlaceholders ? [Placeholder] : []), _toConsumableArray(hasLink ? [CmsLink] : []), _toConsumableArray(hasBlockChildBlocks ? [CmsBlock] : []), _toConsumableArray(hasInlineChildBlocks ? [CmsInlineBlock] : []), _toConsumableArray(maxTextBlocks !== undefined ? [createMaxTextBlocksExtension(maxTextBlocks)] : []), _toConsumableArray(listLevelMax !== undefined ? [createListLevelMaxExtension(listLevelMax)] : []));
|
|
442
513
|
}
|
|
443
514
|
var ReadOnlyContent = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
@@ -450,7 +521,7 @@ var ReadOnlyContent = /*#__PURE__*/styled("div", process.env.NODE_ENV === "produ
|
|
|
450
521
|
styles: ".tiptap > :first-child, .tiptap > :first-child > :first-child{margin-top:0;}.tiptap > :last-child, .tiptap > :last-child > :last-child{margin-bottom:0;}"
|
|
451
522
|
} : {
|
|
452
523
|
name: "klm21s",
|
|
453
|
-
styles: ".tiptap > :first-child, .tiptap > :first-child > :first-child{margin-top:0;}.tiptap > :last-child, .tiptap > :last-child > :last-child{margin-bottom:0;}/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvdGlwVGFwL2NyZWF0ZVRpcFRhcFJpY2hUZXh0QmxvY2sudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNld0IiLCJmaWxlIjoiLi4vLi4vLi4vc3JjL2Jsb2Nrcy90aXBUYXAvY3JlYXRlVGlwVGFwUmljaFRleHRCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncmV5UGFsZXR0ZSwgdXNlQ29udGVudFRyYW5zbGF0aW9uU2VydmljZSwgdXNlRXJyb3JEaWFsb2cgfSBmcm9tIFwiQGRleHRpbml0eS9hZG1pblwiO1xuaW1wb3J0IHsgQm94LCB0eXBlIFN2Z0ljb25Qcm9wcyB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCB7IEV4dGVuc2lvbiwgdHlwZSBFeHRlbnNpb25zIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBMZXZlbCBhcyBIZWFkaW5nTGV2ZWwgfSBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24taGVhZGluZ1wiO1xuaW1wb3J0IFN1YnNjcmlwdCBmcm9tIFwiQHRpcHRhcC9leHRlbnNpb24tc3Vic2NyaXB0XCI7XG5pbXBvcnQgU3VwZXJzY3JpcHQgZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXN1cGVyc2NyaXB0XCI7XG5pbXBvcnQgeyBFZGl0b3JDb250ZW50LCB0eXBlIEpTT05Db250ZW50LCB1c2VFZGl0b3IgfSBmcm9tIFwiQHRpcHRhcC9yZWFjdFwiO1xuaW1wb3J0IFN0YXJ0ZXJLaXQgZnJvbSBcIkB0aXB0YXAvc3RhcnRlci1raXRcIjtcbmltcG9ydCB7XG4gICAgdHlwZSBDb21wb25lbnRUeXBlLFxuICAgIHR5cGUgRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudCxcbiAgICB0eXBlIEhUTUxBdHRyaWJ1dGVzLFxuICAgIHR5cGUgUmVhY3ROb2RlLFxuICAgIHR5cGUgUmVmQXR0cmlidXRlcyxcbiAgICB1c2VFZmZlY3QsXG4gICAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSB9IGZyb20gXCJyZWFjdC1pbnRsXCI7XG5cbmltcG9ydCB7IGNyZWF0ZUJsb2NrU2tlbGV0b24gfSBmcm9tIFwiLi4vaGVscGVycy9jcmVhdGVCbG9ja1NrZWxldG9uXCI7XG5pbXBvcnQgeyBCbG9ja0NhdGVnb3J5LCB0eXBlIEJsb2NrSW50ZXJmYWNlLCB0eXBlIExpbmtCbG9ja0ludGVyZmFjZSwgdHlwZSBSZWFkT25seUJsb2NrUmVuZGVySW50ZXJmYWNlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDaGlsZEJsb2Nrc0NvbnRleHQgfSBmcm9tIFwiLi9DaGlsZEJsb2Nrc0NvbnRleHRcIjtcbmltcG9ydCB7IHRyYW5zbGF0ZVRpcFRhcENvbnRlbnQgfSBmcm9tIFwiLi9jb250ZW50VHJhbnNsYXRpb25cIjtcbmltcG9ydCB7IENtc0Jsb2NrLCBDbXNJbmxpbmVCbG9jayB9IGZyb20gXCIuL2V4dGVuc2lvbnMvQ21zQmxvY2tcIjtcbmltcG9ydCB7IENtc0xpbmsgfSBmcm9tIFwiLi9leHRlbnNpb25zL0Ntc0xpbmtcIjtcbmltcG9ydCB7IElubGluZVN0eWxlTWFyayB9IGZyb20gXCIuL2V4dGVuc2lvbnMvSW5saW5lU3R5bGVNYXJrXCI7XG5pbXBvcnQgeyBOb25CcmVha2luZ1NwYWNlIH0gZnJvbSBcIi4vZXh0ZW5zaW9ucy9Ob25CcmVha2luZ1NwYWNlXCI7XG5pbXBvcnQgeyBQbGFjZWhvbGRlciB9IGZyb20gXCIuL2V4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCB7IFNvZnRIeXBoZW4gfSBmcm9tIFwiLi9leHRlbnNpb25zL1NvZnRIeXBoZW5cIjtcbmltcG9ydCB7IFRleHRCbG9ja1N0eWxlSGVhZGluZyB9IGZyb20gXCIuL2V4dGVuc2lvbnMvVGV4dEJsb2NrU3R5bGVIZWFkaW5nXCI7XG5pbXBvcnQgeyBUZXh0QmxvY2tTdHlsZVBhcmFncmFwaCB9IGZyb20gXCIuL2V4dGVuc2lvbnMvVGV4dEJsb2NrU3R5bGVQYXJhZ3JhcGhcIjtcbmltcG9ydCB7IElubGluZVN0eWxlQ29udGV4dCB9IGZyb20gXCIuL0lubGluZVN0eWxlQ29udGV4dFwiO1xuaW1wb3J0IHsgY3JlYXRlTGlzdExldmVsTWF4RXh0ZW5zaW9uLCBnZXRMaXN0TmVzdGluZ0RlcHRoRnJvbUpzb24sIHRyaW1MaXN0TmVzdGluZyB9IGZyb20gXCIuL2xpc3RMZXZlbE1heEhlbHBlcnNcIjtcbmltcG9ydCB7IFRleHRCbG9ja1N0eWxlQ29udGV4dCB9IGZyb20gXCIuL1RleHRCbG9ja1N0eWxlQ29udGV4dFwiO1xuaW1wb3J0IHsgVGlwVGFwQ29udGVudFRyYW5zbGF0aW9uRGlhbG9nIH0gZnJvbSBcIi4vVGlwVGFwQ29udGVudFRyYW5zbGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgeyBUaXBUYXBUb29sYmFyIH0gZnJvbSBcIi4vVGlwVGFwVG9vbGJhclwiO1xuXG5leHBvcnQgdHlwZSB7IEpTT05Db250ZW50IGFzIFRpcFRhcFJpY2hUZXh0QmxvY2tDb250ZW50IH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuXG5pbnRlcmZhY2UgVGlwVGFwSGVhZGluZ09wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIExpbWl0cyB0aGUgc2VsZWN0YWJsZSBoZWFkaW5nIGxldmVscyAoMS02KS4gRGVmYXVsdHMgdG8gYWxsIGxldmVscyAoWzEsIDIsIDMsIDQsIDUsIDZdKS5cbiAgICAgKiBNdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5IG9mIHVuaXF1ZSBpbnRlZ2VycyBiZXR3ZWVuIDEgYW5kIDYsIG90aGVyd2lzZSBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICovXG4gICAgbGV2ZWxzPzogbnVtYmVyW107XG59XG5cbi8qKlxuICogVGhlIGJsb2NrJ3Mgb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0cyBhcHBsaWVkIGFuZCB0aGUgaGVhZGluZyBsZXZlbHMgdmFsaWRhdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpcFRhcFJlc29sdmVkT3B0aW9ucyB7XG4gICAgdW5kb1JlZG9CdXR0b25zOiBib29sZWFuO1xuICAgIGJvbGQ6IGJvb2xlYW47XG4gICAgaXRhbGljOiBib29sZWFuO1xuICAgIHVuZGVybGluZTogYm9vbGVhbjtcbiAgICBzdHJpa2U6IGJvb2xlYW47XG4gICAgc3ViOiBib29sZWFuO1xuICAgIHN1cDogYm9vbGVhbjtcbiAgICBoZWFkaW5nOiBmYWxzZSB8IHsgbGV2ZWxzOiBIZWFkaW5nTGV2ZWxbXSB9O1xuICAgIG9yZGVyZWRMaXN0OiBib29sZWFuO1xuICAgIHVub3JkZXJlZExpc3Q6IGJvb2xlYW47XG4gICAgbm9uQnJlYWtpbmdTcGFjZTogYm9vbGVhbjtcbiAgICBzb2Z0SHlwaGVuOiBib29sZWFuO1xuICAgIGxpbms6IGJvb2xlYW47XG4gICAgY29udGVudFRyYW5zbGF0aW9uOiBib29sZWFuO1xufVxuXG5jb25zdCBhbGxIZWFkaW5nTGV2ZWxzOiBIZWFkaW5nTGV2ZWxbXSA9IFsxLCAyLCAzLCA0LCA1LCA2XTtcblxuZnVuY3Rpb24gaXNWYWxpZEhlYWRpbmdMZXZlbHMoaGVhZGluZ0xldmVsczogbnVtYmVyW10pOiBoZWFkaW5nTGV2ZWxzIGlzIEhlYWRpbmdMZXZlbFtdIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBoZWFkaW5nTGV2ZWxzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgbmV3IFNldChoZWFkaW5nTGV2ZWxzKS5zaXplID09PSBoZWFkaW5nTGV2ZWxzLmxlbmd0aCAmJlxuICAgICAgICBoZWFkaW5nTGV2ZWxzLmV2ZXJ5KChsZXZlbCkgPT4gTnVtYmVyLmlzSW50ZWdlcihsZXZlbCkgJiYgbGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSA2KVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUaXBUYXBPcHRpb25zKHtcbiAgICB1bmRvUmVkb0J1dHRvbnMgPSB0cnVlLFxuICAgIGJvbGQgPSB0cnVlLFxuICAgIGl0YWxpYyA9IHRydWUsXG4gICAgdW5kZXJsaW5lID0gZmFsc2UsXG4gICAgc3RyaWtlID0gdHJ1ZSxcbiAgICBzdWIgPSB0cnVlLFxuICAgIHN1cCA9IHRydWUsXG4gICAgaGVhZGluZyA9IHRydWUsXG4gICAgb3JkZXJlZExpc3QgPSB0cnVlLFxuICAgIHVub3JkZXJlZExpc3QgPSB0cnVlLFxuICAgIG5vbkJyZWFraW5nU3BhY2UgPSB0cnVlLFxuICAgIHNvZnRIeXBoZW4gPSB0cnVlLFxuICAgIGxpbmssXG4gICAgY29udGVudFRyYW5zbGF0aW9uID0gdHJ1ZSxcbn06IFRpcFRhcFJpY2hUZXh0QmxvY2tGYWN0b3J5T3B0aW9ucyA9IHt9KTogVGlwVGFwUmVzb2x2ZWRPcHRpb25zIHtcbiAgICBjb25zdCBoZWFkaW5nTGV2ZWxzID0gKGhlYWRpbmcgIT09IGZhbHNlICYmIGhlYWRpbmcgIT09IHRydWUgPyBoZWFkaW5nLmxldmVscyA6IHVuZGVmaW5lZCkgPz8gYWxsSGVhZGluZ0xldmVscztcblxuICAgIGlmICghaXNWYWxpZEhlYWRpbmdMZXZlbHMoaGVhZGluZ0xldmVscykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGVhZGluZyBsZXZlbHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiB1bmlxdWUgaW50ZWdlcnMgYmV0d2VlbiAxIGFuZCA2XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHVuZG9SZWRvQnV0dG9ucyxcbiAgICAgICAgYm9sZCxcbiAgICAgICAgaXRhbGljLFxuICAgICAgICB1bmRlcmxpbmUsXG4gICAgICAgIHN0cmlrZSxcbiAgICAgICAgc3ViLFxuICAgICAgICBzdXAsXG4gICAgICAgIGhlYWRpbmc6IGhlYWRpbmcgPT09IGZhbHNlID8gZmFsc2UgOiB7IGxldmVsczogaGVhZGluZ0xldmVscyB9LFxuICAgICAgICBvcmRlcmVkTGlzdCxcbiAgICAgICAgdW5vcmRlcmVkTGlzdCxcbiAgICAgICAgbm9uQnJlYWtpbmdTcGFjZSxcbiAgICAgICAgc29mdEh5cGhlbixcbiAgICAgICAgbGluazogISFsaW5rLFxuICAgICAgICBjb250ZW50VHJhbnNsYXRpb24sXG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgVGlwVGFwVGV4dEJsb2NrVHlwZSA9XG4gICAgfCBcInBhcmFncmFwaFwiXG4gICAgfCBcImhlYWRpbmctMVwiXG4gICAgfCBcImhlYWRpbmctMlwiXG4gICAgfCBcImhlYWRpbmctM1wiXG4gICAgfCBcImhlYWRpbmctNFwiXG4gICAgfCBcImhlYWRpbmctNVwiXG4gICAgfCBcImhlYWRpbmctNlwiXG4gICAgfCBcIm9yZGVyZWQtbGlzdFwiXG4gICAgfCBcInVub3JkZXJlZC1saXN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlwVGFwVGV4dEJsb2NrU3R5bGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYWJlbDogUmVhY3ROb2RlO1xuICAgIC8qKlxuICAgICAqIExpbWl0cyB0aGUgdGV4dCBibG9jayBzdHlsZSB0byB0aGUgcHJvdmlkZWQgdGV4dCBibG9jayB0eXBlcy5cbiAgICAgKiBJZiBub25lIGlzIHNwZWNpZmllZCwgdGhlIHRleHQgYmxvY2sgc3R5bGUgaXMgYWxsb3dlZCBmb3IgYWxsIHRleHQgYmxvY2sgdHlwZXMuXG4gICAgICovXG4gICAgYXBwbGllc1RvPzogVGlwVGFwVGV4dEJsb2NrVHlwZVtdO1xuICAgIGVsZW1lbnQ6IENvbXBvbmVudFR5cGU8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaXBUYXBJbmxpbmVTdHlsZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxhYmVsOiBSZWFjdE5vZGU7XG4gICAgLyoqXG4gICAgICogTGltaXRzIHRoZSBpbmxpbmUgc3R5bGUgdG8gdGhlIHByb3ZpZGVkIHRleHQgYmxvY2sgdHlwZXMuXG4gICAgICogSWYgbm9uZSBpcyBzcGVjaWZpZWQsIHRoZSBpbmxpbmUgc3R5bGUgaXMgYWxsb3dlZCBmb3IgYWxsIHRleHQgYmxvY2sgdHlwZXMuXG4gICAgICovXG4gICAgYXBwbGllc1RvPzogVGlwVGFwVGV4dEJsb2NrVHlwZVtdO1xuICAgIGVsZW1lbnQ6IENvbXBvbmVudFR5cGU8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+PjtcbiAgICAvKipcbiAgICAgKiBEaXNwbGF5ZWQgbmV4dCB0byB0aGUgbGFiZWwgaW4gdGhlIHRvb2xiYXIncyBcIk1vcmUgb3B0aW9uc1wiIG1lbnUsIG1hdGNoaW5nIFN1cGVyc2NyaXB0L1N1YnNjcmlwdC5cbiAgICAgKi9cbiAgICBpY29uPzogRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxPbWl0PFN2Z0ljb25Qcm9wcywgXCJyZWZcIj4gJiBSZWZBdHRyaWJ1dGVzPFNWR1NWR0VsZW1lbnQ+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaXBUYXBSaWNoVGV4dEJsb2NrU3RhdGUge1xuICAgIHRpcFRhcENvbnRlbnQ6IEpTT05Db250ZW50O1xufVxuXG5pbnRlcmZhY2UgVGlwVGFwUmljaFRleHRCbG9ja0RhdGEge1xuICAgIHRpcFRhcENvbnRlbnQ6IEpTT05Db250ZW50O1xufVxuXG5pbnRlcmZhY2UgVGlwVGFwUmljaFRleHRCbG9ja0lucHV0IHtcbiAgICB0aXBUYXBDb250ZW50OiBKU09OQ29udGVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaXBUYXBQbGFjZWhvbGRlciB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGxhYmVsOiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlwVGFwQ2hpbGRCbG9jayB7XG4gICAgYmxvY2s6IEJsb2NrSW50ZXJmYWNlO1xuICAgIC8qKlxuICAgICAqIEhvdyB0aGUgY2hpbGQgYmxvY2sgaXMgZGlzcGxheWVkIGluIHRoZSBlZGl0b3IgKGFuZCByZW5kZXJlZCBvdXRwdXQpOiBhcyBhIHN0YW5kYWxvbmUgYmxvY2tcbiAgICAgKiBlbGVtZW50IG9uIGl0cyBvd24gbGluZSAoYFwiYmxvY2tcImApIG9yIGlubGluZSB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQgKGBcImlubGluZVwiYCkuXG4gICAgICovXG4gICAgZGlzcGxheTogXCJibG9ja1wiIHwgXCJpbmxpbmVcIjtcbn1cblxuaW50ZXJmYWNlIFRpcFRhcFJpY2hUZXh0QmxvY2tGYWN0b3J5T3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIHVuZG8vcmVkbyBidXR0b25zIGluIHRoZSB0b29sYmFyLiBUaGUga2V5Ym9hcmQgc2hvcnRjdXRzIHdvcmsgcmVnYXJkbGVzcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIHVuZG9SZWRvQnV0dG9ucz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBib2xkIHRleHQuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICBib2xkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGl0YWxpYyB0ZXh0LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICovXG4gICAgaXRhbGljPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVuZGVybGluZWQgdGV4dC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICB1bmRlcmxpbmU/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc3RydWNrLXRocm91Z2ggdGV4dC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIHN0cmlrZT86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzdWJzY3JpcHQgdGV4dC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIHN1Yj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBzdXBlcnNjcmlwdCB0ZXh0LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICovXG4gICAgc3VwPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGhlYWRpbmdzLiBEZWZhdWx0cyB0byBgdHJ1ZWAgKGFsbCBsZXZlbHMpLlxuICAgICAqIFBhc3MgYW4gb3B0aW9ucyBvYmplY3QgdG8gbGltaXQgdGhlIHNlbGVjdGFibGUgaGVhZGluZyBgbGV2ZWxzYC5cbiAgICAgKi9cbiAgICBoZWFkaW5nPzogYm9vbGVhbiB8IFRpcFRhcEhlYWRpbmdPcHRpb25zO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgb3JkZXJlZCBsaXN0cy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIG9yZGVyZWRMaXN0PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVub3JkZXJlZCBsaXN0cy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIHVub3JkZXJlZExpc3Q/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgbm9uLWJyZWFraW5nIHNwYWNlcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIG5vbkJyZWFraW5nU3BhY2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc29mdCBoeXBoZW5zLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICovXG4gICAgc29mdEh5cGhlbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBsaW5rcyBieSBwYXNzaW5nIHRoZSBsaW5rIGJsb2NrIHRoYXQgaXMgdXNlZCBmb3IgdGhlbS4gRGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBsaW5rPzogQmxvY2tJbnRlcmZhY2UgJiBMaW5rQmxvY2tJbnRlcmZhY2U7XG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIGluLXRvb2xiYXIgXCJUcmFuc2xhdGVcIiBidXR0b24uIERlZmF1bHRzIHRvIGB0cnVlYC4gU2V0IHRvIGBmYWxzZWAgdG8gaGlkZSBpdCwgZS5nLlxuICAgICAqIHRvIGF2b2lkIGEgbmVzdGVkIHRyYW5zbGF0ZSBidXR0b24gd2hlbiB0aGlzIGJsb2NrIGlzIHJlbmRlcmVkIGluc2lkZSBhbm90aGVyIHRyYW5zbGF0aW9uIFVJLlxuICAgICAqL1xuICAgIGNvbnRlbnRUcmFuc2xhdGlvbj86IGJvb2xlYW47XG4gICAgdGV4dEJsb2NrU3R5bGVzPzogVGlwVGFwVGV4dEJsb2NrU3R5bGVbXTtcbiAgICBpbmxpbmVTdHlsZXM/OiBUaXBUYXBJbmxpbmVTdHlsZVtdO1xuICAgIHBsYWNlaG9sZGVycz86IFRpcFRhcFBsYWNlaG9sZGVyW107XG4gICAgLyoqXG4gICAgICogQ2hpbGQgYmxvY2tzIHRoYXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGVkaXRvciB2aWEgdGhlIHRvb2xiYXIncyBcIitcIiBtZW51LCBrZXllZCBieSBhXG4gICAgICogc3RhYmxlIGtleS4gVGhlIGtleSAobm90IHRoZSBibG9jaydzIG5hbWUpIGlzIHN0b3JlZCBpbiB0aGUgY29udGVudCwgc28gYmxvY2tzIGNhbiBiZVxuICAgICAqIHJlbmFtZWQgb3Igc3dhcHBlZCB3aXRob3V0IGludmFsaWRhdGluZyBleGlzdGluZyBjb250ZW50LlxuICAgICAqIEVhY2ggYmxvY2sgaXMgcmVuZGVyZWQgYXMgYSBub24tZWRpdGFibGUgcHJldmlldyB0aGF0IGNhbiBiZSBlZGl0ZWQgKGRpYWxvZykgb3IgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFBhc3MgYHsgYmxvY2ssIGRpc3BsYXkgfWAgZm9yIGVhY2ggY2hpbGQgYmxvY2ssIHdoZXJlIGBkaXNwbGF5YCBpcyBgXCJibG9ja1wiYCAoc3RhbmRhbG9uZVxuICAgICAqIGJsb2NrIGVsZW1lbnQpIG9yIGBcImlubGluZVwiYCAoaW5saW5lIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgdGV4dCkuXG4gICAgICovXG4gICAgY2hpbGRCbG9ja3M/OiBSZWNvcmQ8c3RyaW5nLCBUaXBUYXBDaGlsZEJsb2NrPjtcbiAgICAvKipcbiAgICAgKiBMaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRvcC1sZXZlbCB0ZXh0IGJsb2NrcyAocGFyYWdyYXBocywgaGVhZGluZ3MsIGxpc3RzKVxuICAgICAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIGVkaXRvci5cbiAgICAgKi9cbiAgICBtYXhUZXh0QmxvY2tzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIExpbWl0cyB0aGUgbWF4aW11bSBuZXN0aW5nIGRlcHRoIG9mIGxpc3QgaXRlbXMuXG4gICAgICogQSB2YWx1ZSBvZiAxIG1lYW5zIG9ubHkgYSBmbGF0IGxpc3QgKG5vIG5lc3RpbmcpLCAyIGFsbG93cyBvbmUgbGV2ZWwgb2Ygc3ViLWxpc3RzLCBldGMuXG4gICAgICovXG4gICAgbGlzdExldmVsTWF4PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIE1pbmltdW0gaGVpZ2h0IChpbiBweCkgb2YgdGhlIGVkaXRvcidzIGNvbnRlbnQgYXJlYS4gRGVmYXVsdHMgdG8gYDIwMGAuXG4gICAgICovXG4gICAgbWluSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBnZXRQbGFpblRleHRGcm9tQ29udGVudChjb250ZW50OiBKU09OQ29udGVudCk6IHN0cmluZyB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGlmIChjb250ZW50LnRleHQpIHtcbiAgICAgICAgdGV4dCArPSBjb250ZW50LnRleHQ7XG4gICAgfVxuICAgIGlmIChjb250ZW50LmNvbnRlbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjb250ZW50LmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRleHQgKz0gZ2V0UGxhaW5UZXh0RnJvbUNvbnRlbnQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xufVxuXG5jb25zdCBlbXB0eUNvbnRlbnQ6IEpTT05Db250ZW50ID0geyB0eXBlOiBcImRvY1wiLCBjb250ZW50OiBbeyB0eXBlOiBcInBhcmFncmFwaFwiIH1dIH07XG5cbmNvbnN0IGlzQ21zQmxvY2tOb2RlID0gKGNvbnRlbnQ6IEpTT05Db250ZW50KTogYm9vbGVhbiA9PiBjb250ZW50LnR5cGUgPT09IFwiY21zQmxvY2tcIiB8fCBjb250ZW50LnR5cGUgPT09IFwiY21zSW5saW5lQmxvY2tcIjtcblxuY29uc3QgY3JlYXRlTWF4VGV4dEJsb2Nrc0V4dGVuc2lvbiA9IChtYXhUZXh0QmxvY2tzOiBudW1iZXIpID0+XG4gICAgRXh0ZW5zaW9uLmNyZWF0ZSh7XG4gICAgICAgIG5hbWU6IFwibWF4VGV4dEJsb2Nrc1wiLFxuICAgICAgICBhZGRLZXlib2FyZFNob3J0Y3V0cygpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgRW50ZXI6ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3Iuc3RhdGUuZG9jLmNoaWxkQ291bnQgPj0gbWF4VGV4dEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBibG9jayBFbnRlciB3aGVuIGl0IHdvdWxkIGNyZWF0ZSBhIG5ldyB0ZXh0IGJsb2NrIChub3QgaW5zaWRlIGEgbGlzdCwgZXRjLilcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgJGZyb20gfSA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0F0RW5kT2ZCbG9jayA9ICRmcm9tLnBhcmVudE9mZnNldCA9PT0gJGZyb20ucGFyZW50LmNvbnRlbnQuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudERlcHRoID0gJGZyb20uZGVwdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCBlbmQgb2YgYSB0b3AtbGV2ZWwgdGV4dCBibG9jayAoZGVwdGggMSkgb3Igd291bGQgc3BsaXQgYSB0b3AtbGV2ZWwgdGV4dCBibG9ja1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudERlcHRoID09PSAxICYmIGlzQXRFbmRPZkJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHByZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gbWFwTGlua01hcmtzRGF0YShjb250ZW50OiBKU09OQ29udGVudCwgZm46IChkYXRhOiBhbnkpID0+IGFueSk6IEpTT05Db250ZW50IHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4uY29udGVudCB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0Lm1hcmtzKSkge1xuICAgICAgICByZXN1bHQubWFya3MgPSByZXN1bHQubWFya3MubWFwKChtYXJrKSA9PiB7XG4gICAgICAgICAgICBpZiAobWFyay50eXBlID09PSBcImxpbmtcIiAmJiBtYXJrLmF0dHJzPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ubWFyaywgYXR0cnM6IHsgLi4ubWFyay5hdHRycywgZGF0YTogZm4obWFyay5hdHRycy5kYXRhKSB9IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWFyaztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0LmNvbnRlbnQpKSB7XG4gICAgICAgIHJlc3VsdC5jb250ZW50ID0gcmVzdWx0LmNvbnRlbnQubWFwKChjaGlsZCkgPT4gbWFwTGlua01hcmtzRGF0YShjaGlsZCwgZm4pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcExpbmtNYXJrc0RhdGFBc3luYyhjb250ZW50OiBKU09OQ29udGVudCwgZm46IChkYXRhOiBhbnkpID0+IFByb21pc2U8YW55Pik6IFByb21pc2U8SlNPTkNvbnRlbnQ+IHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4uY29udGVudCB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0Lm1hcmtzKSkge1xuICAgICAgICByZXN1bHQubWFya3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHJlc3VsdC5tYXJrcy5tYXAoYXN5bmMgKG1hcmspID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWFyay50eXBlID09PSBcImxpbmtcIiAmJiBtYXJrLmF0dHJzPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLm1hcmssIGF0dHJzOiB7IC4uLm1hcmsuYXR0cnMsIGRhdGE6IGF3YWl0IGZuKG1hcmsuYXR0cnMuZGF0YSkgfSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWFyaztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdC5jb250ZW50KSkge1xuICAgICAgICByZXN1bHQuY29udGVudCA9IGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdC5jb250ZW50Lm1hcCgoY2hpbGQpID0+IG1hcExpbmtNYXJrc0RhdGFBc3luYyhjaGlsZCwgZm4pKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBtYXBDbXNCbG9ja05vZGVzRGF0YShjb250ZW50OiBKU09OQ29udGVudCwgZm46IChibG9ja1R5cGU6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnkpOiBKU09OQ29udGVudCB7XG4gICAgaWYgKCFjb250ZW50IHx8IHR5cGVvZiBjb250ZW50ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmNvbnRlbnQgfTtcblxuICAgIGlmIChpc0Ntc0Jsb2NrTm9kZShyZXN1bHQpICYmIHJlc3VsdC5hdHRycz8uYmxvY2tUeXBlKSB7XG4gICAgICAgIHJlc3VsdC5hdHRycyA9IHsgLi4ucmVzdWx0LmF0dHJzLCBkYXRhOiBmbihyZXN1bHQuYXR0cnMuYmxvY2tUeXBlLCByZXN1bHQuYXR0cnMuZGF0YSkgfTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQuY29udGVudCkpIHtcbiAgICAgICAgcmVzdWx0LmNvbnRlbnQgPSByZXN1bHQuY29udGVudC5tYXAoKGNoaWxkKSA9PiBtYXBDbXNCbG9ja05vZGVzRGF0YShjaGlsZCwgZm4pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcENtc0Jsb2NrTm9kZXNEYXRhQXN5bmMoY29udGVudDogSlNPTkNvbnRlbnQsIGZuOiAoYmxvY2tUeXBlOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxKU09OQ29udGVudD4ge1xuICAgIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0geyAuLi5jb250ZW50IH07XG5cbiAgICBpZiAoaXNDbXNCbG9ja05vZGUocmVzdWx0KSAmJiByZXN1bHQuYXR0cnM/LmJsb2NrVHlwZSkge1xuICAgICAgICByZXN1bHQuYXR0cnMgPSB7IC4uLnJlc3VsdC5hdHRycywgZGF0YTogYXdhaXQgZm4ocmVzdWx0LmF0dHJzLmJsb2NrVHlwZSwgcmVzdWx0LmF0dHJzLmRhdGEpIH07XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0LmNvbnRlbnQpKSB7XG4gICAgICAgIHJlc3VsdC5jb250ZW50ID0gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0LmNvbnRlbnQubWFwKChjaGlsZCkgPT4gbWFwQ21zQmxvY2tOb2Rlc0RhdGFBc3luYyhjaGlsZCwgZm4pKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY29sbGVjdENtc0Jsb2NrTm9kZXMoY29udGVudDogSlNPTkNvbnRlbnQpOiBBcnJheTx7IGJsb2NrVHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+IHtcbiAgICBjb25zdCByZXN1bHRzOiBBcnJheTx7IGJsb2NrVHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+ID0gW107XG5cbiAgICBpZiAoaXNDbXNCbG9ja05vZGUoY29udGVudCkgJiYgY29udGVudC5hdHRycz8uYmxvY2tUeXBlKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7IGJsb2NrVHlwZTogY29udGVudC5hdHRycy5ibG9ja1R5cGUsIGRhdGE6IGNvbnRlbnQuYXR0cnMuZGF0YSB9KTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50LmNvbnRlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udGVudC5jb250ZW50KSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uY29sbGVjdENtc0Jsb2NrTm9kZXMoY2hpbGQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0TGlua01hcmtzRGF0YShjb250ZW50OiBKU09OQ29udGVudCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgcmVzdWx0czogdW5rbm93bltdID0gW107XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50Lm1hcmtzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IG1hcmsgb2YgY29udGVudC5tYXJrcykge1xuICAgICAgICAgICAgaWYgKG1hcmsudHlwZSA9PT0gXCJsaW5rXCIgJiYgbWFyay5hdHRycz8uZGF0YSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChtYXJrLmF0dHJzLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGVudC5jb250ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnRlbnQuY29udGVudCkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmNvbGxlY3RMaW5rTWFya3NEYXRhKGNoaWxkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRUaXBUYXBFeHRlbnNpb25zKHtcbiAgICByZXNvbHZlZE9wdGlvbnMsXG4gICAgdGV4dEJsb2NrU3R5bGVzLFxuICAgIGlubGluZVN0eWxlcyxcbiAgICBwbGFjZWhvbGRlcnMsXG4gICAgbGlua0Jsb2NrLFxuICAgIGNoaWxkQmxvY2tzLFxuICAgIG1heFRleHRCbG9ja3MsXG4gICAgbGlzdExldmVsTWF4LFxufToge1xuICAgIHJlc29sdmVkT3B0aW9uczogVGlwVGFwUmVzb2x2ZWRPcHRpb25zO1xuICAgIHRleHRCbG9ja1N0eWxlczogVGlwVGFwVGV4dEJsb2NrU3R5bGVbXTtcbiAgICBpbmxpbmVTdHlsZXM6IFRpcFRhcElubGluZVN0eWxlW107XG4gICAgcGxhY2Vob2xkZXJzOiBUaXBUYXBQbGFjZWhvbGRlcltdO1xuICAgIGxpbmtCbG9jaz86IEJsb2NrSW50ZXJmYWNlICYgTGlua0Jsb2NrSW50ZXJmYWNlO1xuICAgIGNoaWxkQmxvY2tzOiBSZWNvcmQ8c3RyaW5nLCBUaXBUYXBDaGlsZEJsb2NrPjtcbiAgICBtYXhUZXh0QmxvY2tzPzogbnVtYmVyO1xuICAgIGxpc3RMZXZlbE1heD86IG51bWJlcjtcbn0pOiBFeHRlbnNpb25zIHtcbiAgICBjb25zdCBoYXNUZXh0QmxvY2tTdHlsZXMgPSB0ZXh0QmxvY2tTdHlsZXMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNJbmxpbmVTdHlsZXMgPSBpbmxpbmVTdHlsZXMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNMaW5rID0gcmVzb2x2ZWRPcHRpb25zLmxpbmsgJiYgISFsaW5rQmxvY2s7XG4gICAgY29uc3QgaGFzUGxhY2Vob2xkZXJzID0gcGxhY2Vob2xkZXJzLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY2hpbGRCbG9ja0VudHJpZXMgPSBPYmplY3QudmFsdWVzKGNoaWxkQmxvY2tzKTtcbiAgICBjb25zdCBoYXNCbG9ja0NoaWxkQmxvY2tzID0gY2hpbGRCbG9ja0VudHJpZXMuc29tZSgoY2hpbGRCbG9jaykgPT4gY2hpbGRCbG9jay5kaXNwbGF5ID09PSBcImJsb2NrXCIpO1xuICAgIGNvbnN0IGhhc0lubGluZUNoaWxkQmxvY2tzID0gY2hpbGRCbG9ja0VudHJpZXMuc29tZSgoY2hpbGRCbG9jaykgPT4gY2hpbGRCbG9jay5kaXNwbGF5ID09PSBcImlubGluZVwiKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIFN0YXJ0ZXJLaXQuY29uZmlndXJlKHtcbiAgICAgICAgICAgIGJvbGQ6IHJlc29sdmVkT3B0aW9ucy5ib2xkID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIGl0YWxpYzogcmVzb2x2ZWRPcHRpb25zLml0YWxpYyA/IHt9IDogZmFsc2UsXG4gICAgICAgICAgICB1bmRlcmxpbmU6IHJlc29sdmVkT3B0aW9ucy51bmRlcmxpbmUgPyB7fSA6IGZhbHNlLFxuICAgICAgICAgICAgc3RyaWtlOiByZXNvbHZlZE9wdGlvbnMuc3RyaWtlID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIGhlYWRpbmc6IHJlc29sdmVkT3B0aW9ucy5oZWFkaW5nICYmICFoYXNUZXh0QmxvY2tTdHlsZXMgPyB7IGxldmVsczogcmVzb2x2ZWRPcHRpb25zLmhlYWRpbmcubGV2ZWxzIH0gOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcmFncmFwaDogaGFzVGV4dEJsb2NrU3R5bGVzID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmRlcmVkTGlzdDogcmVzb2x2ZWRPcHRpb25zLm9yZGVyZWRMaXN0ID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIGJ1bGxldExpc3Q6IHJlc29sdmVkT3B0aW9ucy51bm9yZGVyZWRMaXN0ID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIGJsb2NrcXVvdGU6IGZhbHNlLFxuICAgICAgICAgICAgY29kZTogZmFsc2UsXG4gICAgICAgICAgICBjb2RlQmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgbGluazogZmFsc2UsXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oaGFzVGV4dEJsb2NrU3R5bGVzID8gW1RleHRCbG9ja1N0eWxlUGFyYWdyYXBoXSA6IFtdKSxcbiAgICAgICAgLi4uKGhhc1RleHRCbG9ja1N0eWxlcyAmJiByZXNvbHZlZE9wdGlvbnMuaGVhZGluZyA/IFtUZXh0QmxvY2tTdHlsZUhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiByZXNvbHZlZE9wdGlvbnMuaGVhZGluZy5sZXZlbHMgfSldIDogW10pLFxuICAgICAgICAuLi4oaGFzSW5saW5lU3R5bGVzID8gW0lubGluZVN0eWxlTWFya10gOiBbXSksXG4gICAgICAgIC4uLihyZXNvbHZlZE9wdGlvbnMuc3VwID8gW1N1cGVyc2NyaXB0XSA6IFtdKSxcbiAgICAgICAgLi4uKHJlc29sdmVkT3B0aW9ucy5zdWIgPyBbU3Vic2NyaXB0XSA6IFtdKSxcbiAgICAgICAgLi4uKHJlc29sdmVkT3B0aW9ucy5ub25CcmVha2luZ1NwYWNlID8gW05vbkJyZWFraW5nU3BhY2VdIDogW10pLFxuICAgICAgICAuLi4ocmVzb2x2ZWRPcHRpb25zLnNvZnRIeXBoZW4gPyBbU29mdEh5cGhlbl0gOiBbXSksXG4gICAgICAgIC4uLihoYXNQbGFjZWhvbGRlcnMgPyBbUGxhY2Vob2xkZXJdIDogW10pLFxuICAgICAgICAuLi4oaGFzTGluayA/IFtDbXNMaW5rXSA6IFtdKSxcbiAgICAgICAgLi4uKGhhc0Jsb2NrQ2hpbGRCbG9ja3MgPyBbQ21zQmxvY2tdIDogW10pLFxuICAgICAgICAuLi4oaGFzSW5saW5lQ2hpbGRCbG9ja3MgPyBbQ21zSW5saW5lQmxvY2tdIDogW10pLFxuICAgICAgICAuLi4obWF4VGV4dEJsb2NrcyAhPT0gdW5kZWZpbmVkID8gW2NyZWF0ZU1heFRleHRCbG9ja3NFeHRlbnNpb24obWF4VGV4dEJsb2NrcyldIDogW10pLFxuICAgICAgICAuLi4obGlzdExldmVsTWF4ICE9PSB1bmRlZmluZWQgPyBbY3JlYXRlTGlzdExldmVsTWF4RXh0ZW5zaW9uKGxpc3RMZXZlbE1heCldIDogW10pLFxuICAgIF07XG59XG5cbmNvbnN0IFJlYWRPbmx5Q29udGVudCA9IHN0eWxlZChcImRpdlwiKSh7XG4gICAgXCIudGlwdGFwID4gOmZpcnN0LWNoaWxkLCAudGlwdGFwID4gOmZpcnN0LWNoaWxkID4gOmZpcnN0LWNoaWxkXCI6IHtcbiAgICAgICAgbWFyZ2luVG9wOiAwLFxuICAgIH0sXG5cbiAgICBcIi50aXB0YXAgPiA6bGFzdC1jaGlsZCwgLnRpcHRhcCA+IDpsYXN0LWNoaWxkID4gOmxhc3QtY2hpbGRcIjoge1xuICAgICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgfSxcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpcFRhcEVkaXRvclByb3BzIHtcbiAgICBzdGF0ZTogVGlwVGFwUmljaFRleHRCbG9ja1N0YXRlO1xuICAgIHVwZGF0ZVN0YXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxUaXBUYXBSaWNoVGV4dEJsb2NrU3RhdGU+PjtcbiAgICByZXNvbHZlZE9wdGlvbnM6IFRpcFRhcFJlc29sdmVkT3B0aW9ucztcbiAgICB0ZXh0QmxvY2tTdHlsZXM6IFRpcFRhcFRleHRCbG9ja1N0eWxlW107XG4gICAgaW5saW5lU3R5bGVzOiBUaXBUYXBJbmxpbmVTdHlsZVtdO1xuICAgIHBsYWNlaG9sZGVyczogVGlwVGFwUGxhY2Vob2xkZXJbXTtcbiAgICBsaW5rQmxvY2s/OiBCbG9ja0ludGVyZmFjZSAmIExpbmtCbG9ja0ludGVyZmFjZTtcbiAgICBjaGlsZEJsb2NrczogUmVjb3JkPHN0cmluZywgVGlwVGFwQ2hpbGRCbG9jaz47XG4gICAgbWF4VGV4dEJsb2Nrcz86IG51bWJlcjtcbiAgICBsaXN0TGV2ZWxNYXg/OiBudW1iZXI7XG4gICAgbWluSGVpZ2h0PzogbnVtYmVyO1xuICAgIHJlYWRPbmx5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFRpcFRhcEVkaXRvciA9ICh7XG4gICAgc3RhdGUsXG4gICAgdXBkYXRlU3RhdGUsXG4gICAgcmVzb2x2ZWRPcHRpb25zLFxuICAgIHRleHRCbG9ja1N0eWxlcyxcbiAgICBpbmxpbmVTdHlsZXMsXG4gICAgcGxhY2Vob2xkZXJzLFxuICAgIGxpbmtCbG9jayxcbiAgICBjaGlsZEJsb2NrcyxcbiAgICBtYXhUZXh0QmxvY2tzLFxuICAgIGxpc3RMZXZlbE1heCxcbiAgICBtaW5IZWlnaHQgPSAyMDAsXG4gICAgcmVhZE9ubHksXG59OiBUaXBUYXBFZGl0b3JQcm9wcykgPT4ge1xuICAgIGNvbnN0IGNoaWxkQmxvY2tzQnlLZXk6IFJlY29yZDxzdHJpbmcsIEJsb2NrSW50ZXJmYWNlPiA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhjaGlsZEJsb2NrcykubWFwKChba2V5LCB7IGJsb2NrIH1dKSA9PiBba2V5LCBibG9ja10pKTtcblxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBidWlsZFRpcFRhcEV4dGVuc2lvbnMoe1xuICAgICAgICByZXNvbHZlZE9wdGlvbnMsXG4gICAgICAgIHRleHRCbG9ja1N0eWxlcyxcbiAgICAgICAgaW5saW5lU3R5bGVzLFxuICAgICAgICBwbGFjZWhvbGRlcnMsXG4gICAgICAgIGxpbmtCbG9jayxcbiAgICAgICAgY2hpbGRCbG9ja3MsXG4gICAgICAgIG1heFRleHRCbG9ja3MsXG4gICAgICAgIGxpc3RMZXZlbE1heCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGVkaXRvciA9IHVzZUVkaXRvcih7XG4gICAgICAgIGV4dGVuc2lvbnMsXG4gICAgICAgIGNvbnRlbnQ6IHN0YXRlLnRpcFRhcENvbnRlbnQsXG4gICAgICAgIGVkaXRhYmxlOiAhcmVhZE9ubHksXG4gICAgICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1heFRleHRCbG9ja3MgIT09IHVuZGVmaW5lZCAmJiBlZGl0b3Iuc3RhdGUuZG9jLmNoaWxkQ291bnQgPiBtYXhUZXh0QmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyB0ZXh0IGJsb2NrcyAoZS5nLiBmcm9tIHBhc3RlKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHIgfSA9IGVkaXRvci5zdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2MgPSBlZGl0b3Iuc3RhdGUuZG9jO1xuICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJlc29sdmVkIHBvc2l0aW9uIGFmdGVyIHRoZSBtYXhUZXh0QmxvY2tzLXRoIGNoaWxkXG4gICAgICAgICAgICAgICAgbGV0IHBvcyA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhUZXh0QmxvY2tzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zICs9IGRvYy5jaGlsZChpKS5ub2RlU2l6ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW4gUHJvc2VNaXJyb3IsIGRvYyBjb250ZW50IHBvc2l0aW9ucyBhcmUgb2Zmc2V0IGJ5IDEgKGZvciB0aGUgZG9jIG9wZW4gdG9rZW4pXG4gICAgICAgICAgICAgICAgLy8gRGVsZXRlIGZyb20gYWZ0ZXIgdGhlIGxhc3QgYWxsb3dlZCB0ZXh0IGJsb2NrIHRvIGVuZCBvZiBkb2MgY29udGVudFxuICAgICAgICAgICAgICAgIHRyLmRlbGV0ZShwb3MgKyAxLCBkb2MuY29udGVudC5zaXplICsgMSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLnZpZXcuZGlzcGF0Y2godHIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpc3RMZXZlbE1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbiA9IGVkaXRvci5nZXRKU09OKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERlcHRoID0gZ2V0TGlzdE5lc3RpbmdEZXB0aEZyb21Kc29uKGpzb24pO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RGVwdGggPiBsaXN0TGV2ZWxNYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSBuZXN0ZWQgbGlzdHMgdGhhdCBleGNlZWQgdGhlIGxpbWl0IChlLmcuIGZyb20gcGFzdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltTGlzdE5lc3RpbmcoanNvbiwgbGlzdExldmVsTWF4KTtcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodHJpbW1lZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVwZGF0ZVN0YXRlKHsgdGlwVGFwQ29udGVudDogZWRpdG9yLmdldEpTT04oKSB9KTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIHVzZUVkaXRvciBzZXRzIGNvbnRlbnQgb25jZSwgYXQgY3JlYXRpb24sIHRoZW4gaWdub3JlcyBpdC4gUmVhZC1vbmx5IGNvbnRlbnQgY2FuIGNoYW5nZSB3aGlsZVxuICAgIC8vIG1vdW50ZWQgKGUuZy4gYSBncmlkIHJvdyByZS1yZW5kZXJpbmcpLCBzbyBpdCBuZWVkcyByZS1zeW5jaW5nIGhlcmUuIEVkaXRhYmxlIGNvbnRlbnQgZG9lc24ndDpcbiAgICAvLyB0eXBpbmcgYWxyZWFkeSBrZWVwcyBzdGF0ZS50aXBUYXBDb250ZW50IGluIHN5bmMsIGFuZCByZS1zeW5jaW5nIHdvdWxkIHJlc2V0IHRoZSBjYXJldC5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocmVhZE9ubHkgJiYgZWRpdG9yKSB7XG4gICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChzdGF0ZS50aXBUYXBDb250ZW50LCB7IGVtaXRVcGRhdGU6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3JlYWRPbmx5LCBlZGl0b3IsIHN0YXRlLnRpcFRhcENvbnRlbnRdKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uQ29udGV4dCA9IHVzZUNvbnRlbnRUcmFuc2xhdGlvblNlcnZpY2UoKTtcbiAgICBjb25zdCBjYW5UcmFuc2xhdGUgPSB0cmFuc2xhdGlvbkNvbnRleHQuZW5hYmxlZCAmJiByZXNvbHZlZE9wdGlvbnMuY29udGVudFRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IFt0cmFuc2xhdGlvbkRpYWxvZ1N0YXRlLCBzZXRUcmFuc2xhdGlvbkRpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPHsgb3JpZ2luYWw6IEpTT05Db250ZW50OyB0cmFuc2xhdGVkOiBKU09OQ29udGVudCB9IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgZXJyb3JEaWFsb2cgPSB1c2VFcnJvckRpYWxvZygpO1xuXG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVHJhbnNsYXRlQ2xpY2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGVkaXRvci5nZXRKU09OKCk7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0gYXdhaXQgdHJhbnNsYXRlVGlwVGFwQ29udGVudChvcmlnaW5hbCwgdHJhbnNsYXRpb25Db250ZXh0LnRyYW5zbGF0ZSwge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbnMsXG4gICAgICAgICAgICAgICAgbGlua0Jsb2NrLFxuICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tzQnlLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbkNvbnRleHQuc2hvd0FwcGx5VHJhbnNsYXRpb25EaWFsb2cpIHtcbiAgICAgICAgICAgICAgICBzZXRUcmFuc2xhdGlvbkRpYWxvZ1N0YXRlKHsgb3JpZ2luYWwsIHRyYW5zbGF0ZWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KHRyYW5zbGF0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgZXJyb3JEaWFsb2c/LnNob3dFcnJvcih7XG4gICAgICAgICAgICAgICAgdGl0bGU6IDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiZGV4dGluaXR5LnRyYW5zbGF0b3IuZXJyb3IudGl0bGVcIiBkZWZhdWx0TWVzc2FnZT1cIlRyYW5zbGF0aW9uIGZhaWxlZFwiIC8+LFxuICAgICAgICAgICAgICAgIHVzZXJNZXNzYWdlOiAoXG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRleHRpbml0eS50cmFuc2xhdG9yLmVycm9yLm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cmFuc2xhdGluZyB0aGUgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi5cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJUcmFuc2xhdGlvbiBmYWlsZWRcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZWRpdG9yTm9kZSA9IDxFZGl0b3JDb250ZW50IGVkaXRvcj17ZWRpdG9yfSAvPjtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0QmxvY2tTdHlsZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RleHRCbG9ja1N0eWxlc30+XG4gICAgICAgICAgICA8SW5saW5lU3R5bGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtpbmxpbmVTdHlsZXN9PlxuICAgICAgICAgICAgICAgIDxDaGlsZEJsb2Nrc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NoaWxkQmxvY2tzQnlLZXl9PlxuICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmVhZE9ubHlDb250ZW50PntlZGl0b3JOb2RlfTwvUmVhZE9ubHlDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJveCBzeD17eyBib3JkZXI6IGAxcHggc29saWQgJHtncmV5UGFsZXR0ZVsxMDBdfWAsIGJvcmRlclRvcFdpZHRoOiAwLCBiYWNrZ3JvdW5kQ29sb3I6IFwid2hpdGVcIiwgYm9yZGVyUmFkaXVzOiBcIjJweFwiIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUaXBUYXBUb29sYmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZE9wdGlvbnM9e3Jlc29sdmVkT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGVzPXt0ZXh0QmxvY2tTdHlsZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0eWxlcz17aW5saW5lU3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcnM9e3BsYWNlaG9sZGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2NrPXtsaW5rQmxvY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tzPXtjaGlsZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdExldmVsTWF4PXtsaXN0TGV2ZWxNYXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblRyYW5zbGF0ZT17Y2FuVHJhbnNsYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblRyYW5zbGF0ZUNsaWNrPXtoYW5kbGVUcmFuc2xhdGVDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3sgXCImIC50aXB0YXBcIjogeyBtaW5IZWlnaHQsIHA6IFwiMjBweFwiLCBvdXRsaW5lOiBcIm5vbmVcIiB9IH19PntlZGl0b3JOb2RlfTwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHt0cmFuc2xhdGlvbkRpYWxvZ1N0YXRlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUaXBUYXBDb250ZW50VHJhbnNsYXRpb25EaWFsb2dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0VHJhbnNsYXRpb25EaWFsb2dTdGF0ZShudWxsKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbENvbnRlbnQ9e3RyYW5zbGF0aW9uRGlhbG9nU3RhdGUub3JpZ2luYWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZENvbnRlbnQ9e3RyYW5zbGF0aW9uRGlhbG9nU3RhdGUudHJhbnNsYXRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFwcGx5VHJhbnNsYXRpb249eyhjb250ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2xhdGlvbkRpYWxvZ1N0YXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yUHJvcHM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQmxvY2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhUZXh0QmxvY2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0TGV2ZWxNYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0NoaWxkQmxvY2tzQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvSW5saW5lU3R5bGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1RleHRCbG9ja1N0eWxlQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufTtcblxudHlwZSBUaXBUYXBSaWNoVGV4dEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2U8VGlwVGFwUmljaFRleHRCbG9ja0RhdGEsIFRpcFRhcFJpY2hUZXh0QmxvY2tTdGF0ZSwgVGlwVGFwUmljaFRleHRCbG9ja0lucHV0PiAmXG4gICAgUmVhZE9ubHlCbG9ja1JlbmRlckludGVyZmFjZTxUaXBUYXBSaWNoVGV4dEJsb2NrU3RhdGU+O1xuXG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVRpcFRhcFJpY2hUZXh0QmxvY2sgPSAob3B0aW9uczogVGlwVGFwUmljaFRleHRCbG9ja0ZhY3RvcnlPcHRpb25zID0ge30pOiBUaXBUYXBSaWNoVGV4dEJsb2NrSW50ZXJmYWNlID0+IHtcbiAgICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlVGlwVGFwT3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCB0ZXh0QmxvY2tTdHlsZXMgPSBvcHRpb25zLnRleHRCbG9ja1N0eWxlcyA/PyBbXTtcbiAgICBjb25zdCBpbmxpbmVTdHlsZXMgPSBvcHRpb25zLmlubGluZVN0eWxlcyA/PyBbXTtcbiAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBvcHRpb25zLnBsYWNlaG9sZGVycyA/PyBbXTtcbiAgICBjb25zdCBsaW5rQmxvY2sgPSBvcHRpb25zLmxpbms7XG4gICAgY29uc3QgY2hpbGRCbG9ja3MgPSBvcHRpb25zLmNoaWxkQmxvY2tzID8/IHt9O1xuICAgIGNvbnN0IGNoaWxkQmxvY2tzQnlLZXk6IFJlY29yZDxzdHJpbmcsIEJsb2NrSW50ZXJmYWNlPiA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhjaGlsZEJsb2NrcykubWFwKChba2V5LCB7IGJsb2NrIH1dKSA9PiBba2V5LCBibG9ja10pKTtcbiAgICBjb25zdCBoYXNDaGlsZEJsb2NrcyA9IE9iamVjdC5rZXlzKGNoaWxkQmxvY2tzKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IG1heFRleHRCbG9ja3MgPSBvcHRpb25zLm1heFRleHRCbG9ja3M7XG4gICAgY29uc3QgbGlzdExldmVsTWF4ID0gb3B0aW9ucy5saXN0TGV2ZWxNYXg7XG4gICAgY29uc3QgbWluSGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQ7XG5cbiAgICBjb25zdCBzaGFyZWRFZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgcmVzb2x2ZWRPcHRpb25zLFxuICAgICAgICB0ZXh0QmxvY2tTdHlsZXMsXG4gICAgICAgIGlubGluZVN0eWxlcyxcbiAgICAgICAgcGxhY2Vob2xkZXJzLFxuICAgICAgICBsaW5rQmxvY2ssXG4gICAgICAgIGNoaWxkQmxvY2tzLFxuICAgICAgICBtYXhUZXh0QmxvY2tzLFxuICAgICAgICBsaXN0TGV2ZWxNYXgsXG4gICAgICAgIG1pbkhlaWdodCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGlwVGFwRXh0ZW5zaW9ucyA9IGJ1aWxkVGlwVGFwRXh0ZW5zaW9ucyh7XG4gICAgICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICAgICAgdGV4dEJsb2NrU3R5bGVzLFxuICAgICAgICBpbmxpbmVTdHlsZXMsXG4gICAgICAgIHBsYWNlaG9sZGVycyxcbiAgICAgICAgbGlua0Jsb2NrLFxuICAgICAgICBjaGlsZEJsb2NrcyxcbiAgICAgICAgbWF4VGV4dEJsb2NrcyxcbiAgICAgICAgbGlzdExldmVsTWF4LFxuICAgIH0pO1xuXG4gICAgY29uc3QgVGlwVGFwUmljaFRleHRCbG9jazogVGlwVGFwUmljaFRleHRCbG9ja0ludGVyZmFjZSA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWU6IFwiVGlwVGFwUmljaFRleHRcIixcblxuICAgICAgICBkaXNwbGF5TmFtZTogPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJkZXh0aW5pdHkuYmxvY2tzLnRpcFRhcFJpY2hUZXh0XCIgZGVmYXVsdE1lc3NhZ2U9XCJSaWNoIFRleHQgKFRpcFRhcClcIiAvPixcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyB0aXBUYXBDb250ZW50OiBlbXB0eUNvbnRlbnQgfSksXG5cbiAgICAgICAgY2F0ZWdvcnk6IEJsb2NrQ2F0ZWdvcnkuVGV4dEFuZENvbnRlbnQsXG5cbiAgICAgICAgaW5wdXQyU3RhdGU6ICh7IHRpcFRhcENvbnRlbnQgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aXBUYXBDb250ZW50ID8/IGVtcHR5Q29udGVudDtcbiAgICAgICAgICAgIGlmIChsaW5rQmxvY2spIHtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gbWFwTGlua01hcmtzRGF0YShjb250ZW50LCAoZGF0YSkgPT4gbGlua0Jsb2NrLmlucHV0MlN0YXRlKGRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBtYXBDbXNCbG9ja05vZGVzRGF0YShjb250ZW50LCAoYmxvY2tUeXBlLCBkYXRhKSA9PiBjaGlsZEJsb2Nrc0J5S2V5W2Jsb2NrVHlwZV0/LmlucHV0MlN0YXRlKGRhdGEpID8/IGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdGlwVGFwQ29udGVudDogY29udGVudCB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHsgdGlwVGFwQ29udGVudCB9KSA9PiB7XG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRpcFRhcENvbnRlbnQ7XG4gICAgICAgICAgICBpZiAobGlua0Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IG1hcExpbmtNYXJrc0RhdGEoY29udGVudCwgKGRhdGEpID0+IGxpbmtCbG9jay5zdGF0ZTJPdXRwdXQoZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IG1hcENtc0Jsb2NrTm9kZXNEYXRhKGNvbnRlbnQsIChibG9ja1R5cGUsIGRhdGEpID0+IGNoaWxkQmxvY2tzQnlLZXlbYmxvY2tUeXBlXT8uc3RhdGUyT3V0cHV0KGRhdGEpID8/IGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdGlwVGFwQ29udGVudDogY29udGVudCB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIG91dHB1dDJTdGF0ZTogYXN5bmMgKHsgdGlwVGFwQ29udGVudCB9LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRpcFRhcENvbnRlbnQgPz8gZW1wdHlDb250ZW50O1xuICAgICAgICAgICAgaWYgKGxpbmtCbG9jaykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBtYXBMaW5rTWFya3NEYXRhQXN5bmMoY29udGVudCwgKGRhdGEpID0+IGxpbmtCbG9jay5vdXRwdXQyU3RhdGUoZGF0YSwgY29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IG1hcENtc0Jsb2NrTm9kZXNEYXRhQXN5bmMoY29udGVudCwgYXN5bmMgKGJsb2NrVHlwZSwgZGF0YSkgPT5cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRCbG9ja3NCeUtleVtibG9ja1R5cGVdID8gY2hpbGRCbG9ja3NCeUtleVtibG9ja1R5cGVdLm91dHB1dDJTdGF0ZShkYXRhLCBjb250ZXh0KSA6IGRhdGEsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHRpcFRhcENvbnRlbnQ6IGNvbnRlbnQgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVQcmV2aWV3U3RhdGU6ICh7IHRpcFRhcENvbnRlbnQgfSwgcHJldmlld0N0eCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aXBUYXBDb250ZW50O1xuICAgICAgICAgICAgaWYgKGxpbmtCbG9jaykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBtYXBMaW5rTWFya3NEYXRhKGNvbnRlbnQsIChkYXRhKSA9PiBsaW5rQmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGRhdGEsIHByZXZpZXdDdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBtYXBDbXNCbG9ja05vZGVzRGF0YShcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgKGJsb2NrVHlwZSwgZGF0YSkgPT4gY2hpbGRCbG9ja3NCeUtleVtibG9ja1R5cGVdPy5jcmVhdGVQcmV2aWV3U3RhdGUoZGF0YSwgcHJldmlld0N0eCkgPz8gZGF0YSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0aXBUYXBDb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgICAgIGFkbWluTWV0YTogeyByb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiA8VGlwVGFwRWRpdG9yIHN0YXRlPXtzdGF0ZX0gdXBkYXRlU3RhdGU9e3VwZGF0ZVN0YXRlfSB7Li4uc2hhcmVkRWRpdG9yUHJvcHN9IC8+LFxuXG4gICAgICAgIFJlYWRPbmx5Q29tcG9uZW50OiAoeyBzdGF0ZSB9KSA9PiA8VGlwVGFwRWRpdG9yIHN0YXRlPXtzdGF0ZX0gdXBkYXRlU3RhdGU9eygpID0+IHt9fSB7Li4uc2hhcmVkRWRpdG9yUHJvcHN9IHJlYWRPbmx5IC8+LFxuXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBnZXRQbGFpblRleHRGcm9tQ29udGVudChzdGF0ZS50aXBUYXBDb250ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IE1BWF9DSEFSUyA9IDEwMDtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyBbeyB0eXBlOiBcInRleHRcIiwgY29udGVudDogdGV4dC5zbGljZSgwLCBNQVhfQ0hBUlMpIH1dIDogW107XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXh0cmFjdFRleHRDb250ZW50czogKHN0YXRlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBnZXRQbGFpblRleHRGcm9tQ29udGVudChzdGF0ZS50aXBUYXBDb250ZW50KTtcbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZXh0cy5wdXNoKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmtCbG9jaz8uZXh0cmFjdFRleHRDb250ZW50cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBjb2xsZWN0TGlua01hcmtzRGF0YShzdGF0ZS50aXBUYXBDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0cy5wdXNoKC4uLmxpbmtCbG9jay5leHRyYWN0VGV4dENvbnRlbnRzKGRhdGEsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgYmxvY2tUeXBlLCBkYXRhIH0gb2YgY29sbGVjdENtc0Jsb2NrTm9kZXMoc3RhdGUudGlwVGFwQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRCbG9jayA9IGNoaWxkQmxvY2tzQnlLZXlbYmxvY2tUeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2s/LmV4dHJhY3RUZXh0Q29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzLnB1c2goLi4uY2hpbGRCbG9jay5leHRyYWN0VGV4dENvbnRlbnRzKGRhdGEsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0ZXh0cztcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRyYW5zbGF0ZVRpcFRhcENvbnRlbnQoc3RhdGUudGlwVGFwQ29udGVudCwgdHJhbnNsYXRlLCB7XG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogdGlwVGFwRXh0ZW5zaW9ucyxcbiAgICAgICAgICAgICAgICBsaW5rQmxvY2ssXG4gICAgICAgICAgICAgICAgY2hpbGRCbG9ja3NCeUtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgdGlwVGFwQ29udGVudDogY29udGVudCB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gVGlwVGFwUmljaFRleHRCbG9jaztcbn07XG4iXX0= */",
|
|
524
|
+
styles: ".tiptap > :first-child, .tiptap > :first-child > :first-child{margin-top:0;}.tiptap > :last-child, .tiptap > :last-child > :last-child{margin-bottom:0;}/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvdGlwVGFwL2NyZWF0ZVRpcFRhcFJpY2hUZXh0QmxvY2sudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1rQndCIiwiZmlsZSI6Ii4uLy4uLy4uL3NyYy9ibG9ja3MvdGlwVGFwL2NyZWF0ZVRpcFRhcFJpY2hUZXh0QmxvY2sudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3JleVBhbGV0dGUsIHVzZUNvbnRlbnRUcmFuc2xhdGlvblNlcnZpY2UsIHVzZUVycm9yRGlhbG9nIH0gZnJvbSBcIkBkZXh0aW5pdHkvYWRtaW5cIjtcbmltcG9ydCB7IEJveCwgdHlwZSBTdmdJY29uUHJvcHMgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvc3R5bGVzXCI7XG5pbXBvcnQgeyBFeHRlbnNpb24sIHR5cGUgRXh0ZW5zaW9ucyB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IEhlYWRpbmcsIHR5cGUgTGV2ZWwgYXMgSGVhZGluZ0xldmVsIH0gZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmdcIjtcbmltcG9ydCBTdWJzY3JpcHQgZnJvbSBcIkB0aXB0YXAvZXh0ZW5zaW9uLXN1YnNjcmlwdFwiO1xuaW1wb3J0IFN1cGVyc2NyaXB0IGZyb20gXCJAdGlwdGFwL2V4dGVuc2lvbi1zdXBlcnNjcmlwdFwiO1xuaW1wb3J0IHsgRWRpdG9yQ29udGVudCwgdHlwZSBKU09OQ29udGVudCwgdXNlRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvcmVhY3RcIjtcbmltcG9ydCBTdGFydGVyS2l0IGZyb20gXCJAdGlwdGFwL3N0YXJ0ZXIta2l0XCI7XG5pbXBvcnQge1xuICAgIHR5cGUgQ29tcG9uZW50VHlwZSxcbiAgICB0eXBlIEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQsXG4gICAgdHlwZSBIVE1MQXR0cmlidXRlcyxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFJlZkF0dHJpYnV0ZXMsXG4gICAgdXNlRWZmZWN0LFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuXG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgQmxvY2tDYXRlZ29yeSwgdHlwZSBCbG9ja0ludGVyZmFjZSwgdHlwZSBMaW5rQmxvY2tJbnRlcmZhY2UsIHR5cGUgUmVhZE9ubHlCbG9ja1JlbmRlckludGVyZmFjZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2hpbGRCbG9ja3NDb250ZXh0IH0gZnJvbSBcIi4vQ2hpbGRCbG9ja3NDb250ZXh0XCI7XG5pbXBvcnQgeyB0cmFuc2xhdGVUaXBUYXBDb250ZW50IH0gZnJvbSBcIi4vY29udGVudFRyYW5zbGF0aW9uXCI7XG5pbXBvcnQgeyBDbXNCbG9jaywgQ21zSW5saW5lQmxvY2sgfSBmcm9tIFwiLi9leHRlbnNpb25zL0Ntc0Jsb2NrXCI7XG5pbXBvcnQgeyBDbXNMaW5rIH0gZnJvbSBcIi4vZXh0ZW5zaW9ucy9DbXNMaW5rXCI7XG5pbXBvcnQgeyBJbmxpbmVTdHlsZU1hcmsgfSBmcm9tIFwiLi9leHRlbnNpb25zL0lubGluZVN0eWxlTWFya1wiO1xuaW1wb3J0IHsgTm9uQnJlYWtpbmdTcGFjZSB9IGZyb20gXCIuL2V4dGVuc2lvbnMvTm9uQnJlYWtpbmdTcGFjZVwiO1xuaW1wb3J0IHsgUGxhY2Vob2xkZXIgfSBmcm9tIFwiLi9leHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgeyBTb2Z0SHlwaGVuIH0gZnJvbSBcIi4vZXh0ZW5zaW9ucy9Tb2Z0SHlwaGVuXCI7XG5pbXBvcnQgeyBUZXh0QmxvY2tTdHlsZUhlYWRpbmcgfSBmcm9tIFwiLi9leHRlbnNpb25zL1RleHRCbG9ja1N0eWxlSGVhZGluZ1wiO1xuaW1wb3J0IHsgVGV4dEJsb2NrU3R5bGVQYXJhZ3JhcGggfSBmcm9tIFwiLi9leHRlbnNpb25zL1RleHRCbG9ja1N0eWxlUGFyYWdyYXBoXCI7XG5pbXBvcnQgeyBJbmxpbmVTdHlsZUNvbnRleHQgfSBmcm9tIFwiLi9JbmxpbmVTdHlsZUNvbnRleHRcIjtcbmltcG9ydCB7IGNyZWF0ZUxpc3RMZXZlbE1heEV4dGVuc2lvbiwgZ2V0TGlzdE5lc3RpbmdEZXB0aEZyb21Kc29uLCB0cmltTGlzdE5lc3RpbmcgfSBmcm9tIFwiLi9saXN0TGV2ZWxNYXhIZWxwZXJzXCI7XG5pbXBvcnQgeyBUZXh0QmxvY2tTdHlsZUNvbnRleHQgfSBmcm9tIFwiLi9UZXh0QmxvY2tTdHlsZUNvbnRleHRcIjtcbmltcG9ydCB7IFRpcFRhcENvbnRlbnRUcmFuc2xhdGlvbkRpYWxvZyB9IGZyb20gXCIuL1RpcFRhcENvbnRlbnRUcmFuc2xhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHsgVGlwVGFwVG9vbGJhciB9IGZyb20gXCIuL1RpcFRhcFRvb2xiYXJcIjtcblxuZXhwb3J0IHR5cGUgeyBKU09OQ29udGVudCBhcyBUaXBUYXBSaWNoVGV4dEJsb2NrQ29udGVudCB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcblxuaW50ZXJmYWNlIFRpcFRhcEhlYWRpbmdPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiBMaW1pdHMgdGhlIHNlbGVjdGFibGUgaGVhZGluZyBsZXZlbHMgKDEtNikuIERlZmF1bHRzIHRvIGFsbCBsZXZlbHMgKFsxLCAyLCAzLCA0LCA1LCA2XSkuXG4gICAgICogTXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiB1bmlxdWUgaW50ZWdlcnMgYmV0d2VlbiAxIGFuZCA2LCBvdGhlcndpc2UgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqL1xuICAgIGxldmVscz86IG51bWJlcltdO1xuICAgIC8qKlxuICAgICAqIEhlYWRpbmcgbGV2ZWwgdXNlZCBmb3IgbmV3bHkgY3JlYXRlZCBoZWFkaW5ncy4gRGVmYXVsdHMgdG8gdGhlIGxvd2VzdCBhbGxvd2VkIGxldmVsLlxuICAgICAqIE11c3QgYmUgb25lIG9mIGBsZXZlbHNgLCBvdGhlcndpc2UgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqL1xuICAgIGRlZmF1bHRMZXZlbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgYmxvY2sncyBvcHRpb25zIHdpdGggdGhlIGRlZmF1bHRzIGFwcGxpZWQgYW5kIHRoZSBoZWFkaW5nIGxldmVscyB2YWxpZGF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlwVGFwUmVzb2x2ZWRPcHRpb25zIHtcbiAgICB1bmRvUmVkb0J1dHRvbnM6IGJvb2xlYW47XG4gICAgYm9sZDogYm9vbGVhbjtcbiAgICBpdGFsaWM6IGJvb2xlYW47XG4gICAgdW5kZXJsaW5lOiBib29sZWFuO1xuICAgIHN0cmlrZTogYm9vbGVhbjtcbiAgICBzdWI6IGJvb2xlYW47XG4gICAgc3VwOiBib29sZWFuO1xuICAgIHBhcmFncmFwaDogYm9vbGVhbjtcbiAgICBoZWFkaW5nOiBmYWxzZSB8IHsgbGV2ZWxzOiBIZWFkaW5nTGV2ZWxbXTsgZGVmYXVsdExldmVsOiBIZWFkaW5nTGV2ZWwgfTtcbiAgICBvcmRlcmVkTGlzdDogYm9vbGVhbjtcbiAgICB1bm9yZGVyZWRMaXN0OiBib29sZWFuO1xuICAgIG5vbkJyZWFraW5nU3BhY2U6IGJvb2xlYW47XG4gICAgc29mdEh5cGhlbjogYm9vbGVhbjtcbiAgICBsaW5rOiBib29sZWFuO1xuICAgIGNvbnRlbnRUcmFuc2xhdGlvbjogYm9vbGVhbjtcbn1cblxuY29uc3QgYWxsSGVhZGluZ0xldmVsczogSGVhZGluZ0xldmVsW10gPSBbMSwgMiwgMywgNCwgNSwgNl07XG5cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkaW5nTGV2ZWxzKGhlYWRpbmdMZXZlbHM6IG51bWJlcltdKTogaGVhZGluZ0xldmVscyBpcyBIZWFkaW5nTGV2ZWxbXSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgaGVhZGluZ0xldmVscy5sZW5ndGggPiAwICYmXG4gICAgICAgIG5ldyBTZXQoaGVhZGluZ0xldmVscykuc2l6ZSA9PT0gaGVhZGluZ0xldmVscy5sZW5ndGggJiZcbiAgICAgICAgaGVhZGluZ0xldmVscy5ldmVyeSgobGV2ZWwpID0+IE51bWJlci5pc0ludGVnZXIobGV2ZWwpICYmIGxldmVsID49IDEgJiYgbGV2ZWwgPD0gNilcbiAgICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVGlwVGFwT3B0aW9ucyh7XG4gICAgdW5kb1JlZG9CdXR0b25zID0gdHJ1ZSxcbiAgICBib2xkID0gdHJ1ZSxcbiAgICBpdGFsaWMgPSB0cnVlLFxuICAgIHVuZGVybGluZSA9IGZhbHNlLFxuICAgIHN0cmlrZSA9IHRydWUsXG4gICAgc3ViID0gdHJ1ZSxcbiAgICBzdXAgPSB0cnVlLFxuICAgIHBhcmFncmFwaCA9IHRydWUsXG4gICAgaGVhZGluZyA9IHRydWUsXG4gICAgb3JkZXJlZExpc3QsXG4gICAgdW5vcmRlcmVkTGlzdCxcbiAgICBub25CcmVha2luZ1NwYWNlID0gdHJ1ZSxcbiAgICBzb2Z0SHlwaGVuID0gdHJ1ZSxcbiAgICBsaW5rLFxuICAgIGNvbnRlbnRUcmFuc2xhdGlvbiA9IHRydWUsXG59OiBUaXBUYXBSaWNoVGV4dEJsb2NrRmFjdG9yeU9wdGlvbnMgPSB7fSk6IFRpcFRhcFJlc29sdmVkT3B0aW9ucyB7XG4gICAgY29uc3QgaGVhZGluZ09wdGlvbnMgPSBoZWFkaW5nICE9PSBmYWxzZSAmJiBoZWFkaW5nICE9PSB0cnVlID8gaGVhZGluZyA6IHt9O1xuICAgIGNvbnN0IGhlYWRpbmdMZXZlbHMgPSBoZWFkaW5nT3B0aW9ucy5sZXZlbHMgPz8gYWxsSGVhZGluZ0xldmVscztcblxuICAgIGlmICghaXNWYWxpZEhlYWRpbmdMZXZlbHMoaGVhZGluZ0xldmVscykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaGVhZGluZyBsZXZlbHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSBvZiB1bmlxdWUgaW50ZWdlcnMgYmV0d2VlbiAxIGFuZCA2XCIpO1xuICAgIH1cblxuICAgIGlmIChoZWFkaW5nT3B0aW9ucy5kZWZhdWx0TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiAhaGVhZGluZ0xldmVscy5pbmNsdWRlcyhoZWFkaW5nT3B0aW9ucy5kZWZhdWx0TGV2ZWwgYXMgSGVhZGluZ0xldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGhlYWRpbmcgZGVmYXVsdExldmVsIG11c3QgYmUgb25lIG9mIHRoZSBhbGxvd2VkIGxldmVscyAoJHtoZWFkaW5nTGV2ZWxzLmpvaW4oXCIsIFwiKX0pYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdEhlYWRpbmdMZXZlbCA9IChoZWFkaW5nT3B0aW9ucy5kZWZhdWx0TGV2ZWwgPz8gTWF0aC5taW4oLi4uaGVhZGluZ0xldmVscykpIGFzIEhlYWRpbmdMZXZlbDtcblxuICAgIGlmICghcGFyYWdyYXBoKSB7XG4gICAgICAgIGlmIChoZWFkaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFyYWdyYXBoOiBmYWxzZSByZXF1aXJlcyBoZWFkaW5ncywgb3RoZXJ3aXNlIG5vIHRleHQgYmxvY2sgdHlwZSBpcyBsZWZ0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRlcmVkTGlzdCB8fCB1bm9yZGVyZWRMaXN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMaXN0cyByZXF1aXJlIHBhcmFncmFwaHMsIGJlY2F1c2UgYSBsaXN0IGl0ZW0ncyBjb250ZW50IHN0YXJ0cyB3aXRoIGEgcGFyYWdyYXBoXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdW5kb1JlZG9CdXR0b25zLFxuICAgICAgICBib2xkLFxuICAgICAgICBpdGFsaWMsXG4gICAgICAgIHVuZGVybGluZSxcbiAgICAgICAgc3RyaWtlLFxuICAgICAgICBzdWIsXG4gICAgICAgIHN1cCxcbiAgICAgICAgcGFyYWdyYXBoLFxuICAgICAgICBoZWFkaW5nOiBoZWFkaW5nID09PSBmYWxzZSA/IGZhbHNlIDogeyBsZXZlbHM6IGhlYWRpbmdMZXZlbHMsIGRlZmF1bHRMZXZlbDogZGVmYXVsdEhlYWRpbmdMZXZlbCB9LFxuICAgICAgICAvLyBMaXN0cyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgY2Fubm90IGV4aXN0IHdpdGhvdXQgYSBwYXJhZ3JhcGggdG8gYnVpbGQgdGhlaXIgaXRlbXMgZnJvbS5cbiAgICAgICAgb3JkZXJlZExpc3Q6IG9yZGVyZWRMaXN0ID8/IHBhcmFncmFwaCxcbiAgICAgICAgdW5vcmRlcmVkTGlzdDogdW5vcmRlcmVkTGlzdCA/PyBwYXJhZ3JhcGgsXG4gICAgICAgIG5vbkJyZWFraW5nU3BhY2UsXG4gICAgICAgIHNvZnRIeXBoZW4sXG4gICAgICAgIGxpbms6ICEhbGluayxcbiAgICAgICAgY29udGVudFRyYW5zbGF0aW9uLFxuICAgIH07XG59XG5cbmV4cG9ydCB0eXBlIFRpcFRhcFRleHRCbG9ja1R5cGUgPVxuICAgIHwgXCJwYXJhZ3JhcGhcIlxuICAgIHwgXCJoZWFkaW5nLTFcIlxuICAgIHwgXCJoZWFkaW5nLTJcIlxuICAgIHwgXCJoZWFkaW5nLTNcIlxuICAgIHwgXCJoZWFkaW5nLTRcIlxuICAgIHwgXCJoZWFkaW5nLTVcIlxuICAgIHwgXCJoZWFkaW5nLTZcIlxuICAgIHwgXCJvcmRlcmVkLWxpc3RcIlxuICAgIHwgXCJ1bm9yZGVyZWQtbGlzdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpcFRhcFRleHRCbG9ja1N0eWxlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbGFiZWw6IFJlYWN0Tm9kZTtcbiAgICAvKipcbiAgICAgKiBMaW1pdHMgdGhlIHRleHQgYmxvY2sgc3R5bGUgdG8gdGhlIHByb3ZpZGVkIHRleHQgYmxvY2sgdHlwZXMuXG4gICAgICogSWYgbm9uZSBpcyBzcGVjaWZpZWQsIHRoZSB0ZXh0IGJsb2NrIHN0eWxlIGlzIGFsbG93ZWQgZm9yIGFsbCB0ZXh0IGJsb2NrIHR5cGVzLlxuICAgICAqL1xuICAgIGFwcGxpZXNUbz86IFRpcFRhcFRleHRCbG9ja1R5cGVbXTtcbiAgICBlbGVtZW50OiBDb21wb25lbnRUeXBlPEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlwVGFwSW5saW5lU3R5bGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYWJlbDogUmVhY3ROb2RlO1xuICAgIC8qKlxuICAgICAqIExpbWl0cyB0aGUgaW5saW5lIHN0eWxlIHRvIHRoZSBwcm92aWRlZCB0ZXh0IGJsb2NrIHR5cGVzLlxuICAgICAqIElmIG5vbmUgaXMgc3BlY2lmaWVkLCB0aGUgaW5saW5lIHN0eWxlIGlzIGFsbG93ZWQgZm9yIGFsbCB0ZXh0IGJsb2NrIHR5cGVzLlxuICAgICAqL1xuICAgIGFwcGxpZXNUbz86IFRpcFRhcFRleHRCbG9ja1R5cGVbXTtcbiAgICBlbGVtZW50OiBDb21wb25lbnRUeXBlPEhUTUxBdHRyaWJ1dGVzPEhUTUxFbGVtZW50Pj47XG4gICAgLyoqXG4gICAgICogRGlzcGxheWVkIG5leHQgdG8gdGhlIGxhYmVsIGluIHRoZSB0b29sYmFyJ3MgXCJNb3JlIG9wdGlvbnNcIiBtZW51LCBtYXRjaGluZyBTdXBlcnNjcmlwdC9TdWJzY3JpcHQuXG4gICAgICovXG4gICAgaWNvbj86IEZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8T21pdDxTdmdJY29uUHJvcHMsIFwicmVmXCI+ICYgUmVmQXR0cmlidXRlczxTVkdTVkdFbGVtZW50Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlwVGFwUmljaFRleHRCbG9ja1N0YXRlIHtcbiAgICB0aXBUYXBDb250ZW50OiBKU09OQ29udGVudDtcbn1cblxuaW50ZXJmYWNlIFRpcFRhcFJpY2hUZXh0QmxvY2tEYXRhIHtcbiAgICB0aXBUYXBDb250ZW50OiBKU09OQ29udGVudDtcbn1cblxuaW50ZXJmYWNlIFRpcFRhcFJpY2hUZXh0QmxvY2tJbnB1dCB7XG4gICAgdGlwVGFwQ29udGVudDogSlNPTkNvbnRlbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlwVGFwUGxhY2Vob2xkZXIge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBsYWJlbDogUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpcFRhcENoaWxkQmxvY2sge1xuICAgIGJsb2NrOiBCbG9ja0ludGVyZmFjZTtcbiAgICAvKipcbiAgICAgKiBIb3cgdGhlIGNoaWxkIGJsb2NrIGlzIGRpc3BsYXllZCBpbiB0aGUgZWRpdG9yIChhbmQgcmVuZGVyZWQgb3V0cHV0KTogYXMgYSBzdGFuZGFsb25lIGJsb2NrXG4gICAgICogZWxlbWVudCBvbiBpdHMgb3duIGxpbmUgKGBcImJsb2NrXCJgKSBvciBpbmxpbmUgd2l0aGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0IChgXCJpbmxpbmVcImApLlxuICAgICAqL1xuICAgIGRpc3BsYXk6IFwiYmxvY2tcIiB8IFwiaW5saW5lXCI7XG59XG5cbmludGVyZmFjZSBUaXBUYXBSaWNoVGV4dEJsb2NrRmFjdG9yeU9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSB1bmRvL3JlZG8gYnV0dG9ucyBpbiB0aGUgdG9vbGJhci4gVGhlIGtleWJvYXJkIHNob3J0Y3V0cyB3b3JrIHJlZ2FyZGxlc3MuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICB1bmRvUmVkb0J1dHRvbnM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgYm9sZCB0ZXh0LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICovXG4gICAgYm9sZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBpdGFsaWMgdGV4dC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIGl0YWxpYz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB1bmRlcmxpbmVkIHRleHQuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICovXG4gICAgdW5kZXJsaW5lPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHN0cnVjay10aHJvdWdoIHRleHQuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICBzdHJpa2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc3Vic2NyaXB0IHRleHQuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICBzdWI/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc3VwZXJzY3JpcHQgdGV4dC4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIHN1cD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBwYXJhZ3JhcGhzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBQYXNzIGBmYWxzZWAgZm9yIGEgaGVhZGluZy1vbmx5IGJsb2NrIChlLmcuIGEgaGVhZGxpbmUpOiB0aGUgZWRpdG9yIHN0YXJ0cyB3aXRoIGEgaGVhZGluZ1xuICAgICAqIGluc3RlYWQgb2YgYSBwYXJhZ3JhcGggYW5kIHRoZSB0ZXh0IGJsb2NrIHR5cGUgc2VsZWN0IG9ubHkgb2ZmZXJzIGhlYWRpbmdzLiBSZXF1aXJlc1xuICAgICAqIGhlYWRpbmdzLCBhbmQgZGlzYWJsZXMgbGlzdHMsIGJlY2F1c2UgYSBsaXN0IGl0ZW0ncyBjb250ZW50IHN0YXJ0cyB3aXRoIGEgcGFyYWdyYXBoLlxuICAgICAqL1xuICAgIHBhcmFncmFwaD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBoZWFkaW5ncy4gRGVmYXVsdHMgdG8gYHRydWVgIChhbGwgbGV2ZWxzKS5cbiAgICAgKiBQYXNzIGFuIG9wdGlvbnMgb2JqZWN0IHRvIGxpbWl0IHRoZSBzZWxlY3RhYmxlIGhlYWRpbmcgYGxldmVsc2Agb3IgdG8gc2V0IHRoZSBgZGVmYXVsdExldmVsYC5cbiAgICAgKi9cbiAgICBoZWFkaW5nPzogYm9vbGVhbiB8IFRpcFRhcEhlYWRpbmdPcHRpb25zO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgb3JkZXJlZCBsaXN0cy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIG9yZGVyZWRMaXN0PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHVub3JkZXJlZCBsaXN0cy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIHVub3JkZXJlZExpc3Q/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgbm9uLWJyZWFraW5nIHNwYWNlcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIG5vbkJyZWFraW5nU3BhY2U/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc29mdCBoeXBoZW5zLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICovXG4gICAgc29mdEh5cGhlbj86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBsaW5rcyBieSBwYXNzaW5nIHRoZSBsaW5rIGJsb2NrIHRoYXQgaXMgdXNlZCBmb3IgdGhlbS4gRGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBsaW5rPzogQmxvY2tJbnRlcmZhY2UgJiBMaW5rQmxvY2tJbnRlcmZhY2U7XG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIGluLXRvb2xiYXIgXCJUcmFuc2xhdGVcIiBidXR0b24uIERlZmF1bHRzIHRvIGB0cnVlYC4gU2V0IHRvIGBmYWxzZWAgdG8gaGlkZSBpdCwgZS5nLlxuICAgICAqIHRvIGF2b2lkIGEgbmVzdGVkIHRyYW5zbGF0ZSBidXR0b24gd2hlbiB0aGlzIGJsb2NrIGlzIHJlbmRlcmVkIGluc2lkZSBhbm90aGVyIHRyYW5zbGF0aW9uIFVJLlxuICAgICAqL1xuICAgIGNvbnRlbnRUcmFuc2xhdGlvbj86IGJvb2xlYW47XG4gICAgdGV4dEJsb2NrU3R5bGVzPzogVGlwVGFwVGV4dEJsb2NrU3R5bGVbXTtcbiAgICBpbmxpbmVTdHlsZXM/OiBUaXBUYXBJbmxpbmVTdHlsZVtdO1xuICAgIHBsYWNlaG9sZGVycz86IFRpcFRhcFBsYWNlaG9sZGVyW107XG4gICAgLyoqXG4gICAgICogQ2hpbGQgYmxvY2tzIHRoYXQgY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGVkaXRvciB2aWEgdGhlIHRvb2xiYXIncyBcIitcIiBtZW51LCBrZXllZCBieSBhXG4gICAgICogc3RhYmxlIGtleS4gVGhlIGtleSAobm90IHRoZSBibG9jaydzIG5hbWUpIGlzIHN0b3JlZCBpbiB0aGUgY29udGVudCwgc28gYmxvY2tzIGNhbiBiZVxuICAgICAqIHJlbmFtZWQgb3Igc3dhcHBlZCB3aXRob3V0IGludmFsaWRhdGluZyBleGlzdGluZyBjb250ZW50LlxuICAgICAqIEVhY2ggYmxvY2sgaXMgcmVuZGVyZWQgYXMgYSBub24tZWRpdGFibGUgcHJldmlldyB0aGF0IGNhbiBiZSBlZGl0ZWQgKGRpYWxvZykgb3IgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFBhc3MgYHsgYmxvY2ssIGRpc3BsYXkgfWAgZm9yIGVhY2ggY2hpbGQgYmxvY2ssIHdoZXJlIGBkaXNwbGF5YCBpcyBgXCJibG9ja1wiYCAoc3RhbmRhbG9uZVxuICAgICAqIGJsb2NrIGVsZW1lbnQpIG9yIGBcImlubGluZVwiYCAoaW5saW5lIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgdGV4dCkuXG4gICAgICovXG4gICAgY2hpbGRCbG9ja3M/OiBSZWNvcmQ8c3RyaW5nLCBUaXBUYXBDaGlsZEJsb2NrPjtcbiAgICAvKipcbiAgICAgKiBMaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRvcC1sZXZlbCB0ZXh0IGJsb2NrcyAocGFyYWdyYXBocywgaGVhZGluZ3MsIGxpc3RzKVxuICAgICAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIGVkaXRvci5cbiAgICAgKi9cbiAgICBtYXhUZXh0QmxvY2tzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIExpbWl0cyB0aGUgbWF4aW11bSBuZXN0aW5nIGRlcHRoIG9mIGxpc3QgaXRlbXMuXG4gICAgICogQSB2YWx1ZSBvZiAxIG1lYW5zIG9ubHkgYSBmbGF0IGxpc3QgKG5vIG5lc3RpbmcpLCAyIGFsbG93cyBvbmUgbGV2ZWwgb2Ygc3ViLWxpc3RzLCBldGMuXG4gICAgICovXG4gICAgbGlzdExldmVsTWF4PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIE1pbmltdW0gaGVpZ2h0IChpbiBweCkgb2YgdGhlIGVkaXRvcidzIGNvbnRlbnQgYXJlYS4gRGVmYXVsdHMgdG8gYDIwMGAuXG4gICAgICovXG4gICAgbWluSGVpZ2h0PzogbnVtYmVyO1xufVxuXG5mdW5jdGlvbiBnZXRQbGFpblRleHRGcm9tQ29udGVudChjb250ZW50OiBKU09OQ29udGVudCk6IHN0cmluZyB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGlmIChjb250ZW50LnRleHQpIHtcbiAgICAgICAgdGV4dCArPSBjb250ZW50LnRleHQ7XG4gICAgfVxuICAgIGlmIChjb250ZW50LmNvbnRlbnQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjb250ZW50LmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRleHQgKz0gZ2V0UGxhaW5UZXh0RnJvbUNvbnRlbnQoY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xufVxuXG4vLyBUaXBUYXAncyBvd24gcHJpb3JpdHkgZm9yIHRoZSBwYXJhZ3JhcGggZXh0ZW5zaW9uLCB3aGljaCBtYWtlcyB0aGUgcGFyYWdyYXBoIHRoZSBzY2hlbWEncyBmaXJzdFxuLy8gYmxvY2sgbm9kZSBhbmQgdGhlcmVmb3JlIFByb3NlTWlycm9yJ3MgZGVmYXVsdCBibG9jayB0eXBlLlxuY29uc3QgcGFyYWdyYXBoUHJpb3JpdHkgPSAxMDAwO1xuXG5jb25zdCBidWlsZEVtcHR5Q29udGVudCA9IChyZXNvbHZlZE9wdGlvbnM6IFRpcFRhcFJlc29sdmVkT3B0aW9ucyk6IEpTT05Db250ZW50ID0+ICh7XG4gICAgdHlwZTogXCJkb2NcIixcbiAgICBjb250ZW50OiBbXG4gICAgICAgIHJlc29sdmVkT3B0aW9ucy5wYXJhZ3JhcGggfHwgcmVzb2x2ZWRPcHRpb25zLmhlYWRpbmcgPT09IGZhbHNlXG4gICAgICAgICAgICA/IHsgdHlwZTogXCJwYXJhZ3JhcGhcIiB9XG4gICAgICAgICAgICA6IHsgdHlwZTogXCJoZWFkaW5nXCIsIGF0dHJzOiB7IGxldmVsOiByZXNvbHZlZE9wdGlvbnMuaGVhZGluZy5kZWZhdWx0TGV2ZWwgfSB9LFxuICAgIF0sXG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBkZWZhdWx0IGhlYWRpbmcgbGV2ZWwgYW5kLCBmb3IgaGVhZGluZy1vbmx5IGJsb2NrcywgbWFrZXMgdGhlIGhlYWRpbmcgdGhlIHNjaGVtYSdzXG4gKiBkZWZhdWx0IGJsb2NrIHR5cGUgKHRoZSBwb3NpdGlvbiBwYXJhZ3JhcGhzIHdvdWxkIG90aGVyd2lzZSB0YWtlLCBieSBwcmlvcml0eSkgYW5kIHJlcGxhY2VzIHRoZVxuICogaGVhZGluZyBrZXlib2FyZCBzaG9ydGN1dHMsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSB0b2dnbGUgYmFjayB0byBhIHBhcmFncmFwaC5cbiAqL1xuY29uc3QgYnVpbGRIZWFkaW5nRXh0ZW5zaW9uID0gKHtcbiAgICBiYXNlLFxuICAgIGxldmVscyxcbiAgICBkZWZhdWx0TGV2ZWwsXG4gICAgaGFzUGFyYWdyYXBoLFxufToge1xuICAgIGJhc2U6IHR5cGVvZiBIZWFkaW5nO1xuICAgIGxldmVsczogSGVhZGluZ0xldmVsW107XG4gICAgZGVmYXVsdExldmVsOiBIZWFkaW5nTGV2ZWw7XG4gICAgaGFzUGFyYWdyYXBoOiBib29sZWFuO1xufSkgPT5cbiAgICBiYXNlXG4gICAgICAgIC5leHRlbmQoe1xuICAgICAgICAgICAgLi4uKGhhc1BhcmFncmFwaFxuICAgICAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogcGFyYWdyYXBoUHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgICAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMobGV2ZWxzLm1hcCgobGV2ZWwpID0+IFtgTW9kLUFsdC0ke2xldmVsfWAsICgpID0+IHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldEhlYWRpbmcoeyBsZXZlbCB9KV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucGFyZW50Py4oKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gYHJlbmRlcmVkOiBmYWxzZWAga2VlcHMgVGlwVGFwIGZyb20gYWRkaW5nIGEgYGxldmVsYCBIVE1MIGF0dHJpYnV0ZSwgdGhlIGxldmVsIGlzIHRoZSB0YWcgbmFtZS5cbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHsgZGVmYXVsdDogZGVmYXVsdExldmVsLCByZW5kZXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmZpZ3VyZSh7IGxldmVscyB9KTtcblxuY29uc3QgaXNDbXNCbG9ja05vZGUgPSAoY29udGVudDogSlNPTkNvbnRlbnQpOiBib29sZWFuID0+IGNvbnRlbnQudHlwZSA9PT0gXCJjbXNCbG9ja1wiIHx8IGNvbnRlbnQudHlwZSA9PT0gXCJjbXNJbmxpbmVCbG9ja1wiO1xuXG5jb25zdCBjcmVhdGVNYXhUZXh0QmxvY2tzRXh0ZW5zaW9uID0gKG1heFRleHRCbG9ja3M6IG51bWJlcikgPT5cbiAgICBFeHRlbnNpb24uY3JlYXRlKHtcbiAgICAgICAgbmFtZTogXCJtYXhUZXh0QmxvY2tzXCIsXG4gICAgICAgIGFkZEtleWJvYXJkU2hvcnRjdXRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBFbnRlcjogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRvci5zdGF0ZS5kb2MuY2hpbGRDb3VudCA+PSBtYXhUZXh0QmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGJsb2NrIEVudGVyIHdoZW4gaXQgd291bGQgY3JlYXRlIGEgbmV3IHRleHQgYmxvY2sgKG5vdCBpbnNpZGUgYSBsaXN0LCBldGMuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyAkZnJvbSB9ID0gZWRpdG9yLnN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXRFbmRPZkJsb2NrID0gJGZyb20ucGFyZW50T2Zmc2V0ID09PSAkZnJvbS5wYXJlbnQuY29udGVudC5zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RGVwdGggPSAkZnJvbS5kZXB0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGF0IGVuZCBvZiBhIHRvcC1sZXZlbCB0ZXh0IGJsb2NrIChkZXB0aCAxKSBvciB3b3VsZCBzcGxpdCBhIHRvcC1sZXZlbCB0ZXh0IGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50RGVwdGggPT09IDEgJiYgaXNBdEVuZE9mQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gcHJldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBtYXBMaW5rTWFya3NEYXRhKGNvbnRlbnQ6IEpTT05Db250ZW50LCBmbjogKGRhdGE6IGFueSkgPT4gYW55KTogSlNPTkNvbnRlbnQge1xuICAgIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0geyAuLi5jb250ZW50IH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQubWFya3MpKSB7XG4gICAgICAgIHJlc3VsdC5tYXJrcyA9IHJlc3VsdC5tYXJrcy5tYXAoKG1hcmspID0+IHtcbiAgICAgICAgICAgIGlmIChtYXJrLnR5cGUgPT09IFwibGlua1wiICYmIG1hcmsuYXR0cnM/LmRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5tYXJrLCBhdHRyczogeyAuLi5tYXJrLmF0dHJzLCBkYXRhOiBmbihtYXJrLmF0dHJzLmRhdGEpIH0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQuY29udGVudCkpIHtcbiAgICAgICAgcmVzdWx0LmNvbnRlbnQgPSByZXN1bHQuY29udGVudC5tYXAoKGNoaWxkKSA9PiBtYXBMaW5rTWFya3NEYXRhKGNoaWxkLCBmbikpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFwTGlua01hcmtzRGF0YUFzeW5jKGNvbnRlbnQ6IEpTT05Db250ZW50LCBmbjogKGRhdGE6IGFueSkgPT4gUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxKU09OQ29udGVudD4ge1xuICAgIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0geyAuLi5jb250ZW50IH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQubWFya3MpKSB7XG4gICAgICAgIHJlc3VsdC5tYXJrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgcmVzdWx0Lm1hcmtzLm1hcChhc3luYyAobWFyaykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtYXJrLnR5cGUgPT09IFwibGlua1wiICYmIG1hcmsuYXR0cnM/LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ubWFyaywgYXR0cnM6IHsgLi4ubWFyay5hdHRycywgZGF0YTogYXdhaXQgZm4obWFyay5hdHRycy5kYXRhKSB9IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0LmNvbnRlbnQpKSB7XG4gICAgICAgIHJlc3VsdC5jb250ZW50ID0gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0LmNvbnRlbnQubWFwKChjaGlsZCkgPT4gbWFwTGlua01hcmtzRGF0YUFzeW5jKGNoaWxkLCBmbikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIG1hcENtc0Jsb2NrTm9kZXNEYXRhKGNvbnRlbnQ6IEpTT05Db250ZW50LCBmbjogKGJsb2NrVHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpID0+IGFueSk6IEpTT05Db250ZW50IHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4uY29udGVudCB9O1xuXG4gICAgaWYgKGlzQ21zQmxvY2tOb2RlKHJlc3VsdCkgJiYgcmVzdWx0LmF0dHJzPy5ibG9ja1R5cGUpIHtcbiAgICAgICAgcmVzdWx0LmF0dHJzID0geyAuLi5yZXN1bHQuYXR0cnMsIGRhdGE6IGZuKHJlc3VsdC5hdHRycy5ibG9ja1R5cGUsIHJlc3VsdC5hdHRycy5kYXRhKSB9O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdC5jb250ZW50KSkge1xuICAgICAgICByZXN1bHQuY29udGVudCA9IHJlc3VsdC5jb250ZW50Lm1hcCgoY2hpbGQpID0+IG1hcENtc0Jsb2NrTm9kZXNEYXRhKGNoaWxkLCBmbikpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFwQ21zQmxvY2tOb2Rlc0RhdGFBc3luYyhjb250ZW50OiBKU09OQ29udGVudCwgZm46IChibG9ja1R5cGU6IHN0cmluZywgZGF0YTogYW55KSA9PiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEpTT05Db250ZW50PiB7XG4gICAgaWYgKCFjb250ZW50IHx8IHR5cGVvZiBjb250ZW50ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmNvbnRlbnQgfTtcblxuICAgIGlmIChpc0Ntc0Jsb2NrTm9kZShyZXN1bHQpICYmIHJlc3VsdC5hdHRycz8uYmxvY2tUeXBlKSB7XG4gICAgICAgIHJlc3VsdC5hdHRycyA9IHsgLi4ucmVzdWx0LmF0dHJzLCBkYXRhOiBhd2FpdCBmbihyZXN1bHQuYXR0cnMuYmxvY2tUeXBlLCByZXN1bHQuYXR0cnMuZGF0YSkgfTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQuY29udGVudCkpIHtcbiAgICAgICAgcmVzdWx0LmNvbnRlbnQgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHQuY29udGVudC5tYXAoKGNoaWxkKSA9PiBtYXBDbXNCbG9ja05vZGVzRGF0YUFzeW5jKGNoaWxkLCBmbikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0Q21zQmxvY2tOb2Rlcyhjb250ZW50OiBKU09OQ29udGVudCk6IEFycmF5PHsgYmxvY2tUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT4ge1xuICAgIGNvbnN0IHJlc3VsdHM6IEFycmF5PHsgYmxvY2tUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT4gPSBbXTtcblxuICAgIGlmIChpc0Ntc0Jsb2NrTm9kZShjb250ZW50KSAmJiBjb250ZW50LmF0dHJzPy5ibG9ja1R5cGUpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHsgYmxvY2tUeXBlOiBjb250ZW50LmF0dHJzLmJsb2NrVHlwZSwgZGF0YTogY29udGVudC5hdHRycy5kYXRhIH0pO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQuY29udGVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjb250ZW50LmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5jb2xsZWN0Q21zQmxvY2tOb2RlcyhjaGlsZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RMaW5rTWFya3NEYXRhKGNvbnRlbnQ6IEpTT05Db250ZW50KTogdW5rbm93bltdIHtcbiAgICBjb25zdCByZXN1bHRzOiB1bmtub3duW10gPSBbXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQubWFya3MpKSB7XG4gICAgICAgIGZvciAoY29uc3QgbWFyayBvZiBjb250ZW50Lm1hcmtzKSB7XG4gICAgICAgICAgICBpZiAobWFyay50eXBlID09PSBcImxpbmtcIiAmJiBtYXJrLmF0dHJzPy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKG1hcmsuYXR0cnMuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250ZW50LmNvbnRlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udGVudC5jb250ZW50KSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goLi4uY29sbGVjdExpbmtNYXJrc0RhdGEoY2hpbGQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZFRpcFRhcEV4dGVuc2lvbnMoe1xuICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICB0ZXh0QmxvY2tTdHlsZXMsXG4gICAgaW5saW5lU3R5bGVzLFxuICAgIHBsYWNlaG9sZGVycyxcbiAgICBsaW5rQmxvY2ssXG4gICAgY2hpbGRCbG9ja3MsXG4gICAgbWF4VGV4dEJsb2NrcyxcbiAgICBsaXN0TGV2ZWxNYXgsXG59OiB7XG4gICAgcmVzb2x2ZWRPcHRpb25zOiBUaXBUYXBSZXNvbHZlZE9wdGlvbnM7XG4gICAgdGV4dEJsb2NrU3R5bGVzOiBUaXBUYXBUZXh0QmxvY2tTdHlsZVtdO1xuICAgIGlubGluZVN0eWxlczogVGlwVGFwSW5saW5lU3R5bGVbXTtcbiAgICBwbGFjZWhvbGRlcnM6IFRpcFRhcFBsYWNlaG9sZGVyW107XG4gICAgbGlua0Jsb2NrPzogQmxvY2tJbnRlcmZhY2UgJiBMaW5rQmxvY2tJbnRlcmZhY2U7XG4gICAgY2hpbGRCbG9ja3M6IFJlY29yZDxzdHJpbmcsIFRpcFRhcENoaWxkQmxvY2s+O1xuICAgIG1heFRleHRCbG9ja3M/OiBudW1iZXI7XG4gICAgbGlzdExldmVsTWF4PzogbnVtYmVyO1xufSk6IEV4dGVuc2lvbnMge1xuICAgIGNvbnN0IGhhc1RleHRCbG9ja1N0eWxlcyA9IHRleHRCbG9ja1N0eWxlcy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGhhc0lubGluZVN0eWxlcyA9IGlubGluZVN0eWxlcy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGhhc0xpbmsgPSByZXNvbHZlZE9wdGlvbnMubGluayAmJiAhIWxpbmtCbG9jaztcbiAgICBjb25zdCBoYXNQbGFjZWhvbGRlcnMgPSBwbGFjZWhvbGRlcnMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjaGlsZEJsb2NrRW50cmllcyA9IE9iamVjdC52YWx1ZXMoY2hpbGRCbG9ja3MpO1xuICAgIGNvbnN0IGhhc0Jsb2NrQ2hpbGRCbG9ja3MgPSBjaGlsZEJsb2NrRW50cmllcy5zb21lKChjaGlsZEJsb2NrKSA9PiBjaGlsZEJsb2NrLmRpc3BsYXkgPT09IFwiYmxvY2tcIik7XG4gICAgY29uc3QgaGFzSW5saW5lQ2hpbGRCbG9ja3MgPSBjaGlsZEJsb2NrRW50cmllcy5zb21lKChjaGlsZEJsb2NrKSA9PiBjaGlsZEJsb2NrLmRpc3BsYXkgPT09IFwiaW5saW5lXCIpO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgU3RhcnRlcktpdC5jb25maWd1cmUoe1xuICAgICAgICAgICAgYm9sZDogcmVzb2x2ZWRPcHRpb25zLmJvbGQgPyB7fSA6IGZhbHNlLFxuICAgICAgICAgICAgaXRhbGljOiByZXNvbHZlZE9wdGlvbnMuaXRhbGljID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIHVuZGVybGluZTogcmVzb2x2ZWRPcHRpb25zLnVuZGVybGluZSA/IHt9IDogZmFsc2UsXG4gICAgICAgICAgICBzdHJpa2U6IHJlc29sdmVkT3B0aW9ucy5zdHJpa2UgPyB7fSA6IGZhbHNlLFxuICAgICAgICAgICAgLy8gVGhlIGhlYWRpbmcgZXh0ZW5zaW9uIGlzIGFkZGVkIHNlcGFyYXRlbHkgYmVsb3cgdG8gc2V0IHRoZSBkZWZhdWx0IGhlYWRpbmcgbGV2ZWwuXG4gICAgICAgICAgICBoZWFkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcmFncmFwaDogcmVzb2x2ZWRPcHRpb25zLnBhcmFncmFwaCAmJiAhaGFzVGV4dEJsb2NrU3R5bGVzID8gdW5kZWZpbmVkIDogZmFsc2UsXG4gICAgICAgICAgICBvcmRlcmVkTGlzdDogcmVzb2x2ZWRPcHRpb25zLm9yZGVyZWRMaXN0ID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIGJ1bGxldExpc3Q6IHJlc29sdmVkT3B0aW9ucy51bm9yZGVyZWRMaXN0ID8ge30gOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIEEgbGlzdCBpdGVtJ3MgY29udGVudCBzdGFydHMgd2l0aCBhIHBhcmFncmFwaCwgc28gbGlzdHMgY2Fubm90IGV4aXN0IHdpdGhvdXQgb25lLlxuICAgICAgICAgICAgbGlzdEl0ZW06IHJlc29sdmVkT3B0aW9ucy5wYXJhZ3JhcGggPyB1bmRlZmluZWQgOiBmYWxzZSxcbiAgICAgICAgICAgIGxpc3RLZXltYXA6IHJlc29sdmVkT3B0aW9ucy5wYXJhZ3JhcGggPyB1bmRlZmluZWQgOiBmYWxzZSxcbiAgICAgICAgICAgIGJsb2NrcXVvdGU6IGZhbHNlLFxuICAgICAgICAgICAgY29kZTogZmFsc2UsXG4gICAgICAgICAgICBjb2RlQmxvY2s6IGZhbHNlLFxuICAgICAgICAgICAgbGluazogZmFsc2UsXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4ocmVzb2x2ZWRPcHRpb25zLnBhcmFncmFwaCAmJiBoYXNUZXh0QmxvY2tTdHlsZXMgPyBbVGV4dEJsb2NrU3R5bGVQYXJhZ3JhcGhdIDogW10pLFxuICAgICAgICAuLi4ocmVzb2x2ZWRPcHRpb25zLmhlYWRpbmdcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgYnVpbGRIZWFkaW5nRXh0ZW5zaW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICBiYXNlOiBoYXNUZXh0QmxvY2tTdHlsZXMgPyBUZXh0QmxvY2tTdHlsZUhlYWRpbmcgOiBIZWFkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIGxldmVsczogcmVzb2x2ZWRPcHRpb25zLmhlYWRpbmcubGV2ZWxzLFxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRMZXZlbDogcmVzb2x2ZWRPcHRpb25zLmhlYWRpbmcuZGVmYXVsdExldmVsLFxuICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcmFncmFwaDogcmVzb2x2ZWRPcHRpb25zLnBhcmFncmFwaCxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKGhhc0lubGluZVN0eWxlcyA/IFtJbmxpbmVTdHlsZU1hcmtdIDogW10pLFxuICAgICAgICAuLi4ocmVzb2x2ZWRPcHRpb25zLnN1cCA/IFtTdXBlcnNjcmlwdF0gOiBbXSksXG4gICAgICAgIC4uLihyZXNvbHZlZE9wdGlvbnMuc3ViID8gW1N1YnNjcmlwdF0gOiBbXSksXG4gICAgICAgIC4uLihyZXNvbHZlZE9wdGlvbnMubm9uQnJlYWtpbmdTcGFjZSA/IFtOb25CcmVha2luZ1NwYWNlXSA6IFtdKSxcbiAgICAgICAgLi4uKHJlc29sdmVkT3B0aW9ucy5zb2Z0SHlwaGVuID8gW1NvZnRIeXBoZW5dIDogW10pLFxuICAgICAgICAuLi4oaGFzUGxhY2Vob2xkZXJzID8gW1BsYWNlaG9sZGVyXSA6IFtdKSxcbiAgICAgICAgLi4uKGhhc0xpbmsgPyBbQ21zTGlua10gOiBbXSksXG4gICAgICAgIC4uLihoYXNCbG9ja0NoaWxkQmxvY2tzID8gW0Ntc0Jsb2NrXSA6IFtdKSxcbiAgICAgICAgLi4uKGhhc0lubGluZUNoaWxkQmxvY2tzID8gW0Ntc0lubGluZUJsb2NrXSA6IFtdKSxcbiAgICAgICAgLi4uKG1heFRleHRCbG9ja3MgIT09IHVuZGVmaW5lZCA/IFtjcmVhdGVNYXhUZXh0QmxvY2tzRXh0ZW5zaW9uKG1heFRleHRCbG9ja3MpXSA6IFtdKSxcbiAgICAgICAgLi4uKGxpc3RMZXZlbE1heCAhPT0gdW5kZWZpbmVkID8gW2NyZWF0ZUxpc3RMZXZlbE1heEV4dGVuc2lvbihsaXN0TGV2ZWxNYXgpXSA6IFtdKSxcbiAgICBdO1xufVxuXG5jb25zdCBSZWFkT25seUNvbnRlbnQgPSBzdHlsZWQoXCJkaXZcIikoe1xuICAgIFwiLnRpcHRhcCA+IDpmaXJzdC1jaGlsZCwgLnRpcHRhcCA+IDpmaXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZFwiOiB7XG4gICAgICAgIG1hcmdpblRvcDogMCxcbiAgICB9LFxuXG4gICAgXCIudGlwdGFwID4gOmxhc3QtY2hpbGQsIC50aXB0YXAgPiA6bGFzdC1jaGlsZCA+IDpsYXN0LWNoaWxkXCI6IHtcbiAgICAgICAgbWFyZ2luQm90dG9tOiAwLFxuICAgIH0sXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBUaXBUYXBFZGl0b3JQcm9wcyB7XG4gICAgc3RhdGU6IFRpcFRhcFJpY2hUZXh0QmxvY2tTdGF0ZTtcbiAgICB1cGRhdGVTdGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248VGlwVGFwUmljaFRleHRCbG9ja1N0YXRlPj47XG4gICAgcmVzb2x2ZWRPcHRpb25zOiBUaXBUYXBSZXNvbHZlZE9wdGlvbnM7XG4gICAgdGV4dEJsb2NrU3R5bGVzOiBUaXBUYXBUZXh0QmxvY2tTdHlsZVtdO1xuICAgIGlubGluZVN0eWxlczogVGlwVGFwSW5saW5lU3R5bGVbXTtcbiAgICBwbGFjZWhvbGRlcnM6IFRpcFRhcFBsYWNlaG9sZGVyW107XG4gICAgbGlua0Jsb2NrPzogQmxvY2tJbnRlcmZhY2UgJiBMaW5rQmxvY2tJbnRlcmZhY2U7XG4gICAgY2hpbGRCbG9ja3M6IFJlY29yZDxzdHJpbmcsIFRpcFRhcENoaWxkQmxvY2s+O1xuICAgIG1heFRleHRCbG9ja3M/OiBudW1iZXI7XG4gICAgbGlzdExldmVsTWF4PzogbnVtYmVyO1xuICAgIG1pbkhlaWdodD86IG51bWJlcjtcbiAgICByZWFkT25seT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBUaXBUYXBFZGl0b3IgPSAoe1xuICAgIHN0YXRlLFxuICAgIHVwZGF0ZVN0YXRlLFxuICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICB0ZXh0QmxvY2tTdHlsZXMsXG4gICAgaW5saW5lU3R5bGVzLFxuICAgIHBsYWNlaG9sZGVycyxcbiAgICBsaW5rQmxvY2ssXG4gICAgY2hpbGRCbG9ja3MsXG4gICAgbWF4VGV4dEJsb2NrcyxcbiAgICBsaXN0TGV2ZWxNYXgsXG4gICAgbWluSGVpZ2h0ID0gMjAwLFxuICAgIHJlYWRPbmx5LFxufTogVGlwVGFwRWRpdG9yUHJvcHMpID0+IHtcbiAgICBjb25zdCBjaGlsZEJsb2Nrc0J5S2V5OiBSZWNvcmQ8c3RyaW5nLCBCbG9ja0ludGVyZmFjZT4gPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoY2hpbGRCbG9ja3MpLm1hcCgoW2tleSwgeyBibG9jayB9XSkgPT4gW2tleSwgYmxvY2tdKSk7XG5cbiAgICBjb25zdCBleHRlbnNpb25zID0gYnVpbGRUaXBUYXBFeHRlbnNpb25zKHtcbiAgICAgICAgcmVzb2x2ZWRPcHRpb25zLFxuICAgICAgICB0ZXh0QmxvY2tTdHlsZXMsXG4gICAgICAgIGlubGluZVN0eWxlcyxcbiAgICAgICAgcGxhY2Vob2xkZXJzLFxuICAgICAgICBsaW5rQmxvY2ssXG4gICAgICAgIGNoaWxkQmxvY2tzLFxuICAgICAgICBtYXhUZXh0QmxvY2tzLFxuICAgICAgICBsaXN0TGV2ZWxNYXgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBlZGl0b3IgPSB1c2VFZGl0b3Ioe1xuICAgICAgICBleHRlbnNpb25zLFxuICAgICAgICBjb250ZW50OiBzdGF0ZS50aXBUYXBDb250ZW50LFxuICAgICAgICBlZGl0YWJsZTogIXJlYWRPbmx5LFxuICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChtYXhUZXh0QmxvY2tzICE9PSB1bmRlZmluZWQgJiYgZWRpdG9yLnN0YXRlLmRvYy5jaGlsZENvdW50ID4gbWF4VGV4dEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBleGNlc3MgdGV4dCBibG9ja3MgKGUuZy4gZnJvbSBwYXN0ZSlcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRyIH0gPSBlZGl0b3Iuc3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9jID0gZWRpdG9yLnN0YXRlLmRvYztcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSByZXNvbHZlZCBwb3NpdGlvbiBhZnRlciB0aGUgbWF4VGV4dEJsb2Nrcy10aCBjaGlsZFxuICAgICAgICAgICAgICAgIGxldCBwb3MgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4VGV4dEJsb2NrczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcyArPSBkb2MuY2hpbGQoaSkubm9kZVNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEluIFByb3NlTWlycm9yLCBkb2MgY29udGVudCBwb3NpdGlvbnMgYXJlIG9mZnNldCBieSAxIChmb3IgdGhlIGRvYyBvcGVuIHRva2VuKVxuICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBmcm9tIGFmdGVyIHRoZSBsYXN0IGFsbG93ZWQgdGV4dCBibG9jayB0byBlbmQgb2YgZG9jIGNvbnRlbnRcbiAgICAgICAgICAgICAgICB0ci5kZWxldGUocG9zICsgMSwgZG9jLmNvbnRlbnQuc2l6ZSArIDEpO1xuICAgICAgICAgICAgICAgIGVkaXRvci52aWV3LmRpc3BhdGNoKHRyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaXN0TGV2ZWxNYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb24gPSBlZGl0b3IuZ2V0SlNPTigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZXB0aCA9IGdldExpc3ROZXN0aW5nRGVwdGhGcm9tSnNvbihqc29uKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudERlcHRoID4gbGlzdExldmVsTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaW0gbmVzdGVkIGxpc3RzIHRoYXQgZXhjZWVkIHRoZSBsaW1pdCAoZS5nLiBmcm9tIHBhc3RlKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdHJpbUxpc3ROZXN0aW5nKGpzb24sIGxpc3RMZXZlbE1heCk7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRDb250ZW50KHRyaW1tZWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cGRhdGVTdGF0ZSh7IHRpcFRhcENvbnRlbnQ6IGVkaXRvci5nZXRKU09OKCkgfSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyB1c2VFZGl0b3Igc2V0cyBjb250ZW50IG9uY2UsIGF0IGNyZWF0aW9uLCB0aGVuIGlnbm9yZXMgaXQuIFJlYWQtb25seSBjb250ZW50IGNhbiBjaGFuZ2Ugd2hpbGVcbiAgICAvLyBtb3VudGVkIChlLmcuIGEgZ3JpZCByb3cgcmUtcmVuZGVyaW5nKSwgc28gaXQgbmVlZHMgcmUtc3luY2luZyBoZXJlLiBFZGl0YWJsZSBjb250ZW50IGRvZXNuJ3Q6XG4gICAgLy8gdHlwaW5nIGFscmVhZHkga2VlcHMgc3RhdGUudGlwVGFwQ29udGVudCBpbiBzeW5jLCBhbmQgcmUtc3luY2luZyB3b3VsZCByZXNldCB0aGUgY2FyZXQuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlYWRPbmx5ICYmIGVkaXRvcikge1xuICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQoc3RhdGUudGlwVGFwQ29udGVudCwgeyBlbWl0VXBkYXRlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtyZWFkT25seSwgZWRpdG9yLCBzdGF0ZS50aXBUYXBDb250ZW50XSk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbkNvbnRleHQgPSB1c2VDb250ZW50VHJhbnNsYXRpb25TZXJ2aWNlKCk7XG4gICAgY29uc3QgY2FuVHJhbnNsYXRlID0gdHJhbnNsYXRpb25Db250ZXh0LmVuYWJsZWQgJiYgcmVzb2x2ZWRPcHRpb25zLmNvbnRlbnRUcmFuc2xhdGlvbjtcbiAgICBjb25zdCBbdHJhbnNsYXRpb25EaWFsb2dTdGF0ZSwgc2V0VHJhbnNsYXRpb25EaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7IG9yaWdpbmFsOiBKU09OQ29udGVudDsgdHJhbnNsYXRlZDogSlNPTkNvbnRlbnQgfSB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IGVycm9yRGlhbG9nID0gdXNlRXJyb3JEaWFsb2coKTtcblxuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZVRyYW5zbGF0ZUNsaWNrKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBlZGl0b3IuZ2V0SlNPTigpO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IGF3YWl0IHRyYW5zbGF0ZVRpcFRhcENvbnRlbnQob3JpZ2luYWwsIHRyYW5zbGF0aW9uQ29udGV4dC50cmFuc2xhdGUsIHtcbiAgICAgICAgICAgICAgICBleHRlbnNpb25zLFxuICAgICAgICAgICAgICAgIGxpbmtCbG9jayxcbiAgICAgICAgICAgICAgICBjaGlsZEJsb2Nrc0J5S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodHJhbnNsYXRpb25Db250ZXh0LnNob3dBcHBseVRyYW5zbGF0aW9uRGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgc2V0VHJhbnNsYXRpb25EaWFsb2dTdGF0ZSh7IG9yaWdpbmFsLCB0cmFuc2xhdGVkIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudCh0cmFuc2xhdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yRGlhbG9nPy5zaG93RXJyb3Ioe1xuICAgICAgICAgICAgICAgIHRpdGxlOiA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImRleHRpbml0eS50cmFuc2xhdG9yLmVycm9yLnRpdGxlXCIgZGVmYXVsdE1lc3NhZ2U9XCJUcmFuc2xhdGlvbiBmYWlsZWRcIiAvPixcbiAgICAgICAgICAgICAgICB1c2VyTWVzc2FnZTogKFxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkZXh0aW5pdHkudHJhbnNsYXRvci5lcnJvci5tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJhbnNsYXRpbmcgdGhlIGNvbnRlbnQuIFBsZWFzZSB0cnkgYWdhaW4uXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVHJhbnNsYXRpb24gZmFpbGVkXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVkaXRvck5vZGUgPSA8RWRpdG9yQ29udGVudCBlZGl0b3I9e2VkaXRvcn0gLz47XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dEJsb2NrU3R5bGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt0ZXh0QmxvY2tTdHlsZXN9PlxuICAgICAgICAgICAgPElubGluZVN0eWxlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17aW5saW5lU3R5bGVzfT5cbiAgICAgICAgICAgICAgICA8Q2hpbGRCbG9ja3NDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjaGlsZEJsb2Nrc0J5S2V5fT5cbiAgICAgICAgICAgICAgICAgICAge3JlYWRPbmx5ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFJlYWRPbmx5Q29udGVudD57ZWRpdG9yTm9kZX08L1JlYWRPbmx5Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCb3ggc3g9e3sgYm9yZGVyOiBgMXB4IHNvbGlkICR7Z3JleVBhbGV0dGVbMTAwXX1gLCBib3JkZXJUb3BXaWR0aDogMCwgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsIGJvcmRlclJhZGl1czogXCIycHhcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGlwVGFwVG9vbGJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRPcHRpb25zPXtyZXNvbHZlZE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCbG9ja1N0eWxlcz17dGV4dEJsb2NrU3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVTdHlsZXM9e2lubGluZVN0eWxlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJzPXtwbGFjZWhvbGRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCbG9jaz17bGlua0Jsb2NrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEJsb2Nrcz17Y2hpbGRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RMZXZlbE1heD17bGlzdExldmVsTWF4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5UcmFuc2xhdGU9e2NhblRyYW5zbGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25UcmFuc2xhdGVDbGljaz17aGFuZGxlVHJhbnNsYXRlQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IHN4PXt7IFwiJiAudGlwdGFwXCI6IHsgbWluSGVpZ2h0LCBwOiBcIjIwcHhcIiwgb3V0bGluZTogXCJub25lXCIgfSB9fT57ZWRpdG9yTm9kZX08L0JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7dHJhbnNsYXRpb25EaWFsb2dTdGF0ZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGlwVGFwQ29udGVudFRyYW5zbGF0aW9uRGlhbG9nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFRyYW5zbGF0aW9uRGlhbG9nU3RhdGUobnVsbCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxDb250ZW50PXt0cmFuc2xhdGlvbkRpYWxvZ1N0YXRlLm9yaWdpbmFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRDb250ZW50PXt0cmFuc2xhdGlvbkRpYWxvZ1N0YXRlLnRyYW5zbGF0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BcHBseVRyYW5zbGF0aW9uPXsoY29udGVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0Q29udGVudChjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VHJhbnNsYXRpb25EaWFsb2dTdGF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvclByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0Jsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEJsb2NrcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4VGV4dEJsb2NrcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdExldmVsTWF4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9DaGlsZEJsb2Nrc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0lubGluZVN0eWxlQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9UZXh0QmxvY2tTdHlsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbn07XG5cbnR5cGUgVGlwVGFwUmljaFRleHRCbG9ja0ludGVyZmFjZSA9IEJsb2NrSW50ZXJmYWNlPFRpcFRhcFJpY2hUZXh0QmxvY2tEYXRhLCBUaXBUYXBSaWNoVGV4dEJsb2NrU3RhdGUsIFRpcFRhcFJpY2hUZXh0QmxvY2tJbnB1dD4gJlxuICAgIFJlYWRPbmx5QmxvY2tSZW5kZXJJbnRlcmZhY2U8VGlwVGFwUmljaFRleHRCbG9ja1N0YXRlPjtcblxuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVUaXBUYXBSaWNoVGV4dEJsb2NrID0gKG9wdGlvbnM6IFRpcFRhcFJpY2hUZXh0QmxvY2tGYWN0b3J5T3B0aW9ucyA9IHt9KTogVGlwVGFwUmljaFRleHRCbG9ja0ludGVyZmFjZSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRPcHRpb25zID0gcmVzb2x2ZVRpcFRhcE9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3QgdGV4dEJsb2NrU3R5bGVzID0gb3B0aW9ucy50ZXh0QmxvY2tTdHlsZXMgPz8gW107XG4gICAgY29uc3QgaW5saW5lU3R5bGVzID0gb3B0aW9ucy5pbmxpbmVTdHlsZXMgPz8gW107XG4gICAgY29uc3QgcGxhY2Vob2xkZXJzID0gb3B0aW9ucy5wbGFjZWhvbGRlcnMgPz8gW107XG4gICAgY29uc3QgbGlua0Jsb2NrID0gb3B0aW9ucy5saW5rO1xuICAgIGNvbnN0IGNoaWxkQmxvY2tzID0gb3B0aW9ucy5jaGlsZEJsb2NrcyA/PyB7fTtcbiAgICBjb25zdCBjaGlsZEJsb2Nrc0J5S2V5OiBSZWNvcmQ8c3RyaW5nLCBCbG9ja0ludGVyZmFjZT4gPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoY2hpbGRCbG9ja3MpLm1hcCgoW2tleSwgeyBibG9jayB9XSkgPT4gW2tleSwgYmxvY2tdKSk7XG4gICAgY29uc3QgaGFzQ2hpbGRCbG9ja3MgPSBPYmplY3Qua2V5cyhjaGlsZEJsb2NrcykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBtYXhUZXh0QmxvY2tzID0gb3B0aW9ucy5tYXhUZXh0QmxvY2tzO1xuICAgIGNvbnN0IGxpc3RMZXZlbE1heCA9IG9wdGlvbnMubGlzdExldmVsTWF4O1xuICAgIGNvbnN0IG1pbkhlaWdodCA9IG9wdGlvbnMubWluSGVpZ2h0O1xuICAgIGNvbnN0IGVtcHR5Q29udGVudCA9IGJ1aWxkRW1wdHlDb250ZW50KHJlc29sdmVkT3B0aW9ucyk7XG5cbiAgICBjb25zdCBzaGFyZWRFZGl0b3JQcm9wcyA9IHtcbiAgICAgICAgcmVzb2x2ZWRPcHRpb25zLFxuICAgICAgICB0ZXh0QmxvY2tTdHlsZXMsXG4gICAgICAgIGlubGluZVN0eWxlcyxcbiAgICAgICAgcGxhY2Vob2xkZXJzLFxuICAgICAgICBsaW5rQmxvY2ssXG4gICAgICAgIGNoaWxkQmxvY2tzLFxuICAgICAgICBtYXhUZXh0QmxvY2tzLFxuICAgICAgICBsaXN0TGV2ZWxNYXgsXG4gICAgICAgIG1pbkhlaWdodCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGlwVGFwRXh0ZW5zaW9ucyA9IGJ1aWxkVGlwVGFwRXh0ZW5zaW9ucyh7XG4gICAgICAgIHJlc29sdmVkT3B0aW9ucyxcbiAgICAgICAgdGV4dEJsb2NrU3R5bGVzLFxuICAgICAgICBpbmxpbmVTdHlsZXMsXG4gICAgICAgIHBsYWNlaG9sZGVycyxcbiAgICAgICAgbGlua0Jsb2NrLFxuICAgICAgICBjaGlsZEJsb2NrcyxcbiAgICAgICAgbWF4VGV4dEJsb2NrcyxcbiAgICAgICAgbGlzdExldmVsTWF4LFxuICAgIH0pO1xuXG4gICAgY29uc3QgVGlwVGFwUmljaFRleHRCbG9jazogVGlwVGFwUmljaFRleHRCbG9ja0ludGVyZmFjZSA9IHtcbiAgICAgICAgLi4uY3JlYXRlQmxvY2tTa2VsZXRvbigpLFxuXG4gICAgICAgIG5hbWU6IFwiVGlwVGFwUmljaFRleHRcIixcblxuICAgICAgICBkaXNwbGF5TmFtZTogPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJkZXh0aW5pdHkuYmxvY2tzLnRpcFRhcFJpY2hUZXh0XCIgZGVmYXVsdE1lc3NhZ2U9XCJSaWNoIFRleHQgKFRpcFRhcClcIiAvPixcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyB0aXBUYXBDb250ZW50OiBlbXB0eUNvbnRlbnQgfSksXG5cbiAgICAgICAgY2F0ZWdvcnk6IEJsb2NrQ2F0ZWdvcnkuVGV4dEFuZENvbnRlbnQsXG5cbiAgICAgICAgaW5wdXQyU3RhdGU6ICh7IHRpcFRhcENvbnRlbnQgfSkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aXBUYXBDb250ZW50ID8/IGVtcHR5Q29udGVudDtcbiAgICAgICAgICAgIGlmIChsaW5rQmxvY2spIHtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gbWFwTGlua01hcmtzRGF0YShjb250ZW50LCAoZGF0YSkgPT4gbGlua0Jsb2NrLmlucHV0MlN0YXRlKGRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBtYXBDbXNCbG9ja05vZGVzRGF0YShjb250ZW50LCAoYmxvY2tUeXBlLCBkYXRhKSA9PiBjaGlsZEJsb2Nrc0J5S2V5W2Jsb2NrVHlwZV0/LmlucHV0MlN0YXRlKGRhdGEpID8/IGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdGlwVGFwQ29udGVudDogY29udGVudCB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIHN0YXRlMk91dHB1dDogKHsgdGlwVGFwQ29udGVudCB9KSA9PiB7XG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRpcFRhcENvbnRlbnQ7XG4gICAgICAgICAgICBpZiAobGlua0Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IG1hcExpbmtNYXJrc0RhdGEoY29udGVudCwgKGRhdGEpID0+IGxpbmtCbG9jay5zdGF0ZTJPdXRwdXQoZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IG1hcENtc0Jsb2NrTm9kZXNEYXRhKGNvbnRlbnQsIChibG9ja1R5cGUsIGRhdGEpID0+IGNoaWxkQmxvY2tzQnlLZXlbYmxvY2tUeXBlXT8uc3RhdGUyT3V0cHV0KGRhdGEpID8/IGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdGlwVGFwQ29udGVudDogY29udGVudCB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIG91dHB1dDJTdGF0ZTogYXN5bmMgKHsgdGlwVGFwQ29udGVudCB9LCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRpcFRhcENvbnRlbnQgPz8gZW1wdHlDb250ZW50O1xuICAgICAgICAgICAgaWYgKGxpbmtCbG9jaykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBtYXBMaW5rTWFya3NEYXRhQXN5bmMoY29udGVudCwgKGRhdGEpID0+IGxpbmtCbG9jay5vdXRwdXQyU3RhdGUoZGF0YSwgY29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkQmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IG1hcENtc0Jsb2NrTm9kZXNEYXRhQXN5bmMoY29udGVudCwgYXN5bmMgKGJsb2NrVHlwZSwgZGF0YSkgPT5cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRCbG9ja3NCeUtleVtibG9ja1R5cGVdID8gY2hpbGRCbG9ja3NCeUtleVtibG9ja1R5cGVdLm91dHB1dDJTdGF0ZShkYXRhLCBjb250ZXh0KSA6IGRhdGEsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHRpcFRhcENvbnRlbnQ6IGNvbnRlbnQgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVQcmV2aWV3U3RhdGU6ICh7IHRpcFRhcENvbnRlbnQgfSwgcHJldmlld0N0eCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSB0aXBUYXBDb250ZW50O1xuICAgICAgICAgICAgaWYgKGxpbmtCbG9jaykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBtYXBMaW5rTWFya3NEYXRhKGNvbnRlbnQsIChkYXRhKSA9PiBsaW5rQmxvY2suY3JlYXRlUHJldmlld1N0YXRlKGRhdGEsIHByZXZpZXdDdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDaGlsZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBtYXBDbXNCbG9ja05vZGVzRGF0YShcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgKGJsb2NrVHlwZSwgZGF0YSkgPT4gY2hpbGRCbG9ja3NCeUtleVtibG9ja1R5cGVdPy5jcmVhdGVQcmV2aWV3U3RhdGUoZGF0YSwgcHJldmlld0N0eCkgPz8gZGF0YSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0aXBUYXBDb250ZW50OiBjb250ZW50LFxuICAgICAgICAgICAgICAgIGFkbWluTWV0YTogeyByb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgQWRtaW5Db21wb25lbnQ6ICh7IHN0YXRlLCB1cGRhdGVTdGF0ZSB9KSA9PiA8VGlwVGFwRWRpdG9yIHN0YXRlPXtzdGF0ZX0gdXBkYXRlU3RhdGU9e3VwZGF0ZVN0YXRlfSB7Li4uc2hhcmVkRWRpdG9yUHJvcHN9IC8+LFxuXG4gICAgICAgIFJlYWRPbmx5Q29tcG9uZW50OiAoeyBzdGF0ZSB9KSA9PiA8VGlwVGFwRWRpdG9yIHN0YXRlPXtzdGF0ZX0gdXBkYXRlU3RhdGU9eygpID0+IHt9fSB7Li4uc2hhcmVkRWRpdG9yUHJvcHN9IHJlYWRPbmx5IC8+LFxuXG4gICAgICAgIHByZXZpZXdDb250ZW50OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBnZXRQbGFpblRleHRGcm9tQ29udGVudChzdGF0ZS50aXBUYXBDb250ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IE1BWF9DSEFSUyA9IDEwMDtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyBbeyB0eXBlOiBcInRleHRcIiwgY29udGVudDogdGV4dC5zbGljZSgwLCBNQVhfQ0hBUlMpIH1dIDogW107XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXh0cmFjdFRleHRDb250ZW50czogKHN0YXRlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBnZXRQbGFpblRleHRGcm9tQ29udGVudChzdGF0ZS50aXBUYXBDb250ZW50KTtcbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZXh0cy5wdXNoKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmtCbG9jaz8uZXh0cmFjdFRleHRDb250ZW50cykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBjb2xsZWN0TGlua01hcmtzRGF0YShzdGF0ZS50aXBUYXBDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0cy5wdXNoKC4uLmxpbmtCbG9jay5leHRyYWN0VGV4dENvbnRlbnRzKGRhdGEsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRCbG9ja3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHsgYmxvY2tUeXBlLCBkYXRhIH0gb2YgY29sbGVjdENtc0Jsb2NrTm9kZXMoc3RhdGUudGlwVGFwQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRCbG9jayA9IGNoaWxkQmxvY2tzQnlLZXlbYmxvY2tUeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkQmxvY2s/LmV4dHJhY3RUZXh0Q29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzLnB1c2goLi4uY2hpbGRCbG9jay5leHRyYWN0VGV4dENvbnRlbnRzKGRhdGEsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0ZXh0cztcbiAgICAgICAgfSxcblxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRyYW5zbGF0ZVRpcFRhcENvbnRlbnQoc3RhdGUudGlwVGFwQ29udGVudCwgdHJhbnNsYXRlLCB7XG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uczogdGlwVGFwRXh0ZW5zaW9ucyxcbiAgICAgICAgICAgICAgICBsaW5rQmxvY2ssXG4gICAgICAgICAgICAgICAgY2hpbGRCbG9ja3NCeUtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgdGlwVGFwQ29udGVudDogY29udGVudCB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gVGlwVGFwUmljaFRleHRCbG9jaztcbn07XG4iXX0= */",
|
|
454
525
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
455
526
|
});
|
|
456
527
|
export var TipTapEditor = function TipTapEditor(_ref5) {
|
|
@@ -678,6 +749,7 @@ export var createTipTapRichTextBlock = function createTipTapRichTextBlock() {
|
|
|
678
749
|
var maxTextBlocks = options.maxTextBlocks;
|
|
679
750
|
var listLevelMax = options.listLevelMax;
|
|
680
751
|
var minHeight = options.minHeight;
|
|
752
|
+
var emptyContent = buildEmptyContent(resolvedOptions);
|
|
681
753
|
var sharedEditorProps = {
|
|
682
754
|
resolvedOptions: resolvedOptions,
|
|
683
755
|
textBlockStyles: textBlockStyles,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dextinity/cms-admin",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.7.0-canary-20260914141930",
|
|
4
4
|
"description": "Dextinity CMS Admin package",
|
|
5
5
|
"repository": {
|
|
6
6
|
"directory": "packages/admin/cms-admin",
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
"use-debounce": "^10.0.6",
|
|
53
53
|
"uuid": "^11.1.1",
|
|
54
54
|
"zod": "^4.4.3",
|
|
55
|
-
"@dextinity/admin": "10.
|
|
56
|
-
"@dextinity/admin-date-time": "10.
|
|
57
|
-
"@dextinity/admin-icons": "10.
|
|
58
|
-
"@dextinity/admin-rte": "10.
|
|
55
|
+
"@dextinity/admin": "10.7.0-canary-20260914141930",
|
|
56
|
+
"@dextinity/admin-date-time": "10.7.0-canary-20260914141930",
|
|
57
|
+
"@dextinity/admin-icons": "10.7.0-canary-20260914141930",
|
|
58
|
+
"@dextinity/admin-rte": "10.7.0-canary-20260914141930"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@apollo/client": "^3.14.1",
|
|
@@ -121,9 +121,9 @@
|
|
|
121
121
|
"vite": "^7.3.1",
|
|
122
122
|
"vite-tsconfig-paths": "^6.0.3",
|
|
123
123
|
"vitest": "^4.1.8",
|
|
124
|
-
"@dextinity/admin-babel-preset": "10.
|
|
125
|
-
"@dextinity/cli": "10.
|
|
126
|
-
"@dextinity/eslint-config": "10.
|
|
124
|
+
"@dextinity/admin-babel-preset": "10.7.0-canary-20260914141930",
|
|
125
|
+
"@dextinity/cli": "10.7.0-canary-20260914141930",
|
|
126
|
+
"@dextinity/eslint-config": "10.7.0-canary-20260914141930"
|
|
127
127
|
},
|
|
128
128
|
"peerDependencies": {
|
|
129
129
|
"@apollo/client": "^3.7.0",
|