highmark-markdown 0.0.229 → 0.0.232

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/example.js +672 -393
  2. package/lib/elementMap.js +8 -5
  3. package/lib/example/view.js +5 -4
  4. package/lib/markdown/bnf.js +2 -2
  5. package/lib/mixins/node.js +42 -8
  6. package/lib/node/markdown/contentsLink.js +3 -3
  7. package/lib/node/markdown/{imports.js → directives.js} +17 -10
  8. package/lib/node/markdown/division.js +25 -13
  9. package/lib/node/markdown/emailLink.js +9 -2
  10. package/lib/node/markdown/embee.js +151 -0
  11. package/lib/node/markdown/heading.js +5 -5
  12. package/lib/node/markdown/{import.js → include.js} +16 -16
  13. package/lib/node/markdown.js +17 -4
  14. package/lib/nodeMap.js +5 -4
  15. package/lib/replacementNodeAndTokens.js +149 -0
  16. package/lib/ruleNames.js +15 -10
  17. package/lib/utilities/query.js +11 -2
  18. package/lib/utilities/replace.js +12 -3
  19. package/package.json +1 -1
  20. package/src/elementMap.js +12 -7
  21. package/src/example/view.js +11 -7
  22. package/src/markdown/bnf.js +7 -10
  23. package/src/mixins/node.js +17 -10
  24. package/src/node/markdown/contentsLink.js +4 -4
  25. package/src/node/markdown/{imports.js → directives.js} +8 -2
  26. package/src/node/markdown/division.js +38 -17
  27. package/src/node/markdown/emailLink.js +11 -5
  28. package/src/node/markdown/embee.js +50 -0
  29. package/src/node/markdown/heading.js +4 -4
  30. package/src/node/markdown/{import.js → include.js} +8 -8
  31. package/src/node/markdown.js +17 -2
  32. package/src/nodeMap.js +9 -6
  33. package/src/{clonedNode.js → replacementNodeAndTokens.js} +9 -3
  34. package/src/ruleNames.js +6 -4
  35. package/src/utilities/query.js +8 -0
  36. package/src/utilities/replace.js +12 -2
  37. package/lib/clonedNode.js +0 -142
@@ -2,9 +2,19 @@
2
2
 
3
3
  export function replaceNode(replacementNode, replacedNode, parentNode) {
4
4
  const replacedChildNode = replacedNode, ///
5
- replacementChildNode = replacementNode; ///
5
+ replacementChildNode = replacementNode, ///
6
+ replacementChildNodes = [
7
+ replacementChildNode
8
+ ];
6
9
 
7
- parentNode.replaceChildNode(replacedChildNode, replacementChildNode);
10
+ parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
11
+ }
12
+
13
+ export function replaceNodes(replacementNodes, replacedNode, parentNode) {
14
+ const replacedChildNode = replacedNode, ///
15
+ replacementChildNodes = replacementNodes; ///
16
+
17
+ parentNode.replaceChildNodes(replacedChildNode, replacementChildNodes);
8
18
  }
9
19
 
10
20
  export function replaceTokens(replacementTokens, replacedNode, tokens) {
package/lib/clonedNode.js DELETED
@@ -1,142 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return ClonedNode;
9
- }
10
- });
11
- function _class_call_check(instance, Constructor) {
12
- if (!(instance instanceof Constructor)) {
13
- throw new TypeError("Cannot call a class as a function");
14
- }
15
- }
16
- function _defineProperties(target, props) {
17
- for(var i = 0; i < props.length; i++){
18
- var descriptor = props[i];
19
- descriptor.enumerable = descriptor.enumerable || false;
20
- descriptor.configurable = true;
21
- if ("value" in descriptor) descriptor.writable = true;
22
- Object.defineProperty(target, descriptor.key, descriptor);
23
- }
24
- }
25
- function _create_class(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
30
- var ClonedNode = /*#__PURE__*/ function() {
31
- function ClonedNode(node, tokens) {
32
- _class_call_check(this, ClonedNode);
33
- this.node = node;
34
- this.tokens = tokens;
35
- }
36
- _create_class(ClonedNode, [
37
- {
38
- key: "getNode",
39
- value: function getNode() {
40
- return this.node;
41
- }
42
- },
43
- {
44
- key: "getTokens",
45
- value: function getTokens() {
46
- return this.tokens;
47
- }
48
- },
49
- {
50
- key: "getChildNodes",
51
- value: function getChildNodes() {
52
- return this.node.getChildNodes();
53
- }
54
- }
55
- ], [
56
- {
57
- key: "fromNode",
58
- value: function fromNode(node, context) {
59
- var tokens = context.tokens;
60
- var offset = offsetFromNodeAndTokens(node, tokens), replacementTokens = replacementTokensFromNodeAndTokens(node, tokens);
61
- node = node.clone(); ///
62
- replaceNodeTokens(node, replacementTokens, offset, tokens);
63
- tokens = replacementTokens; ///
64
- var clonedNode = new ClonedNode(node, tokens);
65
- return clonedNode;
66
- }
67
- }
68
- ]);
69
- return ClonedNode;
70
- }();
71
- function replaceNodeTokens(node, replacementTokens, offset, tokens) {
72
- var nodeTerminalNode = node.isTerminalNode();
73
- if (nodeTerminalNode) {
74
- var terminalNode = node; ///
75
- replaceTerminalNodeTokens(terminalNode, replacementTokens, offset, tokens);
76
- } else {
77
- var nonTerminalNode = node; ///
78
- replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, offset, tokens);
79
- }
80
- }
81
- function replaceChildNodesTokens(childNodes, replacementTokens, offset, tokens) {
82
- childNodes.forEach(function(childNode) {
83
- var node = childNode; ///
84
- replaceNodeTokens(node, replacementTokens, offset, tokens);
85
- });
86
- }
87
- function replaceTerminalNodeTokens(terminalNode, replacementTokens, offset, tokens) {
88
- var index, significantToken;
89
- significantToken = terminalNode.getSignificantToken();
90
- if (significantToken !== null) {
91
- index = tokens.indexOf(significantToken);
92
- index -= offset;
93
- var replacementToken = replacementTokens[index];
94
- significantToken = replacementToken; ///
95
- terminalNode.setSignificantToken(significantToken);
96
- }
97
- }
98
- function replaceNonTerminalNodeTokens(nonTerminalNode, replacementTokens, offset, tokens) {
99
- var childNodes = nonTerminalNode.getChildNodes();
100
- replaceChildNodesTokens(childNodes, replacementTokens, offset, tokens);
101
- }
102
- function offsetFromNodeAndTokens(node, tokens) {
103
- var offset;
104
- var nodeTerminalNode = node.isTerminalNode();
105
- if (nodeTerminalNode) {
106
- var terminalNode = node, significantToken = terminalNode.getSignificantToken();
107
- if (significantToken === null) {
108
- offset = -1;
109
- } else {
110
- var significantTokenIndex = tokens.indexOf(significantToken);
111
- offset = significantTokenIndex; ///
112
- }
113
- } else {
114
- var nonTerminalNode = node, firstSignificantToken = nonTerminalNode.getFirstSignificantToken(), firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken);
115
- offset = firstSignificantTokenIndex; ///
116
- }
117
- return offset;
118
- }
119
- function replacementTokensFromNodeAndTokens(node, tokens) {
120
- var nodeTerminalNode = node.isTerminalNode();
121
- if (nodeTerminalNode) {
122
- var terminalNode = node, significantToken = terminalNode.getSignificantToken();
123
- if (significantToken === null) {
124
- tokens = [];
125
- } else {
126
- var token = significantToken; ///
127
- tokens = [
128
- token
129
- ];
130
- }
131
- } else {
132
- var nonTerminalNode = node, lastSignificantToken = nonTerminalNode.getLastSignificantToken(), firstSignificantToken = nonTerminalNode.getFirstSignificantToken(), lastSignificantTokenIndex = tokens.indexOf(lastSignificantToken), firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken), start = firstSignificantTokenIndex, end = lastSignificantTokenIndex + 1;
133
- tokens = tokens.slice(start, end); ///
134
- }
135
- var replacementTokens = tokens.map(function(token) {
136
- var replacementToken = token.clone(); ///;
137
- return replacementToken;
138
- });
139
- return replacementTokens;
140
- }
141
-
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbG9uZWROb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbG9uZWROb2RlIHtcbiAgY29uc3RydWN0b3Iobm9kZSwgdG9rZW5zKSB7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXRDaGlsZE5vZGVzKCkgeyByZXR1cm4gdGhpcy5ub2RlLmdldENoaWxkTm9kZXMoKTsgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZShub2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHsgdG9rZW5zIH0gPSBjb250ZXh0O1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gb2Zmc2V0RnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICByZXBsYWNlbWVudFRva2VucyA9IHJlcGxhY2VtZW50VG9rZW5zRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgIG5vZGUgPSBub2RlLmNsb25lKCk7ICAvLy9cblxuICAgIHJlcGxhY2VOb2RlVG9rZW5zKG5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucyk7XG5cbiAgICB0b2tlbnMgPSByZXBsYWNlbWVudFRva2VuczsgLy8vXG5cbiAgICBjb25zdCBjbG9uZWROb2RlID0gbmV3IENsb25lZE5vZGUobm9kZSwgdG9rZW5zKTtcblxuICAgIHJldHVybiBjbG9uZWROb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VOb2RlVG9rZW5zKG5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucykge1xuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmVwbGFjZVRlcm1pbmFsTm9kZVRva2Vucyh0ZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmVwbGFjZU5vblRlcm1pbmFsTm9kZVRva2Vucyhub25UZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNoaWxkTm9kZXNUb2tlbnMoY2hpbGROb2RlcywgcmVwbGFjZW1lbnRUb2tlbnMsIG9mZnNldCwgdG9rZW5zKSB7XG4gIGNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICByZXBsYWNlTm9kZVRva2Vucyhub2RlLCByZXBsYWNlbWVudFRva2Vucywgb2Zmc2V0LCB0b2tlbnMpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVRlcm1pbmFsTm9kZVRva2Vucyh0ZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucykge1xuICBsZXQgaW5kZXgsXG4gICAgICBzaWduaWZpY2FudFRva2VuO1xuXG4gIHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgaW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKTtcblxuICAgIGluZGV4IC09IG9mZnNldDtcblxuICAgIGNvbnN0IHJlcGxhY2VtZW50VG9rZW4gPSByZXBsYWNlbWVudFRva2Vuc1tpbmRleF07XG5cbiAgICBzaWduaWZpY2FudFRva2VuID0gcmVwbGFjZW1lbnRUb2tlbjsgIC8vL1xuXG4gICAgdGVybWluYWxOb2RlLnNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZU5vblRlcm1pbmFsTm9kZVRva2Vucyhub25UZXJtaW5hbE5vZGUsIHJlcGxhY2VtZW50VG9rZW5zLCBvZmZzZXQsIHRva2Vucykge1xuICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICByZXBsYWNlQ2hpbGROb2Rlc1Rva2VucyhjaGlsZE5vZGVzLCByZXBsYWNlbWVudFRva2Vucywgb2Zmc2V0LCB0b2tlbnMpO1xufVxuXG5mdW5jdGlvbiBvZmZzZXRGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgbGV0IG9mZnNldDtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSB0ZXJtaW5hbE5vZGUuZ2V0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gPT09IG51bGwpIHtcbiAgICAgIG9mZnNldCA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihzaWduaWZpY2FudFRva2VuKTtcblxuICAgICAgb2Zmc2V0ID0gc2lnbmlmaWNhbnRUb2tlbkluZGV4OyAvLy9cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIGZpcnN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IHRva2Vucy5pbmRleE9mKGZpcnN0U2lnbmlmaWNhbnRUb2tlbik7XG5cbiAgICBvZmZzZXQgPSBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleDsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZW1lbnRUb2tlbnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuID09PSBudWxsKSB7XG4gICAgICB0b2tlbnMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgICAgdG9rZW5zID0gW1xuICAgICAgICB0b2tlblxuICAgICAgXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihsYXN0U2lnbmlmaWNhbnRUb2tlbiksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZihmaXJzdFNpZ25pZmljYW50VG9rZW4pLFxuICAgICAgICAgIHN0YXJ0ID0gZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgsIC8vL1xuICAgICAgICAgIGVuZCA9IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggKyAxO1xuXG4gICAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKHN0YXJ0LCBlbmQpOyAgLy8vXG4gIH1cblxuICBjb25zdCByZXBsYWNlbWVudFRva2VucyA9IHRva2Vucy5tYXAoKHRva2VuKSA9PiB7ICAvLy9cbiAgICBjb25zdCByZXBsYWNlbWVudFRva2VuID0gdG9rZW4uY2xvbmUoKTsgIC8vLztcblxuICAgIHJldHVybiByZXBsYWNlbWVudFRva2VuO1xuICB9KTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnRUb2tlbnM7XG59XG4iXSwibmFtZXMiOlsiQ2xvbmVkTm9kZSIsIm5vZGUiLCJ0b2tlbnMiLCJnZXROb2RlIiwiZ2V0VG9rZW5zIiwiZ2V0Q2hpbGROb2RlcyIsImZyb21Ob2RlIiwiY29udGV4dCIsIm9mZnNldCIsIm9mZnNldEZyb21Ob2RlQW5kVG9rZW5zIiwicmVwbGFjZW1lbnRUb2tlbnMiLCJyZXBsYWNlbWVudFRva2Vuc0Zyb21Ob2RlQW5kVG9rZW5zIiwiY2xvbmUiLCJyZXBsYWNlTm9kZVRva2VucyIsImNsb25lZE5vZGUiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJyZXBsYWNlVGVybWluYWxOb2RlVG9rZW5zIiwibm9uVGVybWluYWxOb2RlIiwicmVwbGFjZU5vblRlcm1pbmFsTm9kZVRva2VucyIsInJlcGxhY2VDaGlsZE5vZGVzVG9rZW5zIiwiY2hpbGROb2RlcyIsImZvckVhY2giLCJjaGlsZE5vZGUiLCJpbmRleCIsInNpZ25pZmljYW50VG9rZW4iLCJnZXRTaWduaWZpY2FudFRva2VuIiwiaW5kZXhPZiIsInJlcGxhY2VtZW50VG9rZW4iLCJzZXRTaWduaWZpY2FudFRva2VuIiwic2lnbmlmaWNhbnRUb2tlbkluZGV4IiwiZmlyc3RTaWduaWZpY2FudFRva2VuIiwiZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuIiwiZmlyc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJ0b2tlbiIsImxhc3RTaWduaWZpY2FudFRva2VuIiwiZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4iLCJsYXN0U2lnbmlmaWNhbnRUb2tlbkluZGV4Iiwic3RhcnQiLCJlbmQiLCJzbGljZSIsIm1hcCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQUVxQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixJQUFBLEFBQU1BLDJCQUFELEFBQUw7YUFBTUEsV0FDUEMsSUFBSSxFQUFFQyxNQUFNO2dDQURMRjtRQUVqQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE1BQU0sR0FBR0E7O2tCQUhHRjs7WUFNbkJHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsSUFBSTtZQUNsQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsTUFBTTtZQUNwQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFBa0IsT0FBTyxJQUFJLENBQUNKLElBQUksQ0FBQ0ksYUFBYTtZQUFJOzs7O1lBRTdDQyxLQUFBQTttQkFBUCxTQUFPQSxTQUFTTCxJQUFJLEVBQUVNLE9BQU87Z0JBQzNCLElBQUksQUFBRUwsU0FBV0ssUUFBWEw7Z0JBRU4sSUFBTU0sU0FBU0Msd0JBQXdCUixNQUFNQyxTQUN2Q1Esb0JBQW9CQyxt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