highmark-markdown 1.2.70 → 1.2.72

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 (245) hide show
  1. package/.aiignore +7 -9
  2. package/.swcrc +4 -3
  3. package/example.js +11655 -33035
  4. package/lib/attributeNames.js +7 -7
  5. package/lib/constants.js +19 -19
  6. package/lib/example/constants.js +7 -7
  7. package/lib/example/customEventTypes.js +9 -9
  8. package/lib/example/importer.js +72 -28
  9. package/lib/example/indexOptions.js +3 -3
  10. package/lib/example/view/button/page.js +34 -135
  11. package/lib/example/view/button/tab/css.js +14 -114
  12. package/lib/example/view/button/tab/html.js +14 -114
  13. package/lib/example/view/button/tab/markdown.js +14 -114
  14. package/lib/example/view/button/tab/markdownStyle.js +14 -114
  15. package/lib/example/view/button/tab/plainText.js +14 -114
  16. package/lib/example/view/button/tab/preview.js +14 -114
  17. package/lib/example/view/button/tab.js +36 -136
  18. package/lib/example/view/div/container/css.js +15 -153
  19. package/lib/example/view/div/container/html.js +19 -157
  20. package/lib/example/view/div/container/markdown.js +38 -190
  21. package/lib/example/view/div/container/markdownStyle.js +39 -191
  22. package/lib/example/view/div/container/plainText.js +15 -153
  23. package/lib/example/view/div/container/preview.js +25 -177
  24. package/lib/example/view/div/container.js +20 -156
  25. package/lib/example/view/div/html.js +18 -173
  26. package/lib/example/view/div/pageButtons.js +63 -236
  27. package/lib/example/view/div/preview.js +58 -268
  28. package/lib/example/view/div/sizeable/left.js +13 -104
  29. package/lib/example/view/div/tabButtons/left.js +42 -161
  30. package/lib/example/view/div/tabButtons/right.js +75 -198
  31. package/lib/example/view/div/tabButtons.js +15 -172
  32. package/lib/example/view/textarea/css.js +29 -147
  33. package/lib/example/view/textarea/markdown.js +29 -145
  34. package/lib/example/view/textarea/markdownStyle.js +29 -145
  35. package/lib/example/view/textarea/parseTree/css.js +21 -132
  36. package/lib/example/view/textarea/parseTree/html.js +21 -132
  37. package/lib/example/view/textarea/parseTree/markdown.js +17 -129
  38. package/lib/example/view/textarea/parseTree/markdownStyle.js +17 -129
  39. package/lib/example/view/textarea/parseTree.js +20 -135
  40. package/lib/example/view/textarea/plainText.js +32 -153
  41. package/lib/example/view/textarea.js +16 -23
  42. package/lib/example/view/xmp.js +30 -187
  43. package/lib/example/view.js +281 -518
  44. package/lib/example.js +10 -10
  45. package/lib/index/item.js +25 -87
  46. package/lib/index/list.js +29 -62
  47. package/lib/index/match.js +23 -62
  48. package/lib/index.js +34 -34
  49. package/lib/letters.js +3 -3
  50. package/lib/map/className.js +6 -6
  51. package/lib/map/node/css.js +50 -42
  52. package/lib/map/node/html.js +108 -71
  53. package/lib/map/nonTerminalNode/markdown.js +49 -40
  54. package/lib/map/nonTerminalNode/markdownStyle.js +49 -40
  55. package/lib/map/tagName.js +6 -6
  56. package/lib/markdown/bnf.js +300 -3
  57. package/lib/markdown/entries.js +3 -3
  58. package/lib/markdown/lexer.js +23 -126
  59. package/lib/markdown/parser.js +18 -121
  60. package/lib/markdownStyle/bnf.js +80 -3
  61. package/lib/markdownStyle/entries.js +8 -8
  62. package/lib/markdownStyle/lexer.js +23 -126
  63. package/lib/markdownStyle/parser.js +18 -121
  64. package/lib/mixins/node.js +53 -53
  65. package/lib/mixins/token.js +13 -13
  66. package/lib/node/css/amount.js +16 -110
  67. package/lib/node/css/argument.js +8 -95
  68. package/lib/node/css/arguments.js +13 -127
  69. package/lib/node/css/class.js +13 -127
  70. package/lib/node/css/colour.js +16 -110
  71. package/lib/node/css/content.js +12 -103
  72. package/lib/node/css/declaration.js +19 -109
  73. package/lib/node/css/identifier.js +16 -110
  74. package/lib/node/css/name.js +13 -127
  75. package/lib/node/css/pseudoClass.js +13 -127
  76. package/lib/node/css/ruleName.js +43 -137
  77. package/lib/node/css/ruleSet.js +45 -139
  78. package/lib/node/css/selector.js +8 -95
  79. package/lib/node/css/selectors.js +19 -110
  80. package/lib/node/css/selectorsList.js +22 -115
  81. package/lib/node/css/string.js +16 -110
  82. package/lib/node/css/target.js +12 -103
  83. package/lib/node/css/topmost.js +70 -182
  84. package/lib/node/css/value.js +12 -126
  85. package/lib/node/css/values.js +16 -107
  86. package/lib/node/css/verbatim.js +35 -132
  87. package/lib/node/css.js +66 -275
  88. package/lib/node/html/anchor/contents.js +8 -92
  89. package/lib/node/html/anchor/footnote.js +8 -92
  90. package/lib/node/html/anchor/index.js +8 -92
  91. package/lib/node/html/anchor.js +38 -157
  92. package/lib/node/html/container.js +24 -154
  93. package/lib/node/html/directive/contents.js +8 -95
  94. package/lib/node/html/directive/footnotes.js +8 -95
  95. package/lib/node/html/directive/index.js +8 -95
  96. package/lib/node/html/directive/pageNumber.js +8 -95
  97. package/lib/node/html/directive.js +23 -123
  98. package/lib/node/html/division.js +127 -273
  99. package/lib/node/html/error.js +41 -179
  100. package/lib/node/html/footnote.js +40 -149
  101. package/lib/node/html/heading/index.js +61 -183
  102. package/lib/node/html/heading/primary.js +12 -112
  103. package/lib/node/html/heading/quaternary.js +12 -112
  104. package/lib/node/html/heading/secondary.js +12 -112
  105. package/lib/node/html/heading/tertiary.js +12 -112
  106. package/lib/node/html/heading.js +30 -147
  107. package/lib/node/html/image.js +76 -207
  108. package/lib/node/html/item/contents.js +20 -124
  109. package/lib/node/html/item/footnote.js +21 -125
  110. package/lib/node/html/item/index.js +39 -145
  111. package/lib/node/html/item/ordered.js +23 -133
  112. package/lib/node/html/item/unordered.js +10 -110
  113. package/lib/node/html/line/block.js +15 -119
  114. package/lib/node/html/line.js +89 -242
  115. package/lib/node/html/link/contents.js +36 -153
  116. package/lib/node/html/link/email.js +89 -243
  117. package/lib/node/html/link/footnote.js +94 -238
  118. package/lib/node/html/link/hyper.js +89 -243
  119. package/lib/node/html/link/index.js +67 -222
  120. package/lib/node/html/list/contents.js +20 -124
  121. package/lib/node/html/list/footnotes.js +40 -160
  122. package/lib/node/html/list/index.js +20 -124
  123. package/lib/node/html/list/ordered.js +10 -110
  124. package/lib/node/html/list/unordered.js +10 -110
  125. package/lib/node/html/listing/block.js +33 -177
  126. package/lib/node/html/listing/inline.js +35 -174
  127. package/lib/node/html/pageNumber.js +65 -216
  128. package/lib/node/html/paragraph.js +10 -110
  129. package/lib/node/html/reference.js +10 -110
  130. package/lib/node/html/table.js +10 -110
  131. package/lib/node/html/tableBody.js +10 -110
  132. package/lib/node/html/tableBodyCell.js +10 -110
  133. package/lib/node/html/tableBodyRow.js +10 -110
  134. package/lib/node/html/tableHead.js +10 -110
  135. package/lib/node/html/tableHeadCell.js +10 -110
  136. package/lib/node/html/tableHeadRow.js +10 -110
  137. package/lib/node/html/text/block.js +10 -110
  138. package/lib/node/html/text/comma.js +21 -128
  139. package/lib/node/html/text/emphasised.js +14 -118
  140. package/lib/node/html/text/index.js +28 -143
  141. package/lib/node/html/text/inline.js +34 -147
  142. package/lib/node/html/text/plain.js +10 -110
  143. package/lib/node/html/text/strong.js +14 -118
  144. package/lib/node/html/text/stronglyEmphasised.js +66 -208
  145. package/lib/node/html/text.js +24 -162
  146. package/lib/node/html/topmost.js +100 -240
  147. package/lib/node/html.js +256 -554
  148. package/lib/node/markdown/blockEnd.js +5 -89
  149. package/lib/node/markdown/blockStart.js +18 -113
  150. package/lib/node/markdown/className.js +12 -100
  151. package/lib/node/markdown/container.js +18 -113
  152. package/lib/node/markdown/directive/embed.js +39 -137
  153. package/lib/node/markdown/directive/include.js +39 -137
  154. package/lib/node/markdown/division.js +70 -216
  155. package/lib/node/markdown/document.js +44 -147
  156. package/lib/node/markdown/error.js +12 -100
  157. package/lib/node/markdown/footnote.js +12 -100
  158. package/lib/node/markdown/hyperlink.js +34 -131
  159. package/lib/node/markdown/image.js +12 -100
  160. package/lib/node/markdown/item/ordered.js +15 -103
  161. package/lib/node/markdown/link/email.js +34 -131
  162. package/lib/node/markdown/link/footnote.js +14 -102
  163. package/lib/node/markdown/listng/block.js +12 -100
  164. package/lib/node/markdown/listng/inline.js +18 -106
  165. package/lib/node/markdown/path.js +12 -100
  166. package/lib/node/markdown/reference.js +15 -103
  167. package/lib/node/markdown/subDivision.js +35 -126
  168. package/lib/node/markdown/text/block.js +5 -89
  169. package/lib/node/markdown/text/plain.js +5 -89
  170. package/lib/node/markdown/text.js +46 -134
  171. package/lib/node/markdown.js +34 -169
  172. package/lib/node/markdownStyle/amount.js +13 -101
  173. package/lib/node/markdownStyle/argument.js +5 -89
  174. package/lib/node/markdownStyle/arguments.js +5 -89
  175. package/lib/node/markdownStyle/colour.js +12 -100
  176. package/lib/node/markdownStyle/content.js +21 -109
  177. package/lib/node/markdownStyle/declaration.js +5 -89
  178. package/lib/node/markdownStyle/document.js +5 -89
  179. package/lib/node/markdownStyle/error.js +5 -89
  180. package/lib/node/markdownStyle/identifier.js +13 -101
  181. package/lib/node/markdownStyle/name.js +5 -89
  182. package/lib/node/markdownStyle/nonsense.js +5 -89
  183. package/lib/node/markdownStyle/pseudoClass.js +5 -89
  184. package/lib/node/markdownStyle/ruleName.js +12 -100
  185. package/lib/node/markdownStyle/ruleSet.js +5 -89
  186. package/lib/node/markdownStyle/selector.js +5 -89
  187. package/lib/node/markdownStyle/selectors.js +5 -89
  188. package/lib/node/markdownStyle/selectorsList.js +5 -89
  189. package/lib/node/markdownStyle/string.js +12 -100
  190. package/lib/node/markdownStyle/target.js +12 -100
  191. package/lib/node/markdownStyle/value.js +5 -89
  192. package/lib/node/markdownStyle/values.js +5 -89
  193. package/lib/node/markdownStyle/verbatim.js +5 -89
  194. package/lib/node/markdownStyle.js +16 -135
  195. package/lib/prepends.js +4 -4
  196. package/lib/queries/markdown.js +7 -7
  197. package/lib/queries/markdownStyle.js +7 -7
  198. package/lib/ruleNames/markdown.js +145 -145
  199. package/lib/ruleNames/markdownStyle.js +51 -51
  200. package/lib/style/defaultMarkdown.js +247 -3
  201. package/lib/style/font.js +54 -3
  202. package/lib/styleElement/markdown/default.js +17 -131
  203. package/lib/styleElement/markdown.js +30 -151
  204. package/lib/styleElement.js +30 -69
  205. package/lib/targets.js +3 -3
  206. package/lib/tokenTypes.js +39 -39
  207. package/lib/transform/css/ruleSet.js +15 -106
  208. package/lib/transform/css/selectors.js +17 -108
  209. package/lib/transform/css/selectorsList.js +28 -121
  210. package/lib/transform/css.js +35 -139
  211. package/lib/transform/html/anchor/index.js +11 -99
  212. package/lib/transform/html/division.js +18 -112
  213. package/lib/transform/html/footnote.js +25 -122
  214. package/lib/transform/html/heading/index.js +7 -91
  215. package/lib/transform/html/index.js +44 -139
  216. package/lib/transform/html/item/contents.js +23 -111
  217. package/lib/transform/html/item/footnote.js +11 -99
  218. package/lib/transform/html/item/index.js +11 -99
  219. package/lib/transform/html/line.js +10 -98
  220. package/lib/transform/html/link/contents.js +20 -111
  221. package/lib/transform/html/link/footnote.js +36 -140
  222. package/lib/transform/html/list/contents.js +37 -151
  223. package/lib/transform/html/list/footnotes.js +19 -110
  224. package/lib/transform/html/list/index.js +16 -100
  225. package/lib/transform/html/pageNumber.js +15 -106
  226. package/lib/transform/html.js +28 -132
  227. package/lib/transform/markdown/directive/embed.js +9 -120
  228. package/lib/transform/markdown/directive/ignore.js +6 -90
  229. package/lib/transform/markdown/directive/include.js +15 -129
  230. package/lib/transform/markdown/subDivision.js +6 -90
  231. package/lib/transform/markdown.js +7 -134
  232. package/lib/utilities/contents.js +74 -145
  233. package/lib/utilities/css.js +12 -16
  234. package/lib/utilities/dom.js +11 -11
  235. package/lib/utilities/entities.js +2 -2
  236. package/lib/utilities/entries.js +5 -5
  237. package/lib/utilities/grammar.js +57 -86
  238. package/lib/utilities/html.js +21 -25
  239. package/lib/utilities/index.js +76 -89
  240. package/lib/utilities/markdown.js +14 -17
  241. package/lib/utilities/markdownStyle.js +2 -2
  242. package/lib/utilities/object.js +16 -16
  243. package/lib/utilities/query.js +13 -14
  244. package/lib/utilities/string.js +2 -2
  245. package/package.json +3 -3
package/lib/node/html.js CHANGED
@@ -8,573 +8,275 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
- var _occamdom = require("occam-dom");
12
- var _node = /*#__PURE__*/ _interop_require_default(require("../mixins/node"));
13
- var _constants = require("../constants");
14
- var _dom = require("../utilities/dom");
15
- function _array_like_to_array(arr, len) {
16
- if (len == null || len > arr.length) len = arr.length;
17
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
18
- return arr2;
19
- }
20
- function _array_without_holes(arr) {
21
- if (Array.isArray(arr)) return _array_like_to_array(arr);
22
- }
23
- function _assert_this_initialized(self) {
24
- if (self === void 0) {
25
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
26
- }
27
- return self;
28
- }
29
- function _call_super(_this, derived, args) {
30
- derived = _get_prototype_of(derived);
31
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
32
- }
33
- function _class_call_check(instance, Constructor) {
34
- if (!(instance instanceof Constructor)) {
35
- throw new TypeError("Cannot call a class as a function");
36
- }
37
- }
38
- function _construct(Parent, args, Class) {
39
- if (_is_native_reflect_construct()) {
40
- _construct = Reflect.construct;
41
- } else {
42
- _construct = function construct(Parent, args, Class) {
43
- var a = [
44
- null
45
- ];
46
- a.push.apply(a, args);
47
- var Constructor = Function.bind.apply(Parent, a);
48
- var instance = new Constructor();
49
- if (Class) _set_prototype_of(instance, Class.prototype);
50
- return instance;
51
- };
52
- }
53
- return _construct.apply(null, arguments);
54
- }
55
- function _defineProperties(target, props) {
56
- for(var i = 0; i < props.length; i++){
57
- var descriptor = props[i];
58
- descriptor.enumerable = descriptor.enumerable || false;
59
- descriptor.configurable = true;
60
- if ("value" in descriptor) descriptor.writable = true;
61
- Object.defineProperty(target, descriptor.key, descriptor);
62
- }
63
- }
64
- function _create_class(Constructor, protoProps, staticProps) {
65
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
66
- if (staticProps) _defineProperties(Constructor, staticProps);
67
- return Constructor;
68
- }
69
- function _get_prototype_of(o) {
70
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
71
- return o.__proto__ || Object.getPrototypeOf(o);
72
- };
73
- return _get_prototype_of(o);
74
- }
75
- function _inherits(subClass, superClass) {
76
- if (typeof superClass !== "function" && superClass !== null) {
77
- throw new TypeError("Super expression must either be null or a function");
78
- }
79
- subClass.prototype = Object.create(superClass && superClass.prototype, {
80
- constructor: {
81
- value: subClass,
82
- writable: true,
83
- configurable: true
84
- }
85
- });
86
- if (superClass) _set_prototype_of(subClass, superClass);
87
- }
11
+ const _occamdom = require("occam-dom");
12
+ const _node = /*#__PURE__*/ _interop_require_default(require("../mixins/node"));
13
+ const _constants = require("../constants");
14
+ const _dom = require("../utilities/dom");
88
15
  function _interop_require_default(obj) {
89
16
  return obj && obj.__esModule ? obj : {
90
17
  default: obj
91
18
  };
92
19
  }
93
- function _is_native_function(fn) {
94
- return Function.toString.call(fn).indexOf("[native code]") !== -1;
95
- }
96
- function _iterable_to_array(iter) {
97
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
98
- }
99
- function _non_iterable_spread() {
100
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
101
- }
102
- function _possible_constructor_return(self, call) {
103
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
104
- return call;
20
+ class HTMLNode extends _occamdom.Node {
21
+ constructor(outerNode, parentNode, childNodes, domElement){
22
+ super(outerNode, parentNode, childNodes);
23
+ this.domElement = domElement;
105
24
  }
106
- return _assert_this_initialized(self);
107
- }
108
- function _set_prototype_of(o, p) {
109
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
110
- o.__proto__ = p;
111
- return o;
112
- };
113
- return _set_prototype_of(o, p);
114
- }
115
- function _to_consumable_array(arr) {
116
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
117
- }
118
- function _type_of(obj) {
119
- "@swc/helpers - typeof";
120
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
121
- }
122
- function _unsupported_iterable_to_array(o, minLen) {
123
- if (!o) return;
124
- if (typeof o === "string") return _array_like_to_array(o, minLen);
125
- var n = Object.prototype.toString.call(o).slice(8, -1);
126
- if (n === "Object" && o.constructor) n = o.constructor.name;
127
- if (n === "Map" || n === "Set") return Array.from(n);
128
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
129
- }
130
- function _wrap_native_super(Class) {
131
- var _cache = typeof Map === "function" ? new Map() : undefined;
132
- _wrap_native_super = function wrapNativeSuper(Class) {
133
- if (Class === null || !_is_native_function(Class)) return Class;
134
- if (typeof Class !== "function") {
135
- throw new TypeError("Super expression must either be null or a function");
136
- }
137
- if (typeof _cache !== "undefined") {
138
- if (_cache.has(Class)) return _cache.get(Class);
139
- _cache.set(Class, Wrapper);
140
- }
141
- function Wrapper() {
142
- return _construct(Class, arguments, _get_prototype_of(this).constructor);
25
+ getDOMElement() {
26
+ return this.domElement;
27
+ }
28
+ setDOMElement(domElement) {
29
+ this.domElement = domElement;
30
+ }
31
+ resetDOMElement() {
32
+ this.domElement = null;
33
+ }
34
+ getRuleName() {
35
+ const markdownNode = this.getMarkdownNode(), ruleName = markdownNode.getRuleName();
36
+ return ruleName;
37
+ }
38
+ isTerminalNode() {
39
+ const terminalNode = false;
40
+ return terminalNode;
41
+ }
42
+ isNonTerminalNode() {
43
+ const nonTerminalNode = true;
44
+ return nonTerminalNode;
45
+ }
46
+ getMarkdownNode() {
47
+ const outerNode = this.getOuterNode(), markdownNode = outerNode; ///
48
+ return markdownNode;
49
+ }
50
+ getParentHTMLNode() {
51
+ const parentNode = this.getParentNode(), parentHTMLNode = parentNode; ///
52
+ return parentHTMLNode;
53
+ }
54
+ getChildHTMLNodes() {
55
+ const childNodes = this.getChildNodes(), childHTMLNodes = childNodes; ///
56
+ return childHTMLNodes;
57
+ }
58
+ getAncestorHTMLNodes() {
59
+ const ancestorNodes = this.getAncestorNodes(), ancestorHTMLNodes = ancestorNodes; ///
60
+ return ancestorHTMLNodes;
61
+ }
62
+ reduceChildHTMLNode(callback, initialValue) {
63
+ return this.reduceChildNode(callback, initialValue);
64
+ }
65
+ someAncestorHTMLNode(callback) {
66
+ return this.someAncestorNode(callback);
67
+ }
68
+ someChildHTMLNode(callback) {
69
+ return this.someChildNode(callback);
70
+ }
71
+ retrieveHTMLNode(callback) {
72
+ let htmlNode = null;
73
+ if (htmlNode === null) {
74
+ const childHTMLNodes = this.getChildHTMLNodes();
75
+ childHTMLNodes.some((childHTMLNode)=>{
76
+ htmlNode = childHTMLNode.retrieveHTMLNode(callback);
77
+ if (htmlNode !== null) {
78
+ return true;
79
+ }
80
+ });
143
81
  }
144
- Wrapper.prototype = Object.create(Class.prototype, {
145
- constructor: {
146
- value: Wrapper,
147
- enumerable: false,
148
- writable: true,
149
- configurable: true
150
- }
151
- });
152
- return _set_prototype_of(Wrapper, Class);
153
- };
154
- return _wrap_native_super(Class);
155
- }
156
- function _is_native_reflect_construct() {
157
- try {
158
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
159
- } catch (_) {}
160
- return (_is_native_reflect_construct = function() {
161
- return !!result;
162
- })();
163
- }
164
- var HTMLNode = /*#__PURE__*/ function(Node) {
165
- _inherits(HTMLNode, Node);
166
- function HTMLNode(outerNode, parentNode, childNodes, domElement) {
167
- _class_call_check(this, HTMLNode);
168
- var _this;
169
- _this = _call_super(this, HTMLNode, [
170
- outerNode,
171
- parentNode,
172
- childNodes
173
- ]);
174
- _this.domElement = domElement;
175
- return _this;
176
- }
177
- _create_class(HTMLNode, [
178
- {
179
- key: "getDOMElement",
180
- value: function getDOMElement() {
181
- return this.domElement;
182
- }
183
- },
184
- {
185
- key: "setDOMElement",
186
- value: function setDOMElement(domElement) {
187
- this.domElement = domElement;
188
- }
189
- },
190
- {
191
- key: "resetDOMElement",
192
- value: function resetDOMElement() {
193
- this.domElement = null;
194
- }
195
- },
196
- {
197
- key: "getRuleName",
198
- value: function getRuleName() {
199
- var markdownNode = this.getMarkdownNode(), ruleName = markdownNode.getRuleName();
200
- return ruleName;
201
- }
202
- },
203
- {
204
- key: "isTerminalNode",
205
- value: function isTerminalNode() {
206
- var terminalNode = false;
207
- return terminalNode;
208
- }
209
- },
210
- {
211
- key: "isNonTerminalNode",
212
- value: function isNonTerminalNode() {
213
- var nonTerminalNode = true;
214
- return nonTerminalNode;
215
- }
216
- },
217
- {
218
- key: "getMarkdownNode",
219
- value: function getMarkdownNode() {
220
- var outerNode = this.getOuterNode(), markdownNode = outerNode; ///
221
- return markdownNode;
222
- }
223
- },
224
- {
225
- key: "getParentHTMLNode",
226
- value: function getParentHTMLNode() {
227
- var parentNode = this.getParentNode(), parentHTMLNode = parentNode; ///
228
- return parentHTMLNode;
229
- }
230
- },
231
- {
232
- key: "getChildHTMLNodes",
233
- value: function getChildHTMLNodes() {
234
- var childNodes = this.getChildNodes(), childHTMLNodes = childNodes; ///
235
- return childHTMLNodes;
236
- }
237
- },
238
- {
239
- key: "getAncestorHTMLNodes",
240
- value: function getAncestorHTMLNodes() {
241
- var ancestorNodes = this.getAncestorNodes(), ancestorHTMLNodes = ancestorNodes; ///
242
- return ancestorHTMLNodes;
243
- }
244
- },
245
- {
246
- key: "reduceChildHTMLNode",
247
- value: function reduceChildHTMLNode(callback, initialValue) {
248
- return this.reduceChildNode(callback, initialValue);
82
+ if (htmlNode === null) {
83
+ htmlNode = this;
84
+ const result = callback(htmlNode);
85
+ if (!result) {
86
+ htmlNode = null;
249
87
  }
250
- },
251
- {
252
- key: "someAncestorHTMLNode",
253
- value: function someAncestorHTMLNode(callback) {
254
- return this.someAncestorNode(callback);
255
- }
256
- },
257
- {
258
- key: "someChildHTMLNode",
259
- value: function someChildHTMLNode(callback) {
260
- return this.someChildNode(callback);
261
- }
262
- },
263
- {
264
- key: "retrieveHTMLNode",
265
- value: function retrieveHTMLNode(callback) {
266
- var htmlNode = null;
267
- if (htmlNode === null) {
268
- var childHTMLNodes = this.getChildHTMLNodes();
269
- childHTMLNodes.some(function(childHTMLNode) {
270
- htmlNode = childHTMLNode.retrieveHTMLNode(callback);
271
- if (htmlNode !== null) {
272
- return true;
273
- }
274
- });
275
- }
276
- if (htmlNode === null) {
277
- htmlNode = this;
278
- var result = callback(htmlNode);
279
- if (!result) {
280
- htmlNode = null;
88
+ }
89
+ return htmlNode;
90
+ }
91
+ removeChildHTMLNodes(removedChildHTMLNodes = null) {
92
+ let childHTMLNodes;
93
+ childHTMLNodes = this.getChildHTMLNodes();
94
+ if (removedChildHTMLNodes !== null) {
95
+ childHTMLNodes = childHTMLNodes.filter((childHTMLNode)=>{
96
+ const markdownNode = childHTMLNode.getMarkdownNode(), index = removedChildHTMLNodes.findIndex((removedChildHTMLNode)=>{
97
+ const markdownNodeMatches = removedChildHTMLNode.matchMarkdownNode(markdownNode);
98
+ if (markdownNodeMatches) {
99
+ return true;
281
100
  }
282
- }
283
- return htmlNode;
284
- }
285
- },
286
- {
287
- key: "removeChildHTMLNodes",
288
- value: function removeChildHTMLNodes() {
289
- var removedChildHTMLNodes = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;
290
- var childHTMLNodes;
291
- childHTMLNodes = this.getChildHTMLNodes();
292
- if (removedChildHTMLNodes !== null) {
293
- childHTMLNodes = childHTMLNodes.filter(function(childHTMLNode) {
294
- var markdownNode = childHTMLNode.getMarkdownNode(), index = removedChildHTMLNodes.findIndex(function(removedChildHTMLNode) {
295
- var markdownNodeMatches = removedChildHTMLNode.matchMarkdownNode(markdownNode);
296
- if (markdownNodeMatches) {
297
- return true;
298
- }
299
- });
300
- if (index !== -1) {
301
- return true;
302
- }
303
- });
304
- }
305
- var removedChildNodes = childHTMLNodes; ///
306
- removedChildNodes = this.removeChildNodes(removedChildNodes);
307
- removedChildHTMLNodes = removedChildNodes; ///
308
- return removedChildHTMLNodes;
309
- }
310
- },
311
- {
312
- key: "matchMarkdownNode",
313
- value: function matchMarkdownNode(markdownNode) {
314
- var outerNode = markdownNode, outerNodeMatches = this.matchOuterNode(outerNode), markdownNodeMatches = outerNodeMatches; ///
315
- return markdownNodeMatches;
316
- }
317
- },
318
- {
319
- key: "addChildHTMLNodes",
320
- value: function addChildHTMLNodes(addedChildHTMLNodes, startHTNLIndex) {
321
- var addedChildNodes = addedChildHTMLNodes, startIndex = startHTNLIndex; ///
322
- this.addChildNodes(addedChildNodes, startIndex);
323
- }
324
- },
325
- {
326
- key: "adjustIndent",
327
- value: function adjustIndent(indent) {
328
- if (indent !== null) {
329
- indent = "".concat(_constants.DOUBLE_SPACE).concat(indent);
330
- }
331
- return indent;
332
- }
333
- },
334
- {
335
- key: "lines",
336
- value: function lines(context) {
337
- var lines;
338
- var ref, ref1;
339
- ref = this.constructor, ref1 = ref.lines, lines = ref1 === void 0 ? null : ref1, ref;
340
- if (lines === null) {
341
- lines = this.reduceChildNode(function(lines, childNode) {
342
- var childNodeLines = childNode.lines(context);
343
- lines += childNodeLines;
344
- return lines;
345
- }, 0);
346
- }
347
- return lines;
348
- }
349
- },
350
- {
351
- key: "tagName",
352
- value: function tagName(context) {
353
- var tagName = this.constructor.tagName;
354
- return tagName;
355
- }
356
- },
357
- {
358
- key: "depth",
359
- value: function depth() {
360
- var _this_constructor = this.constructor, _this_constructor_depth = _this_constructor.depth, depth = _this_constructor_depth === void 0 ? null : _this_constructor_depth;
361
- return depth;
362
- }
363
- },
364
- {
365
- key: "className",
366
- value: function className(context) {
367
- var className = this.constructor.className;
368
- return className;
369
- }
370
- },
371
- {
372
- key: "closingTag",
373
- value: function closingTag(context) {
374
- var tagName = this.tagName(context), closingTag = "</".concat(tagName, ">");
375
- return closingTag;
376
- }
377
- },
378
- {
379
- key: "startingTag",
380
- value: function startingTag(context) {
381
- var tagName = this.tagName(context), className = this.className(context), attributeName = this.attributeName(context), attributeValue = this.attributeValue(context), classHTML = className !== null ? ' class="'.concat(className, '"') : _constants.EMPTY_STRING, attributeHTML = attributeName !== null && attributeValue !== null ? " ".concat(attributeName, '="').concat(attributeValue, '"') : _constants.EMPTY_STRING, startingTag = "<".concat(tagName).concat(classHTML).concat(attributeHTML, ">");
382
- return startingTag;
383
- }
384
- },
385
- {
386
- key: "selfClosingTag",
387
- value: function selfClosingTag(context) {
388
- var tagName = this.tagName(context), selfClosingTag = "<".concat(tagName, "/>");
389
- return selfClosingTag;
390
- }
391
- },
392
- {
393
- key: "attributeName",
394
- value: function attributeName(context) {
395
- var attributeName = null;
396
- return attributeName;
397
- }
398
- },
399
- {
400
- key: "attributeValue",
401
- value: function attributeValue(context) {
402
- var attributeValue = null;
403
- return attributeValue;
404
- }
405
- },
406
- {
407
- key: "createDOMElement",
408
- value: function createDOMElement(context) {
409
- var domElement;
410
- var tagName = this.tagName(context);
411
- domElement = document.createElement(tagName);
412
- var className = this.className(context), attributeName = this.attributeName(context), attributeValue = this.attributeValue(context);
413
- if (className !== null) {
414
- Object.assign(domElement, {
415
- className: className
416
- });
417
- }
418
- if (attributeName !== null && attributeValue !== null) {
419
- domElement.setAttribute(attributeName, attributeValue);
420
- }
421
- return domElement;
422
- }
423
- },
424
- {
425
- key: "mount",
426
- value: function mount(parentDOMElement, siblingDOMElement, context) {
427
- this.domElement = this.createDOMElement(context);
428
- siblingDOMElement !== null ? (0, _dom.insertAfter)(this.domElement, parentDOMElement, siblingDOMElement) : (0, _dom.insertBeforehand)(this.domElement, parentDOMElement);
429
- parentDOMElement = this.domElement; ///
430
- siblingDOMElement = null;
431
- this.childNodes.forEach(function(childNode) {
432
- siblingDOMElement = childNode.mount(parentDOMElement, siblingDOMElement, context);
433
101
  });
434
- siblingDOMElement = this.domElement; ///
435
- return siblingDOMElement;
436
- }
437
- },
438
- {
439
- key: "unmount",
440
- value: function unmount(parentDOMElement) {
441
- {
442
- var _$parentDOMElement = this.domElement; ///
443
- this.childNodes.forEach(function(childNode) {
444
- childNode.unmount(_$parentDOMElement);
445
- });
446
- }
447
- (0, _dom.remove)(this.domElement, parentDOMElement);
448
- this.domElement = null;
449
- }
450
- },
451
- {
452
- key: "asHTML",
453
- value: function asHTML(indent, context) {
454
- if (context === undefined) {
455
- context = indent; ///
456
- indent = _constants.EMPTY_STRING;
102
+ if (index !== -1) {
103
+ return true;
457
104
  }
458
- var html;
459
- indent = this.adjustIndent(indent);
460
- var className = this.className(context), attributeName = this.attributeName(context), childNodesHTML = this.childNodesAsHTML(indent, context);
461
- if (childNodesHTML !== _constants.EMPTY_STRING || className !== null || attributeName !== null) {
462
- var startingTag = this.startingTag(context), closingTag = this.closingTag(context);
463
- html = indent === null ? "".concat(startingTag).concat(childNodesHTML).concat(closingTag) : "".concat(indent).concat(startingTag, "\n").concat(childNodesHTML).concat(indent).concat(closingTag, "\n");
464
- } else {
465
- var selfClosingTag = this.selfClosingTag(context);
466
- html = indent === null ? "".concat(selfClosingTag) : "".concat(indent).concat(selfClosingTag, "\n");
467
- }
468
- return html;
469
- }
470
- },
471
- {
472
- key: "asPlainText",
473
- value: function asPlainText(context) {
474
- var childNodesPlainText = this.childNodesAsPlainText(context), plainText = childNodesPlainText; ///
475
- return plainText;
476
- }
477
- },
478
- {
479
- key: "childNodesAsHTML",
480
- value: function childNodesAsHTML(indent, context) {
481
- var childNodesHTML = this.reduceChildNode(function(childNodesHTML, childNode) {
482
- var childNodeHTML = childNode.asHTML(indent, context);
483
- childNodesHTML = "".concat(childNodesHTML).concat(childNodeHTML);
484
- return childNodesHTML;
485
- }, _constants.EMPTY_STRING);
486
- return childNodesHTML;
487
- }
488
- },
489
- {
490
- key: "childNodesAsPlainText",
491
- value: function childNodesAsPlainText(context) {
492
- var childNodesPlainText = this.reduceChildNode(function(childNodesPlainText, childNode) {
493
- var childNodePlainText = childNode.asPlainText(context);
494
- childNodesPlainText = "".concat(childNodesPlainText, "\n").concat(childNodePlainText);
495
- return childNodesPlainText;
496
- }, _constants.EMPTY_STRING);
497
- return childNodesPlainText;
498
- }
105
+ });
499
106
  }
500
- ], [
501
- {
502
- key: "fromNothing",
503
- value: function fromNothing(Class) {
504
- for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
505
- remainingArguments[_key - 1] = arguments[_key];
506
- }
507
- var _Node;
508
- if (Class === undefined) {
509
- Class = HTMLNode; ///
510
- }
511
- var domElement = null, htmlNode = (_Node = _occamdom.Node).fromNothing.apply(_Node, [
512
- Class,
513
- domElement
514
- ].concat(_to_consumable_array(remainingArguments)));
515
- return htmlNode;
516
- }
517
- },
518
- {
519
- key: "fromOuterNode",
520
- value: function fromOuterNode(Class, outerNode) {
521
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
522
- remainingArguments[_key - 2] = arguments[_key];
523
- }
524
- var _Node;
525
- if (outerNode === undefined) {
526
- outerNode = Class; ///
527
- Class = HTMLNode; ///
528
- }
529
- var domElement = null, htmlNode = (_Node = _occamdom.Node).fromOuterNode.apply(_Node, [
530
- Class,
531
- outerNode,
532
- domElement
533
- ].concat(_to_consumable_array(remainingArguments)));
534
- return htmlNode;
535
- }
536
- },
537
- {
538
- key: "fromDOMElement",
539
- value: function fromDOMElement(Class, domElement) {
540
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
541
- remainingArguments[_key - 2] = arguments[_key];
542
- }
543
- var _Node;
544
- if (domElement === undefined) {
545
- domElement = Class; ///
546
- Class = HTMLNode; ///
547
- }
548
- var htmlNode = (_Node = _occamdom.Node).fromNothing.apply(_Node, [
549
- Class,
550
- domElement
551
- ].concat(_to_consumable_array(remainingArguments)));
552
- return htmlNode;
553
- }
554
- },
107
+ let removedChildNodes = childHTMLNodes; ///
108
+ removedChildNodes = this.removeChildNodes(removedChildNodes);
109
+ removedChildHTMLNodes = removedChildNodes; ///
110
+ return removedChildHTMLNodes;
111
+ }
112
+ matchMarkdownNode(markdownNode) {
113
+ const outerNode = markdownNode, outerNodeMatches = this.matchOuterNode(outerNode), markdownNodeMatches = outerNodeMatches; ///
114
+ return markdownNodeMatches;
115
+ }
116
+ addChildHTMLNodes(addedChildHTMLNodes, startHTNLIndex) {
117
+ const addedChildNodes = addedChildHTMLNodes, startIndex = startHTNLIndex; ///
118
+ this.addChildNodes(addedChildNodes, startIndex);
119
+ }
120
+ adjustIndent(indent) {
121
+ if (indent !== null) {
122
+ indent = `${_constants.DOUBLE_SPACE}${indent}`;
123
+ }
124
+ return indent;
125
+ }
126
+ lines(context) {
127
+ let lines;
128
+ ({ lines = null } = this.constructor);
129
+ if (lines === null) {
130
+ lines = this.reduceChildNode((lines, childNode)=>{
131
+ const childNodeLines = childNode.lines(context);
132
+ lines += childNodeLines;
133
+ return lines;
134
+ }, 0);
135
+ }
136
+ return lines;
137
+ }
138
+ tagName(context) {
139
+ const { tagName } = this.constructor;
140
+ return tagName;
141
+ }
142
+ depth() {
143
+ const { depth = null } = this.constructor;
144
+ return depth;
145
+ }
146
+ className(context) {
147
+ const { className } = this.constructor;
148
+ return className;
149
+ }
150
+ closingTag(context) {
151
+ const tagName = this.tagName(context), closingTag = `</${tagName}>`;
152
+ return closingTag;
153
+ }
154
+ startingTag(context) {
155
+ const tagName = this.tagName(context), className = this.className(context), attributeName = this.attributeName(context), attributeValue = this.attributeValue(context), classHTML = className !== null ? ` class="${className}"` : _constants.EMPTY_STRING, attributeHTML = attributeName !== null && attributeValue !== null ? ` ${attributeName}="${attributeValue}"` : _constants.EMPTY_STRING, startingTag = `<${tagName}${classHTML}${attributeHTML}>`;
156
+ return startingTag;
157
+ }
158
+ selfClosingTag(context) {
159
+ const tagName = this.tagName(context), selfClosingTag = `<${tagName}/>`;
160
+ return selfClosingTag;
161
+ }
162
+ attributeName(context) {
163
+ const attributeName = null;
164
+ return attributeName;
165
+ }
166
+ attributeValue(context) {
167
+ const attributeValue = null;
168
+ return attributeValue;
169
+ }
170
+ createDOMElement(context) {
171
+ let domElement;
172
+ const tagName = this.tagName(context);
173
+ domElement = document.createElement(tagName);
174
+ const className = this.className(context), attributeName = this.attributeName(context), attributeValue = this.attributeValue(context);
175
+ if (className !== null) {
176
+ Object.assign(domElement, {
177
+ className
178
+ });
179
+ }
180
+ if (attributeName !== null && attributeValue !== null) {
181
+ domElement.setAttribute(attributeName, attributeValue);
182
+ }
183
+ return domElement;
184
+ }
185
+ mount(parentDOMElement, siblingDOMElement, context) {
186
+ this.domElement = this.createDOMElement(context);
187
+ siblingDOMElement !== null ? (0, _dom.insertAfter)(this.domElement, parentDOMElement, siblingDOMElement) : (0, _dom.insertBeforehand)(this.domElement, parentDOMElement);
188
+ parentDOMElement = this.domElement; ///
189
+ siblingDOMElement = null;
190
+ this.childNodes.forEach((childNode)=>{
191
+ siblingDOMElement = childNode.mount(parentDOMElement, siblingDOMElement, context);
192
+ });
193
+ siblingDOMElement = this.domElement; ///
194
+ return siblingDOMElement;
195
+ }
196
+ unmount(parentDOMElement) {
555
197
  {
556
- key: "fromChildHTMLNodes",
557
- value: function fromChildHTMLNodes(Class, childHTMLNodes) {
558
- for(var _len = arguments.length, remainingArguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
559
- remainingArguments[_key - 2] = arguments[_key];
560
- }
561
- var _Node;
562
- if (childHTMLNodes === undefined) {
563
- childHTMLNodes = Class; ///
564
- Class = HTMLNode; ///
565
- }
566
- var childNodes = childHTMLNodes, domElement = null, htmlNode = (_Node = _occamdom.Node).fromChildNodes.apply(_Node, [
567
- Class,
568
- childNodes,
569
- domElement
570
- ].concat(_to_consumable_array(remainingArguments)));
571
- return htmlNode;
572
- }
198
+ const parentDOMElement = this.domElement; ///
199
+ this.childNodes.forEach((childNode)=>{
200
+ childNode.unmount(parentDOMElement);
201
+ });
202
+ }
203
+ (0, _dom.remove)(this.domElement, parentDOMElement);
204
+ this.domElement = null;
205
+ }
206
+ asHTML(indent, context) {
207
+ if (context === undefined) {
208
+ context = indent; ///
209
+ indent = _constants.EMPTY_STRING;
210
+ }
211
+ let html;
212
+ indent = this.adjustIndent(indent);
213
+ const className = this.className(context), attributeName = this.attributeName(context), childNodesHTML = this.childNodesAsHTML(indent, context);
214
+ if (childNodesHTML !== _constants.EMPTY_STRING || className !== null || attributeName !== null) {
215
+ const startingTag = this.startingTag(context), closingTag = this.closingTag(context);
216
+ html = indent === null ? `${startingTag}${childNodesHTML}${closingTag}` : `${indent}${startingTag}
217
+ ${childNodesHTML}${indent}${closingTag}
218
+ `;
219
+ } else {
220
+ const selfClosingTag = this.selfClosingTag(context);
221
+ html = indent === null ? `${selfClosingTag}` : `${indent}${selfClosingTag}
222
+ `;
223
+ }
224
+ return html;
225
+ }
226
+ asPlainText(context) {
227
+ const childNodesPlainText = this.childNodesAsPlainText(context), plainText = childNodesPlainText; ///
228
+ return plainText;
229
+ }
230
+ childNodesAsHTML(indent, context) {
231
+ const childNodesHTML = this.reduceChildNode((childNodesHTML, childNode)=>{
232
+ const childNodeHTML = childNode.asHTML(indent, context);
233
+ childNodesHTML = `${childNodesHTML}${childNodeHTML}`;
234
+ return childNodesHTML;
235
+ }, _constants.EMPTY_STRING);
236
+ return childNodesHTML;
237
+ }
238
+ childNodesAsPlainText(context) {
239
+ const childNodesPlainText = this.reduceChildNode((childNodesPlainText, childNode)=>{
240
+ const childNodePlainText = childNode.asPlainText(context);
241
+ childNodesPlainText = `${childNodesPlainText}
242
+ ${childNodePlainText}`;
243
+ return childNodesPlainText;
244
+ }, _constants.EMPTY_STRING);
245
+ return childNodesPlainText;
246
+ }
247
+ static fromNothing(Class, ...remainingArguments) {
248
+ if (Class === undefined) {
249
+ Class = HTMLNode; ///
573
250
  }
574
- ]);
575
- return HTMLNode;
576
- }(_wrap_native_super(_occamdom.Node));
251
+ const domElement = null, htmlNode = _occamdom.Node.fromNothing(Class, domElement, ...remainingArguments);
252
+ return htmlNode;
253
+ }
254
+ static fromOuterNode(Class, outerNode, ...remainingArguments) {
255
+ if (outerNode === undefined) {
256
+ outerNode = Class; ///
257
+ Class = HTMLNode; ///
258
+ }
259
+ const domElement = null, htmlNode = _occamdom.Node.fromOuterNode(Class, outerNode, domElement, ...remainingArguments);
260
+ return htmlNode;
261
+ }
262
+ static fromDOMElement(Class, domElement, ...remainingArguments) {
263
+ if (domElement === undefined) {
264
+ domElement = Class; ///
265
+ Class = HTMLNode; ///
266
+ }
267
+ const htmlNode = _occamdom.Node.fromNothing(Class, domElement, ...remainingArguments);
268
+ return htmlNode;
269
+ }
270
+ static fromChildHTMLNodes(Class, childHTMLNodes, ...remainingArguments) {
271
+ if (childHTMLNodes === undefined) {
272
+ childHTMLNodes = Class; ///
273
+ Class = HTMLNode; ///
274
+ }
275
+ const childNodes = childHTMLNodes, domElement = null, htmlNode = _occamdom.Node.fromChildNodes(Class, childNodes, domElement, ...remainingArguments);
276
+ return htmlNode;
277
+ }
278
+ }
577
279
  Object.assign(HTMLNode.prototype, _node.default);
578
- var _default = HTMLNode;
280
+ const _default = HTMLNode;
579
281
 
580
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2h0bWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBub2RlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvbm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIERPVUJMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZSwgaW5zZXJ0QWZ0ZXIsIGluc2VydEJlZm9yZWhhbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RvbVwiO1xuXG5jbGFzcyBIVE1MTm9kZSBleHRlbmRzIE5vZGUge1xuICBjb25zdHJ1Y3RvcihvdXRlck5vZGUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIGRvbUVsZW1lbnQpIHtcbiAgICBzdXBlcihvdXRlck5vZGUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIHNldERPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XG4gIH1cblxuICByZXNldERPTUVsZW1lbnQoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IG1hcmtkb3duTm9kZSA9IHRoaXMuZ2V0TWFya2Rvd25Ob2RlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSBtYXJrZG93bk5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0TWFya2Rvd25Ob2RlKCkge1xuICAgIGNvbnN0IG91dGVyTm9kZSA9IHRoaXMuZ2V0T3V0ZXJOb2RlKCksXG4gICAgICAgICAgbWFya2Rvd25Ob2RlID0gb3V0ZXJOb2RlOyAvLy9cblxuICAgIHJldHVybiBtYXJrZG93bk5vZGU7XG4gIH1cblxuICBnZXRQYXJlbnRIVE1MTm9kZSgpIHtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5nZXRQYXJlbnROb2RlKCksXG4gICAgICAgICAgcGFyZW50SFRNTE5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyZW50SFRNTE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZEhUTUxOb2RlcygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGRIVE1MTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICByZXR1cm4gY2hpbGRIVE1MTm9kZXM7XG4gIH1cblxuICBnZXRBbmNlc3RvckhUTUxOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gdGhpcy5nZXRBbmNlc3Rvck5vZGVzKCksXG4gICAgICAgICAgYW5jZXN0b3JIVE1MTm9kZXMgPSBhbmNlc3Rvck5vZGVzOyAgLy8vXG5cbiAgICByZXR1cm4gYW5jZXN0b3JIVE1MTm9kZXM7XG4gIH1cblxuICByZWR1Y2VDaGlsZEhUTUxOb2RlKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHsgcmV0dXJuIHRoaXMucmVkdWNlQ2hpbGROb2RlKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpOyB9XG5cbiAgc29tZUFuY2VzdG9ySFRNTE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuc29tZUFuY2VzdG9yTm9kZShjYWxsYmFjayk7IH1cblxuICBzb21lQ2hpbGRIVE1MTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5zb21lQ2hpbGROb2RlKGNhbGxiYWNrKTsgfVxuXG4gIHJldHJpZXZlSFRNTE5vZGUoY2FsbGJhY2spIHtcbiAgICBsZXQgaHRtbE5vZGUgPSBudWxsO1xuXG4gICAgaWYgKGh0bWxOb2RlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBjaGlsZEhUTUxOb2RlcyA9IHRoaXMuZ2V0Q2hpbGRIVE1MTm9kZXMoKTtcblxuICAgICAgY2hpbGRIVE1MTm9kZXMuc29tZSgoY2hpbGRIVE1MTm9kZSkgPT4ge1xuICAgICAgICBodG1sTm9kZSA9IGNoaWxkSFRNTE5vZGUucmV0cmlldmVIVE1MTm9kZShjYWxsYmFjayk7XG5cbiAgICAgICAgaWYgKGh0bWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChodG1sTm9kZSA9PT0gbnVsbCkge1xuICAgICAgaHRtbE5vZGUgPSB0aGlzO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxsYmFjayhodG1sTm9kZSk7XG5cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGh0bWxOb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbE5vZGU7XG4gIH1cblxuICByZW1vdmVDaGlsZEhUTUxOb2RlcyhyZW1vdmVkQ2hpbGRIVE1MTm9kZXMgPSBudWxsKSB7XG4gICAgbGV0IGNoaWxkSFRNTE5vZGVzO1xuXG4gICAgY2hpbGRIVE1MTm9kZXMgPSB0aGlzLmdldENoaWxkSFRNTE5vZGVzKCk7XG5cbiAgICBpZiAocmVtb3ZlZENoaWxkSFRNTE5vZGVzICE9PSBudWxsKSB7XG4gICAgICBjaGlsZEhUTUxOb2RlcyA9IGNoaWxkSFRNTE5vZGVzLmZpbHRlcigoY2hpbGRIVE1MTm9kZSkgPT4geyAvLy9cbiAgICAgICAgY29uc3QgbWFya2Rvd25Ob2RlID0gY2hpbGRIVE1MTm9kZS5nZXRNYXJrZG93bk5vZGUoKSxcbiAgICAgICAgICAgICAgaW5kZXggPSByZW1vdmVkQ2hpbGRIVE1MTm9kZXMuZmluZEluZGV4KChyZW1vdmVkQ2hpbGRIVE1MTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtkb3duTm9kZU1hdGNoZXMgPSByZW1vdmVkQ2hpbGRIVE1MTm9kZS5tYXRjaE1hcmtkb3duTm9kZShtYXJrZG93bk5vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hcmtkb3duTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcmVtb3ZlZENoaWxkTm9kZXMgPSBjaGlsZEhUTUxOb2RlczsgIC8vL1xuXG4gICAgcmVtb3ZlZENoaWxkTm9kZXMgPSB0aGlzLnJlbW92ZUNoaWxkTm9kZXMocmVtb3ZlZENoaWxkTm9kZXMpO1xuXG4gICAgcmVtb3ZlZENoaWxkSFRNTE5vZGVzID0gcmVtb3ZlZENoaWxkTm9kZXM7ICAvLy9cblxuICAgIHJldHVybiByZW1vdmVkQ2hpbGRIVE1MTm9kZXM7XG4gIH1cblxuICBtYXRjaE1hcmtkb3duTm9kZShtYXJrZG93bk5vZGUpIHtcbiAgICBjb25zdCBvdXRlck5vZGUgPSBtYXJrZG93bk5vZGUsIC8vL1xuICAgICAgICAgIG91dGVyTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoT3V0ZXJOb2RlKG91dGVyTm9kZSksXG4gICAgICAgICAgbWFya2Rvd25Ob2RlTWF0Y2hlcyA9IG91dGVyTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIG1hcmtkb3duTm9kZU1hdGNoZXM7XG4gIH1cblxuICBhZGRDaGlsZEhUTUxOb2RlcyhhZGRlZENoaWxkSFRNTE5vZGVzLCBzdGFydEhUTkxJbmRleCkge1xuICAgIGNvbnN0IGFkZGVkQ2hpbGROb2RlcyA9IGFkZGVkQ2hpbGRIVE1MTm9kZXMsICAvLy9cbiAgICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRIVE5MSW5kZXg7ICAvLy9cblxuICAgIHRoaXMuYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIHN0YXJ0SW5kZXgpO1xuICB9XG5cbiAgYWRqdXN0SW5kZW50KGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgIT09IG51bGwpIHtcbiAgICAgIGluZGVudCA9IGAke0RPVUJMRV9TUEFDRX0ke2luZGVudH1gO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRlbnQ7XG4gIH1cblxuICBsaW5lcyhjb250ZXh0KSB7XG4gICAgbGV0IGxpbmVzO1xuXG4gICAgKHsgbGluZXMgPSBudWxsIH0gPSB0aGlzLmNvbnN0cnVjdG9yKTtcblxuICAgIGlmIChsaW5lcyA9PT0gbnVsbCkge1xuICAgICAgbGluZXMgPSB0aGlzLnJlZHVjZUNoaWxkTm9kZSgobGluZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVMaW5lcyA9IGNoaWxkTm9kZS5saW5lcyhjb250ZXh0KTtcblxuICAgICAgICBsaW5lcyArPSBjaGlsZE5vZGVMaW5lcztcblxuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICB0YWdOYW1lKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHRhZ05hbWUgfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICByZXR1cm4gdGFnTmFtZTtcbiAgfVxuXG4gIGRlcHRoKCkge1xuICAgIGNvbnN0IHsgZGVwdGggPSBudWxsIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgY2xhc3NOYW1lKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBjbG9zaW5nVGFnKGNvbnRleHQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGNsb3NpbmdUYWcgPSBgPC8ke3RhZ05hbWV9PmA7XG5cbiAgICByZXR1cm4gY2xvc2luZ1RhZztcbiAgfVxuXG4gIHN0YXJ0aW5nVGFnKGNvbnRleHQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmF0dHJpYnV0ZU5hbWUoY29udGV4dCksXG4gICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlKGNvbnRleHQpLFxuICAgICAgICAgIGNsYXNzSFRNTCA9IChjbGFzc05hbWUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBhdHRyaWJ1dGVIVE1MID0gKChhdHRyaWJ1dGVOYW1lICE9PSBudWxsKSAmJiAoYXR0cmlidXRlVmFsdWUgIT09IG51bGwpKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgICR7YXR0cmlidXRlTmFtZX09XCIke2F0dHJpYnV0ZVZhbHVlfVwiYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RhcnRpbmdUYWcgPSBgPCR7dGFnTmFtZX0ke2NsYXNzSFRNTH0ke2F0dHJpYnV0ZUhUTUx9PmA7XG5cbiAgICByZXR1cm4gc3RhcnRpbmdUYWc7XG4gIH1cblxuICBzZWxmQ2xvc2luZ1RhZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IHRoaXMudGFnTmFtZShjb250ZXh0KSxcbiAgICAgICAgICBzZWxmQ2xvc2luZ1RhZyA9IGA8JHt0YWdOYW1lfS8+YDtcblxuICAgIHJldHVybiBzZWxmQ2xvc2luZ1RhZztcbiAgfVxuXG4gIGF0dHJpYnV0ZU5hbWUoY29udGV4dCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7XG4gIH1cblxuICBhdHRyaWJ1dGVWYWx1ZShjb250ZXh0KSB7XG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgY3JlYXRlRE9NRWxlbWVudChjb250ZXh0KSB7XG4gICAgbGV0IGRvbUVsZW1lbnQ7XG5cbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lKGNvbnRleHQpO1xuXG4gICAgZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZShjb250ZXh0KSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5hdHRyaWJ1dGVOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5hdHRyaWJ1dGVWYWx1ZShjb250ZXh0KTtcblxuICAgIGlmIChjbGFzc05hbWUgIT09IG51bGwpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgoYXR0cmlidXRlTmFtZSAhPT0gbnVsbCkgJiYgKGF0dHJpYnV0ZVZhbHVlICE9PSBudWxsKSkge1xuICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBkb21FbGVtZW50O1xuICB9XG5cbiAgbW91bnQocGFyZW50RE9NRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQsIGNvbnRleHQpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB0aGlzLmNyZWF0ZURPTUVsZW1lbnQoY29udGV4dCk7XG5cbiAgICAoc2libGluZ0RPTUVsZW1lbnQgIT09IG51bGwpID9cbiAgICAgIGluc2VydEFmdGVyKHRoaXMuZG9tRWxlbWVudCwgcGFyZW50RE9NRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpIDpcbiAgICAgICAgaW5zZXJ0QmVmb3JlaGFuZCh0aGlzLmRvbUVsZW1lbnQsIHBhcmVudERPTUVsZW1lbnQpO1xuXG4gICAgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBzaWJsaW5nRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IGNoaWxkTm9kZS5tb3VudChwYXJlbnRET01FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudCwgY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHNpYmxpbmdET01FbGVtZW50O1xuICB9XG5cbiAgdW5tb3VudChwYXJlbnRET01FbGVtZW50KSB7XG4gICAge1xuICAgICAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICAgIHRoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgY2hpbGROb2RlLnVubW91bnQocGFyZW50RE9NRWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmUodGhpcy5kb21FbGVtZW50LCBwYXJlbnRET01FbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudCA9IG51bGw7XG4gIH1cblxuICBhc0hUTUwoaW5kZW50LCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IGluZGVudDsgLy8vXG5cbiAgICAgIGluZGVudCA9IEVNUFRZX1NUUklORztcbiAgICB9XG5cbiAgICBsZXQgaHRtbDtcblxuICAgIGluZGVudCA9IHRoaXMuYWRqdXN0SW5kZW50KGluZGVudCk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZShjb250ZXh0KSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5hdHRyaWJ1dGVOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGNoaWxkTm9kZXNIVE1MID0gdGhpcy5jaGlsZE5vZGVzQXNIVE1MKGluZGVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoKGNoaWxkTm9kZXNIVE1MICE9PSBFTVBUWV9TVFJJTkcpIHx8IChjbGFzc05hbWUgIT09IG51bGwpIHx8IChhdHRyaWJ1dGVOYW1lICE9PSBudWxsKSkge1xuICAgICAgY29uc3Qgc3RhcnRpbmdUYWcgPSB0aGlzLnN0YXJ0aW5nVGFnKGNvbnRleHQpLFxuICAgICAgICAgICAgY2xvc2luZ1RhZyA9IHRoaXMuY2xvc2luZ1RhZyhjb250ZXh0KTtcblxuICAgICAgaHRtbCA9IChpbmRlbnQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgIGAke3N0YXJ0aW5nVGFnfSR7Y2hpbGROb2Rlc0hUTUx9JHtjbG9zaW5nVGFnfWAgOlxuICAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHtzdGFydGluZ1RhZ31cbiR7Y2hpbGROb2Rlc0hUTUx9JHtpbmRlbnR9JHtjbG9zaW5nVGFnfVxuYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZkNsb3NpbmdUYWcgPSB0aGlzLnNlbGZDbG9zaW5nVGFnKGNvbnRleHQpO1xuXG4gICAgICBodG1sID0gKGluZGVudCA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgYCR7c2VsZkNsb3NpbmdUYWd9YCA6XG4gICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3NlbGZDbG9zaW5nVGFnfVxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGFzUGxhaW5UZXh0KGNvbnRleHQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzUGxhaW5UZXh0ID0gdGhpcy5jaGlsZE5vZGVzQXNQbGFpblRleHQoY29udGV4dCksXG4gICAgICAgICAgcGxhaW5UZXh0ID0gY2hpbGROb2Rlc1BsYWluVGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIHBsYWluVGV4dDtcbiAgfVxuXG4gIGNoaWxkTm9kZXNBc0hUTUwoaW5kZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3QgY2hpbGROb2Rlc0hUTUwgPSB0aGlzLnJlZHVjZUNoaWxkTm9kZSgoY2hpbGROb2Rlc0hUTUwsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3QgY2hpbGROb2RlSFRNTCA9IGNoaWxkTm9kZS5hc0hUTUwoaW5kZW50LCBjb250ZXh0KTtcblxuICAgICAgY2hpbGROb2Rlc0hUTUwgPSBgJHtjaGlsZE5vZGVzSFRNTH0ke2NoaWxkTm9kZUhUTUx9YDtcblxuICAgICAgcmV0dXJuIGNoaWxkTm9kZXNIVE1MO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc0hUTUw7XG4gIH1cblxuICBjaGlsZE5vZGVzQXNQbGFpblRleHQoY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNQbGFpblRleHQgPSB0aGlzLnJlZHVjZUNoaWxkTm9kZSgoY2hpbGROb2Rlc1BsYWluVGV4dCwgY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVQbGFpblRleHQgPSBjaGlsZE5vZGUuYXNQbGFpblRleHQoY29udGV4dCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQbGFpblRleHQgPSBgJHtjaGlsZE5vZGVzUGxhaW5UZXh0fVxuJHtjaGlsZE5vZGVQbGFpblRleHR9YDtcblxuICAgICAgcmV0dXJuIGNoaWxkTm9kZXNQbGFpblRleHQ7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjaGlsZE5vZGVzUGxhaW5UZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgQ2xhc3MgPSBIVE1MTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IG51bGwsXG4gICAgICAgICAgaHRtbE5vZGUgPSBOb2RlLmZyb21Ob3RoaW5nKENsYXNzLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGh0bWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21PdXRlck5vZGUoQ2xhc3MsIG91dGVyTm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKG91dGVyTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRlck5vZGUgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IEhUTUxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBkb21FbGVtZW50ID0gbnVsbCxcbiAgICAgICAgICBodG1sTm9kZSA9IE5vZGUuZnJvbU91dGVyTm9kZShDbGFzcywgb3V0ZXJOb2RlLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGh0bWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21ET01FbGVtZW50KENsYXNzLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZG9tRWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb21FbGVtZW50ID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IEhUTUxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBodG1sTm9kZSA9IE5vZGUuZnJvbU5vdGhpbmcoQ2xhc3MsIGRvbUVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gaHRtbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNoaWxkSFRNTE5vZGVzKENsYXNzLCBjaGlsZEhUTUxOb2RlcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNoaWxkSFRNTE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkSFRNTE5vZGVzID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBIVE1MTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROb2RlcyA9IGNoaWxkSFRNTE5vZGVzLCAgLy8vXG4gICAgICAgICAgZG9tRWxlbWVudCA9IG51bGwsXG4gICAgICAgICAgaHRtbE5vZGUgPSBOb2RlLmZyb21DaGlsZE5vZGVzKENsYXNzLCBjaGlsZE5vZGVzLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGh0bWxOb2RlO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oSFRNTE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgSFRNTE5vZGU7XG4iXSwibmFtZXMiOlsiSFRNTE5vZGUiLCJvdXRlck5vZGUiLCJwYXJlbnROb2RlIiwiY2hpbGROb2RlcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50Iiwic2V0RE9NRWxlbWVudCIsInJlc2V0RE9NRWxlbWVudCIsImdldFJ1bGVOYW1lIiwibWFya2Rvd25Ob2RlIiwiZ2V0TWFya2Rvd25Ob2RlIiwicnVsZU5hbWUiLCJpc1Rlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsImlzTm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlIiwiZ2V0T3V0ZXJOb2RlIiwiZ2V0UGFyZW50SFRNTE5vZGUiLCJnZXRQYXJlbnROb2RlIiwicGFyZW50SFRNTE5vZGUiLCJnZXRDaGlsZEhUTUxOb2RlcyIsImdldENoaWxkTm9kZXMiLCJjaGlsZEhUTUxOb2RlcyIsImdldEFuY2VzdG9ySFRNTE5vZGVzIiwiYW5jZXN0b3JOb2RlcyIsImdldEFuY2VzdG9yTm9kZXMiLCJhbmNlc3RvckhUTUxOb2RlcyIsInJlZHVjZUNoaWxkSFRNTE5vZGUiLCJjYWxsYmFjayIsImluaXRpYWxWYWx1ZSIsInJlZHVjZUNoaWxkTm9kZSIsInNvbWVBbmNlc3RvckhUTUxOb2RlIiwic29tZUFuY2VzdG9yTm9kZSIsInNvbWVDaGlsZEhUTUxOb2RlIiwic29tZUNoaWxkTm9kZSIsInJldHJpZXZlSFRNTE5vZGUiLCJodG1sTm9kZSIsInNvbWUiLCJjaGlsZEhUTUxOb2RlIiwicmVzdWx0IiwicmVtb3ZlQ2hpbGRIVE1MTm9kZXMiLCJyZW1vdmVkQ2hpbGRIVE1MTm9kZXMiLCJmaWx0ZXIiLCJpbmRleCIsImZpbmRJbmRleCIsInJlbW92ZWRDaGlsZEhUTUxOb2RlIiwibWFya2Rvd25Ob2RlTWF0Y2hlcyIsIm1hdGNoTWFya2Rvd25Ob2RlIiwicmVtb3ZlZENoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGVzIiwib3V0ZXJOb2RlTWF0Y2hlcyIsIm1hdGNoT3V0ZXJOb2RlIiwiYWRkQ2hpbGRIVE1MTm9kZXMiLCJhZGRlZENoaWxkSFRNTE5vZGVzIiwic3RhcnRIVE5MSW5kZXgiLCJhZGRlZENoaWxkTm9kZXMiLCJzdGFydEluZGV4IiwiYWRkQ2hpbGROb2RlcyIsImFkanVzdEluZGVudCIsImluZGVudCIsIkRPVUJMRV9TUEFDRSIsImxpbmVzIiwiY29udGV4dCIsImNoaWxkTm9kZSIsImNoaWxkTm9kZUxpbmVzIiwidGFnTmFtZSIsImRlcHRoIiwiY2xhc3NOYW1lIiwiY2xvc2luZ1RhZyIsInN0YXJ0aW5nVGFnIiwiYXR0cmlidXRlTmFtZSIsImF0dHJpYnV0ZVZhbHVlIiwiY2xhc3NIVE1MIiwiRU1QVFlfU1RSSU5HIiwiYXR0cmlidXRlSFRNTCIsInNlbGZDbG9zaW5nVGFnIiwiY3JlYXRlRE9NRWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIk9iamVjdCIsImFzc2lnbiIsInNldEF0dHJpYnV0ZSIsIm1vdW50IiwicGFyZW50RE9NRWxlbWVudCIsInNpYmxpbmdET01FbGVtZW50IiwiaW5zZXJ0QWZ0ZXIiLCJpbnNlcnRCZWZvcmVoYW5kIiwiZm9yRWFjaCIsInVubW91bnQiLCJyZW1vdmUiLCJhc0hUTUwiLCJ1bmRlZmluZWQiLCJodG1sIiwiY2hpbGROb2Rlc0hUTUwiLCJjaGlsZE5vZGVzQXNIVE1MIiwiYXNQbGFpblRleHQiLCJjaGlsZE5vZGVzUGxhaW5UZXh0IiwiY2hpbGROb2Rlc0FzUGxhaW5UZXh0IiwicGxhaW5UZXh0IiwiY2hpbGROb2RlSFRNTCIsImNoaWxkTm9kZVBsYWluVGV4dCIsImZyb21Ob3RoaW5nIiwiQ2xhc3MiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJOb2RlIiwiZnJvbU91dGVyTm9kZSIsImZyb21ET01FbGVtZW50IiwiZnJvbUNoaWxkSFRNTE5vZGVzIiwiZnJvbUNoaWxkTm9kZXMiLCJwcm90b3R5cGUiLCJub2RlTWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFvYUE7OztlQUFBOzs7d0JBbGFxQjsyREFFRTt5QkFFb0I7bUJBQ1c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0RCxJQUFBLEFBQU1BLHlCQUFOO2NBQU1BO2FBQUFBLFNBQ1FDLFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLFVBQVU7Z0NBRHJESjs7Z0JBRUYsa0JBRkVBO1lBRUlDO1lBQVdDO1lBQVlDOztRQUU3QixNQUFLQyxVQUFVLEdBQUdBOzs7a0JBSmhCSjs7WUFPSkssS0FBQUE7bUJBQUFBLFNBQUFB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
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL2h0bWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBub2RlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvbm9kZVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcsIERPVUJMRV9TUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlbW92ZSwgaW5zZXJ0QWZ0ZXIsIGluc2VydEJlZm9yZWhhbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2RvbVwiO1xuXG5jbGFzcyBIVE1MTm9kZSBleHRlbmRzIE5vZGUge1xuICBjb25zdHJ1Y3RvcihvdXRlck5vZGUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMsIGRvbUVsZW1lbnQpIHtcbiAgICBzdXBlcihvdXRlck5vZGUsIHBhcmVudE5vZGUsIGNoaWxkTm9kZXMpO1xuXG4gICAgdGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIHNldERPTUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XG4gIH1cblxuICByZXNldERPTUVsZW1lbnQoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIGNvbnN0IG1hcmtkb3duTm9kZSA9IHRoaXMuZ2V0TWFya2Rvd25Ob2RlKCksXG4gICAgICAgICAgcnVsZU5hbWUgPSBtYXJrZG93bk5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIHJldHVybiBydWxlTmFtZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0TWFya2Rvd25Ob2RlKCkge1xuICAgIGNvbnN0IG91dGVyTm9kZSA9IHRoaXMuZ2V0T3V0ZXJOb2RlKCksXG4gICAgICAgICAgbWFya2Rvd25Ob2RlID0gb3V0ZXJOb2RlOyAvLy9cblxuICAgIHJldHVybiBtYXJrZG93bk5vZGU7XG4gIH1cblxuICBnZXRQYXJlbnRIVE1MTm9kZSgpIHtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5nZXRQYXJlbnROb2RlKCksXG4gICAgICAgICAgcGFyZW50SFRNTE5vZGUgPSBwYXJlbnROb2RlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyZW50SFRNTE5vZGU7XG4gIH1cblxuICBnZXRDaGlsZEhUTUxOb2RlcygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGRIVE1MTm9kZXMgPSBjaGlsZE5vZGVzOyAgLy8vXG5cbiAgICByZXR1cm4gY2hpbGRIVE1MTm9kZXM7XG4gIH1cblxuICBnZXRBbmNlc3RvckhUTUxOb2RlcygpIHtcbiAgICBjb25zdCBhbmNlc3Rvck5vZGVzID0gdGhpcy5nZXRBbmNlc3Rvck5vZGVzKCksXG4gICAgICAgICAgYW5jZXN0b3JIVE1MTm9kZXMgPSBhbmNlc3Rvck5vZGVzOyAgLy8vXG5cbiAgICByZXR1cm4gYW5jZXN0b3JIVE1MTm9kZXM7XG4gIH1cblxuICByZWR1Y2VDaGlsZEhUTUxOb2RlKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHsgcmV0dXJuIHRoaXMucmVkdWNlQ2hpbGROb2RlKGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpOyB9XG5cbiAgc29tZUFuY2VzdG9ySFRNTE5vZGUoY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuc29tZUFuY2VzdG9yTm9kZShjYWxsYmFjayk7IH1cblxuICBzb21lQ2hpbGRIVE1MTm9kZShjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5zb21lQ2hpbGROb2RlKGNhbGxiYWNrKTsgfVxuXG4gIHJldHJpZXZlSFRNTE5vZGUoY2FsbGJhY2spIHtcbiAgICBsZXQgaHRtbE5vZGUgPSBudWxsO1xuXG4gICAgaWYgKGh0bWxOb2RlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBjaGlsZEhUTUxOb2RlcyA9IHRoaXMuZ2V0Q2hpbGRIVE1MTm9kZXMoKTtcblxuICAgICAgY2hpbGRIVE1MTm9kZXMuc29tZSgoY2hpbGRIVE1MTm9kZSkgPT4ge1xuICAgICAgICBodG1sTm9kZSA9IGNoaWxkSFRNTE5vZGUucmV0cmlldmVIVE1MTm9kZShjYWxsYmFjayk7XG5cbiAgICAgICAgaWYgKGh0bWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChodG1sTm9kZSA9PT0gbnVsbCkge1xuICAgICAgaHRtbE5vZGUgPSB0aGlzO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxsYmFjayhodG1sTm9kZSk7XG5cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGh0bWxOb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbE5vZGU7XG4gIH1cblxuICByZW1vdmVDaGlsZEhUTUxOb2RlcyhyZW1vdmVkQ2hpbGRIVE1MTm9kZXMgPSBudWxsKSB7XG4gICAgbGV0IGNoaWxkSFRNTE5vZGVzO1xuXG4gICAgY2hpbGRIVE1MTm9kZXMgPSB0aGlzLmdldENoaWxkSFRNTE5vZGVzKCk7XG5cbiAgICBpZiAocmVtb3ZlZENoaWxkSFRNTE5vZGVzICE9PSBudWxsKSB7XG4gICAgICBjaGlsZEhUTUxOb2RlcyA9IGNoaWxkSFRNTE5vZGVzLmZpbHRlcigoY2hpbGRIVE1MTm9kZSkgPT4geyAvLy9cbiAgICAgICAgY29uc3QgbWFya2Rvd25Ob2RlID0gY2hpbGRIVE1MTm9kZS5nZXRNYXJrZG93bk5vZGUoKSxcbiAgICAgICAgICAgICAgaW5kZXggPSByZW1vdmVkQ2hpbGRIVE1MTm9kZXMuZmluZEluZGV4KChyZW1vdmVkQ2hpbGRIVE1MTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtkb3duTm9kZU1hdGNoZXMgPSByZW1vdmVkQ2hpbGRIVE1MTm9kZS5tYXRjaE1hcmtkb3duTm9kZShtYXJrZG93bk5vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hcmtkb3duTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcmVtb3ZlZENoaWxkTm9kZXMgPSBjaGlsZEhUTUxOb2RlczsgIC8vL1xuXG4gICAgcmVtb3ZlZENoaWxkTm9kZXMgPSB0aGlzLnJlbW92ZUNoaWxkTm9kZXMocmVtb3ZlZENoaWxkTm9kZXMpO1xuXG4gICAgcmVtb3ZlZENoaWxkSFRNTE5vZGVzID0gcmVtb3ZlZENoaWxkTm9kZXM7ICAvLy9cblxuICAgIHJldHVybiByZW1vdmVkQ2hpbGRIVE1MTm9kZXM7XG4gIH1cblxuICBtYXRjaE1hcmtkb3duTm9kZShtYXJrZG93bk5vZGUpIHtcbiAgICBjb25zdCBvdXRlck5vZGUgPSBtYXJrZG93bk5vZGUsIC8vL1xuICAgICAgICAgIG91dGVyTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoT3V0ZXJOb2RlKG91dGVyTm9kZSksXG4gICAgICAgICAgbWFya2Rvd25Ob2RlTWF0Y2hlcyA9IG91dGVyTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIG1hcmtkb3duTm9kZU1hdGNoZXM7XG4gIH1cblxuICBhZGRDaGlsZEhUTUxOb2RlcyhhZGRlZENoaWxkSFRNTE5vZGVzLCBzdGFydEhUTkxJbmRleCkge1xuICAgIGNvbnN0IGFkZGVkQ2hpbGROb2RlcyA9IGFkZGVkQ2hpbGRIVE1MTm9kZXMsICAvLy9cbiAgICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRIVE5MSW5kZXg7ICAvLy9cblxuICAgIHRoaXMuYWRkQ2hpbGROb2RlcyhhZGRlZENoaWxkTm9kZXMsIHN0YXJ0SW5kZXgpO1xuICB9XG5cbiAgYWRqdXN0SW5kZW50KGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgIT09IG51bGwpIHtcbiAgICAgIGluZGVudCA9IGAke0RPVUJMRV9TUEFDRX0ke2luZGVudH1gO1xuICAgIH1cblxuICAgIHJldHVybiBpbmRlbnQ7XG4gIH1cblxuICBsaW5lcyhjb250ZXh0KSB7XG4gICAgbGV0IGxpbmVzO1xuXG4gICAgKHsgbGluZXMgPSBudWxsIH0gPSB0aGlzLmNvbnN0cnVjdG9yKTtcblxuICAgIGlmIChsaW5lcyA9PT0gbnVsbCkge1xuICAgICAgbGluZXMgPSB0aGlzLnJlZHVjZUNoaWxkTm9kZSgobGluZXMsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVMaW5lcyA9IGNoaWxkTm9kZS5saW5lcyhjb250ZXh0KTtcblxuICAgICAgICBsaW5lcyArPSBjaGlsZE5vZGVMaW5lcztcblxuICAgICAgICByZXR1cm4gbGluZXM7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICB0YWdOYW1lKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHRhZ05hbWUgfSA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICByZXR1cm4gdGFnTmFtZTtcbiAgfVxuXG4gIGRlcHRoKCkge1xuICAgIGNvbnN0IHsgZGVwdGggPSBudWxsIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgY2xhc3NOYW1lKGNvbnRleHQpIHtcbiAgICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBjbG9zaW5nVGFnKGNvbnRleHQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGNsb3NpbmdUYWcgPSBgPC8ke3RhZ05hbWV9PmA7XG5cbiAgICByZXR1cm4gY2xvc2luZ1RhZztcbiAgfVxuXG4gIHN0YXJ0aW5nVGFnKGNvbnRleHQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmF0dHJpYnV0ZU5hbWUoY29udGV4dCksXG4gICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlKGNvbnRleHQpLFxuICAgICAgICAgIGNsYXNzSFRNTCA9IChjbGFzc05hbWUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgICBhdHRyaWJ1dGVIVE1MID0gKChhdHRyaWJ1dGVOYW1lICE9PSBudWxsKSAmJiAoYXR0cmlidXRlVmFsdWUgIT09IG51bGwpKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgICR7YXR0cmlidXRlTmFtZX09XCIke2F0dHJpYnV0ZVZhbHVlfVwiYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RhcnRpbmdUYWcgPSBgPCR7dGFnTmFtZX0ke2NsYXNzSFRNTH0ke2F0dHJpYnV0ZUhUTUx9PmA7XG5cbiAgICByZXR1cm4gc3RhcnRpbmdUYWc7XG4gIH1cblxuICBzZWxmQ2xvc2luZ1RhZyhjb250ZXh0KSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IHRoaXMudGFnTmFtZShjb250ZXh0KSxcbiAgICAgICAgICBzZWxmQ2xvc2luZ1RhZyA9IGA8JHt0YWdOYW1lfS8+YDtcblxuICAgIHJldHVybiBzZWxmQ2xvc2luZ1RhZztcbiAgfVxuXG4gIGF0dHJpYnV0ZU5hbWUoY29udGV4dCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWU7XG4gIH1cblxuICBhdHRyaWJ1dGVWYWx1ZShjb250ZXh0KSB7XG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSBudWxsO1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG5cbiAgY3JlYXRlRE9NRWxlbWVudChjb250ZXh0KSB7XG4gICAgbGV0IGRvbUVsZW1lbnQ7XG5cbiAgICBjb25zdCB0YWdOYW1lID0gdGhpcy50YWdOYW1lKGNvbnRleHQpO1xuXG4gICAgZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZShjb250ZXh0KSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5hdHRyaWJ1dGVOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5hdHRyaWJ1dGVWYWx1ZShjb250ZXh0KTtcblxuICAgIGlmIChjbGFzc05hbWUgIT09IG51bGwpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xuICAgICAgICBjbGFzc05hbWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgoYXR0cmlidXRlTmFtZSAhPT0gbnVsbCkgJiYgKGF0dHJpYnV0ZVZhbHVlICE9PSBudWxsKSkge1xuICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBkb21FbGVtZW50O1xuICB9XG5cbiAgbW91bnQocGFyZW50RE9NRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQsIGNvbnRleHQpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB0aGlzLmNyZWF0ZURPTUVsZW1lbnQoY29udGV4dCk7XG5cbiAgICAoc2libGluZ0RPTUVsZW1lbnQgIT09IG51bGwpID9cbiAgICAgIGluc2VydEFmdGVyKHRoaXMuZG9tRWxlbWVudCwgcGFyZW50RE9NRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpIDpcbiAgICAgICAgaW5zZXJ0QmVmb3JlaGFuZCh0aGlzLmRvbUVsZW1lbnQsIHBhcmVudERPTUVsZW1lbnQpO1xuXG4gICAgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBzaWJsaW5nRE9NRWxlbWVudCA9IG51bGw7XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROb2RlKSA9PiB7XG4gICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IGNoaWxkTm9kZS5tb3VudChwYXJlbnRET01FbGVtZW50LCBzaWJsaW5nRE9NRWxlbWVudCwgY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHNpYmxpbmdET01FbGVtZW50O1xuICB9XG5cbiAgdW5tb3VudChwYXJlbnRET01FbGVtZW50KSB7XG4gICAge1xuICAgICAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICAgIHRoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgY2hpbGROb2RlLnVubW91bnQocGFyZW50RE9NRWxlbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmUodGhpcy5kb21FbGVtZW50LCBwYXJlbnRET01FbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudCA9IG51bGw7XG4gIH1cblxuICBhc0hUTUwoaW5kZW50LCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IGluZGVudDsgLy8vXG5cbiAgICAgIGluZGVudCA9IEVNUFRZX1NUUklORztcbiAgICB9XG5cbiAgICBsZXQgaHRtbDtcblxuICAgIGluZGVudCA9IHRoaXMuYWRqdXN0SW5kZW50KGluZGVudCk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZShjb250ZXh0KSxcbiAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5hdHRyaWJ1dGVOYW1lKGNvbnRleHQpLFxuICAgICAgICAgIGNoaWxkTm9kZXNIVE1MID0gdGhpcy5jaGlsZE5vZGVzQXNIVE1MKGluZGVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoKGNoaWxkTm9kZXNIVE1MICE9PSBFTVBUWV9TVFJJTkcpIHx8IChjbGFzc05hbWUgIT09IG51bGwpIHx8IChhdHRyaWJ1dGVOYW1lICE9PSBudWxsKSkge1xuICAgICAgY29uc3Qgc3RhcnRpbmdUYWcgPSB0aGlzLnN0YXJ0aW5nVGFnKGNvbnRleHQpLFxuICAgICAgICAgICAgY2xvc2luZ1RhZyA9IHRoaXMuY2xvc2luZ1RhZyhjb250ZXh0KTtcblxuICAgICAgaHRtbCA9IChpbmRlbnQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgIGAke3N0YXJ0aW5nVGFnfSR7Y2hpbGROb2Rlc0hUTUx9JHtjbG9zaW5nVGFnfWAgOlxuICAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHtzdGFydGluZ1RhZ31cbiR7Y2hpbGROb2Rlc0hUTUx9JHtpbmRlbnR9JHtjbG9zaW5nVGFnfVxuYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VsZkNsb3NpbmdUYWcgPSB0aGlzLnNlbGZDbG9zaW5nVGFnKGNvbnRleHQpO1xuXG4gICAgICBodG1sID0gKGluZGVudCA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgYCR7c2VsZkNsb3NpbmdUYWd9YCA6XG4gICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3NlbGZDbG9zaW5nVGFnfVxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGFzUGxhaW5UZXh0KGNvbnRleHQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzUGxhaW5UZXh0ID0gdGhpcy5jaGlsZE5vZGVzQXNQbGFpblRleHQoY29udGV4dCksXG4gICAgICAgICAgcGxhaW5UZXh0ID0gY2hpbGROb2Rlc1BsYWluVGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIHBsYWluVGV4dDtcbiAgfVxuXG4gIGNoaWxkTm9kZXNBc0hUTUwoaW5kZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3QgY2hpbGROb2Rlc0hUTUwgPSB0aGlzLnJlZHVjZUNoaWxkTm9kZSgoY2hpbGROb2Rlc0hUTUwsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgY29uc3QgY2hpbGROb2RlSFRNTCA9IGNoaWxkTm9kZS5hc0hUTUwoaW5kZW50LCBjb250ZXh0KTtcblxuICAgICAgY2hpbGROb2Rlc0hUTUwgPSBgJHtjaGlsZE5vZGVzSFRNTH0ke2NoaWxkTm9kZUhUTUx9YDtcblxuICAgICAgcmV0dXJuIGNoaWxkTm9kZXNIVE1MO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc0hUTUw7XG4gIH1cblxuICBjaGlsZE5vZGVzQXNQbGFpblRleHQoY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXNQbGFpblRleHQgPSB0aGlzLnJlZHVjZUNoaWxkTm9kZSgoY2hpbGROb2Rlc1BsYWluVGV4dCwgY2hpbGROb2RlKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZE5vZGVQbGFpblRleHQgPSBjaGlsZE5vZGUuYXNQbGFpblRleHQoY29udGV4dCk7XG5cbiAgICAgIGNoaWxkTm9kZXNQbGFpblRleHQgPSBgJHtjaGlsZE5vZGVzUGxhaW5UZXh0fVxuJHtjaGlsZE5vZGVQbGFpblRleHR9YDtcblxuICAgICAgcmV0dXJuIGNoaWxkTm9kZXNQbGFpblRleHQ7XG4gICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHJldHVybiBjaGlsZE5vZGVzUGxhaW5UZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgQ2xhc3MgPSBIVE1MTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IG51bGwsXG4gICAgICAgICAgaHRtbE5vZGUgPSBOb2RlLmZyb21Ob3RoaW5nKENsYXNzLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGh0bWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21PdXRlck5vZGUoQ2xhc3MsIG91dGVyTm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKG91dGVyTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRlck5vZGUgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IEhUTUxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBkb21FbGVtZW50ID0gbnVsbCxcbiAgICAgICAgICBodG1sTm9kZSA9IE5vZGUuZnJvbU91dGVyTm9kZShDbGFzcywgb3V0ZXJOb2RlLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGh0bWxOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21ET01FbGVtZW50KENsYXNzLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoZG9tRWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb21FbGVtZW50ID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IEhUTUxOb2RlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBodG1sTm9kZSA9IE5vZGUuZnJvbU5vdGhpbmcoQ2xhc3MsIGRvbUVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gaHRtbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNoaWxkSFRNTE5vZGVzKENsYXNzLCBjaGlsZEhUTUxOb2RlcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNoaWxkSFRNTE5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkSFRNTE5vZGVzID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBIVE1MTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROb2RlcyA9IGNoaWxkSFRNTE5vZGVzLCAgLy8vXG4gICAgICAgICAgZG9tRWxlbWVudCA9IG51bGwsXG4gICAgICAgICAgaHRtbE5vZGUgPSBOb2RlLmZyb21DaGlsZE5vZGVzKENsYXNzLCBjaGlsZE5vZGVzLCBkb21FbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIGh0bWxOb2RlO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oSFRNTE5vZGUucHJvdG90eXBlLCBub2RlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgSFRNTE5vZGU7XG4iXSwibmFtZXMiOlsiSFRNTE5vZGUiLCJOb2RlIiwib3V0ZXJOb2RlIiwicGFyZW50Tm9kZSIsImNoaWxkTm9kZXMiLCJkb21FbGVtZW50IiwiZ2V0RE9NRWxlbWVudCIsInNldERPTUVsZW1lbnQiLCJyZXNldERPTUVsZW1lbnQiLCJnZXRSdWxlTmFtZSIsIm1hcmtkb3duTm9kZSIsImdldE1hcmtkb3duTm9kZSIsInJ1bGVOYW1lIiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJpc05vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsImdldE91dGVyTm9kZSIsImdldFBhcmVudEhUTUxOb2RlIiwiZ2V0UGFyZW50Tm9kZSIsInBhcmVudEhUTUxOb2RlIiwiZ2V0Q2hpbGRIVE1MTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwiY2hpbGRIVE1MTm9kZXMiLCJnZXRBbmNlc3RvckhUTUxOb2RlcyIsImFuY2VzdG9yTm9kZXMiLCJnZXRBbmNlc3Rvck5vZGVzIiwiYW5jZXN0b3JIVE1MTm9kZXMiLCJyZWR1Y2VDaGlsZEhUTUxOb2RlIiwiY2FsbGJhY2siLCJpbml0aWFsVmFsdWUiLCJyZWR1Y2VDaGlsZE5vZGUiLCJzb21lQW5jZXN0b3JIVE1MTm9kZSIsInNvbWVBbmNlc3Rvck5vZGUiLCJzb21lQ2hpbGRIVE1MTm9kZSIsInNvbWVDaGlsZE5vZGUiLCJyZXRyaWV2ZUhUTUxOb2RlIiwiaHRtbE5vZGUiLCJzb21lIiwiY2hpbGRIVE1MTm9kZSIsInJlc3VsdCIsInJlbW92ZUNoaWxkSFRNTE5vZGVzIiwicmVtb3ZlZENoaWxkSFRNTE5vZGVzIiwiZmlsdGVyIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJyZW1vdmVkQ2hpbGRIVE1MTm9kZSIsIm1hcmtkb3duTm9kZU1hdGNoZXMiLCJtYXRjaE1hcmtkb3duTm9kZSIsInJlbW92ZWRDaGlsZE5vZGVzIiwicmVtb3ZlQ2hpbGROb2RlcyIsIm91dGVyTm9kZU1hdGNoZXMiLCJtYXRjaE91dGVyTm9kZSIsImFkZENoaWxkSFRNTE5vZGVzIiwiYWRkZWRDaGlsZEhUTUxOb2RlcyIsInN0YXJ0SFROTEluZGV4IiwiYWRkZWRDaGlsZE5vZGVzIiwic3RhcnRJbmRleCIsImFkZENoaWxkTm9kZXMiLCJhZGp1c3RJbmRlbnQiLCJpbmRlbnQiLCJET1VCTEVfU1BBQ0UiLCJsaW5lcyIsImNvbnRleHQiLCJjaGlsZE5vZGUiLCJjaGlsZE5vZGVMaW5lcyIsInRhZ05hbWUiLCJkZXB0aCIsImNsYXNzTmFtZSIsImNsb3NpbmdUYWciLCJzdGFydGluZ1RhZyIsImF0dHJpYnV0ZU5hbWUiLCJhdHRyaWJ1dGVWYWx1ZSIsImNsYXNzSFRNTCIsIkVNUFRZX1NUUklORyIsImF0dHJpYnV0ZUhUTUwiLCJzZWxmQ2xvc2luZ1RhZyIsImNyZWF0ZURPTUVsZW1lbnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRBdHRyaWJ1dGUiLCJtb3VudCIsInBhcmVudERPTUVsZW1lbnQiLCJzaWJsaW5nRE9NRWxlbWVudCIsImluc2VydEFmdGVyIiwiaW5zZXJ0QmVmb3JlaGFuZCIsImZvckVhY2giLCJ1bm1vdW50IiwicmVtb3ZlIiwiYXNIVE1MIiwidW5kZWZpbmVkIiwiaHRtbCIsImNoaWxkTm9kZXNIVE1MIiwiY2hpbGROb2Rlc0FzSFRNTCIsImFzUGxhaW5UZXh0IiwiY2hpbGROb2Rlc1BsYWluVGV4dCIsImNoaWxkTm9kZXNBc1BsYWluVGV4dCIsInBsYWluVGV4dCIsImNoaWxkTm9kZUhUTUwiLCJjaGlsZE5vZGVQbGFpblRleHQiLCJmcm9tTm90aGluZyIsIkNsYXNzIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZnJvbU91dGVyTm9kZSIsImZyb21ET01FbGVtZW50IiwiZnJvbUNoaWxkSFRNTE5vZGVzIiwiZnJvbUNoaWxkTm9kZXMiLCJwcm90b3R5cGUiLCJub2RlTWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFvYUE7OztlQUFBOzs7MEJBbGFxQjs2REFFRTsyQkFFb0I7cUJBQ1c7Ozs7OztBQUV0RCxNQUFNQSxpQkFBaUJDLGNBQUk7SUFDekIsWUFBWUMsU0FBUyxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFFO1FBQ3pELEtBQUssQ0FBQ0gsV0FBV0MsWUFBWUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRCxVQUFVO0lBQ3hCO0lBRUFFLGNBQWNGLFVBQVUsRUFBRTtRQUN4QixJQUFJLENBQUNBLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUcsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQ0gsVUFBVSxHQUFHO0lBQ3BCO0lBRUFJLGNBQWM7UUFDWixNQUFNQyxlQUFlLElBQUks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