data-structure-typed 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +1 -1
- package/dist/data-structures/binary-tree/aa-tree.js +1 -0
- package/dist/data-structures/binary-tree/aa-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/abstract-binary-tree.d.ts +24 -19
- package/dist/data-structures/binary-tree/abstract-binary-tree.js +41 -36
- package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/avl-tree.js +35 -27
- package/dist/data-structures/binary-tree/avl-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/b-tree.js +1 -0
- package/dist/data-structures/binary-tree/b-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/binary-indexed-tree.js +1 -0
- package/dist/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/binary-tree.js +1 -0
- package/dist/data-structures/binary-tree/binary-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/bst.d.ts +19 -8
- package/dist/data-structures/binary-tree/bst.js +101 -14
- package/dist/data-structures/binary-tree/bst.js.map +1 -0
- package/dist/data-structures/binary-tree/index.js +1 -0
- package/dist/data-structures/binary-tree/index.js.map +1 -0
- package/dist/data-structures/binary-tree/rb-tree.js +1 -0
- package/dist/data-structures/binary-tree/rb-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/segment-tree.js +1 -0
- package/dist/data-structures/binary-tree/segment-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/splay-tree.js +1 -0
- package/dist/data-structures/binary-tree/splay-tree.js.map +1 -0
- package/dist/data-structures/binary-tree/tree-multiset.d.ts +20 -23
- package/dist/data-structures/binary-tree/tree-multiset.js +27 -38
- package/dist/data-structures/binary-tree/tree-multiset.js.map +1 -0
- package/dist/data-structures/binary-tree/two-three-tree.js +1 -0
- package/dist/data-structures/binary-tree/two-three-tree.js.map +1 -0
- package/dist/data-structures/graph/abstract-graph.js +1 -0
- package/dist/data-structures/graph/abstract-graph.js.map +1 -0
- package/dist/data-structures/graph/directed-graph.js +1 -0
- package/dist/data-structures/graph/directed-graph.js.map +1 -0
- package/dist/data-structures/graph/index.js +1 -0
- package/dist/data-structures/graph/index.js.map +1 -0
- package/dist/data-structures/graph/map-graph.js +1 -0
- package/dist/data-structures/graph/map-graph.js.map +1 -0
- package/dist/data-structures/graph/undirected-graph.js +1 -0
- package/dist/data-structures/graph/undirected-graph.js.map +1 -0
- package/dist/data-structures/hash/coordinate-map.js +1 -0
- package/dist/data-structures/hash/coordinate-map.js.map +1 -0
- package/dist/data-structures/hash/coordinate-set.js +1 -0
- package/dist/data-structures/hash/coordinate-set.js.map +1 -0
- package/dist/data-structures/hash/hash-table.js +1 -0
- package/dist/data-structures/hash/hash-table.js.map +1 -0
- package/dist/data-structures/hash/index.js +1 -0
- package/dist/data-structures/hash/index.js.map +1 -0
- package/dist/data-structures/hash/pair.js +1 -0
- package/dist/data-structures/hash/pair.js.map +1 -0
- package/dist/data-structures/hash/tree-map.js +1 -0
- package/dist/data-structures/hash/tree-map.js.map +1 -0
- package/dist/data-structures/hash/tree-set.js +1 -0
- package/dist/data-structures/hash/tree-set.js.map +1 -0
- package/dist/data-structures/heap/heap.js +1 -0
- package/dist/data-structures/heap/heap.js.map +1 -0
- package/dist/data-structures/heap/index.js +1 -0
- package/dist/data-structures/heap/index.js.map +1 -0
- package/dist/data-structures/heap/max-heap.js +1 -0
- package/dist/data-structures/heap/max-heap.js.map +1 -0
- package/dist/data-structures/heap/min-heap.js +1 -0
- package/dist/data-structures/heap/min-heap.js.map +1 -0
- package/dist/data-structures/index.js +1 -0
- package/dist/data-structures/index.js.map +1 -0
- package/dist/data-structures/linked-list/doubly-linked-list.js +1 -0
- package/dist/data-structures/linked-list/doubly-linked-list.js.map +1 -0
- package/dist/data-structures/linked-list/index.js +1 -0
- package/dist/data-structures/linked-list/index.js.map +1 -0
- package/dist/data-structures/linked-list/singly-linked-list.js +1 -0
- package/dist/data-structures/linked-list/singly-linked-list.js.map +1 -0
- package/dist/data-structures/linked-list/skip-linked-list.js +1 -0
- package/dist/data-structures/linked-list/skip-linked-list.js.map +1 -0
- package/dist/data-structures/matrix/index.js +1 -0
- package/dist/data-structures/matrix/index.js.map +1 -0
- package/dist/data-structures/matrix/matrix.js +1 -0
- package/dist/data-structures/matrix/matrix.js.map +1 -0
- package/dist/data-structures/matrix/matrix2d.js +1 -0
- package/dist/data-structures/matrix/matrix2d.js.map +1 -0
- package/dist/data-structures/matrix/navigator.js +1 -0
- package/dist/data-structures/matrix/navigator.js.map +1 -0
- package/dist/data-structures/matrix/vector2d.js +1 -0
- package/dist/data-structures/matrix/vector2d.js.map +1 -0
- package/dist/data-structures/priority-queue/index.js +1 -0
- package/dist/data-structures/priority-queue/index.js.map +1 -0
- package/dist/data-structures/priority-queue/max-priority-queue.js +1 -0
- package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -0
- package/dist/data-structures/priority-queue/min-priority-queue.js +1 -0
- package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -0
- package/dist/data-structures/priority-queue/priority-queue.js +1 -0
- package/dist/data-structures/priority-queue/priority-queue.js.map +1 -0
- package/dist/data-structures/queue/deque.js +1 -0
- package/dist/data-structures/queue/deque.js.map +1 -0
- package/dist/data-structures/queue/index.js +1 -0
- package/dist/data-structures/queue/index.js.map +1 -0
- package/dist/data-structures/queue/queue.js +1 -0
- package/dist/data-structures/queue/queue.js.map +1 -0
- package/dist/data-structures/stack/index.js +1 -0
- package/dist/data-structures/stack/index.js.map +1 -0
- package/dist/data-structures/stack/stack.js +1 -0
- package/dist/data-structures/stack/stack.js.map +1 -0
- package/dist/data-structures/tree/index.js +1 -0
- package/dist/data-structures/tree/index.js.map +1 -0
- package/dist/data-structures/tree/tree.js +1 -0
- package/dist/data-structures/tree/tree.js.map +1 -0
- package/dist/data-structures/trie/index.js +1 -0
- package/dist/data-structures/trie/index.js.map +1 -0
- package/dist/data-structures/trie/trie.js +1 -0
- package/dist/data-structures/trie/trie.js.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/abstract-binary-tree.js +1 -0
- package/dist/interfaces/abstract-binary-tree.js.map +1 -0
- package/dist/interfaces/abstract-graph.js +1 -0
- package/dist/interfaces/abstract-graph.js.map +1 -0
- package/dist/interfaces/avl-tree.js +1 -0
- package/dist/interfaces/avl-tree.js.map +1 -0
- package/dist/interfaces/binary-tree.js +1 -0
- package/dist/interfaces/binary-tree.js.map +1 -0
- package/dist/interfaces/bst.js +1 -0
- package/dist/interfaces/bst.js.map +1 -0
- package/dist/interfaces/directed-graph.js +1 -0
- package/dist/interfaces/directed-graph.js.map +1 -0
- package/dist/interfaces/doubly-linked-list.js +1 -0
- package/dist/interfaces/doubly-linked-list.js.map +1 -0
- package/dist/interfaces/heap.js +1 -0
- package/dist/interfaces/heap.js.map +1 -0
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/navigator.js +1 -0
- package/dist/interfaces/navigator.js.map +1 -0
- package/dist/interfaces/priority-queue.js +1 -0
- package/dist/interfaces/priority-queue.js.map +1 -0
- package/dist/interfaces/rb-tree.js +1 -0
- package/dist/interfaces/rb-tree.js.map +1 -0
- package/dist/interfaces/segment-tree.js +1 -0
- package/dist/interfaces/segment-tree.js.map +1 -0
- package/dist/interfaces/singly-linked-list.js +1 -0
- package/dist/interfaces/singly-linked-list.js.map +1 -0
- package/dist/interfaces/tree-multiset.js +1 -0
- package/dist/interfaces/tree-multiset.js.map +1 -0
- package/dist/interfaces/undirected-graph.js +1 -0
- package/dist/interfaces/undirected-graph.js.map +1 -0
- package/dist/types/data-structures/abstract-binary-tree.js +1 -0
- package/dist/types/data-structures/abstract-binary-tree.js.map +1 -0
- package/dist/types/data-structures/abstract-graph.js +1 -0
- package/dist/types/data-structures/abstract-graph.js.map +1 -0
- package/dist/types/data-structures/avl-tree.js +1 -0
- package/dist/types/data-structures/avl-tree.js.map +1 -0
- package/dist/types/data-structures/binary-tree.js +1 -0
- package/dist/types/data-structures/binary-tree.js.map +1 -0
- package/dist/types/data-structures/bst.js +1 -0
- package/dist/types/data-structures/bst.js.map +1 -0
- package/dist/types/data-structures/directed-graph.js +1 -0
- package/dist/types/data-structures/directed-graph.js.map +1 -0
- package/dist/types/data-structures/doubly-linked-list.js +1 -0
- package/dist/types/data-structures/doubly-linked-list.js.map +1 -0
- package/dist/types/data-structures/heap.js +1 -0
- package/dist/types/data-structures/heap.js.map +1 -0
- package/dist/types/data-structures/index.js +1 -0
- package/dist/types/data-structures/index.js.map +1 -0
- package/dist/types/data-structures/map-graph.js +1 -0
- package/dist/types/data-structures/map-graph.js.map +1 -0
- package/dist/types/data-structures/navigator.js +1 -0
- package/dist/types/data-structures/navigator.js.map +1 -0
- package/dist/types/data-structures/priority-queue.js +1 -0
- package/dist/types/data-structures/priority-queue.js.map +1 -0
- package/dist/types/data-structures/rb-tree.js +1 -0
- package/dist/types/data-structures/rb-tree.js.map +1 -0
- package/dist/types/data-structures/segment-tree.js +1 -0
- package/dist/types/data-structures/segment-tree.js.map +1 -0
- package/dist/types/data-structures/singly-linked-list.js +1 -0
- package/dist/types/data-structures/singly-linked-list.js.map +1 -0
- package/dist/types/data-structures/tree-multiset.js +1 -0
- package/dist/types/data-structures/tree-multiset.js.map +1 -0
- package/dist/types/helpers.js +1 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils/index.js +1 -0
- package/dist/types/utils/index.js.map +1 -0
- package/dist/types/utils/utils.js +1 -0
- package/dist/types/utils/utils.js.map +1 -0
- package/dist/types/utils/validate-type.js +1 -0
- package/dist/types/utils/validate-type.js.map +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/utils.js +1 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +24 -45
|
@@ -250,36 +250,30 @@ class AbstractBinaryTree {
|
|
|
250
250
|
return inserted;
|
|
251
251
|
}
|
|
252
252
|
/**
|
|
253
|
-
* The `addMany` function
|
|
254
|
-
*
|
|
255
|
-
* @param {(BinaryTreeNodeId|N)[]} idsOrNodes - An array of BinaryTreeNodeId or
|
|
256
|
-
*
|
|
257
|
-
* @param {N['val'][]} [data] -
|
|
258
|
-
*
|
|
259
|
-
*
|
|
253
|
+
* The `addMany` function takes an array of binary tree node IDs or nodes, and optionally an array of corresponding data
|
|
254
|
+
* values, and adds them to the binary tree.
|
|
255
|
+
* @param {(BinaryTreeNodeId | null)[] | (N | null)[]} idsOrNodes - An array of BinaryTreeNodeId or BinaryTreeNode
|
|
256
|
+
* objects, or null values.
|
|
257
|
+
* @param {N['val'][]} [data] - The `data` parameter is an optional array of values (`N['val'][]`) that corresponds to
|
|
258
|
+
* the nodes or node IDs being added. It is used to set the value of each node being added. If `data` is not provided,
|
|
259
|
+
* the value of the nodes will be `undefined`.
|
|
260
|
+
* @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
|
|
260
261
|
*/
|
|
261
262
|
addMany(idsOrNodes, data) {
|
|
262
|
-
var _a;
|
|
263
263
|
// TODO not sure addMany not be run multi times
|
|
264
264
|
const inserted = [];
|
|
265
|
-
const map = new Map();
|
|
266
|
-
for (const idOrNode of idsOrNodes)
|
|
267
|
-
map.set(idOrNode, ((_a = map.get(idOrNode)) !== null && _a !== void 0 ? _a : 0) + 1);
|
|
268
265
|
for (let i = 0; i < idsOrNodes.length; i++) {
|
|
269
266
|
const idOrNode = idsOrNodes[i];
|
|
270
|
-
if (
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
continue;
|
|
274
|
-
}
|
|
275
|
-
if (idOrNode === null) {
|
|
276
|
-
inserted.push(this.add(null));
|
|
277
|
-
continue;
|
|
278
|
-
}
|
|
279
|
-
const val = data === null || data === void 0 ? void 0 : data[i];
|
|
280
|
-
inserted.push(this.add(idOrNode, val));
|
|
281
|
-
map.delete(idOrNode);
|
|
267
|
+
if (idOrNode instanceof AbstractBinaryTreeNode) {
|
|
268
|
+
inserted.push(this.add(idOrNode.id, idOrNode.val));
|
|
269
|
+
continue;
|
|
282
270
|
}
|
|
271
|
+
if (idOrNode === null) {
|
|
272
|
+
inserted.push(this.add(null));
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
const val = data === null || data === void 0 ? void 0 : data[i];
|
|
276
|
+
inserted.push(this.add(idOrNode, val));
|
|
283
277
|
}
|
|
284
278
|
return inserted;
|
|
285
279
|
}
|
|
@@ -297,16 +291,20 @@ class AbstractBinaryTree {
|
|
|
297
291
|
return idsOrNodes.length === this.addMany(idsOrNodes, data).length;
|
|
298
292
|
}
|
|
299
293
|
/**
|
|
300
|
-
* The `remove` function removes a node from a binary search tree and returns the deleted node along with the parent
|
|
301
|
-
*
|
|
294
|
+
* The `remove` function removes a node from a binary search tree and returns the deleted node along with the parent node
|
|
295
|
+
* that needs to be balanced.
|
|
302
296
|
* @param {N | BinaryTreeNodeId} nodeOrId - The `nodeOrId` parameter can be either a node object (`N`) or a binary tree
|
|
303
297
|
* node ID (`BinaryTreeNodeId`).
|
|
304
|
-
* @param {boolean} [
|
|
305
|
-
* whether to
|
|
306
|
-
*
|
|
298
|
+
* @param {boolean} [isUpdateAllLeftSum] - The `isUpdateAllLeftSum` parameter is an optional boolean parameter that
|
|
299
|
+
* determines whether to update the left sum of all nodes in the binary tree after removing a node. If
|
|
300
|
+
* `isUpdateAllLeftSum` is set to `true`, the left sum of all nodes will be updated. If it
|
|
307
301
|
* @returns The function `remove` returns an array of `BinaryTreeDeletedResult<N>` objects.
|
|
308
302
|
*/
|
|
309
|
-
remove(nodeOrId,
|
|
303
|
+
remove(nodeOrId, isUpdateAllLeftSum) {
|
|
304
|
+
isUpdateAllLeftSum = isUpdateAllLeftSum === undefined ? true : isUpdateAllLeftSum;
|
|
305
|
+
// TODO may implement update all left sum
|
|
306
|
+
if (isUpdateAllLeftSum) {
|
|
307
|
+
}
|
|
310
308
|
const bstDeletedResult = [];
|
|
311
309
|
if (!this.root)
|
|
312
310
|
return bstDeletedResult;
|
|
@@ -541,20 +539,26 @@ class AbstractBinaryTree {
|
|
|
541
539
|
return (_a = this.getNodes(nodeProperty, propertyName, true)[0]) !== null && _a !== void 0 ? _a : null;
|
|
542
540
|
}
|
|
543
541
|
/**
|
|
544
|
-
* The function getPathToRoot
|
|
545
|
-
* the
|
|
546
|
-
* @param {N} node - The
|
|
542
|
+
* The function `getPathToRoot` returns an array of nodes representing the path from a given node to the root node, with
|
|
543
|
+
* an option to reverse the order of the nodes.
|
|
544
|
+
* @param {N} node - The `node` parameter represents a node in a tree structure. It is of type `N`, which could be any
|
|
545
|
+
* type that represents a node in your specific implementation.
|
|
546
|
+
* @param {boolean} [isReverse=true] - The `isReverse` parameter is a boolean flag that determines whether the resulting
|
|
547
|
+
* path should be reversed or not. If `isReverse` is set to `true`, the path will be reversed before returning it. If
|
|
548
|
+
* `isReverse` is set to `false` or not provided, the path will
|
|
547
549
|
* @returns The function `getPathToRoot` returns an array of nodes (`N[]`).
|
|
548
550
|
*/
|
|
549
|
-
getPathToRoot(node) {
|
|
551
|
+
getPathToRoot(node, isReverse = true) {
|
|
550
552
|
// TODO to support get path through passing id
|
|
551
553
|
const result = [];
|
|
552
554
|
while (node.parent) {
|
|
553
|
-
|
|
555
|
+
// Array.push + Array.reverse is more efficient than Array.unshift
|
|
556
|
+
// TODO may consider using Deque, so far this is not the performance bottleneck
|
|
557
|
+
result.push(node);
|
|
554
558
|
node = node.parent;
|
|
555
559
|
}
|
|
556
|
-
result.
|
|
557
|
-
return result;
|
|
560
|
+
result.push(node);
|
|
561
|
+
return isReverse ? result.reverse() : result;
|
|
558
562
|
}
|
|
559
563
|
/**
|
|
560
564
|
* The `getLeftMost` function returns the leftmost node in a binary tree, starting from a specified node or the root if
|
|
@@ -1306,3 +1310,4 @@ class AbstractBinaryTree {
|
|
|
1306
1310
|
}
|
|
1307
1311
|
}
|
|
1308
1312
|
exports.AbstractBinaryTree = AbstractBinaryTree;
|
|
1313
|
+
//# sourceMappingURL=abstract-binary-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-binary-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/abstract-binary-tree.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,uCAAuC;AAWvC,uCAAgF;AAGhF,MAAsB,sBAAsB;IAE1C;;;;;;OAMG;IACH,YAAsB,EAAoB,EAAE,GAAO;QA6D3C,YAAO,GAAG,CAAC,CAAC;QA5DlB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAID,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,EAAE,CAAC,CAAmB;QACxB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACf,CAAC;IAID,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,KAAoB;QAC1B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,CAAC;IAID,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,CAA8B;QACrC,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,MAAM,GAAG,IAA2B,CAAC;SACxC;QACD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAID,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,KAAK,CAAC,CAA8B;QACtC,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,MAAM,GAAG,IAA2B,CAAC;SACxC;QACD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAID,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,CAAC,CAA8B;QACvC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAID,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,CAAC,CAAS;QAClB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,IAAI,cAAc;QAChB,MAAM,IAAI,GAAG,IAA2B,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC7B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;oBAC3B,OAAO,sBAAc,CAAC,SAAS,CAAC;iBACjC;qBAAM;oBACL,OAAO,sBAAc,CAAC,IAAI,CAAC;iBAC5B;aACF;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE;gBACrC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;oBAC3B,OAAO,sBAAc,CAAC,UAAU,CAAC;iBAClC;qBAAM;oBACL,OAAO,sBAAc,CAAC,KAAK,CAAC;iBAC7B;aACF;iBAAM;gBACL,OAAO,sBAAc,CAAC,QAAQ,CAAC;aAChC;SACF;aAAM;YACL,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC3B,OAAO,sBAAc,CAAC,IAAI,CAAC;aAC5B;iBAAM;gBACL,OAAO,sBAAc,CAAC,QAAQ,CAAC;aAChC;SACF;IACH,CAAC;CACF;AA9GD,wDA8GC;AAED,MAAsB,kBAAkB;IAEtC;;;;OAIG;IACH,YAAsB,OAAmC;QAQjD,UAAK,GAAa,IAAI,CAAC;QAMvB,UAAK,GAAG,CAAC,CAAC;QAMV,cAAS,GAAa,gBAAQ,CAAC,SAAS,CAAC;QAMzC,eAAU,GAAuB,EAAE,CAAC;QAMpC,gBAAW,GAAe,EAAE,CAAC;QAM7B,iBAAY,GAAQ,EAAE,CAAC;QAMvB,oBAAe,GAAa,EAAE,CAAC;QA3CrC,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,EAAC,QAAQ,GAAG,gBAAQ,CAAC,SAAS,EAAC,GAAG,OAAO,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;SAC3B;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAID,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAID,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAID,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAID,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAID,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAID,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAID,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAID;;;;;;OAMG;IACH,YAAY,CAAC,OAAU,EAAE,QAAW;QAClC,MAAM,EAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAC,GAAG,QAAQ,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE1C,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YAEzB,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;YAC3B,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YAC3B,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;SAClC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;IACzB,CAAC;IAED;;;OAGG;IAEH;;;;;;;;OAQG;IACH,GAAG,CAAC,QAAqC,EAAE,GAAc;QACvD,MAAM,IAAI,GAAG,CAAC,IAAO,EAAE,OAAiB,EAAwB,EAAE;YAChE,MAAM,KAAK,GAAoB,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,GAAG,EAAE;oBACP,IAAI,OAAO,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;wBAAE,OAAO;oBAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC3C,IAAI,QAAQ,KAAK,SAAS;wBAAE,OAAO,QAAQ,CAAC;oBAC5C,IAAI,GAAG,CAAC,IAAI;wBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,GAAG,CAAC,KAAK;wBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;iBACtC;;oBAAM,OAAO;aACf;YACD,OAAO;QACT,CAAC,CAAC;QAEF,IAAI,QAA8B,EAAE,UAAoB,CAAC;QAEzD,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,UAAU,GAAG,IAAI,CAAC;SACnB;aAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;YACvC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;SAC7C;aAAM,IAAI,QAAQ,YAAY,sBAAsB,EAAE;YACrD,UAAU,GAAG,QAAQ,CAAC;SACvB;aAAM;YACL,OAAO;SACR;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElE,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,SAAS,EAAE;gBACb,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC;gBACpB,QAAQ,GAAG,SAAS,CAAC;aACtB;iBAAM;gBACL,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;aACxC;SACF;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1B,IAAI,UAAU,KAAK,IAAI,EAAE;gBACvB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAClB;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAClB;YACD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;SACtB;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAGD;;;;;;;;;OASG;IACH,OAAO,CAAC,UAAsD,EAAE,IAAiB;QAC/E,+CAA+C;QAC/C,MAAM,QAAQ,GAA6B,EAAE,CAAC;QAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,QAAQ,YAAY,sBAAsB,EAAE;gBAC9C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnD,SAAS;aACV;YAED,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9B,SAAS;aACV;YAED,MAAM,GAAG,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;SACxC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,CAAC,UAAsD,EAAE,IAA4B;QACvF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;IACrE,CAAC;IAGD;;;;;;;;;OASG;IACH,MAAM,CAAC,QAA8B,EAAE,kBAA4B;QAEjE,kBAAkB,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAClF,yCAAyC;QACzC,IAAI,kBAAkB,EAAE;SACvB;QAED,MAAM,gBAAgB,GAAiC,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,gBAAgB,CAAC;QAExC,MAAM,IAAI,GAAa,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtF,IAAI,CAAC,IAAI;YAAE,OAAO,gBAAgB,CAAC;QAEnC,MAAM,MAAM,GAAa,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3D,IAAI,YAAY,GAAa,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,MAAM,EAAE;gBACX,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;oBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACzD;iBAAM;gBACL,MAAM,EAAC,cAAc,EAAE,EAAE,EAAC,GAAG,IAAI,CAAC;gBAClC,IAAI,EAAE,KAAK,sBAAc,CAAC,IAAI,IAAI,EAAE,KAAK,sBAAc,CAAC,SAAS,EAAE;oBACjE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;iBAC1B;qBAAM,IAAI,EAAE,KAAK,sBAAc,CAAC,KAAK,IAAI,EAAE,KAAK,sBAAc,CAAC,UAAU,EAAE;oBAC1E,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;iBAC3B;gBACD,YAAY,GAAG,MAAM,CAAC;aACvB;SACF;aAAM;YACL,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7E,IAAI,oBAAoB,EAAE;gBACxB,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,MAAM,CAAC;gBAC3D,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;gBAC3D,IAAI,sBAAsB,EAAE;oBAC1B,IAAI,sBAAsB,CAAC,KAAK,KAAK,oBAAoB;wBAAE,sBAAsB,CAAC,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC;;wBAC/G,sBAAsB,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;oBAC7D,YAAY,GAAG,sBAAsB,CAAC;iBACvC;aACF;SACF;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAE7B,gBAAgB,CAAC,IAAI,CAAC,EAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAC,CAAC,CAAC;QAC3D,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,SAAsC;QAC7C,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEzE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,EAAE;YACxB,KAAK,EAAE,CAAC;YACR,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;SAC9B;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,SAAuC;QAC/C,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC,IAAI,CAAC;QAEnC,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,aAAa,GAAG,CAAC,GAAyB,EAAU,EAAE;gBAC1D,IAAI,CAAC,GAAG;oBAAE,OAAO,CAAC,CAAC,CAAC;gBACpB,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC,CAAC;YAEF,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;SACjC;aAAM;YACL,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO,CAAC,CAAC,CAAC;aACX;YAED,MAAM,KAAK,GAAiC,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;YAC1E,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBAEnC,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAC,CAAC,CAAC;iBACjD;gBAED,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,KAAK,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAC,CAAC,CAAC;iBAClD;gBAED,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aACxC;YAED,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,SAAoB;;QAC/B,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,aAAa,GAAG,CAAC,GAAyB,EAAU,EAAE;gBAC1D,IAAI,CAAC,GAAG;oBAAE,OAAO,CAAC,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK;oBAAE,OAAO,CAAC,CAAC;gBACtC,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;YACrD,CAAC,CAAC;YAEF,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;SACjC;aAAM;YACL,MAAM,KAAK,GAAQ,EAAE,CAAC;YACtB,IAAI,IAAI,GAAyB,SAAS,EAAE,IAAI,GAAa,IAAI,CAAC;YAClE,MAAM,MAAM,GAAmB,IAAI,GAAG,EAAE,CAAC;YAEzC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE;gBAC/B,IAAI,IAAI,EAAE;oBACR,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBAClB;qBAAM;oBACL,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;oBAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE;wBACtC,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;wBACnB,IAAI,IAAI,EAAE;4BACR,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACnE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACtE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;4BAC9D,IAAI,GAAG,IAAI,CAAC;4BACZ,IAAI,GAAG,IAAI,CAAC;yBACb;qBACF;;wBAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;iBACzB;aACF;YAED,OAAO,MAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAI,CAAC,CAAC,CAAC;SACpC;IACH,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,SAAoB;QACtC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,YAAkC,EAAE,YAA0C,EAAE,OAAkB;QACzG,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAC1B,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC;QAEpC,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACxC,MAAM,SAAS,GAAG,CAAC,GAAM,EAAE,EAAE;gBAC3B,IAAI,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC;oBAAE,OAAO;gBAChG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK;oBAAE,OAAO;gBACpC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC,CAAA;YAED,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtB;aAAM;YACL,MAAM,KAAK,GAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,GAAG,EAAE;oBACP,IAAI,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC;wBAAE,OAAO,MAAM,CAAC;oBACvG,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACjC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;iBACpC;aACF;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CAAC,YAAkC,EAAE,YAA0C;QAChF,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC;QACpC,+CAA+C;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;;;;OAUG;IACH,GAAG,CAAC,YAAkC,EAAE,YAA0C;;QAChF,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC;QACpC,+CAA+C;QAC/C,OAAO,MAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC;IACpE,CAAC;IAED;;;;;;;;;OASG;IACH,aAAa,CAAC,IAAO,EAAE,SAAS,GAAG,IAAI;QACrC,8CAA8C;QAC9C,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,MAAM,EAAE;YAClB,kEAAkE;YAClE,+EAA+E;YAC/E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;SACpB;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC;IAMD;;;;;;;;;OASG;IACH,WAAW,CAAC,SAAuC;QACjD,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEzE,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QAEjC,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YAEzC,MAAM,SAAS,GAAG,CAAC,GAAM,EAAK,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI;oBAAE,OAAO,GAAG,CAAC;gBAC1B,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAA;YAED,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;SAC7B;aAAM;YACL,yEAAyE;YACzE,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,CAAC,GAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,GAAG,CAAC,IAAI;oBAAE,OAAO,GAAG,CAAC;gBAC1B,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;SAC7B;IACH,CAAC;IAMD;;;;;;;;;OASG;IACH,YAAY,CAAC,IAAe;QAC1B,+CAA+C;QAC/C,IAAI,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,SAAS,GAAG,CAAC,GAAM,EAAK,EAAE;gBAC9B,IAAI,CAAC,GAAG,CAAC,KAAK;oBAAE,OAAO,GAAG,CAAC;gBAC3B,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAA;YAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;SACxB;aAAM;YACL,yEAAyE;YACzE,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,CAAC,GAAM,EAAE,EAAE;gBACtC,IAAI,CAAC,GAAG,CAAC,KAAK;oBAAE,OAAO,GAAG,CAAC;gBAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;SACxB;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,IAAc;QACzB,sBAAsB;QACtB,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,GAAG,GAAG,CAAC,GAAyB,EAAE,GAAqB,EAAE,GAAqB,EAAW,EAAE;gBAC/F,IAAI,CAAC,GAAG;oBAAE,OAAO,IAAI,CAAC;gBACtB,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG;oBAAE,OAAO,KAAK,CAAC;gBACjD,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC,CAAA;YAED,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;SACpE;aAAM;YACL,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,IAAI,GAAG,MAAM,CAAC,gBAAgB,EAAE,IAAI,GAAyB,IAAI,CAAC;YACtE,OAAO,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,OAAO,IAAI,EAAE;oBACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBAClB;gBACD,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBACpB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;oBAAE,OAAO,KAAK,CAAC;gBAC7C,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACf,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;aACnB;YACD,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,WAAiC;QAC9C,4BAA4B;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE9B,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,SAAS,GAAG,CAAC,GAAM,EAAE,EAAE;gBAC3B,IAAI,EAAE,CAAC;gBACP,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC,CAAA;YAED,SAAS,CAAC,WAAW,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;SACb;aAAM;YACL,MAAM,KAAK,GAAQ,CAAC,WAAW,CAAC,CAAC;YAEjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBACzB,IAAI,EAAE,CAAC;gBACP,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAClC;YAED,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,WAAwC,EAAE,YAA0C;QAC7F,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC;QACpC,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAE/E,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,CAAC;QAE3B,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,MAAM,cAAc,GAAG,CAAC,GAAM,EAAE,EAAE;YAChC,IAAI,OAAe,CAAC;YACpB,QAAQ,YAAY,EAAE;gBACpB,KAAK,IAAI;oBACP,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;oBACjB,MAAM;gBACR,KAAK,KAAK;oBACR,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpD,MAAM;gBACR;oBACE,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;oBACjB,MAAM;aACT;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAA;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,SAAS,GAAG,CAAC,GAAM,EAAQ,EAAE;gBACjC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC3B,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC,CAAA;YAED,SAAS,CAAC,WAAW,CAAC,CAAC;SACxB;aAAM;YACL,MAAM,KAAK,GAAQ,CAAC,WAAW,CAAC,CAAC;YAEjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBACzB,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC3B,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAClC;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;OASG;IACH,UAAU,CAAC,WAAwC,EAAE,KAAa,EAAE,YAA0C;QAC5G,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC;QACpC,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAE/E,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE/B,MAAM,cAAc,GAAG,CAAC,GAAM,EAAE,EAAE;YAChC,QAAQ,YAAY,EAAE;gBACpB,KAAK,IAAI;oBACP,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC;oBAChB,MAAM;gBACR;oBACE,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC;oBAChB,MAAM;aACT;QACH,CAAC,CAAA;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACzC,MAAM,SAAS,GAAG,CAAC,GAAM,EAAE,EAAE;gBAC3B,cAAc,CAAC,GAAG,CAAC,CAAC;gBACpB,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAChC,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC,CAAC;YAEF,SAAS,CAAC,WAAW,CAAC,CAAC;SACxB;aAAM;YACL,MAAM,KAAK,GAAQ,CAAC,WAAW,CAAC,CAAC;YAEjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBAEzB,cAAc,CAAC,GAAG,CAAC,CAAC;gBACpB,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAClC;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAUD;;;;;;;;OAQG;IACH,GAAG,CAAC,kBAAwC;QAC1C,kBAAkB,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,IAAI,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,KAAK,GAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBACzD,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,MAAK,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,MAAK,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAChD;SACF;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAUD;;;;;;;;;;OAUG;IACH,GAAG,CAAC,OAAgC,EAAE,kBAAwC;QAC5E,OAAO,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,IAAI,CAAC;QAC1B,kBAAkB,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,IAAI,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,CAAC,IAAO,EAAE,EAAE;YAC5B,QAAQ,OAAO,EAAE;gBACf,KAAK,IAAI;oBACP,IAAI,IAAI,CAAC,IAAI;wBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;oBAC1D,IAAI,IAAI,CAAC,KAAK;wBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtC,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;oBAC1D,IAAI,IAAI,CAAC,IAAI;wBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,IAAI,CAAC,KAAK;wBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtC,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,IAAI,CAAC,IAAI;wBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,IAAI,CAAC,KAAK;wBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;oBAC1D,MAAM;aACT;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAaD;;;;;;;;;;OAUG;IACH,YAAY,CAAC,OAAgC,EAAE,kBAAwC;QACrF,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC;QAC1B,kBAAkB,GAAG,kBAAkB,IAAI,IAAI,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;QACzE,qBAAqB;QACrB,MAAM,KAAK,GAAiD,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;QAExF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI;gBAAE,SAAS;YAChC,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE;gBACjB,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;aAC/D;iBAAM;gBACL,QAAQ,OAAO,EAAE;oBACf,KAAK,IAAI;wBACP,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC;wBACrC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;wBAC1C,MAAM;oBACR,KAAK,KAAK;wBACR,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;wBAC1C,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC;wBACrC,MAAM;oBACR,KAAK,MAAM;wBACT,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC;wBACrC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;wBAC1C,MAAM;oBACR;wBACE,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;wBAC3C,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC;wBACrC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;wBAC1C,MAAM;iBACT;aACF;SACF;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAUD;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,IAAc,EAAE,kBAAwC;QACrE,kBAAkB,GAAG,kBAAkB,IAAI,IAAI,CAAC;QAChD,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,KAAK,GAAQ,CAAC,IAAI,CAAC,CAAC;QAE1B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBACzD,IAAI,GAAG,CAAC,IAAI,EAAE;oBACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACtB;gBACD,IAAI,GAAG,CAAC,KAAK,EAAE;oBACb,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;iBACvB;aACF;SACF;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAUD;;;;;;;;OAQG;IACH,UAAU,CAAC,IAAc,EAAE,kBAAuC;QAChE,kBAAkB,GAAG,kBAAkB,IAAI,IAAI,CAAC;QAChD,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,WAAW,GAA0C,EAAE,CAAC;QAE9D,MAAM,iBAAiB,GAAG,CAAC,IAAO,EAAE,KAAa,EAAE,EAAE;YACnD,QAAQ,kBAAkB,EAAE;gBAC1B,KAAK,IAAI;oBACP,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjC,MAAM;gBACR,KAAK,KAAK;oBACR,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClC,MAAM;gBACR,KAAK,MAAM;oBACT,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9B,MAAM;gBACR;oBACE,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjC,MAAM;aACT;QACH,CAAC,CAAA;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,gBAAQ,CAAC,SAAS,EAAE;YACxC,MAAM,UAAU,GAAG,CAAC,IAAO,EAAE,KAAa,EAAE,EAAE;gBAC5C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACjD,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/B,IAAI,IAAI,CAAC,IAAI;oBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChD,IAAI,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC;YAEF,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACrB;aAAM;YACL,MAAM,KAAK,GAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;gBAC1B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;gBAE3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;oBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACjD,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/B,IAAI,IAAI,CAAC,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;aACnD;SACF;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,IAAO;QACpB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,WAAW,GAAyB,IAAI,CAAC,IAAI,CAAC;YAClD,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE;gBACxE,IAAI,WAAW,EAAE;oBACf,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;iBACjC;aACF;YACD,OAAO,WAAW,CAAC;SACpB;aAAM;YACL,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAeD;;;;;;;;;OASG;IACH,MAAM,CAAC,OAA+B,EAAE,kBAAuC;QAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAElC,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC;QAC1B,kBAAkB,GAAG,kBAAkB,IAAI,IAAI,CAAC;QAEhD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,GAAG,GAAyB,IAAI,CAAC,IAAI,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,IAA0B,EAAE,EAAE;YAClD,IAAI,GAAG,GAAyB,IAAI,CAAC;YACrC,IAAI,IAAI,GAAyB,IAAI,CAAC;YACtC,OAAO,IAAI,EAAE;gBACX,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;gBAClB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;gBACjB,GAAG,GAAG,IAAI,CAAC;gBACX,IAAI,GAAG,IAAI,CAAC;aACb;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,EAAE;YACpC,MAAM,IAAI,GAAyB,YAAY,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,GAAG,GAAyB,IAAI,CAAC;YACrC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBACzD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;aACjB;YACD,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,QAAQ,OAAO,EAAE;YACf,KAAK,IAAI;gBACP,OAAO,GAAG,EAAE;oBACV,IAAI,GAAG,CAAC,IAAI,EAAE;wBACZ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;4BACtB,WAAW,CAAC,KAAK,GAAG,GAAG,CAAC;4BACxB,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;4BACf,SAAS;yBACV;6BAAM;4BACL,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;yBAC1B;qBACF;oBACD,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;oBACzD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;iBACjB;gBACD,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,GAAG,EAAE;oBACV,IAAI,GAAG,CAAC,IAAI,EAAE;wBACZ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;4BACtB,WAAW,CAAC,KAAK,GAAG,GAAG,CAAC;4BACxB,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;4BACzD,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;4BACf,SAAS;yBACV;6BAAM;4BACL,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;yBAC1B;qBACF;yBAAM;wBACL,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;qBAC1D;oBACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;iBACjB;gBACD,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,GAAG,EAAE;oBACV,IAAI,GAAG,CAAC,IAAI,EAAE;wBACZ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC7C,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE;4BAC9B,WAAW,CAAC,KAAK,GAAG,GAAG,CAAC;4BACxB,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;4BACf,SAAS;yBACV;6BAAM;4BACL,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;4BACzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;yBACtB;qBACF;oBACD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;iBACjB;gBACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,MAAM;SACT;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;;;OASG;IACO,MAAM,CAAC,OAAiB,EAAE,MAAS;QAC3C,IAAI,MAAM,EAAE;YACV,2GAA2G;YAC3G,mGAAmG;YACnG,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC7B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;gBACtB,IAAI,OAAO,EAAE;oBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;iBAC9B;gBACD,OAAO,MAAM,CAAC,IAAI,CAAC;aACpB;iBAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;gBACrC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;gBACvB,IAAI,OAAO,EAAE;oBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;iBAC9B;gBACD,OAAO,MAAM,CAAC,KAAK,CAAC;aACrB;iBAAM;gBACL,OAAO;aACR;SACF;aAAM;YACL,OAAO;SACR;IACH,CAAC;IAED;;;OAGG;IACO,YAAY,CAAC,KAAe;QACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;;OAGG;IACO,aAAa,CAAC,KAAyB;QAC/C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACO,cAAc,CAAC,KAAe;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACO,eAAe,CAAC,KAAU;QAClC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACO,kBAAkB,CAAC,KAAe;QAC1C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,CAAC;IAGD;;;;OAIG;IACO,QAAQ,CAAC,CAAW;QAC5B,IAAI,CAAC,EAAE;YACL,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;SACtB;QACD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAED;;;OAGG;IACO,QAAQ,CAAC,CAAS;QAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAED;;;OAGG;IACO,aAAa;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACO,4BAA4B,CAAC,GAAM,EAAE,MAAgC,EAAE,YAAkC,EAAE,YAA0C,EAAE,OAAkB;QACjL,QAAQ,YAAY,EAAE;YACpB,KAAK,IAAI;gBACP,IAAI,GAAG,CAAC,EAAE,KAAK,YAAY,EAAE;oBAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjB,OAAO,CAAC,CAAC,OAAO,CAAC;iBAClB;gBACD,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,GAAG,CAAC,GAAG,KAAK,YAAY,EAAE;oBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjB,OAAO,CAAC,CAAC,OAAO,CAAC;iBAClB;gBACD,MAAM;YACR;gBACE,IAAI,GAAG,CAAC,EAAE,KAAK,YAAY,EAAE;oBAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjB,OAAO,CAAC,CAAC,OAAO,CAAC;iBAClB;gBACD,MAAM;SACT;IACH,CAAC;IAED;;;;;;OAMG;IACO,0BAA0B,CAAC,IAAO,EAAE,kBAAwC;QACpF,kBAAkB,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,IAAI,CAAC;QAEhD,QAAQ,kBAAkB,EAAE;YAC1B,KAAK,IAAI;gBACP,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM;YACR;gBACE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9B,MAAM;SACT;IACH,CAAC;IAED;;;OAGG;IAEH;;;;;;OAMG;IACO,wBAAwB,CAAC,kBAAwC;QACzE,kBAAkB,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,IAAI,CAAC;QAEhD,QAAQ,kBAAkB,EAAE;YAC1B,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC,UAAU,CAAC;YACzB,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC;YAC3B;gBACE,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;IACH,CAAC;CAGF;AA/yCD,gDA+yCC"}
|
|
@@ -88,14 +88,13 @@ class AVLTree extends bst_1.BST {
|
|
|
88
88
|
* @param node - The parameter `node` is an AVLTreeNode object, which represents a node in an AVL tree.
|
|
89
89
|
*/
|
|
90
90
|
_updateHeight(node) {
|
|
91
|
-
if (!node.left && !node.right)
|
|
91
|
+
if (!node.left && !node.right)
|
|
92
92
|
node.height = 0;
|
|
93
93
|
else if (!node.left) {
|
|
94
|
-
// node has no left subtree
|
|
95
94
|
const rightHeight = node.right ? node.right.height : 0;
|
|
96
95
|
node.height = 1 + rightHeight;
|
|
97
96
|
}
|
|
98
|
-
else if (!node.right)
|
|
97
|
+
else if (!node.right)
|
|
99
98
|
node.height = 1 + node.left.height;
|
|
100
99
|
else
|
|
101
100
|
node.height = 1 + Math.max(node.right.height, node.left.height);
|
|
@@ -106,31 +105,39 @@ class AVLTree extends bst_1.BST {
|
|
|
106
105
|
* @param node - The `node` parameter is an AVLTreeNode object, which represents a node in an AVL tree.
|
|
107
106
|
*/
|
|
108
107
|
_balancePath(node) {
|
|
109
|
-
const path = this.getPathToRoot(node);
|
|
110
|
-
for (let i =
|
|
108
|
+
const path = this.getPathToRoot(node, false); // first O(log n) + O(log n)
|
|
109
|
+
for (let i = 0; i < path.length; i++) { // second O(log n)
|
|
111
110
|
const A = path[i];
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
// Update Heights: After inserting a node, backtrack from the insertion point to the root node, updating the height of each node along the way.
|
|
112
|
+
this._updateHeight(A); // first O(1)
|
|
113
|
+
// Check Balance: Simultaneously with height updates, check if each node violates the balance property of an AVL tree.
|
|
114
|
+
// Balance Restoration: If a balance issue is discovered after inserting a node, it requires balance restoration operations. Balance restoration includes four basic cases where rotation operations need to be performed to fix the balance:
|
|
115
|
+
switch (this._balanceFactor(A)) { // second O(1)
|
|
114
116
|
case -2:
|
|
115
117
|
if (A && A.left) {
|
|
116
|
-
if (this._balanceFactor(A.left) <= 0) {
|
|
117
|
-
|
|
118
|
+
if (this._balanceFactor(A.left) <= 0) { // second O(1)
|
|
119
|
+
// Left Rotation (LL Rotation): When the inserted node is in the left subtree of the left subtree, causing an imbalance.
|
|
120
|
+
this._balanceLL(A);
|
|
118
121
|
}
|
|
119
122
|
else {
|
|
120
|
-
|
|
123
|
+
// Left-Right Rotation (LR Rotation): When the inserted node is in the right subtree of the left subtree, causing an imbalance.
|
|
124
|
+
this._balanceLR(A);
|
|
121
125
|
}
|
|
122
126
|
}
|
|
123
127
|
break;
|
|
124
128
|
case +2:
|
|
125
129
|
if (A && A.right) {
|
|
126
130
|
if (this._balanceFactor(A.right) >= 0) {
|
|
127
|
-
|
|
131
|
+
// Right Rotation (RR Rotation): When the inserted node is in the right subtree of the right subtree, causing an imbalance.
|
|
132
|
+
this._balanceRR(A);
|
|
128
133
|
}
|
|
129
134
|
else {
|
|
130
|
-
|
|
135
|
+
// Right-Left Rotation (RL Rotation): When the inserted node is in the left subtree of the right subtree, causing an imbalance.
|
|
136
|
+
this._balanceRL(A);
|
|
131
137
|
}
|
|
132
138
|
}
|
|
133
139
|
}
|
|
140
|
+
// TODO So far, no sure if this is necessary that Recursive Repair: Once rotation operations are executed, it may cause imbalance issues at higher levels of the tree. Therefore, you need to recursively check and repair imbalance problems upwards until you reach the root node.
|
|
134
141
|
}
|
|
135
142
|
}
|
|
136
143
|
/**
|
|
@@ -139,7 +146,7 @@ class AVLTree extends bst_1.BST {
|
|
|
139
146
|
*/
|
|
140
147
|
_balanceLL(A) {
|
|
141
148
|
const parentOfA = A.parent;
|
|
142
|
-
const B = A.left;
|
|
149
|
+
const B = A.left;
|
|
143
150
|
A.parent = B;
|
|
144
151
|
if (B && B.right) {
|
|
145
152
|
B.right.parent = A;
|
|
@@ -160,8 +167,8 @@ class AVLTree extends bst_1.BST {
|
|
|
160
167
|
}
|
|
161
168
|
}
|
|
162
169
|
if (B) {
|
|
163
|
-
A.left = B.right;
|
|
164
|
-
B.right = A;
|
|
170
|
+
A.left = B.right;
|
|
171
|
+
B.right = A;
|
|
165
172
|
}
|
|
166
173
|
this._updateHeight(A);
|
|
167
174
|
if (B)
|
|
@@ -173,10 +180,10 @@ class AVLTree extends bst_1.BST {
|
|
|
173
180
|
*/
|
|
174
181
|
_balanceLR(A) {
|
|
175
182
|
const parentOfA = A.parent;
|
|
176
|
-
const B = A.left;
|
|
183
|
+
const B = A.left;
|
|
177
184
|
let C = null;
|
|
178
185
|
if (B) {
|
|
179
|
-
C = B.right;
|
|
186
|
+
C = B.right;
|
|
180
187
|
}
|
|
181
188
|
if (A)
|
|
182
189
|
A.parent = C;
|
|
@@ -206,13 +213,13 @@ class AVLTree extends bst_1.BST {
|
|
|
206
213
|
}
|
|
207
214
|
}
|
|
208
215
|
if (C) {
|
|
209
|
-
A.left = C.right;
|
|
216
|
+
A.left = C.right;
|
|
210
217
|
if (B)
|
|
211
|
-
B.right = C.left;
|
|
218
|
+
B.right = C.left;
|
|
212
219
|
C.left = B;
|
|
213
220
|
C.right = A;
|
|
214
221
|
}
|
|
215
|
-
this._updateHeight(A);
|
|
222
|
+
this._updateHeight(A);
|
|
216
223
|
B && this._updateHeight(B);
|
|
217
224
|
C && this._updateHeight(C);
|
|
218
225
|
}
|
|
@@ -222,7 +229,7 @@ class AVLTree extends bst_1.BST {
|
|
|
222
229
|
*/
|
|
223
230
|
_balanceRR(A) {
|
|
224
231
|
const parentOfA = A.parent;
|
|
225
|
-
const B = A.right;
|
|
232
|
+
const B = A.right;
|
|
226
233
|
A.parent = B;
|
|
227
234
|
if (B) {
|
|
228
235
|
if (B.left) {
|
|
@@ -245,7 +252,7 @@ class AVLTree extends bst_1.BST {
|
|
|
245
252
|
}
|
|
246
253
|
}
|
|
247
254
|
if (B) {
|
|
248
|
-
A.right = B.left;
|
|
255
|
+
A.right = B.left;
|
|
249
256
|
B.left = A;
|
|
250
257
|
}
|
|
251
258
|
this._updateHeight(A);
|
|
@@ -257,10 +264,10 @@ class AVLTree extends bst_1.BST {
|
|
|
257
264
|
*/
|
|
258
265
|
_balanceRL(A) {
|
|
259
266
|
const parentOfA = A.parent;
|
|
260
|
-
const B = A.right;
|
|
267
|
+
const B = A.right;
|
|
261
268
|
let C = null;
|
|
262
269
|
if (B) {
|
|
263
|
-
C = B.left;
|
|
270
|
+
C = B.left;
|
|
264
271
|
}
|
|
265
272
|
A.parent = C;
|
|
266
273
|
if (B)
|
|
@@ -289,16 +296,17 @@ class AVLTree extends bst_1.BST {
|
|
|
289
296
|
}
|
|
290
297
|
}
|
|
291
298
|
if (C)
|
|
292
|
-
A.right = C.left;
|
|
299
|
+
A.right = C.left;
|
|
293
300
|
if (B && C)
|
|
294
|
-
B.left = C.right;
|
|
301
|
+
B.left = C.right;
|
|
295
302
|
if (C)
|
|
296
303
|
C.left = A;
|
|
297
304
|
if (C)
|
|
298
305
|
C.right = B;
|
|
299
|
-
this._updateHeight(A);
|
|
306
|
+
this._updateHeight(A);
|
|
300
307
|
B && this._updateHeight(B);
|
|
301
308
|
C && this._updateHeight(C);
|
|
302
309
|
}
|
|
303
310
|
}
|
|
304
311
|
exports.AVLTree = AVLTree;
|
|
312
|
+
//# sourceMappingURL=avl-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avl-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/avl-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"b-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/b-tree.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;CAEjB;AAFD,sBAEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-indexed-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/binary-indexed-tree.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,MAAa,iBAAiB;IAE5B;;;;;OAKG;IACH,YAAY,CAAS;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAID,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,CAAS;QACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,CAAS,EAAE,KAAa;QAC7B,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;YAC1B,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClC;IACH,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,CAAS;QACpB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,EAAE;YACZ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,KAAa,EAAE,GAAW;QACpC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9D,MAAM,qBAAqB,CAAC;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAES,WAAW,CAAC,KAAe;QACnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;CACF;AAtED,8CAsEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-tree.js","sourceRoot":"","sources":["../../../src/data-structures/binary-tree/binary-tree.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,iEAAkF;AAGlF,MAAa,cAAgG,SAAQ,6CAAmC;IACtJ,YAAY,EAAoB,EAAE,GAAO;QACvC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACjB,CAAC;CACF;AAJD,wCAIC;AAED,MAAa,UAAmE,SAAQ,yCAAqB;IAE3G;;;;;OAKG;IACH,YAAY,OAA2B;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,EAAoB,EAAE,GAAc;QAC7C,OAAO,IAAI,cAAc,CAAc,EAAE,EAAE,GAAG,CAAM,CAAC;IACvD,CAAC;CACF;AAvBD,gCAuBC"}
|
|
@@ -28,15 +28,26 @@ export declare class BST<N extends BSTNode<N['val'], N> = BSTNode> extends Binar
|
|
|
28
28
|
*/
|
|
29
29
|
createNode(id: BinaryTreeNodeId, val?: N['val']): N;
|
|
30
30
|
/**
|
|
31
|
-
* The `add` function adds a new node to a binary tree,
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
31
|
+
* The `add` function adds a new node to a binary search tree, either by creating a new node or by updating an existing
|
|
32
|
+
* node with the same ID.
|
|
33
|
+
* @param {BinaryTreeNodeId | N | null} idOrNode - The `idOrNode` parameter can be either a `BinaryTreeNodeId` or a `N`
|
|
34
|
+
* (which represents a binary tree node) or `null`.
|
|
35
|
+
* @param [val] - The `val` parameter is an optional value that can be assigned to the `val` property of the new node
|
|
36
|
+
* being added to the binary search tree.
|
|
37
|
+
* @returns The function `add` returns the inserted node (`inserted`) which can be of type `N`, `null`, or `undefined`.
|
|
38
38
|
*/
|
|
39
|
-
add(
|
|
39
|
+
add(idOrNode: BinaryTreeNodeId | N | null, val?: N['val']): N | null | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* The `addMany` function overrides the base class method to add multiple nodes to a binary search tree in a balanced
|
|
42
|
+
* manner.
|
|
43
|
+
* @param {[BinaryTreeNodeId | N , N['val']][]} idsOrNodes - The `idsOrNodes` parameter in the `addMany` function is an array of
|
|
44
|
+
* `BinaryTreeNodeId` or `N` (node) objects, or `null` values. It represents the nodes or node IDs that need to be added
|
|
45
|
+
* to the binary search tree.
|
|
46
|
+
* @param {N['val'][]} data - The values of tree nodes
|
|
47
|
+
* @param {boolean} isBalanceAdd - If true the nodes will be balance inserted in binary search method.
|
|
48
|
+
* @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
|
|
49
|
+
*/
|
|
50
|
+
addMany(idsOrNodes: (BinaryTreeNodeId | null)[] | (N | null)[], data?: N['val'][], isBalanceAdd?: boolean): (N | null | undefined)[];
|
|
40
51
|
/**
|
|
41
52
|
* The function returns the first node in a binary tree that matches the given property name and value.
|
|
42
53
|
* @param {BinaryTreeNodeId | N} nodeProperty - The `nodeProperty` parameter can be either a `BinaryTreeNodeId` or a
|
|
@@ -36,18 +36,27 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
36
36
|
return new BSTNode(id, val);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* The `add` function adds a new node to a binary tree,
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
39
|
+
* The `add` function adds a new node to a binary search tree, either by creating a new node or by updating an existing
|
|
40
|
+
* node with the same ID.
|
|
41
|
+
* @param {BinaryTreeNodeId | N | null} idOrNode - The `idOrNode` parameter can be either a `BinaryTreeNodeId` or a `N`
|
|
42
|
+
* (which represents a binary tree node) or `null`.
|
|
43
|
+
* @param [val] - The `val` parameter is an optional value that can be assigned to the `val` property of the new node
|
|
44
|
+
* being added to the binary search tree.
|
|
45
|
+
* @returns The function `add` returns the inserted node (`inserted`) which can be of type `N`, `null`, or `undefined`.
|
|
46
46
|
*/
|
|
47
|
-
add(
|
|
47
|
+
add(idOrNode, val) {
|
|
48
48
|
// TODO support node as a param
|
|
49
49
|
let inserted = null;
|
|
50
|
-
|
|
50
|
+
let newNode = null;
|
|
51
|
+
if (idOrNode instanceof BSTNode) {
|
|
52
|
+
newNode = idOrNode;
|
|
53
|
+
}
|
|
54
|
+
else if (typeof idOrNode === 'number') {
|
|
55
|
+
newNode = this.createNode(idOrNode, val);
|
|
56
|
+
}
|
|
57
|
+
else if (idOrNode === null) {
|
|
58
|
+
newNode = null;
|
|
59
|
+
}
|
|
51
60
|
if (this.root === null) {
|
|
52
61
|
this._setRoot(newNode);
|
|
53
62
|
this._setSize(this.size + 1);
|
|
@@ -58,7 +67,7 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
58
67
|
let traversing = true;
|
|
59
68
|
while (traversing) {
|
|
60
69
|
if (cur !== null && newNode !== null) {
|
|
61
|
-
if (this._compare(cur.id, id) === types_1.CP.eq) {
|
|
70
|
+
if (this._compare(cur.id, newNode.id) === types_1.CP.eq) {
|
|
62
71
|
if (newNode) {
|
|
63
72
|
cur.val = newNode.val;
|
|
64
73
|
}
|
|
@@ -66,7 +75,7 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
66
75
|
traversing = false;
|
|
67
76
|
inserted = cur;
|
|
68
77
|
}
|
|
69
|
-
else if (this._compare(cur.id, id) === types_1.CP.gt) {
|
|
78
|
+
else if (this._compare(cur.id, newNode.id) === types_1.CP.gt) {
|
|
70
79
|
// Traverse left of the node
|
|
71
80
|
if (cur.left === undefined) {
|
|
72
81
|
if (newNode) {
|
|
@@ -84,7 +93,7 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
84
93
|
cur = cur.left;
|
|
85
94
|
}
|
|
86
95
|
}
|
|
87
|
-
else if (this._compare(cur.id, id) === types_1.CP.lt) {
|
|
96
|
+
else if (this._compare(cur.id, newNode.id) === types_1.CP.lt) {
|
|
88
97
|
// Traverse right of the node
|
|
89
98
|
if (cur.right === undefined) {
|
|
90
99
|
if (newNode) {
|
|
@@ -110,6 +119,84 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
110
119
|
}
|
|
111
120
|
return inserted;
|
|
112
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* The `addMany` function overrides the base class method to add multiple nodes to a binary search tree in a balanced
|
|
124
|
+
* manner.
|
|
125
|
+
* @param {[BinaryTreeNodeId | N , N['val']][]} idsOrNodes - The `idsOrNodes` parameter in the `addMany` function is an array of
|
|
126
|
+
* `BinaryTreeNodeId` or `N` (node) objects, or `null` values. It represents the nodes or node IDs that need to be added
|
|
127
|
+
* to the binary search tree.
|
|
128
|
+
* @param {N['val'][]} data - The values of tree nodes
|
|
129
|
+
* @param {boolean} isBalanceAdd - If true the nodes will be balance inserted in binary search method.
|
|
130
|
+
* @returns The function `addMany` returns an array of `N`, `null`, or `undefined` values.
|
|
131
|
+
*/
|
|
132
|
+
addMany(idsOrNodes, data, isBalanceAdd = false) {
|
|
133
|
+
function hasNoNull(arr) {
|
|
134
|
+
return arr.indexOf(null) === -1;
|
|
135
|
+
}
|
|
136
|
+
if (!isBalanceAdd || !hasNoNull(idsOrNodes)) {
|
|
137
|
+
return super.addMany(idsOrNodes, data);
|
|
138
|
+
}
|
|
139
|
+
const inserted = [];
|
|
140
|
+
const combinedArr = idsOrNodes.map((value, index) => [value, data === null || data === void 0 ? void 0 : data[index]]);
|
|
141
|
+
let sorted = [];
|
|
142
|
+
function isNodeOrNullTuple(arr) {
|
|
143
|
+
for (const [idOrNode] of arr)
|
|
144
|
+
if (idOrNode instanceof BSTNode)
|
|
145
|
+
return true;
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
function isBinaryTreeIdOrNullTuple(arr) {
|
|
149
|
+
for (const [idOrNode] of arr)
|
|
150
|
+
if (typeof idOrNode === 'number')
|
|
151
|
+
return true;
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
let sortedIdsOrNodes = [], sortedData = [];
|
|
155
|
+
if (isNodeOrNullTuple(combinedArr)) {
|
|
156
|
+
sorted = combinedArr.sort((a, b) => a[0].id - b[0].id);
|
|
157
|
+
}
|
|
158
|
+
else if (isBinaryTreeIdOrNullTuple(combinedArr)) {
|
|
159
|
+
sorted = combinedArr.sort((a, b) => a[0] - b[0]);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
throw new Error('Invalid input idsOrNodes');
|
|
163
|
+
}
|
|
164
|
+
sortedIdsOrNodes = sorted.map(([idOrNode,]) => idOrNode);
|
|
165
|
+
sortedData = sorted.map(([, val]) => val);
|
|
166
|
+
const recursive = (arr, data) => {
|
|
167
|
+
if (arr.length === 0)
|
|
168
|
+
return;
|
|
169
|
+
const mid = Math.floor((arr.length - 1) / 2);
|
|
170
|
+
const newNode = this.add(arr[mid], data === null || data === void 0 ? void 0 : data[mid]);
|
|
171
|
+
inserted.push(newNode);
|
|
172
|
+
recursive(arr.slice(0, mid), data === null || data === void 0 ? void 0 : data.slice(0, mid));
|
|
173
|
+
recursive(arr.slice(mid + 1), data === null || data === void 0 ? void 0 : data.slice(mid + 1));
|
|
174
|
+
};
|
|
175
|
+
const iterative = () => {
|
|
176
|
+
const n = sorted.length;
|
|
177
|
+
const stack = [[0, n - 1]];
|
|
178
|
+
while (stack.length > 0) {
|
|
179
|
+
const popped = stack.pop();
|
|
180
|
+
if (popped) {
|
|
181
|
+
const [l, r] = popped;
|
|
182
|
+
if (l <= r) {
|
|
183
|
+
const m = l + Math.floor((r - l) / 2);
|
|
184
|
+
const newNode = this.add(sortedIdsOrNodes[m], sortedData === null || sortedData === void 0 ? void 0 : sortedData[m]);
|
|
185
|
+
inserted.push(newNode);
|
|
186
|
+
stack.push([m + 1, r]);
|
|
187
|
+
stack.push([l, m - 1]);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
if (this.loopType === types_1.LoopType.RECURSIVE) {
|
|
193
|
+
recursive(sortedIdsOrNodes, sortedData);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
iterative();
|
|
197
|
+
}
|
|
198
|
+
return inserted;
|
|
199
|
+
}
|
|
113
200
|
/**
|
|
114
201
|
* The function returns the first node in a binary tree that matches the given property name and value.
|
|
115
202
|
* @param {BinaryTreeNodeId | N} nodeProperty - The `nodeProperty` parameter can be either a `BinaryTreeNodeId` or a
|
|
@@ -150,8 +237,7 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
150
237
|
* is set to `true`, the function will return an array with only one node (if
|
|
151
238
|
* @returns an array of nodes (type N).
|
|
152
239
|
*/
|
|
153
|
-
getNodes(nodeProperty, propertyName, onlyOne) {
|
|
154
|
-
propertyName = propertyName !== null && propertyName !== void 0 ? propertyName : 'id';
|
|
240
|
+
getNodes(nodeProperty, propertyName = 'id', onlyOne) {
|
|
155
241
|
if (!this.root)
|
|
156
242
|
return [];
|
|
157
243
|
const result = [];
|
|
@@ -467,3 +553,4 @@ class BST extends binary_tree_1.BinaryTree {
|
|
|
467
553
|
}
|
|
468
554
|
}
|
|
469
555
|
exports.BST = BST;
|
|
556
|
+
//# sourceMappingURL=bst.js.map
|