elseware-nodejs 1.2.0 → 1.2.1
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/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/appError.ts","../src/api/apiResponse.ts","../src/api/asyncHandler.ts","../src/api/apiFeatures.ts","../src/api/apiFactory.ts","../src/cloud/azure/AzureBlobService.ts","../src/utils/errorToString.ts","../src/configs/logger.ts","../src/configs/database.ts","../src/configs/env.ts","../src/configs/cors/allowedOrigins.ts","../src/configs/cors/corsOptions.ts","../src/data-structures/array/CircularArray.ts","../src/data-structures/array/DynamicArray.ts","../src/data-structures/array/StaticArray.ts","../src/data-structures/graph/AdjacencyList.ts","../src/data-structures/graph/AdjacencyMatrix.ts","../src/data-structures/graph/DirectedGraph.ts","../src/data-structures/graph/Graph.ts","../src/data-structures/hash/ConsistentHash.ts","../src/data-structures/hash/HashMap.ts","../src/data-structures/hash/HashSet.ts","../src/data-structures/linked-list/Node.ts","../src/data-structures/linked-list/DoublyLinkedList.ts","../src/data-structures/hash/LFUCache.ts","../src/data-structures/hash/LRUCache.ts","../src/data-structures/heap/BinaryHeap.ts","../src/data-structures/heap/FibonacciHeap.ts","../src/data-structures/heap/MaxHeap.ts","../src/data-structures/heap/MinHeap.ts","../src/data-structures/heap/PairingHeap.ts","../src/data-structures/linked-list/CircularLinkedList.ts","../src/data-structures/linked-list/SinglyLinkedList.ts","../src/data-structures/probabilistic/BloomFilter.ts","../src/data-structures/probabilistic/CountMinSketch.ts","../src/data-structures/probabilistic/HyperLogLog.ts","../src/data-structures/queue/CircularQueue.ts","../src/data-structures/queue/Deque.ts","../src/data-structures/queue/PriorityQueue.ts","../src/data-structures/queue/Queue.ts","../src/data-structures/set/DisjointSetUnion.ts","../src/data-structures/set/MultiSet.ts","../src/data-structures/set/OrderedSet.ts","../src/data-structures/set/Set.ts","../src/data-structures/spatial/KDTree.ts","../src/data-structures/spatial/QuadTree.ts","../src/data-structures/stack/MaxStack.ts","../src/data-structures/stack/MinStack.ts","../src/data-structures/stack/Stack.ts","../src/data-structures/string/SuffixArray.ts","../src/data-structures/string/SuffixTree.ts","../src/data-structures/table/SparseTable.ts","../src/data-structures/tree/balanced/AVLTree.ts","../src/data-structures/tree/balanced/RedBlackTree.ts","../src/data-structures/tree/balanced/SplayTree.ts","../src/data-structures/tree/binary/BinarySearchTree.ts","../src/data-structures/tree/binary/BinaryTree.ts","../src/data-structures/tree/multiway/BPlusTree.ts","../src/data-structures/tree/multiway/BTree.ts","../src/data-structures/tree/prefix/RadixTree.ts","../src/data-structures/tree/prefix/TernarySearchTree.ts","../src/data-structures/tree/prefix/Trie.ts","../src/data-structures/tree/range/FenwickTree.ts","../src/data-structures/tree/range/IntervalTree.ts","../src/data-structures/tree/range/SegmentTree.ts","../src/middlewares/auth.middleware.ts","../src/middlewares/error.middleware.ts","../src/middlewares/validate.middleware.ts","../src/services/base.service.ts","../src/utils/time.ts"],"names":["AppError","message","statusCode","options","APIResponse","_APIResponse","res","success","data","meta","body","asyncHandler","fn","req","next","APIFeatures","query","queryString","queryObj","el","queryStr","match","sortBy","fields","skip","populateOptions","apiFeatures_default","APIFactory","Model","filter","features","docs","doc","AzureBlobService","config","connectionString","accountName","accountKey","containerName","BlobServiceClient","StorageSharedKeyCredential","localPath","blobName","onProgress","blockBlobClient","fileSize","fs","readStream","ev","percent","downloadPath","response","downloaded","resolve","reject","writable","chunk","prefix","result","blob","errorToString","error","Logger","msg","logger","connectMongoDB","mongoose","dotenv","loadEnv","schema","value","createAllowedOrigins","origins","defaults","allowedOrigins","origin","createCorsOptions","callback","CircularArray","capacity","i","index","DynamicArray","initialCapacity","newCapacity","newData","removed","StaticArray","_StaticArray","size","initialValue","copy","AdjacencyList","vertex","edges","from","to","weight","e","AdjacencyMatrix","directed","row","j","DirectedGraph","start","visited","queue","edge","visit","Graph","reverse","ConsistentHash","replicas","node","hash","key","ringKey","a","b","low","high","mid","HashMap","bucket","entry","entryIndex","strKey","oldBuckets","HashMap_default","HashSet","Node","DoublyLinkedList","current","LFUCache","existing","oldFreq","oldList","list","lruEntry","freq","LRUCache","existingNode","newNode","lruKey","BinaryHeap","comparator","initial","root","parent","length","left","right","smallest","BinaryHeap_default","FibNode","FibonacciHeap","compareFn","other","r","min","child","newKey","table","x","d","y","n","c","z","MaxHeap","MinHeap","PairingNode","PairingHeap","first","siblings","merged","CircularLinkedList","prev","SinglyLinkedList","v","BloomFilter","hashCount","hashes","hash1","hash2","combined","str","seed","CountMinSketch","width","depth","_","count","HyperLogLog","p","remaining","rank","sum","zeros","estimate","m","CircularQueue","Deque","PriorityQueue","priority","last","Queue","DisjointSetUnion","rootX","rootY","rankX","rankY","roots","MultiSet","_MultiSet","iterable","total","minCount","OrderedSet","_OrderedSet","Set","_Set","KDNode","point","axis","KDTree","points","dimensions","target","bestPoint","bestValue","bestDist","search","dist","diff","near","far","max","median","QuadNode","_QuadNode","boundary","containsPoint","range","found","intersects","w","h","hw","hh","QuadTree","rect","MaxStack","MinStack","Stack","SuffixArray","text","s","sa","temp","k","ra","rb","curr","same","End","SuffixTreeNode","end","currentEnd","SuffixTree","pattern","pos","lastNewNode","edgeChar","splitEnd","split","leaf","SparseTable","arr","combine","maxK","len","l","AVLNode","AVLTree","cmp","successor","t2","balance","RBNode","RedBlackTree","grandparent","uncle","yOriginalColor","sibling","u","SplayNode","SplayTree","maxLeft","BSTNode","BinarySearchTree","TreeNode","BinaryTree","rootValue","BPlusNode","BPlusTree","minDegree","newRoot","promotedKey","leftSibling","rightSibling","BTreeNode","BTree","t","middle","idx","nextIdx","leftChild","rightChild","pred","succ","RadixNode","RadixTree","word","matched","common","edgeSuffix","wordSuffix","splitNode","exact","nextEdge","nextNode","TSTNode","char","TernarySearchTree","TrieNode","Trie","FenwickTree","sizeOrArray","IntervalNode","interval","IntervalTree","SegmentTree","mergeFn","identity","leftResult","rightResult","authMiddleware","_req","_res","handleCastErrorDB","err","handleDuplicateFieldsDB","handleValidationErrorDB","errors","handleJWTError","handleJWTExpiredError","GlobalErrorHandler","isProd","_next","validate","BaseService","model","resourceName","id","milliseconds","seconds","minutes","hours","days","toSeconds","ms","toMinutes","toHours","sleep"],"mappings":"gJAAO,IAAMA,CAAAA,CAAN,cAAuB,KAAM,CAClC,UAAA,CACA,OACA,aAAA,CACA,IAAA,CACA,OAAA,CAEA,WAAA,CACEC,CAAAA,CACAC,CAAAA,CAAqB,IACrBC,CAAAA,CACA,CACA,KAAA,CAAMF,CAAO,CAAA,CAEb,IAAA,CAAK,UAAA,CAAaC,CAAAA,CAClB,IAAA,CAAK,MAAA,CAAS,CAAA,EAAGA,CAAU,CAAA,CAAA,CAAG,UAAA,CAAW,GAAG,CAAA,CAAI,MAAA,CAAS,OAAA,CACzD,IAAA,CAAK,aAAA,CAAgB,IAAA,CACrB,KAAK,IAAA,CAAOC,CAAAA,EAAS,IAAA,CACrB,IAAA,CAAK,OAAA,CAAUA,CAAAA,EAAS,QAExB,KAAA,CAAM,iBAAA,CAAkB,IAAA,CAAM,IAAA,CAAK,WAAW,EAChD,CACF,ECpBO,IAAMC,CAAAA,CAAN,MAAMC,CAAY,CACvB,OAAO,KACLC,CAAAA,CACAH,CAAAA,CAOA,CACA,GAAM,CACJ,UAAA,CAAAD,EAAa,GAAA,CACb,OAAA,CAAAK,CAAAA,CAAU,IAAA,CACV,OAAA,CAAAN,CAAAA,CAAU,UACV,IAAA,CAAAO,CAAAA,CACA,IAAA,CAAAC,CACF,CAAA,CAAIN,CAAAA,CAEJ,GAAID,CAAAA,GAAe,GAAA,CACjB,OAAOI,CAAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,MAAK,CAG9B,IAAMI,CAAAA,CAAgC,CAAE,OAAA,CAAAH,CAAAA,CAAS,OAAA,CAAAN,CAAQ,CAAA,CACzD,OAAIO,CAAAA,GAAS,MAAA,GAAWE,CAAAA,CAAK,IAAA,CAAOF,GAChCC,CAAAA,GAAS,MAAA,GAAWC,CAAAA,CAAK,IAAA,CAAOD,CAAAA,CAAAA,CAE7BH,CAAAA,CAAI,MAAA,CAAOJ,CAAU,CAAA,CAAE,IAAA,CAAKQ,CAAI,CACzC,CAEA,OAAO,GAAGJ,CAAAA,CAAeE,CAAAA,CAAeP,CAAAA,CAAkBQ,CAAAA,CAAgB,CACxE,OAAOJ,EAAY,IAAA,CAAKC,CAAAA,CAAK,CAAE,UAAA,CAAY,GAAA,CAAK,IAAA,CAAAE,EAAM,OAAA,CAAAP,CAAAA,CAAS,IAAA,CAAAQ,CAAK,CAAC,CACvE,CAEA,OAAO,OAAA,CAAQH,CAAAA,CAAeE,CAAAA,CAAeP,CAAAA,CAAkB,CAC7D,OAAOI,EAAY,IAAA,CAAKC,CAAAA,CAAK,CAAE,UAAA,CAAY,GAAA,CAAK,IAAA,CAAAE,CAAAA,CAAM,OAAA,CAAAP,CAAQ,CAAC,CACjE,CAEA,OAAO,SAAA,CAAUK,EAAe,CAC9B,OAAOD,CAAAA,CAAY,IAAA,CAAKC,CAAAA,CAAK,CAAE,UAAA,CAAY,GAAI,CAAC,CAClD,CAGA,OAAO,KAAA,CAAMA,CAAAA,CAAeL,EAAkBC,CAAAA,CAAqB,GAAA,CAAK,CACtE,OAAOG,CAAAA,CAAY,IAAA,CAAKC,EAAK,CAC3B,OAAA,CAAS,KAAA,CACT,UAAA,CAAAJ,CAAAA,CACA,OAAA,CAAAD,CACF,CAAC,CACH,CACF,EClDO,IAAMU,CAAAA,CACVC,CAAAA,EACD,CAACC,CAAAA,CAAcP,CAAAA,CAAeQ,CAAAA,GAC5B,OAAA,CAAQ,OAAA,CAAQF,CAAAA,CAAGC,EAAKP,CAAAA,CAAKQ,CAAI,CAAC,CAAA,CAAE,KAAA,CAAMA,CAAI,ECAlD,IAAMC,CAAAA,CAAN,KAAqB,CACZ,KAAA,CACA,WAAA,CACA,IAAA,CACA,MAEP,WAAA,CAAYC,CAAAA,CAAsBC,CAAAA,CAAsC,CACtE,IAAA,CAAK,KAAA,CAAQD,CAAAA,CACb,IAAA,CAAK,WAAA,CAAcC,CAAAA,CACnB,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,MAAQ,IACf,CAEA,MAAA,EAAe,CACb,IAAMC,CAAAA,CAAW,CAAE,GAAG,IAAA,CAAK,WAAY,CAAA,CAEvC,CAAC,MAAA,CAAQ,OAAQ,OAAA,CAAS,QAAQ,CAAA,CAAE,OAAA,CAASC,CAAAA,EAAO,OAAOD,CAAAA,CAASC,CAAE,CAAC,CAAA,CAEvE,IAAIC,CAAAA,CAAW,IAAA,CAAK,SAAA,CAAUF,CAAQ,CAAA,CACtC,OAAAE,CAAAA,CAAWA,CAAAA,CAAS,OAAA,CAClB,yBAAA,CACCC,GAAU,CAAA,CAAA,EAAIA,CAAK,CAAA,CACtB,CAAA,CAEA,IAAA,CAAK,KAAA,CAAQ,KAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMD,CAAQ,CAAC,CAAA,CAE1C,IACT,CAEA,IAAA,EAAa,CACX,GAAI,IAAA,CAAK,WAAA,CAAY,KAAM,CACzB,IAAME,CAAAA,CAAS,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,EAChE,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAM,EACrC,CAAA,KACE,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,YAAY,EAG3C,OAAO,IACT,CAEA,WAAA,EAAoB,CAClB,GAAI,IAAA,CAAK,WAAA,CAAY,MAAA,CAAQ,CAC3B,IAAMC,CAAAA,CAAS,MAAA,CAAO,IAAA,CAAK,YAAY,MAAM,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAClE,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAM,EACvC,CAAA,KACE,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,CAGvC,OAAO,IACT,CAEA,QAAA,EAAiB,CACf,KAAK,IAAA,CAAO,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,EAAK,CAAA,CAC7C,IAAA,CAAK,KAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA,EAAK,IAE/C,IAAMC,CAAAA,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAO,CAAA,EAAK,IAAA,CAAK,KAAA,CAEpC,OAAA,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAI,CAAA,CAAE,MAAM,IAAA,CAAK,KAAK,CAAA,CAE5C,IACT,CAEA,QAAA,CAASC,CAAAA,CAA6D,CACpE,OAAIA,CAAAA,GACF,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,SAASA,CAAe,CAAA,CAAA,CAG3C,IACT,CACF,CAAA,CAEOC,CAAAA,CAAQX,ECtDR,IAAMY,CAAAA,CAAN,KAAiB,CACtB,OAAO,MAAA,CAAUC,EAAiBzB,CAAAA,CAAgC,EAAC,CAAG,CACpE,OAAOQ,CAAAA,CAAa,MAAOE,CAAAA,CAAKP,CAAAA,GAAQ,CACtC,IAAMuB,CAAAA,CAAS1B,CAAAA,CAAQ,MAAA,CAASA,EAAQ,MAAA,CAAOU,CAAG,CAAA,CAAI,EAAC,CAEjDiB,CAAAA,CAAW,IAAIJ,CAAAA,CAAYE,CAAAA,CAAM,IAAA,CAAKC,CAAM,CAAA,CAAGhB,CAAAA,CAAI,KAAK,EAC3D,MAAA,EAAO,CACP,IAAA,EAAK,CACL,WAAA,EAAY,CACZ,QAAA,EAAS,CACT,QAAA,CAASV,CAAAA,CAAQ,QAAQ,CAAA,CAEtB4B,CAAAA,CAAO,MAAMD,EAAS,KAAA,CAE5B1B,CAAAA,CAAY,EAAA,CACVE,CAAAA,CACAyB,CAAAA,CACA5B,CAAAA,CAAQ,SAAW,8BAAA,CACnB,CACE,KAAA,CAAO4B,CAAAA,CAAK,MAAA,CACZ,IAAA,CAAMD,EAAS,IAAA,CACf,KAAA,CAAOA,CAAAA,CAAS,KAClB,CACF,EACF,CAAC,CACH,CAEA,OAAO,MAAA,CAAUF,CAAAA,CAAiBzB,CAAAA,CAAgC,GAAI,CACpE,OAAOQ,CAAAA,CAAa,MAAOE,CAAAA,CAAKP,CAAAA,GAAQ,CACtC,IAAIU,CAAAA,CAAQY,CAAAA,CAAM,QAAA,CAASf,CAAAA,CAAI,MAAA,CAAO,EAAE,CAAA,CAEpCV,CAAAA,CAAQ,QAAA,GACVa,CAAAA,CAAQA,CAAAA,CAAM,QAAA,CACZb,CAAAA,CAAQ,QACV,CAAA,CAAA,CAGF,IAAM6B,CAAAA,CAAM,MAAMhB,CAAAA,CAElB,GAAI,CAACgB,CAAAA,CACH,MAAM,IAAIhC,CAAAA,CACRG,CAAAA,CAAQ,eAAA,EAAmB,qBAC3B,GAAA,CACA,CAAE,IAAA,CAAM,oBAAqB,CAC/B,CAAA,CAGFC,EAAY,EAAA,CAAGE,CAAAA,CAAK0B,CAAG,EACzB,CAAC,CACH,CAEA,OAAO,SAAA,CAAaJ,CAAAA,CAAiBzB,CAAAA,CAAgC,EAAC,CAAG,CACvE,OAAOQ,CAAAA,CAAa,MAAOE,CAAAA,CAAKP,CAAAA,GAAQ,CACtC,IAAM0B,CAAAA,CAAM,MAAMJ,CAAAA,CAAM,MAAA,CAAOf,CAAAA,CAAI,IAAI,CAAA,CAEvCT,CAAAA,CAAY,QACVE,CAAAA,CACA0B,CAAAA,CACA7B,CAAAA,CAAQ,OAAA,EAAW,+BACrB,EACF,CAAC,CACH,CAEA,OAAO,SAAA,CAAayB,CAAAA,CAAiBzB,CAAAA,CAAgC,GAAI,CACvE,OAAOQ,CAAAA,CAAa,MAAOE,CAAAA,CAAKP,CAAAA,GAAQ,CACtC,IAAM0B,CAAAA,CAAM,MAAMJ,CAAAA,CAAM,iBAAA,CACtBf,CAAAA,CAAI,OAAO,EAAA,CACXA,CAAAA,CAAI,IAAA,CACJ,CACE,GAAA,CAAK,IAAA,CACL,aAAA,CAAe,IACjB,CACF,CAAA,CAEA,GAAI,CAACmB,CAAAA,CACH,MAAM,IAAIhC,CAAAA,CACRG,CAAAA,CAAQ,eAAA,EAAmB,oBAAA,CAC3B,GACF,CAAA,CAGFC,CAAAA,CAAY,EAAA,CACVE,CAAAA,CACA0B,CAAAA,CACA7B,CAAAA,CAAQ,OAAA,EAAW,+BACrB,EACF,CAAC,CACH,CAEA,OAAO,SAAA,CAAayB,CAAAA,CAAiBzB,CAAAA,CAAgC,EAAC,CAAG,CACvE,OAAOQ,CAAAA,CAAa,MAAOE,CAAAA,CAAKP,CAAAA,GAAQ,CAGtC,GAAI,CAFQ,MAAMsB,CAAAA,CAAM,iBAAA,CAAkBf,CAAAA,CAAI,OAAO,EAAE,CAAA,CAGrD,MAAM,IAAIb,CAAAA,CACRG,CAAAA,CAAQ,iBAAmB,oBAAA,CAC3B,GACF,CAAA,CAGFC,CAAAA,CAAY,SAAA,CAAUE,CAAG,EAC3B,CAAC,CACH,CACF,EC5GO,IAAM2B,CAAAA,CAAN,KAAuB,CACpB,aAAA,CACA,iBAAA,CACA,eAAA,CACA,mBAAA,CAER,WAAA,CAAYC,EAAyB,CACnC,GAAM,CAAE,gBAAA,CAAAC,CAAAA,CAAkB,WAAA,CAAAC,CAAAA,CAAa,UAAA,CAAAC,CAAAA,CAAY,aAAA,CAAAC,CAAc,CAAA,CAAIJ,CAAAA,CAErE,IAAA,CAAK,cAAgBI,CAAAA,CAErB,IAAA,CAAK,iBAAA,CACHC,iBAAAA,CAAkB,oBAAA,CAAqBJ,CAAgB,EAEzD,IAAA,CAAK,eAAA,CACH,IAAA,CAAK,iBAAA,CAAkB,kBAAA,CAAmBG,CAAa,EAEzD,IAAA,CAAK,mBAAA,CAAsB,IAAIE,0BAAAA,CAC7BJ,CAAAA,CACAC,CACF,EACF,CAGA,MAAM,UAAA,CACJI,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACiB,CACjB,IAAMC,CAAAA,CACJ,IAAA,CAAK,eAAA,CAAgB,kBAAA,CAAmBF,CAAQ,CAAA,CAE5CG,EAAWC,CAAAA,CAAG,QAAA,CAASL,CAAS,CAAA,CAAE,IAAA,CAClCM,CAAAA,CAAaD,EAAG,gBAAA,CAAiBL,CAAS,CAAA,CAEhD,OAAA,MAAMG,CAAAA,CAAgB,YAAA,CACpBG,CAAAA,CACA,CAAA,CAAI,IAAA,CAAO,IAAA,CACX,EAAA,CACA,CACE,UAAA,CAAaC,CAAAA,EAAO,CAClB,GAAIL,CAAAA,CAAY,CACd,IAAMM,CAAAA,CAAAA,CAAYD,CAAAA,CAAG,YAAcH,CAAAA,CAAY,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,CAC7DF,CAAAA,CAAWM,CAAO,EACpB,CACF,CACF,CACF,CAAA,CAEOL,CAAAA,CAAgB,GACzB,CAGA,MAAM,YAAA,CACJF,CAAAA,CACAQ,CAAAA,CACAP,CAAAA,CACe,CAEf,IAAMQ,CAAAA,CAAW,MADE,IAAA,CAAK,eAAA,CAAgB,aAAA,CAAcT,CAAQ,CAAA,CAC5B,QAAA,EAAS,CAErCG,CAAAA,CAAWM,CAAAA,CAAS,aAAA,EAAiB,CAAA,CACvCC,CAAAA,CAAa,EAEjB,OAAO,IAAI,OAAA,CAAQ,CAACC,CAAAA,CAASC,CAAAA,GAAW,CACtC,IAAMC,CAAAA,CAAWT,CAAAA,CAAG,iBAAA,CAAkBI,CAAY,CAAA,CAElDC,CAAAA,CAAS,oBAAoB,EAAA,CAAG,MAAA,CAASK,CAAAA,EAAU,CAGjD,GAFAJ,CAAAA,EAAcI,EAAM,MAAA,CAEhBb,CAAAA,EAAcE,CAAAA,CAAW,CAAA,CAAG,CAC9B,IAAMI,IAAYG,CAAAA,CAAaP,CAAAA,CAAY,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAA,CACzDF,CAAAA,CAAWM,EAAO,EACpB,CACF,CAAC,CAAA,CAEDE,CAAAA,CAAS,kBAAA,EAAoB,KAAKI,CAAQ,CAAA,CAE1CA,CAAAA,CAAS,EAAA,CAAG,QAAA,CAAUF,CAAO,CAAA,CAC7BE,CAAAA,CAAS,EAAA,CAAG,OAAA,CAASD,CAAM,EAC7B,CAAC,CACH,CAGA,MAAM,UAAA,CAAWZ,CAAAA,CAAoC,CAEnD,OAAA,MADmB,IAAA,CAAK,eAAA,CAAgB,aAAA,CAAcA,CAAQ,CAAA,CAC7C,cAAA,EAAe,CACzB,IACT,CAGA,MAAM,SAAA,CAAUe,CAAAA,CAAiB,EAAA,CAAuB,CACtD,IAAMC,CAAAA,CAAmB,EAAC,CAE1B,UAAA,IAAiBC,CAAAA,IAAQ,IAAA,CAAK,eAAA,CAAgB,aAAA,CAAc,CAAE,MAAA,CAAAF,CAAO,CAAC,CAAA,CACpEC,CAAAA,CAAO,IAAA,CAAKC,CAAAA,CAAK,IAAI,CAAA,CAGvB,OAAOD,CACT,CAGA,MAAM,UAAA,CAAWhB,EAAoC,CAEnD,OADmB,IAAA,CAAK,eAAA,CAAgB,aAAA,CAAcA,CAAQ,CAAA,CAC5C,MAAA,EACpB,CACF,EC3HO,SAASkB,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,GAAIA,CAAAA,YAAiB,KAAA,CACnB,OAAO,CAAA,EAAGA,CAAAA,CAAM,IAAI,CAAA,EAAA,EAAKA,CAAAA,CAAM,OAAO;AAAA,EAAKA,CAAAA,CAAM,KAAA,EAAS,EAAE,CAAA,CAAA,CAG9D,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnB,GAAI,CACF,OAAO,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAO,IAAA,CAAM,CAAC,CACtC,CAAA,KAAQ,CACN,OAAO,yBACT,CAGF,OAAO,MAAA,CAAOA,CAAK,CACrB,CCPA,IAAMC,CAAAA,CAAN,KAAa,CACH,SAAA,CAAY,IAAA,CACZ,OAAA,CAAU,IAAA,CAGlB,SAAA,CAAU3D,CAAAA,CAAyB,EAAC,CAAG,CACrC,IAAA,CAAK,SAAA,CAAYA,CAAAA,CAAQ,SAAA,EAAa,IAAA,CAAK,SAAA,CAC3C,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAQ,OAAA,EAAW,IAAA,CAAK,QACzC,CAEQ,MAAA,CAAO4D,CAAAA,CAAqB,CAClC,OAAK,IAAA,CAAK,SAAA,CACH,CAAA,CAAA,EAAI,IAAI,IAAA,EAAK,CAAE,WAAA,EAAa,CAAA,EAAA,EAAKA,CAAG,CAAA,CAAA,CADfA,CAE9B,CAEQ,MAAA,CAAOA,CAAAA,CAAmB,CAC3B,IAAA,CAAK,OAAA,EACV,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,MAAA,CAAOA,CAAG,CAAC,EAC9B,CAGA,OAAA,CAAQA,CAAAA,CAAmB,CACzB,IAAA,CAAK,MAAA,CAAO,CAAA,OAAA,EAAKA,CAAG,CAAA,CAAE,EACxB,CAEA,IAAA,CAAKA,CAAAA,CAAmB,CACtB,IAAA,CAAK,MAAA,CAAO,CAAA,aAAA,EAAMA,CAAG,CAAA,CAAE,EACzB,CAEA,OAAA,CAAQA,CAAAA,CAAmB,CACzB,IAAA,CAAK,MAAA,CAAO,CAAA,aAAA,EAAMA,CAAG,CAAA,CAAE,EACzB,CAEA,MAAA,CAAO9D,CAAAA,CAAiB4D,CAAAA,CAAuB,CACzCA,CAAAA,CACF,IAAA,CAAK,MAAA,CAAO,CAAA,OAAA,EAAK5D,CAAO;AAAA,EAAK2D,CAAAA,CAAcC,CAAK,CAAC,CAAA,CAAE,CAAA,CAEnD,IAAA,CAAK,MAAA,CAAO,CAAA,OAAA,EAAK5D,CAAO,CAAA,CAAE,EAE9B,CAEA,GAAA,CAAI8D,EAAmB,CACrB,IAAA,CAAK,MAAA,CAAO,CAAA,OAAA,EAAKA,CAAG,CAAA,CAAE,EACxB,CACF,CAAA,CAEaC,CAAAA,CAAS,IAAIF,EC9C1B,eAAsBG,EAAAA,CAAe/B,EAAuC,CAC1E,GAAI,CACFgC,CAAAA,CAAS,GAAA,CAAI,aAAA,CAAe,CAAA,CAAI,CAAA,CAEhC,MAAMA,CAAAA,CAAS,OAAA,CAAQhC,CAAAA,CAAO,GAAG,CAAA,CAEjC8B,CAAAA,CAAO,OAAA,CAAQ,iCAAiC,CAAA,CAEhD,OAAA,CAAQ,EAAA,CAAG,QAAA,CAAU,SAAY,CAC/B,MAAME,CAAAA,CAAS,UAAA,CAAW,KAAA,EAAM,CAChCF,CAAAA,CAAO,OAAA,CAAQ,4BAA4B,CAAA,CAC3C,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAAC,EACH,CAAA,MAASH,CAAAA,CAAgB,CACvBG,CAAAA,CAAO,MAAA,CAAO,4BAA4B,CAAA,CAEtCH,CAAAA,YAAiB,KAAA,EACnBG,CAAAA,CAAO,MAAA,CAAOH,CAAAA,CAAM,OAAO,CAAA,CAG7B,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CACF,CCxBAM,GAAO,MAAA,CAAO,CAAE,KAAA,CAAO,IAAK,CAAC,CAAA,CAMtB,SAASC,EAAAA,CAAWC,CAAAA,CAAgC,CACzD,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAO,KAAA,CAAAT,CAAM,CAAA,CAAIQ,CAAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAK,CACpD,UAAA,CAAY,KAAA,CACZ,YAAA,CAAc,IAChB,CAAC,CAAA,CAED,GAAIR,CAAAA,CACF,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAA2BA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAG5D,OAAAG,CAAAA,CAAO,OAAA,CAAQ,uBAAuB,CAAA,CAE/BM,CACT,CCnBO,SAASC,EAAAA,CACdpE,CAAAA,CAAiC,EAAC,CACxB,CACV,GAAM,CAAE,OAAA,CAAAqE,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAW,CAAC,uBAAuB,CAAE,EAAItE,CAAAA,CAEtDuE,CAAAA,CAA2B,EAAC,CAEhC,OAAI,OAAOF,CAAAA,EAAY,QAAA,GACrBE,CAAAA,CAAiBF,CAAAA,CACd,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAKG,CAAAA,EAAWA,CAAAA,CAAO,IAAA,EAAM,CAAA,CAC7B,MAAA,CAAO,OAAO,CAAA,CAAA,CAGf,KAAA,CAAM,OAAA,CAAQH,CAAO,CAAA,GACvBE,CAAAA,CAAiBF,CAAAA,CAAQ,GAAA,CAAKG,CAAAA,EAAWA,EAAO,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAA,CAIpED,CAAAA,CAAe,MAAA,GAAW,CAAA,GAC5BA,CAAAA,CAAiB,CAAC,GAAGD,CAAQ,CAAA,CAAA,CAGxBC,CACT,CC3BO,SAASE,EAAAA,CAAkBF,CAAAA,CAAuC,CACvE,OAAO,CACL,MAAA,CAAOC,CAAAA,CAAQE,CAAAA,CAAU,CACvB,OAAI,CAACF,CAAAA,EAAUD,CAAAA,CAAe,SAASC,CAAM,CAAA,CACpCE,CAAAA,CAAS,IAAA,CAAM,IAAI,CAAA,CAGrBA,CAAAA,CAAS,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiBF,CAAM,CAAA,eAAA,CAAiB,CAAC,CACrE,CAAA,CAEA,WAAA,CAAa,IAAA,CAEb,OAAA,CAAS,CAAC,KAAA,CAAO,MAAA,CAAQ,KAAA,CAAO,OAAA,CAAS,QAAA,CAAU,SAAS,CAAA,CAE5D,cAAA,CAAgB,CACd,cAAA,CACA,eAAA,CACA,mBACA,QACF,CAAA,CAEA,cAAA,CAAgB,CAAC,YAAY,CAAA,CAE7B,oBAAA,CAAsB,GACxB,CACF,CCPO,IAAMG,CAAAA,CAAN,KAA8C,CAClC,SACT,IAAA,CACA,IAAA,CACA,IAAA,CACA,MAAA,CAER,WAAA,CAAYC,CAAAA,CAAkB,CAC5B,GAAI,CAAC,MAAA,CAAO,SAAA,CAAUA,CAAQ,CAAA,EAAKA,CAAAA,EAAY,EAC7C,MAAM,IAAI,KAAA,CAAM,mDAAmD,CAAA,CAGrE,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAChB,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAqBA,CAAQ,CAAA,CAC7C,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,MAAA,CAAS,EAChB,CAGA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MACd,CAGA,aAAsB,CACpB,OAAO,IAAA,CAAK,QACd,CAGA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,MAAA,GAAW,CACzB,CAGA,MAAA,EAAkB,CAChB,OAAO,IAAA,CAAK,MAAA,GAAW,IAAA,CAAK,QAC9B,CAGA,OAAA,CAAQT,CAAAA,CAAgB,CACtB,GAAI,IAAA,CAAK,MAAA,EAAO,CACd,MAAM,IAAI,KAAA,CAAM,uBAAuB,CAAA,CAGzC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAIA,CAAAA,CACvB,IAAA,CAAK,IAAA,CAAA,CAAQ,IAAA,CAAK,IAAA,CAAO,CAAA,EAAK,IAAA,CAAK,QAAA,CACnC,IAAA,CAAK,MAAA,GACP,CAGA,OAAA,EAAyB,CACvB,GAAI,IAAA,CAAK,OAAA,EAAQ,CACf,OAGF,IAAMA,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,EACjC,OAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAI,MAAA,CACvB,IAAA,CAAK,IAAA,CAAA,CAAQ,IAAA,CAAK,IAAA,CAAO,CAAA,EAAK,IAAA,CAAK,QAAA,CACnC,IAAA,CAAK,SAEEA,CACT,CAGA,IAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAI,MAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CACzD,CAGA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA,CAClD,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,MAAA,CAAS,EAChB,CAGA,OAAA,EAAe,CACb,IAAMZ,CAAAA,CAAc,EAAC,CAErB,IAAA,IAASsB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,OAAQA,CAAAA,EAAAA,CAAK,CACpC,IAAMC,CAAAA,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAOD,CAAAA,EAAK,IAAA,CAAK,QAAA,CACrCtB,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAKuB,CAAK,CAAM,EACnC,CAEA,OAAOvB,CACT,CAGA,EAAE,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAChC,IAAA,IAASsB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,OAAQA,CAAAA,EAAAA,CAAK,CACpC,IAAMC,CAAAA,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAOD,CAAAA,EAAK,IAAA,CAAK,QAAA,CACrC,MAAM,IAAA,CAAK,IAAA,CAAKC,CAAK,EACvB,CACF,CAGA,QAAA,EAAmB,CACjB,OAAO,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAM,CAAA,WAAA,EACtC,IAAA,CAAK,QACP,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACjC,CACF,ECvGO,IAAMC,CAAAA,CAAN,KAA6C,CAC1C,IAAA,CACA,QAAA,CACA,MAAA,CAER,WAAA,CAAYC,CAAAA,CAA0B,CAAA,CAAG,CACvC,GAAI,CAAC,MAAA,CAAO,SAAA,CAAUA,CAAe,CAAA,EAAKA,CAAAA,EAAmB,CAAA,CAC3D,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAAA,CAG/D,IAAA,CAAK,SAAWA,CAAAA,CAChB,IAAA,CAAK,MAAA,CAAS,CAAA,CACd,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAqB,IAAA,CAAK,QAAQ,EACpD,CAGA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MACd,CAGA,WAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,QACd,CAGQ,WAAA,CAAYF,CAAAA,CAAqB,CACvC,GAAI,CAAC,MAAA,CAAO,UAAUA,CAAK,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,0BAA0B,CAAA,CAG5C,GAAIA,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,EAAS,IAAA,CAAK,MAAA,CAC7B,MAAM,IAAI,UAAA,CACR,CAAA,MAAA,EAASA,CAAK,CAAA,oBAAA,EAAuB,IAAA,CAAK,MAAA,CAAS,CAAC,CAAA,CAAA,CACtD,CAEJ,CAGQ,MAAA,CAAOG,CAAAA,CAA2B,CACxC,IAAMC,CAAAA,CAAU,IAAI,KAAA,CAAqBD,CAAW,CAAA,CACpD,IAAA,IAASJ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAQA,CAAAA,EAAAA,CAC/BK,CAAAA,CAAQL,CAAC,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,CAE1B,IAAA,CAAK,IAAA,CAAOK,CAAAA,CACZ,IAAA,CAAK,QAAA,CAAWD,EAClB,CAGA,GAAA,CAAIH,CAAAA,CAA8B,CAChC,OAAA,IAAA,CAAK,WAAA,CAAYA,CAAK,EACf,IAAA,CAAK,IAAA,CAAKA,CAAK,CACxB,CAGA,GAAA,CAAIA,CAAAA,CAAeX,CAAAA,CAAgB,CACjC,IAAA,CAAK,WAAA,CAAYW,CAAK,CAAA,CACtB,IAAA,CAAK,KAAKA,CAAK,CAAA,CAAIX,EACrB,CAGA,IAAA,CAAKA,CAAAA,CAAgB,CACf,IAAA,CAAK,MAAA,GAAW,IAAA,CAAK,QAAA,EACvB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,SAAW,CAAC,CAAA,CAG/B,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,CAAIA,CAAAA,CACzB,IAAA,CAAK,MAAA,GACP,CAGA,GAAA,EAAqB,CACnB,GAAI,IAAA,CAAK,MAAA,GAAW,CAAA,CAClB,OAGF,IAAMA,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAC,CAAA,CACvC,OAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAC,CAAA,CAAI,MAAA,CAC7B,IAAA,CAAK,MAAA,EAAA,CAGD,IAAA,CAAK,MAAA,CAAS,CAAA,EAAK,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,QAAA,CAAW,CAAA,EACpD,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAA,CAAW,CAAC,CAAC,CAAC,CAAA,CAGjDA,CACT,CAGA,MAAA,CAAOW,CAAAA,CAAeX,CAAAA,CAAgB,CACpC,GAAIW,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,CAAQ,IAAA,CAAK,MAAA,CAC5B,MAAM,IAAI,UAAA,CAAW,CAAA,MAAA,EAASA,CAAK,CAAA,cAAA,CAAgB,CAAA,CAGjD,IAAA,CAAK,MAAA,GAAW,IAAA,CAAK,QAAA,EACvB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAW,CAAC,CAAA,CAG/B,IAAA,IAASD,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAQA,CAAAA,CAAIC,CAAAA,CAAOD,CAAAA,EAAAA,CACnC,KAAK,IAAA,CAAKA,CAAC,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAAI,CAAC,CAAA,CAGhC,IAAA,CAAK,IAAA,CAAKC,CAAK,CAAA,CAAIX,CAAAA,CACnB,IAAA,CAAK,SACP,CAGA,QAAA,CAASW,CAAAA,CAA8B,CACrC,IAAA,CAAK,WAAA,CAAYA,CAAK,CAAA,CAEtB,IAAMK,CAAAA,CAAU,IAAA,CAAK,IAAA,CAAKL,CAAK,CAAA,CAE/B,QAASD,CAAAA,CAAIC,CAAAA,CAAOD,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAS,CAAA,CAAGA,CAAAA,EAAAA,CACvC,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAAI,CAAC,CAAA,CAGhC,OAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAC,CAAA,CAAI,MAAA,CAC7B,IAAA,CAAK,MAAA,EAAA,CAEEM,CACT,CAGA,QAAA,CAAShB,CAAAA,CAAmB,CAC1B,QAASU,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAQA,CAAAA,EAAAA,CAC/B,GAAI,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,GAAMV,CAAAA,CACnB,OAAO,KAAA,CAGX,OAAO,MACT,CAGA,OAAA,EAAe,CACb,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAG,IAAA,CAAK,MAAM,CACvC,CAGA,KAAA,EAAc,CACZ,KAAK,IAAA,CAAO,IAAI,KAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA,CAClD,IAAA,CAAK,MAAA,CAAS,EAChB,CAGA,EAAE,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAChC,IAAA,IAASU,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAQA,CAAAA,EAAAA,CAC/B,MAAM,IAAA,CAAK,IAAA,CAAKA,CAAC,EAErB,CAGA,QAAA,EAAmB,CACjB,OAAO,CAAA,kBAAA,EAAqB,IAAA,CAAK,MAAM,CAAA,WAAA,EACrC,IAAA,CAAK,QACP,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACjC,CACF,EC7JO,IAAMO,CAAAA,CAAN,MAAMC,CAAsC,CAChC,QAAA,CACA,IAAA,CAOjB,WAAA,CAAYC,CAAAA,CAAcC,CAAAA,CAAkB,CAC1C,GAAI,CAAC,OAAO,SAAA,CAAUD,CAAI,CAAA,EAAKA,CAAAA,EAAQ,CAAA,CACrC,MAAM,IAAI,KAAA,CAAM,6CAA6C,CAAA,CAG/D,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAChB,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAqBA,CAAI,CAAA,CAErCC,CAAAA,GAAiB,MAAA,EACnB,IAAA,CAAK,IAAA,CAAKA,CAAY,EAE1B,CAGA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,QACd,CAGQ,WAAA,CAAYT,CAAAA,CAAqB,CACvC,GAAI,CAAC,MAAA,CAAO,SAAA,CAAUA,CAAK,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,0BAA0B,CAAA,CAG5C,GAAIA,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,EAAS,IAAA,CAAK,QAAA,CAC7B,MAAM,IAAI,UAAA,CACR,CAAA,MAAA,EAASA,CAAK,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAA,CAAW,CAAC,GACxD,CAEJ,CAGA,GAAA,CAAIA,CAAAA,CAA8B,CAChC,OAAA,IAAA,CAAK,WAAA,CAAYA,CAAK,CAAA,CACf,IAAA,CAAK,IAAA,CAAKA,CAAK,CACxB,CAGA,GAAA,CAAIA,CAAAA,CAAeX,CAAAA,CAAgB,CACjC,IAAA,CAAK,WAAA,CAAYW,CAAK,CAAA,CACtB,IAAA,CAAK,IAAA,CAAKA,CAAK,CAAA,CAAIX,EACrB,CAGA,IAAA,CAAKA,CAAAA,CAAgB,CACnB,IAAA,IAASU,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CACjC,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,CAAIV,EAEnB,CAGA,KAAA,EAAc,CACZ,IAAA,IAASU,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CACjC,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,CAAI,OAEnB,CAGA,QAAA,CAASV,EAAmB,CAC1B,IAAA,IAASU,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CACjC,GAAI,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,GAAMV,CAAAA,CACnB,OAAO,KAAA,CAGX,OAAO,MACT,CAGA,OAAA,CAAQA,CAAAA,CAAkB,CACxB,IAAA,IAASU,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CACjC,GAAI,KAAK,IAAA,CAAKA,CAAC,CAAA,GAAMV,CAAAA,CACnB,OAAOU,CAAAA,CAGX,OAAO,GACT,CAGA,OAAA,EAA6B,CAC3B,OAAO,CAAC,GAAG,IAAA,CAAK,IAAI,CACtB,CAGA,EAAE,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAChC,IAAA,IAASA,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CAAK,CACtC,IAAMV,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKU,CAAC,CAAA,CACrBV,CAAAA,GAAU,MAAA,GACZ,MAAMA,CAAAA,EAEV,CACF,CAGA,OAAA,CAAQO,CAAAA,CAA+D,CACrE,IAAA,IAASG,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CACjCH,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAKG,CAAC,CAAA,CAAGA,CAAC,EAE5B,CAGA,OAAwB,CACtB,IAAMW,CAAAA,CAAO,IAAIH,CAAAA,CAAe,IAAA,CAAK,QAAQ,CAAA,CAC7C,IAAA,IAASR,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,IACjCW,CAAAA,CAAK,IAAA,CAAKX,CAAC,CAAA,CAAI,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,CAE5B,OAAOW,CACT,CAGA,QAAA,EAAmB,CACjB,OAAO,eAAe,IAAA,CAAK,QAAQ,CAAA,GAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC/D,CACF,ECzHO,IAAMC,CAAAA,CAAN,KAAgC,CAC7B,IAAA,CAAkC,IAAI,GAAA,CAI9C,SAAA,CAAUC,CAAAA,CAAiB,CACpB,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIA,CAAM,CAAA,EACvB,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAQ,EAAE,EAE5B,CAEA,YAAA,CAAaA,CAAAA,CAAiB,CAC5B,IAAA,CAAK,IAAA,CAAK,MAAA,CAAOA,CAAM,CAAA,CAEvB,IAAA,IAAWC,CAAAA,IAAS,IAAA,CAAK,IAAA,CAAK,MAAA,EAAO,CACnC,IAAA,IAASd,CAAAA,CAAIc,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAGd,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CACjCc,CAAAA,CAAMd,CAAC,CAAA,CAAE,EAAA,GAAOa,CAAAA,EAClBC,EAAM,MAAA,CAAOd,CAAAA,CAAG,CAAC,EAIzB,CAEA,SAAA,CAAUa,CAAAA,CAAoB,CAC5B,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIA,CAAM,CAC7B,CAEA,WAAA,EAAmB,CACjB,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CACpC,CAIA,OAAA,CAAQE,CAAAA,CAASC,CAAAA,CAAOC,CAAAA,CAAuB,CAC7C,IAAA,CAAK,SAAA,CAAUF,CAAI,CAAA,CACnB,IAAA,CAAK,SAAA,CAAUC,CAAE,CAAA,CAEjB,IAAA,CAAK,IAAA,CAAK,GAAA,CAAID,CAAI,CAAA,CAAG,IAAA,CAAK,CAAE,EAAA,CAAAC,CAAAA,CAAI,MAAA,CAAAC,CAAO,CAAC,EAC1C,CAEA,UAAA,CAAWF,CAAAA,CAASC,CAAAA,CAAa,CAC/B,IAAMF,CAAAA,CAAQ,IAAA,CAAK,KAAK,GAAA,CAAIC,CAAI,CAAA,CAChC,GAAKD,CAAAA,CAEL,IAAA,IAAS,CAAA,CAAIA,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAG,CAAA,EAAK,CAAA,CAAG,CAAA,EAAA,CACjCA,CAAAA,CAAM,CAAC,CAAA,CAAE,EAAA,GAAOE,CAAAA,EAClBF,CAAAA,CAAM,MAAA,CAAO,CAAA,CAAG,CAAC,EAGvB,CAEA,OAAA,CAAQC,CAAAA,CAASC,CAAAA,CAAgB,CAC/B,OAAO,IAAA,CAAK,KAAK,GAAA,CAAID,CAAI,CAAA,EAAG,IAAA,CAAMG,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAOF,CAAE,CAAA,EAAK,KAC1D,CAEA,QAAA,CAASH,CAAAA,CAA8B,CACrC,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIA,CAAM,CAAA,EAAG,KAAA,EAAM,EAAK,EAC3C,CAIA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAK,KAAA,GACZ,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,IAAA,CAAK,IACnB,CACF,ECzEO,IAAMM,CAAAA,CAAN,KAAkC,CACtB,QAAA,CACT,MAAA,CACA,QAAA,CAAgB,EAAC,CACjB,QAAA,CAA2B,IAAI,GAAA,CAEvC,WAAA,CAAYC,CAAAA,CAAoB,KAAA,CAAO,CACrC,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAChB,IAAA,CAAK,MAAA,CAAS,GAChB,CAIA,SAAA,CAAUP,CAAAA,CAAiB,CACzB,GAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIA,CAAM,CAAA,CAAG,OAE/B,IAAMZ,CAAAA,CAAQ,KAAK,QAAA,CAAS,MAAA,CAC5B,IAAA,CAAK,QAAA,CAAS,IAAA,CAAKY,CAAM,CAAA,CACzB,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIA,CAAAA,CAAQZ,CAAK,CAAA,CAG/B,IAAA,IAAWoB,KAAO,IAAA,CAAK,MAAA,CACrBA,CAAAA,CAAI,IAAA,CAAK,CAAC,CAAA,CAGZ,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,KAAA,CAAMpB,CAAAA,CAAQ,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,EAC/C,CAEA,YAAA,CAAaY,CAAAA,CAAiB,CAC5B,IAAMZ,CAAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIY,CAAM,CAAA,CACtC,GAAIZ,IAAU,MAAA,CAGd,CAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAOA,CAAAA,CAAO,CAAC,CAAA,CAC7B,IAAA,CAAK,QAAA,CAAS,MAAA,CAAOY,CAAM,CAAA,CAG3B,IAAA,CAAK,MAAA,CAAO,MAAA,CAAOZ,CAAAA,CAAO,CAAC,CAAA,CAG3B,IAAA,IAAWoB,CAAAA,IAAO,IAAA,CAAK,MAAA,CACrBA,CAAAA,CAAI,MAAA,CAAOpB,CAAAA,CAAO,CAAC,CAAA,CAIrB,IAAA,IAASD,CAAAA,CAAIC,CAAAA,CAAOD,EAAI,IAAA,CAAK,QAAA,CAAS,MAAA,CAAQA,CAAAA,EAAAA,CAC5C,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,QAAA,CAASA,CAAC,CAAA,CAAGA,CAAC,EAAA,CAEzC,CAEA,SAAA,CAAUa,CAAAA,CAAoB,CAC5B,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIA,CAAM,CACjC,CAEA,WAAA,EAAmB,CACjB,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAC1B,CAIA,OAAA,CAAQE,CAAAA,CAASC,CAAAA,CAAOC,CAAAA,CAAiB,CAAA,CAAS,CAChD,IAAA,CAAK,SAAA,CAAUF,CAAI,CAAA,CACnB,IAAA,CAAK,SAAA,CAAUC,CAAE,CAAA,CAEjB,IAAM,CAAA,CAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAID,CAAI,CAAA,CAC1BO,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIN,CAAE,CAAA,CAE9B,KAAK,MAAA,CAAO,CAAC,CAAA,CAAEM,CAAC,CAAA,CAAIL,CAAAA,CAEf,IAAA,CAAK,QAAA,GACR,IAAA,CAAK,MAAA,CAAOK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAIL,CAAAA,EAExB,CAEA,UAAA,CAAWF,CAAAA,CAASC,CAAAA,CAAa,CAC/B,IAAMhB,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIe,CAAI,CAAA,CAC1BO,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAS,IAAIN,CAAE,CAAA,CAC1BhB,CAAAA,GAAM,MAAA,EAAasB,CAAAA,GAAM,MAAA,GAE7B,IAAA,CAAK,MAAA,CAAOtB,CAAC,CAAA,CAAEsB,CAAC,CAAA,CAAI,CAAA,CAEf,IAAA,CAAK,QAAA,GACR,IAAA,CAAK,MAAA,CAAOA,CAAC,CAAA,CAAEtB,CAAC,CAAA,CAAI,CAAA,CAAA,EAExB,CAEA,OAAA,CAAQe,CAAAA,CAASC,CAAAA,CAAgB,CAC/B,IAAMhB,CAAAA,CAAI,IAAA,CAAK,SAAS,GAAA,CAAIe,CAAI,CAAA,CAC1BO,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIN,CAAE,CAAA,CAC9B,OAAIhB,CAAAA,GAAM,MAAA,EAAasB,CAAAA,GAAM,MAAA,CAAkB,KAAA,CAExC,IAAA,CAAK,MAAA,CAAOtB,CAAC,CAAA,CAAEsB,CAAC,CAAA,GAAM,CAC/B,CAEA,SAAA,CAAUP,CAAAA,CAASC,CAAAA,CAA2B,CAC5C,IAAMhB,CAAAA,CAAI,IAAA,CAAK,SAAS,GAAA,CAAIe,CAAI,CAAA,CAC1BO,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIN,CAAE,CAAA,CAC9B,GAAI,EAAAhB,CAAAA,GAAM,MAAA,EAAasB,CAAAA,GAAM,QAE7B,OAAO,IAAA,CAAK,MAAA,CAAOtB,CAAC,CAAA,CAAEsB,CAAC,CAAA,EAAK,MAC9B,CAIA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,QAAA,CAAS,MACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,QAAA,CAAW,EAAC,CACjB,IAAA,CAAK,QAAA,CAAS,KAAA,EAAM,CACpB,IAAA,CAAK,MAAA,CAAS,GAChB,CAEA,UAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,QACd,CAKA,QAAA,EAAuB,CACrB,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAKD,CAAAA,EAAQ,CAAC,GAAGA,CAAG,CAAC,CAC1C,CACF,ECxHO,IAAME,CAAAA,CAAN,KAAgC,CAC7B,OAAA,CAAqC,IAAI,GAAA,CAIjD,SAAA,CAAUV,CAAAA,CAAiB,CACpB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAM,CAAA,EAC1B,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAQ,EAAE,EAE/B,CAEA,YAAA,CAAaA,CAAAA,CAAiB,CAC5B,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOA,CAAM,CAAA,CAE1B,IAAA,IAAWC,CAAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,CACtC,IAAA,IAASd,CAAAA,CAAIc,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAGd,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CACjCc,CAAAA,CAAMd,CAAC,CAAA,CAAE,EAAA,GAAOa,CAAAA,EAClBC,CAAAA,CAAM,MAAA,CAAOd,CAAAA,CAAG,CAAC,EAIzB,CAEA,UAAUa,CAAAA,CAAoB,CAC5B,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAM,CAChC,CAEA,WAAA,EAAmB,CACjB,OAAO,KAAA,CAAM,IAAA,CAAK,KAAK,OAAA,CAAQ,IAAA,EAAM,CACvC,CAIA,OAAA,CAAQE,CAAAA,CAASC,CAAAA,CAAOC,CAAAA,CAAuB,CAC7C,IAAA,CAAK,SAAA,CAAUF,CAAI,CAAA,CACnB,KAAK,SAAA,CAAUC,CAAE,CAAA,CAEjB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAID,CAAI,CAAA,CAAG,IAAA,CAAK,CAAE,EAAA,CAAAC,CAAAA,CAAI,MAAA,CAAAC,CAAO,CAAC,EAC7C,CAEA,UAAA,CAAWF,CAAAA,CAASC,CAAAA,CAAa,CAC/B,IAAMF,CAAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIC,CAAI,CAAA,CACnC,GAAKD,CAAAA,CAEL,QAAS,CAAA,CAAIA,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAG,CAAA,EAAK,CAAA,CAAG,CAAA,EAAA,CACjCA,CAAAA,CAAM,CAAC,CAAA,CAAE,EAAA,GAAOE,CAAAA,EAClBF,CAAAA,CAAM,MAAA,CAAO,CAAA,CAAG,CAAC,EAGvB,CAEA,OAAA,CAAQC,CAAAA,CAASC,CAAAA,CAAgB,CAC/B,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAID,CAAI,CAAA,EAAG,IAAA,CAAMG,CAAAA,EAAMA,EAAE,EAAA,GAAOF,CAAE,CAAA,EAAK,KAC7D,CAEA,QAAA,CAASH,CAAAA,CAA8B,CACrC,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAM,CAAA,EAAG,KAAA,EAAM,EAAK,EAC9C,CAOA,GAAA,CAAIW,CAAAA,CAAe,CACjB,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAK,CAAA,CAAG,OAAO,EAAC,CAEtC,IAAMC,CAAAA,CAAU,IAAI,GAAA,CACdC,CAAAA,CAAa,EAAC,CACdhD,CAAAA,CAAc,EAAC,CAKrB,IAHA+C,CAAAA,CAAQ,GAAA,CAAID,CAAK,CAAA,CACjBE,CAAAA,CAAM,IAAA,CAAKF,CAAK,CAAA,CAETE,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG,CACvB,IAAMb,CAAAA,CAASa,CAAAA,CAAM,KAAA,EAAM,CAC3BhD,CAAAA,CAAO,KAAKmC,CAAM,CAAA,CAElB,IAAA,IAAWc,CAAAA,IAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAId,CAAM,CAAA,CACnCY,CAAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAK,EAAE,CAAA,GACtBF,CAAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAK,EAAE,CAAA,CACnBD,CAAAA,CAAM,IAAA,CAAKC,CAAAA,CAAK,EAAE,CAAA,EAGxB,CAEA,OAAOjD,CACT,CAKA,GAAA,CAAI8C,CAAAA,CAAe,CACjB,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAK,CAAA,CAAG,OAAO,EAAC,CAEtC,IAAMC,CAAAA,CAAU,IAAI,GAAA,CACd/C,CAAAA,CAAc,EAAC,CAEfkD,CAAAA,CAASf,CAAAA,EAAoB,CACjCY,CAAAA,CAAQ,GAAA,CAAIZ,CAAM,CAAA,CAClBnC,CAAAA,CAAO,IAAA,CAAKmC,CAAM,CAAA,CAElB,IAAA,IAAWc,CAAAA,IAAQ,KAAK,OAAA,CAAQ,GAAA,CAAId,CAAM,CAAA,CACnCY,CAAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAK,EAAE,CAAA,EACtBC,CAAAA,CAAMD,CAAAA,CAAK,EAAE,EAGnB,CAAA,CAEA,OAAAC,CAAAA,CAAMJ,CAAK,CAAA,CACJ9C,CACT,CAIA,KAAA,EAAc,CACZ,IAAA,CAAK,OAAA,CAAQ,KAAA,GACf,CAEA,IAAA,EAAe,CACb,OAAO,KAAK,OAAA,CAAQ,IACtB,CAEA,UAAA,EAAmB,CACjB,OAAO,KACT,CACF,EC9HO,IAAMmD,CAAAA,CAAN,KAAwB,CACZ,QAAA,CACT,QAA6B,IAAI,GAAA,CAEzC,WAAA,CAAYT,CAAAA,CAAoB,KAAA,CAAO,CACrC,IAAA,CAAK,QAAA,CAAWA,EAClB,CAIA,SAAA,CAAUP,CAAAA,CAAiB,CACpB,IAAA,CAAK,QAAQ,GAAA,CAAIA,CAAM,CAAA,EAC1B,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAQ,EAAE,EAE/B,CAEA,YAAA,CAAaA,CAAAA,CAAiB,CAC5B,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOA,CAAM,CAAA,CAE1B,IAAA,IAAWC,CAAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,CACtC,IAAA,IAASd,CAAAA,CAAIc,CAAAA,CAAM,MAAA,CAAS,CAAA,CAAGd,GAAK,CAAA,CAAGA,CAAAA,EAAAA,CACjCc,CAAAA,CAAMd,CAAC,CAAA,CAAE,EAAA,GAAOa,CAAAA,EAClBC,CAAAA,CAAM,MAAA,CAAOd,CAAAA,CAAG,CAAC,EAIzB,CAEA,SAAA,CAAUa,CAAAA,CAAoB,CAC5B,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAM,CAChC,CAEA,WAAA,EAAmB,CACjB,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,MAAM,CACvC,CAIA,OAAA,CAAQE,CAAAA,CAASC,CAAAA,CAAOC,CAAAA,CAAuB,CAC7C,IAAA,CAAK,SAAA,CAAUF,CAAI,CAAA,CACnB,IAAA,CAAK,SAAA,CAAUC,CAAE,CAAA,CAEjB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAID,CAAI,CAAA,CAAG,IAAA,CAAK,CAAE,EAAA,CAAAC,CAAAA,CAAI,MAAA,CAAAC,CAAO,CAAC,CAAA,CAEtC,IAAA,CAAK,UACR,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAID,CAAE,CAAA,CAAG,IAAA,CAAK,CAAE,EAAA,CAAID,CAAAA,CAAM,MAAA,CAAAE,CAAO,CAAC,EAEnD,CAEA,WAAWF,CAAAA,CAASC,CAAAA,CAAa,CAC/B,IAAMF,CAAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIC,CAAI,CAAA,CACnC,GAAID,CAAAA,CACF,IAAA,IAAS,CAAA,CAAIA,EAAM,MAAA,CAAS,CAAA,CAAG,CAAA,EAAK,CAAA,CAAG,CAAA,EAAA,CACjCA,CAAAA,CAAM,CAAC,CAAA,CAAE,EAAA,GAAOE,CAAAA,EAClBF,CAAAA,CAAM,MAAA,CAAO,CAAA,CAAG,CAAC,CAAA,CAKvB,GAAI,CAAC,IAAA,CAAK,QAAA,CAAU,CAClB,IAAMgB,CAAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAId,CAAE,CAAA,CACnC,GAAIc,CAAAA,CACF,IAAA,IAAS9B,EAAI8B,CAAAA,CAAQ,MAAA,CAAS,CAAA,CAAG9B,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CACnC8B,CAAAA,CAAQ9B,CAAC,CAAA,CAAE,EAAA,GAAOe,CAAAA,EACpBe,CAAAA,CAAQ,MAAA,CAAO9B,CAAAA,CAAG,CAAC,EAI3B,CACF,CAEA,OAAA,CAAQe,CAAAA,CAASC,CAAAA,CAAgB,CAC/B,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAID,CAAI,CAAA,EAAG,IAAA,CAAMG,CAAAA,EAAMA,EAAE,EAAA,GAAOF,CAAE,CAAA,EAAK,KAC7D,CAEA,QAAA,CAASH,CAAAA,CAAsB,CAC7B,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAM,CAAA,EAAG,KAAA,EAAM,EAAK,EAC9C,CAOA,GAAA,CAAIW,CAAAA,CAAe,CACjB,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAK,CAAA,CAAG,OAAO,EAAC,CAEtC,IAAMC,CAAAA,CAAU,IAAI,GAAA,CACdC,CAAAA,CAAa,EAAC,CACdhD,CAAAA,CAAc,EAAC,CAKrB,IAHA+C,CAAAA,CAAQ,GAAA,CAAID,CAAK,CAAA,CACjBE,CAAAA,CAAM,IAAA,CAAKF,CAAK,CAAA,CAETE,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG,CACvB,IAAMb,CAAAA,CAASa,CAAAA,CAAM,KAAA,EAAM,CAC3BhD,EAAO,IAAA,CAAKmC,CAAM,CAAA,CAElB,IAAA,IAAWc,CAAAA,IAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAId,CAAM,CAAA,CACnCY,CAAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAK,EAAE,CAAA,GACtBF,CAAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAK,EAAE,CAAA,CACnBD,CAAAA,CAAM,IAAA,CAAKC,CAAAA,CAAK,EAAE,CAAA,EAGxB,CAEA,OAAOjD,CACT,CAKA,GAAA,CAAI8C,EAAe,CACjB,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIA,CAAK,CAAA,CAAG,OAAO,EAAC,CAEtC,IAAMC,CAAAA,CAAU,IAAI,GAAA,CACd/C,CAAAA,CAAc,EAAC,CAEfkD,CAAAA,CAASf,CAAAA,EAAoB,CACjCY,CAAAA,CAAQ,GAAA,CAAIZ,CAAM,CAAA,CAClBnC,CAAAA,CAAO,IAAA,CAAKmC,CAAM,CAAA,CAElB,IAAA,IAAWc,KAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAId,CAAM,CAAA,CACnCY,CAAAA,CAAQ,GAAA,CAAIE,CAAAA,CAAK,EAAE,CAAA,EACtBC,CAAAA,CAAMD,CAAAA,CAAK,EAAE,EAGnB,CAAA,CAEA,OAAAC,CAAAA,CAAMJ,CAAK,CAAA,CACJ9C,CACT,CAIA,KAAA,EAAc,CACZ,IAAA,CAAK,OAAA,CAAQ,KAAA,GACf,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,OAAA,CAAQ,IACtB,CAEA,UAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,QACd,CACF,ECpJO,IAAMqD,EAAAA,CAAN,KAAgD,CAC7C,IAAA,CAAO,IAAI,GAAA,CACX,UAAA,CAAuB,EAAC,CACxB,QAAA,CAER,WAAA,CAAYC,CAAAA,CAAW,GAAA,CAAK,CAC1B,GAAIA,CAAAA,EAAY,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA,CAEnD,IAAA,CAAK,QAAA,CAAWA,EAClB,CAIA,OAAA,CAAQC,CAAAA,CAAe,CACrB,IAAA,IAASjC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CAAK,CACtC,IAAMkC,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAA,EAAGD,CAAI,CAAA,CAAA,EAAIjC,CAAC,CAAA,CAAE,CAAA,CACrC,IAAA,CAAK,KAAK,GAAA,CAAIkC,CAAAA,CAAMD,CAAI,CAAA,CACxB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKC,CAAI,EAC3B,CAEA,IAAA,CAAK,QAAA,GACP,CAEA,UAAA,CAAWD,CAAAA,CAAe,CACxB,IAAA,IAASjC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,QAAA,CAAUA,CAAAA,EAAAA,CAAK,CACtC,IAAMkC,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAA,EAAGD,CAAI,CAAA,CAAA,EAAIjC,CAAC,CAAA,CAAE,CAAA,CACrC,IAAA,CAAK,IAAA,CAAK,MAAA,CAAOkC,CAAI,CAAA,CACrB,IAAMjC,CAAAA,CAAQ,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQiC,CAAI,CAAA,CACtCjC,CAAAA,GAAU,EAAA,EACZ,IAAA,CAAK,UAAA,CAAW,MAAA,CAAOA,CAAAA,CAAO,CAAC,EAEnC,CACF,CAEA,OAAA,CAAQkC,CAAAA,CAAqC,CAC3C,GAAI,KAAK,IAAA,CAAK,IAAA,GAAS,CAAA,CAAG,OAE1B,IAAMD,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAOC,CAAG,CAAC,CAAA,CAE5BlC,CAAAA,CAAQ,IAAA,CAAK,iBAAiBiC,CAAI,CAAA,CAClCE,CAAAA,CAAU,IAAA,CAAK,UAAA,CAAWnC,CAAK,CAAA,CAErC,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAImC,CAAO,CAC9B,CAEA,UAAgB,CACd,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAC,CAC/C,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,QAAA,EAAS,CAAE,MACzB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAK,KAAA,EAAM,CAChB,IAAA,CAAK,UAAA,CAAa,GACpB,CAIQ,IAAA,CAAK9C,CAAAA,CAAuB,CAClC,IAAI4C,CAAAA,CAAO,CAAA,CAEX,IAAA,IAASlC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIV,CAAAA,CAAM,MAAA,CAAQU,CAAAA,EAAAA,CAChCkC,CAAAA,CAAQA,CAAAA,CAAO,EAAA,CAAK5C,CAAAA,CAAM,UAAA,CAAWU,CAAC,CAAA,GAAO,CAAA,CAG/C,OAAOkC,CACT,CAEQ,QAAA,EAAiB,CACvB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,CAACG,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,CAAIC,CAAC,EACtC,CAEQ,gBAAA,CAAiBJ,CAAAA,CAAsB,CAC7C,IAAIK,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAO,IAAA,CAAK,UAAA,CAAW,MAAA,CAAS,CAAA,CAEpC,KAAOD,CAAAA,EAAOC,CAAAA,EAAM,CAClB,IAAMC,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAA,CAAOF,CAAAA,CAAMC,CAAAA,EAAQ,CAAC,CAAA,CACvC,GAAI,KAAK,UAAA,CAAWC,CAAG,CAAA,GAAMP,CAAAA,CAAM,OAAOO,CAAAA,CACtC,IAAA,CAAK,UAAA,CAAWA,CAAG,CAAA,CAAIP,CAAAA,CAAMK,CAAAA,CAAME,CAAAA,CAAM,CAAA,CACxCD,EAAOC,CAAAA,CAAM,EACpB,CAEA,OAAOF,CAAAA,CAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAASA,CAAAA,CAAM,CAC9C,CACF,ECpFO,IAAMG,CAAAA,CAAN,KAA4C,CACzC,OAAA,CACA,QAAA,CACA,IAAA,CACS,WAAA,CAAc,GAAA,CAE/B,WAAA,CAAYvC,CAAAA,CAAkB,EAAA,CAAI,CAChC,GAAIA,CAAAA,EAAmB,CAAA,CACrB,MAAM,IAAI,KAAA,CAAM,yCAAyC,CAAA,CAG3D,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAChB,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,OAAA,CAAU,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,KAAK,QAAS,CAAA,CAAG,IAAM,EAAE,EAC/D,CAIA,GAAA,CAAIgC,CAAAA,CAAQ7C,CAAAA,CAAgB,CAC1B,IAAMW,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKkC,CAAG,CAAA,CACrBQ,CAAAA,CAAS,IAAA,CAAK,OAAA,CAAQ1C,CAAK,CAAA,CAEjC,IAAA,IAAW2C,CAAAA,IAASD,CAAAA,CAClB,GAAIC,CAAAA,CAAM,GAAA,GAAQT,CAAAA,CAAK,CACrBS,EAAM,KAAA,CAAQtD,CAAAA,CACd,MACF,CAGFqD,CAAAA,CAAO,IAAA,CAAK,CAAE,GAAA,CAAAR,CAAAA,CAAK,KAAA,CAAA7C,CAAM,CAAC,CAAA,CAC1B,IAAA,CAAK,IAAA,EAAA,CAED,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,QAAA,CAAW,IAAA,CAAK,WAAA,EACnC,IAAA,CAAK,MAAA,GAET,CAEA,GAAA,CAAI6C,CAAAA,CAAuB,CACzB,IAAMlC,CAAAA,CAAQ,KAAK,IAAA,CAAKkC,CAAG,CAAA,CACrBQ,CAAAA,CAAS,IAAA,CAAK,OAAA,CAAQ1C,CAAK,CAAA,CAEjC,IAAA,IAAW2C,CAAAA,IAASD,CAAAA,CAClB,GAAIC,CAAAA,CAAM,GAAA,GAAQT,EAChB,OAAOS,CAAAA,CAAM,KAKnB,CAEA,GAAA,CAAIT,CAAAA,CAAiB,CACnB,OAAO,IAAA,CAAK,GAAA,CAAIA,CAAG,CAAA,GAAM,MAC3B,CAEA,OAAOA,CAAAA,CAAiB,CACtB,IAAMlC,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKkC,CAAG,CAAA,CACrBQ,CAAAA,CAAS,IAAA,CAAK,OAAA,CAAQ1C,CAAK,CAAA,CAE3B4C,CAAAA,CAAaF,CAAAA,CAAO,SAAA,CAAWzB,CAAAA,EAAMA,CAAAA,CAAE,GAAA,GAAQiB,CAAG,CAAA,CACxD,OAAIU,CAAAA,GAAe,EAAA,CAAW,KAAA,EAE9BF,CAAAA,CAAO,MAAA,CAAOE,CAAAA,CAAY,CAAC,CAAA,CAC3B,KAAK,IAAA,EAAA,CACE,IAAA,CACT,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,OAAA,CAAU,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,IAAA,CAAK,QAAS,CAAA,CAAG,IAAM,EAAE,CAAA,CAC7D,IAAA,CAAK,IAAA,CAAO,EACd,CAEA,IAAA,EAAY,CACV,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAASF,CAAAA,EAAWA,CAAAA,CAAO,IAAK,CAAA,EAAM,CAAA,CAAE,GAAG,CAAC,CAClE,CAEA,MAAA,EAAc,CACZ,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAASA,CAAAA,EAAWA,CAAAA,CAAO,GAAA,CAAK,CAAA,EAAM,CAAA,CAAE,KAAK,CAAC,CACpE,CAEA,OAAA,EAAyB,CACvB,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAASA,CAAAA,EAC3BA,CAAAA,CAAO,GAAA,CAAK,GAAM,CAAC,CAAA,CAAE,GAAA,CAAK,CAAA,CAAE,KAAK,CAAW,CAC9C,CACF,CAEA,OAAA,EAAkB,CAChB,OAAO,IAAA,CAAK,IACd,CAEA,WAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,QACd,CAIQ,IAAA,CAAKR,CAAAA,CAAgB,CAC3B,IAAMW,CAAAA,CAAS,MAAA,CAAOX,CAAG,CAAA,CACrBD,CAAAA,CAAO,EAEX,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIY,CAAAA,CAAO,MAAA,CAAQ,CAAA,EAAA,CACjCZ,CAAAA,CAAAA,CAAQA,CAAAA,CAAO,EAAA,CAAKY,CAAAA,CAAO,UAAA,CAAW,CAAC,CAAA,EAAK,IAAA,CAAK,QAAA,CAGnD,OAAOZ,CACT,CAEQ,MAAA,EAAe,CACrB,IAAMa,CAAAA,CAAa,IAAA,CAAK,OAAA,CACxB,IAAA,CAAK,QAAA,EAAY,CAAA,CACjB,IAAA,CAAK,IAAA,CAAO,EACZ,IAAA,CAAK,OAAA,CAAU,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,IAAA,CAAK,QAAS,CAAA,CAAG,IAAM,EAAE,CAAA,CAE7D,IAAA,IAAWJ,CAAAA,IAAUI,CAAAA,CACnB,IAAA,IAAWH,CAAAA,IAASD,CAAAA,CAClB,IAAA,CAAK,GAAA,CAAIC,CAAAA,CAAM,GAAA,CAAKA,CAAAA,CAAM,KAAK,EAGrC,CACF,CAAA,CAEOI,EAAAA,CAAQN,MC5HFO,EAAAA,CAAN,KAAyC,CACtC,GAAA,CAER,WAAA,CAAY9C,CAAAA,CAAkB,EAAA,CAAI,CAChC,IAAA,CAAK,GAAA,CAAM,IAAI6C,EAAAA,CAAoB7C,CAAe,EACpD,CAIA,GAAA,CAAIb,CAAAA,CAAgB,CAClB,IAAA,CAAK,GAAA,CAAI,GAAA,CAAIA,CAAAA,CAAO,IAAI,EAC1B,CAEA,GAAA,CAAIA,CAAAA,CAAmB,CACrB,OAAO,IAAA,CAAK,IAAI,GAAA,CAAIA,CAAK,CAC3B,CAEA,MAAA,CAAOA,CAAAA,CAAmB,CACxB,OAAO,IAAA,CAAK,GAAA,CAAI,MAAA,CAAOA,CAAK,CAC9B,CAEA,OAAc,CACZ,IAAA,CAAK,GAAA,CAAI,KAAA,GACX,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,GAAA,CAAI,OAAA,EAClB,CAEA,QAAc,CACZ,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAClB,CAIA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,EAAK,GAAM,CACzB,CACF,ECtDO,IAAM4D,CAAAA,CAAN,KAAc,CACnB,KAAA,CACA,IAAA,CAAuB,IAAA,CACvB,IAAA,CAAuB,IAAA,CAEvB,WAAA,CAAY5D,CAAAA,CAAU,CACpB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,ECNO,IAAM6D,CAAAA,CAAN,KAAiD,CAC9C,IAAA,CAAuB,IAAA,CACvB,IAAA,CAAuB,IAAA,CACvB,MAAA,CAAS,CAAA,CAEjB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MACd,CAEA,GAAA,CAAI7D,CAAAA,CAAgB,CAClB,IAAM2C,CAAAA,CAAO,IAAIiB,CAAAA,CAAK5D,CAAK,CAAA,CAEtB,IAAA,CAAK,IAAA,EAGR2C,CAAAA,CAAK,KAAO,IAAA,CAAK,IAAA,CACjB,IAAA,CAAK,IAAA,CAAM,IAAA,CAAOA,CAAAA,CAClB,IAAA,CAAK,IAAA,CAAOA,CAAAA,EAJZ,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAO1B,IAAA,CAAK,MAAA,GACP,CAEA,MAAA,CAAO3C,CAAAA,CAAmB,CACxB,IAAI8D,CAAAA,CAAU,IAAA,CAAK,IAAA,CAEnB,KAAOA,CAAAA,EAAS,CACd,GAAIA,CAAAA,CAAQ,KAAA,GAAU9D,EACpB,OAAI8D,CAAAA,CAAQ,IAAA,CAAMA,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAQ,IAAA,CACzC,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAQ,IAAA,CAErBA,CAAAA,CAAQ,IAAA,CAAMA,EAAQ,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAQ,IAAA,CACzC,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAQ,IAAA,CAEzB,IAAA,CAAK,MAAA,EAAA,CACE,IAAA,CAETA,CAAAA,CAAUA,CAAAA,CAAQ,KACpB,CAEA,OAAO,MACT,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAI,CACjB,CAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAChC,IAAIA,CAAAA,CAAU,IAAA,CAAK,IAAA,CACnB,KAAOA,CAAAA,EACL,MAAMA,CAAAA,CAAQ,KAAA,CACdA,CAAAA,CAAUA,CAAAA,CAAQ,KAEtB,CACF,MClCaC,EAAAA,CAAN,KAA6C,CAC1C,QAAA,CACA,IAAA,CAAe,CAAA,CACf,OAAA,CAAkB,CAAA,CAElB,KAAA,CAAQ,IAAI,GAAA,CACZ,OAAA,CAAU,IAAI,GAAA,CAEtB,WAAA,CAAYtD,CAAAA,CAAkB,CAC5B,GAAIA,CAAAA,EAAY,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA,CAEnD,IAAA,CAAK,QAAA,CAAWA,EAClB,CAIA,GAAA,CAAIoC,EAAuB,CACzB,IAAMS,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIT,CAAG,CAAA,CAChC,GAAKS,CAAAA,CAEL,OAAA,IAAA,CAAK,eAAA,CAAgBA,CAAK,CAAA,CACnBA,CAAAA,CAAM,KACf,CAEA,GAAA,CAAIT,CAAAA,CAAQ7C,CAAAA,CAAgB,CAC1B,GAAI,IAAA,CAAK,QAAA,GAAa,CAAA,CAAG,OAEzB,IAAMgE,CAAAA,CAAW,IAAA,CAAK,KAAA,CAAM,IAAInB,CAAG,CAAA,CACnC,GAAImB,CAAAA,CAAU,CACZA,CAAAA,CAAS,KAAA,CAAQhE,CAAAA,CACjB,IAAA,CAAK,eAAA,CAAgBgE,CAAQ,CAAA,CAC7B,MACF,CAEI,KAAK,IAAA,EAAQ,IAAA,CAAK,QAAA,EACpB,IAAA,CAAK,QAAA,EAAS,CAGhB,IAAMV,CAAAA,CAA0B,CAC9B,GAAA,CAAAT,CAAAA,CACA,KAAA,CAAA7C,CAAAA,CACA,IAAA,CAAM,CACR,CAAA,CAEA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI6C,CAAAA,CAAKS,CAAK,CAAA,CACzB,IAAA,CAAK,WAAA,CAAY,CAAC,CAAA,CAAE,GAAA,CAAIA,CAAK,CAAA,CAC7B,IAAA,CAAK,OAAA,CAAU,CAAA,CACf,IAAA,CAAK,IAAA,GACP,CAEA,GAAA,CAAIT,CAAAA,CAAiB,CACnB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAG,CAC3B,CAEA,QAAiB,CACf,OAAO,IAAA,CAAK,IACd,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,KAAA,EAAM,CACjB,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAM,CACnB,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,OAAA,CAAU,EACjB,CAIQ,eAAA,CAAgBS,CAAAA,CAA+B,CACrD,IAAMW,CAAAA,CAAUX,CAAAA,CAAM,IAAA,CAChBY,CAAAA,CAAU,KAAK,OAAA,CAAQ,GAAA,CAAID,CAAO,CAAA,CAExCC,CAAAA,CAAQ,MAAA,CAAOZ,CAAK,CAAA,CAEhBW,CAAAA,GAAY,IAAA,CAAK,OAAA,EAAWC,CAAAA,CAAQ,IAAA,EAAK,GAAM,CAAA,EACjD,IAAA,CAAK,OAAA,EAAA,CAGPZ,CAAAA,CAAM,IAAA,EAAA,CACN,IAAA,CAAK,WAAA,CAAYA,CAAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAIA,CAAK,EACxC,CAEQ,QAAA,EAAiB,CACvB,IAAMa,CAAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA,CAC1C,GAAI,CAACA,CAAAA,CAAM,OAGX,GAAM,CAACC,CAAQ,EAAID,CAAAA,CAAK,OAAA,EAAQ,CAC3BC,CAAAA,GAELD,CAAAA,CAAK,MAAA,CAAOC,CAAQ,CAAA,CACpB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAAA,CAAS,GAAG,CAAA,CAC9B,KAAK,IAAA,EAAA,EACP,CAEQ,WAAA,CAAYC,CAAAA,CAAkD,CACpE,IAAIF,CAAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIE,CAAI,CAAA,CAChC,OAAKF,CAAAA,GACHA,CAAAA,CAAO,IAAIN,CAAAA,CACX,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIQ,CAAAA,CAAMF,CAAI,CAAA,CAAA,CAEtBA,CACT,CACF,ECxGO,IAAMG,EAAAA,CAAN,KAA6C,CAC1C,SACA,KAAA,CACA,IAAA,CACA,IAAA,CAER,WAAA,CAAY7D,CAAAA,CAAkB,CAC5B,GAAIA,CAAAA,EAAY,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA,CAGnD,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAChB,IAAA,CAAK,KAAA,CAAQ,IAAI,GAAA,CACjB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIA,GAAA,CAAIoC,CAAAA,CAAuB,CACzB,IAAMF,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIE,CAAG,CAAA,CAC/B,GAAKF,CAAAA,CAEL,OAAA,IAAA,CAAK,WAAA,CAAYA,CAAI,CAAA,CACdA,CAAAA,CAAK,KACd,CAEA,GAAA,CAAIE,CAAAA,CAAQ7C,CAAAA,CAAgB,CAC1B,IAAMuE,CAAAA,CAAe,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI1B,CAAG,CAAA,CAEvC,GAAI0B,CAAAA,CAAc,CAChBA,EAAa,KAAA,CAAQvE,CAAAA,CACrB,IAAA,CAAK,WAAA,CAAYuE,CAAY,CAAA,CAC7B,MACF,CAEA,IAAMC,CAAAA,CAAsB,CAC1B,GAAA,CAAA3B,CAAAA,CACA,KAAA,CAAA7C,EACA,IAAA,CAAM,IAAA,CACN,IAAA,CAAM,IACR,CAAA,CAEA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI6C,CAAAA,CAAK2B,CAAO,CAAA,CAC3B,IAAA,CAAK,UAAA,CAAWA,CAAO,EAEnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAO,IAAA,CAAK,QAAA,EACzB,IAAA,CAAK,sBAAA,GAET,CAEA,GAAA,CAAI3B,CAAAA,CAAiB,CACnB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAG,CAC3B,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,IACpB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,OAAM,CACjB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIQ,UAAA,CAAWF,CAAAA,CAAwB,CACzCA,CAAAA,CAAK,IAAA,CAAO,IAAA,CACZA,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,IAAA,CAEb,IAAA,CAAK,IAAA,GACP,IAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAAA,CAGnB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAEP,IAAA,CAAK,IAAA,GACR,IAAA,CAAK,KAAOA,CAAAA,EAEhB,CAEQ,UAAA,CAAWA,CAAAA,CAAwB,CACrCA,CAAAA,CAAK,IAAA,CACPA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAEtB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAGfA,CAAAA,CAAK,IAAA,CACPA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAEtB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAGnBA,CAAAA,CAAK,IAAA,CAAO,IAAA,CACZA,EAAK,IAAA,CAAO,KACd,CAEQ,WAAA,CAAYA,CAAAA,CAAwB,CACtCA,CAAAA,GAAS,IAAA,CAAK,IAAA,GAElB,IAAA,CAAK,UAAA,CAAWA,CAAI,CAAA,CACpB,IAAA,CAAK,WAAWA,CAAI,CAAA,EACtB,CAEQ,sBAAA,EAA+B,CACrC,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAEhB,IAAM8B,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IACzB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,CACzB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAM,EAC1B,CACF,ECxHO,IAAMC,CAAAA,CAAN,KAAoB,CACjB,IAAA,CAAY,EAAC,CACJ,OAAA,CAEjB,WAAA,CAAYC,CAAAA,CAAqCC,CAAAA,CAAe,CAC9D,IAAA,CAAK,OAAA,CACHD,CAAAA,GAAe,CAAC5B,CAAAA,CAAQC,CAAAA,GAAYD,EAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,CAAA,CAE3D4B,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,CAAA,GAC9B,IAAA,CAAK,IAAA,CAAO,CAAC,GAAGA,CAAO,CAAA,CACvB,IAAA,CAAK,OAAA,EAAQ,EAEjB,CAIA,MAAA,CAAO5E,CAAAA,CAAgB,CACrB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAKA,CAAK,CAAA,CACpB,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAS,CAAC,EAClC,CAEA,OAAA,EAAyB,CACvB,GAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAAA,CAAG,OAC5B,GAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAAA,CAAG,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,CAEjD,IAAM6E,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CACxB,OAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAI,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,CAC7B,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,CACRA,CACT,CAEA,IAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CACpB,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,IAAA,CAAK,MACnB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAC9B,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,GACd,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAA,CAAK,IAAI,CACtB,CAIQ,OAAA,EAAgB,CACtB,IAAA,IAASnE,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAC,CAAA,CAAI,CAAA,CAAGA,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CACzD,IAAA,CAAK,QAAA,CAASA,CAAC,EAEnB,CAEQ,MAAA,CAAOC,CAAAA,CAAqB,CAClC,IAAImD,CAAAA,CAAUnD,CAAAA,CAEd,KAAOmD,CAAAA,CAAU,CAAA,EAAG,CAClB,IAAMgB,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAA,CAAOhB,CAAAA,CAAU,CAAA,EAAK,CAAC,CAAA,CAC3C,GAAI,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA,CAAKA,CAAO,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKgB,CAAM,CAAC,CAAA,EAAK,CAAA,CACzD,MAEF,IAAA,CAAK,IAAA,CAAKhB,CAAAA,CAASgB,CAAM,CAAA,CACzBhB,CAAAA,CAAUgB,EACZ,CACF,CAEQ,QAAA,CAASnE,CAAAA,CAAqB,CACpC,IAAImD,CAAAA,CAAUnD,CAAAA,CACRoE,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAK,MAAA,CAEzB,OAAa,CACX,IAAMC,CAAAA,CAAOlB,CAAAA,CAAU,CAAA,CAAI,CAAA,CACrBmB,CAAAA,CAAQnB,CAAAA,CAAU,CAAA,CAAI,CAAA,CACxBoB,CAAAA,CAAWpB,CAAAA,CAgBf,GAbEkB,CAAAA,CAAOD,CAAAA,EACP,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAKC,CAAI,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKE,CAAQ,CAAC,CAAA,CAAI,CAAA,GAErDA,CAAAA,CAAWF,CAAAA,CAAAA,CAIXC,CAAAA,CAAQF,GACR,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAKE,CAAK,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKC,CAAQ,CAAC,CAAA,CAAI,CAAA,GAEtDA,CAAAA,CAAWD,CAAAA,CAAAA,CAGTC,CAAAA,GAAapB,CAAAA,CAAS,MAE1B,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAASoB,CAAQ,CAAA,CAC3BpB,CAAAA,CAAUoB,EACZ,CACF,CAEQ,IAAA,CAAKxE,CAAAA,CAAWsB,CAAAA,CAAiB,CACvC,CAAC,IAAA,CAAK,IAAA,CAAKtB,CAAC,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKsB,CAAC,CAAC,CAAA,CAAI,CAAC,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKtB,CAAC,CAAC,EAC5D,CACF,CAAA,CAEOyE,CAAAA,CAAQT,EC9GR,IAAMU,CAAAA,CAAN,KAAiB,CACtB,GAAA,CACA,MAAA,CAA4B,IAAA,CAC5B,SAAyB,EAAC,CAC1B,IAAA,CAAO,KAAA,CAEP,WAAA,CAAYvC,CAAAA,CAAQ,CAClB,IAAA,CAAK,GAAA,CAAMA,EACb,CACF,CAAA,CAEawC,EAAAA,CAAN,KAAuB,CACpB,KAAA,CAAsB,EAAC,CACvB,OAAA,CAA6B,IAAA,CAC7B,KAAA,CAAQ,CAAA,CACC,OAAA,CAEjB,WAAA,CAAYC,CAAAA,CAAoC,CAC9C,IAAA,CAAK,OAAA,CACHA,CAAAA,GAAc,CAACvC,EAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOH,CAAAA,CAAoB,CACzB,IAAMF,CAAAA,CAAO,IAAIyC,CAAAA,CAAQvC,CAAG,CAAA,CAC5B,OAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKF,CAAI,CAAA,CAAA,CAChB,CAAC,IAAA,CAAK,OAAA,EAAW,IAAA,CAAK,OAAA,CAAQE,CAAAA,CAAK,KAAK,OAAA,CAAQ,GAAG,CAAA,CAAI,CAAA,IACzD,IAAA,CAAK,OAAA,CAAUF,CAAAA,CAAAA,CAEjB,IAAA,CAAK,KAAA,EAAA,CACEA,CACT,CAEA,OAAA,EAAyB,CACvB,OAAO,IAAA,CAAK,OAAA,EAAS,GACvB,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KACd,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,GAAU,CACxB,CAEA,KAAA,CAAM4C,CAAAA,CAA+B,CACnC,IAAA,IAAWC,CAAAA,IAAKD,CAAAA,CAAM,KAAA,CACpB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKC,CAAC,CAAA,CAIjBD,CAAAA,CAAM,OAAA,GACL,CAAC,IAAA,CAAK,OAAA,EAAW,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAM,OAAA,CAAQ,GAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAI,CAAA,CAAA,GAEtE,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAM,SAGvB,IAAA,CAAK,KAAA,EAASA,CAAAA,CAAM,KAAA,CACpBA,CAAAA,CAAM,KAAA,GACR,CAEA,UAAA,EAA4B,CAC1B,GAAI,CAAC,IAAA,CAAK,OAAA,CAAS,OAEnB,IAAME,CAAAA,CAAM,IAAA,CAAK,OAAA,CAGjB,IAAA,IAAWC,CAAAA,IAASD,CAAAA,CAAI,QAAA,CACtBC,CAAAA,CAAM,MAAA,CAAS,IAAA,CACf,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAK,EAOvB,OAHA,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAQF,CAAAA,EAAMA,CAAAA,GAAMC,CAAG,CAAA,CAC/C,IAAA,CAAK,KAAA,EAAA,CAED,IAAA,CAAK,KAAA,CAAM,SAAW,CAAA,EACxB,IAAA,CAAK,OAAA,CAAU,IAAA,CACRA,CAAAA,CAAI,GAAA,GAGb,IAAA,CAAK,WAAA,EAAY,CACVA,CAAAA,CAAI,GAAA,CACb,CAEA,WAAA,CAAY9C,CAAAA,CAAkBgD,EAAiB,CAC7C,GAAI,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAQhD,CAAAA,CAAK,GAAG,CAAA,CAAI,CAAA,CACnC,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAAA,CAGvDA,CAAAA,CAAK,GAAA,CAAMgD,CAAAA,CACX,IAAMb,CAAAA,CAASnC,CAAAA,CAAK,MAAA,CAEhBmC,CAAAA,EAAU,IAAA,CAAK,OAAA,CAAQnC,CAAAA,CAAK,GAAA,CAAKmC,CAAAA,CAAO,GAAG,CAAA,CAAI,CAAA,GACjD,KAAK,GAAA,CAAInC,CAAAA,CAAMmC,CAAM,CAAA,CACrB,IAAA,CAAK,YAAA,CAAaA,CAAM,CAAA,CAAA,CAGtB,IAAA,CAAK,OAAA,EAAW,IAAA,CAAK,OAAA,CAAQnC,CAAAA,CAAK,GAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAI,CAAA,GAC7D,IAAA,CAAK,OAAA,CAAUA,CAAAA,EAEnB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAQ,EAAC,CACd,IAAA,CAAK,QAAU,IAAA,CACf,IAAA,CAAK,KAAA,CAAQ,EACf,CAIQ,WAAA,EAAoB,CAC1B,IAAMiD,CAAAA,CAAQ,IAAI,GAAA,CAElB,IAAA,IAAWjD,CAAAA,IAAQ,CAAC,GAAG,IAAA,CAAK,KAAK,CAAA,CAAG,CAClC,IAAIkD,CAAAA,CAAIlD,CAAAA,CACJmD,CAAAA,CAAID,CAAAA,CAAE,QAAA,CAAS,MAAA,CAEnB,KAAOD,CAAAA,CAAM,GAAA,CAAIE,CAAC,GAAG,CACnB,IAAIC,CAAAA,CAAIH,CAAAA,CAAM,GAAA,CAAIE,CAAC,CAAA,CACf,IAAA,CAAK,OAAA,CAAQC,CAAAA,CAAE,GAAA,CAAKF,CAAAA,CAAE,GAAG,CAAA,CAAI,IAC/B,CAACA,CAAAA,CAAGE,CAAC,CAAA,CAAI,CAACA,CAAAA,CAAGF,CAAC,CAAA,CAAA,CAEhB,IAAA,CAAK,IAAA,CAAKE,CAAAA,CAAGF,CAAC,CAAA,CACdD,CAAAA,CAAM,OAAOE,CAAC,CAAA,CACdA,CAAAA,CAAID,CAAAA,CAAE,QAAA,CAAS,OACjB,CACAD,CAAAA,CAAM,GAAA,CAAIE,CAAAA,CAAGD,CAAC,EAChB,CAEA,IAAA,CAAK,KAAA,CAAQ,EAAC,CACd,IAAA,CAAK,OAAA,CAAU,IAAA,CAEf,IAAA,IAAWG,CAAAA,IAAKJ,CAAAA,CAAM,MAAA,EAAO,CAC3B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKI,CAAC,CAAA,CAAA,CACb,CAAC,IAAA,CAAK,OAAA,EAAW,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAE,GAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAI,CAAA,IAC3D,IAAA,CAAK,OAAA,CAAUA,CAAAA,EAGrB,CAEQ,IAAA,CAAKD,CAAAA,CAAeF,CAAAA,CAAqB,CAC/C,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAQ,CAAA,EAAM,CAAA,GAAME,CAAC,CAAA,CAC7CA,CAAAA,CAAE,MAAA,CAASF,EACXE,CAAAA,CAAE,IAAA,CAAO,KAAA,CACTF,CAAAA,CAAE,QAAA,CAAS,IAAA,CAAKE,CAAC,EACnB,CAEQ,GAAA,CAAIF,CAAAA,CAAeE,CAAAA,CAAqB,CAC9CA,CAAAA,CAAE,QAAA,CAAWA,CAAAA,CAAE,QAAA,CAAS,MAAA,CAAQE,CAAAA,EAAMA,CAAAA,GAAMJ,CAAC,CAAA,CAC7CA,CAAAA,CAAE,MAAA,CAAS,IAAA,CACXA,CAAAA,CAAE,IAAA,CAAO,KAAA,CACT,IAAA,CAAK,KAAA,CAAM,KAAKA,CAAC,EACnB,CAEQ,YAAA,CAAaE,CAAAA,CAAqB,CACxC,IAAMG,CAAAA,CAAIH,CAAAA,CAAE,MAAA,CACPG,CAAAA,GAEAH,CAAAA,CAAE,IAAA,EAGL,IAAA,CAAK,IAAIA,CAAAA,CAAGG,CAAC,CAAA,CACb,IAAA,CAAK,YAAA,CAAaA,CAAC,CAAA,EAHnBH,CAAAA,CAAE,IAAA,CAAO,IAAA,EAKb,CACF,ECrKO,IAAMI,EAAAA,CAAN,cAAyBhB,CAAc,CAC5C,WAAA,CAAYP,CAAAA,CAAe,CACzB,KAAA,CAAM,CAAC7B,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,CAAI4B,CAAO,EACjE,CACF,ECJO,IAAMwB,EAAAA,CAAN,cAAyBjB,CAAc,CAC5C,WAAA,CAAYP,CAAAA,CAAe,CACzB,KAAA,CAAM,CAAC7B,EAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,CAAI4B,CAAO,EACjE,CACF,ECFO,IAAMyB,CAAAA,CAAN,KAAqB,CAC1B,GAAA,CACA,KAAA,CAA+B,IAAA,CAC/B,OAAA,CAAiC,IAAA,CACjC,MAAA,CAAgC,IAAA,CAEhC,WAAA,CAAYxD,CAAAA,CAAQ,CAClB,IAAA,CAAK,GAAA,CAAMA,EACb,CACF,EAEayD,EAAAA,CAAN,KAAqB,CAClB,IAAA,CAA8B,IAAA,CAC9B,KAAA,CAAQ,CAAA,CACC,OAAA,CAEjB,WAAA,CAAYhB,CAAAA,CAAoC,CAC9C,IAAA,CAAK,OAAA,CACHA,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOH,CAAAA,CAAwB,CAC7B,IAAMF,CAAAA,CAAO,IAAI0D,CAAAA,CAAYxD,CAAG,CAAA,CAChC,OAAA,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMF,CAAI,CAAA,CAC3C,IAAA,CAAK,KAAA,EAAA,CACEA,CACT,CAEA,OAAA,EAAyB,CACvB,OAAO,IAAA,CAAK,IAAA,EAAM,GACpB,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KACd,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,GAAU,CACxB,CAEA,KAAA,CAAM4C,CAAAA,CAA6B,CAC5BA,CAAAA,CAAM,IAAA,GAEX,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAM,IAAI,CAAA,CACjD,IAAA,CAAK,KAAA,EAASA,CAAAA,CAAM,KAAA,CAEpBA,CAAAA,CAAM,KAAA,EAAM,EACd,CAEA,UAAA,EAA4B,CAC1B,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAEhB,IAAME,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CACtB,OAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAGb,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAChD,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,IAAA,EAHnB,IAAA,CAAK,IAAA,CAAO,IAAA,CAMd,IAAA,CAAK,KAAA,EAAA,CACEA,CACT,CAEA,WAAA,CAAY9C,CAAAA,CAAsBgD,CAAAA,CAAiB,CACjD,GAAI,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAQhD,CAAAA,CAAK,GAAG,CAAA,CAAI,CAAA,CACnC,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAAA,CAGvDA,CAAAA,CAAK,GAAA,CAAMgD,CAAAA,CACPhD,CAAAA,GAAS,IAAA,CAAK,IAAA,GAChB,IAAA,CAAK,GAAA,CAAIA,CAAI,CAAA,CACb,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAMA,CAAI,CAAA,EAE/C,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,KAAA,CAAQ,EACf,CAIQ,WACNI,CAAAA,CACAC,CAAAA,CACuB,CACvB,OAAKD,CAAAA,CACAC,CAAAA,CAED,IAAA,CAAK,OAAA,CAAQD,CAAAA,CAAE,GAAA,CAAKC,CAAAA,CAAE,GAAG,CAAA,EAAK,CAAA,EAEhCA,EAAE,MAAA,CAASD,CAAAA,CACXC,CAAAA,CAAE,OAAA,CAAUD,CAAAA,CAAE,KAAA,CACdA,CAAAA,CAAE,KAAA,CAAQC,CAAAA,CACHD,CAAAA,GAGPA,CAAAA,CAAE,MAAA,CAASC,CAAAA,CACXD,CAAAA,CAAE,OAAA,CAAUC,CAAAA,CAAE,KAAA,CACdA,CAAAA,CAAE,KAAA,CAAQD,CAAAA,CACHC,CAAAA,CAAAA,CAbMD,CAAAA,CADAC,CAgBjB,CAKQ,eAAA,CAAgBuD,CAAAA,CAAuC,CAC7D,IAAMC,CAAAA,CAA6B,GAG/B1C,CAAAA,CAAiCyC,CAAAA,CACrC,KAAOzC,CAAAA,EAAS,CACd,IAAMtH,CAAAA,CAAOsH,CAAAA,CAAQ,OAAA,CACrBA,CAAAA,CAAQ,OAAA,CAAU,IAAA,CAClB0C,CAAAA,CAAS,IAAA,CAAK1C,CAAO,CAAA,CACrBA,CAAAA,CAAUtH,EACZ,CAGA,IAAMiK,CAAAA,CAA2B,EAAC,CAClC,IAAA,IAAS/F,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI8F,CAAAA,CAAS,MAAA,CAAQ9F,CAAAA,EAAK,EACpCA,CAAAA,CAAI,CAAA,CAAI8F,CAAAA,CAAS,MAAA,CACnBC,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAWD,CAAAA,CAAS9F,CAAC,CAAA,CAAG8F,CAAAA,CAAS9F,CAAAA,CAAI,CAAC,CAAC,CAAE,CAAA,CAE1D+F,CAAAA,CAAO,IAAA,CAAKD,CAAAA,CAAS9F,CAAC,CAAC,CAAA,CAK3B,IAAItB,CAAAA,CAASqH,CAAAA,CAAOA,CAAAA,CAAO,MAAA,CAAS,CAAC,CAAA,CACrC,QAAS/F,CAAAA,CAAI+F,CAAAA,CAAO,MAAA,CAAS,CAAA,CAAG/F,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CACtCtB,CAAAA,CAAS,IAAA,CAAK,UAAA,CAAWqH,CAAAA,CAAO/F,CAAC,CAAA,CAAGtB,CAAM,EAG5C,OAAOA,CACT,CAEQ,GAAA,CAAIuD,CAAAA,CAA4B,CACtC,IAAMmC,CAAAA,CAASnC,CAAAA,CAAK,MAAA,CACpB,GAAKmC,CAAAA,CAEL,CAAA,GAAIA,CAAAA,CAAO,QAAUnC,CAAAA,CACnBmC,CAAAA,CAAO,KAAA,CAAQnC,CAAAA,CAAK,OAAA,CAAA,KACf,CACL,IAAImB,CAAAA,CAAUgB,CAAAA,CAAO,KAAA,CACrB,KAAOhB,CAAAA,EAAWA,CAAAA,CAAQ,OAAA,GAAYnB,CAAAA,EACpCmB,CAAAA,CAAUA,CAAAA,CAAQ,OAAA,CAEhBA,CAAAA,GACFA,CAAAA,CAAQ,OAAA,CAAUnB,CAAAA,CAAK,OAAA,EAE3B,CAEAA,CAAAA,CAAK,MAAA,CAAS,IAAA,CACdA,CAAAA,CAAK,OAAA,CAAU,KAAA,CACjB,CACF,EC7KO,IAAM+D,EAAAA,CAAN,KAAmD,CAChD,IAAA,CAAuB,IAAA,CACvB,MAAA,CAAS,CAAA,CAEjB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MACd,CAEA,GAAA,CAAI1G,CAAAA,CAAgB,CAClB,IAAM2C,CAAAA,CAAO,IAAIiB,CAAAA,CAAK5D,CAAK,CAAA,CAEtB,IAAA,CAAK,IAAA,EAIR2C,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KACtB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CACjB,IAAA,CAAK,IAAA,CAAOA,CAAAA,GALZA,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CACZ,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAAA,CAOd,IAAA,CAAK,MAAA,GACP,CAEA,MAAA,CAAO3C,CAAAA,CAAmB,CACxB,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAAO,MAAA,CAEvB,IAAI8D,CAAAA,CAAU,IAAA,CAAK,IAAA,CAAK,IAAA,CACpB6C,EAAO,IAAA,CAAK,IAAA,CAEhB,EAAG,CACD,GAAI7C,CAAAA,CAAQ,KAAA,GAAU9D,CAAAA,CACpB,OAAI8D,CAAAA,GAAY,IAAA,CAAK,IAAA,EAAQA,CAAAA,CAAQ,IAAA,GAASA,CAAAA,CAC5C,IAAA,CAAK,IAAA,CAAO,IAAA,EAEZ6C,CAAAA,CAAK,IAAA,CAAO7C,CAAAA,CAAQ,IAAA,CAChBA,CAAAA,GAAY,IAAA,CAAK,IAAA,GACnB,IAAA,CAAK,IAAA,CAAO6C,CAAAA,CAAAA,CAAAA,CAGhB,IAAA,CAAK,MAAA,EAAA,CACE,KAETA,CAAAA,CAAO7C,CAAAA,CACPA,CAAAA,CAAUA,CAAAA,CAAQ,KACpB,CAAA,MAASA,CAAAA,GAAY,IAAA,CAAK,IAAA,CAAK,IAAA,EAE/B,OAAO,MACT,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAI,CACjB,CAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAChC,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAEhB,IAAIA,CAAAA,CAAU,IAAA,CAAK,IAAA,CAAK,IAAA,CACxB,GACE,MAAMA,CAAAA,CAAQ,KAAA,CACdA,CAAAA,CAAUA,CAAAA,CAAQ,IAAA,CAAA,MACXA,CAAAA,GAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CACjC,CACF,EC9DO,IAAM8C,EAAAA,CAAN,KAAiD,CAC9C,IAAA,CAAuB,IAAA,CACvB,IAAA,CAAuB,IAAA,CACvB,MAAA,CAAS,CAAA,CAEjB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MACd,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,MAAA,GAAW,CACzB,CAEA,GAAA,CAAI5G,CAAAA,CAAgB,CAClB,IAAM2C,CAAAA,CAAO,IAAIiB,CAAAA,CAAK5D,CAAK,CAAA,CAEtB,IAAA,CAAK,IAAA,EAGR,IAAA,CAAK,IAAA,CAAM,IAAA,CAAO2C,CAAAA,CAClB,IAAA,CAAK,IAAA,CAAOA,CAAAA,EAHZ,IAAA,CAAK,IAAA,CAAO,KAAK,IAAA,CAAOA,CAAAA,CAM1B,IAAA,CAAK,MAAA,GACP,CAEA,MAAA,CAAO3C,CAAAA,CAAmB,CACxB,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAAO,MAAA,CAEvB,GAAI,IAAA,CAAK,IAAA,CAAK,KAAA,GAAUA,CAAAA,CACtB,OAAA,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CACjB,IAAA,CAAK,IAAA,GAAM,IAAA,CAAK,IAAA,CAAO,IAAA,CAAA,CAC5B,KAAK,MAAA,EAAA,CACE,IAAA,CAGT,IAAI8D,CAAAA,CAAU,IAAA,CAAK,IAAA,CACnB,KAAOA,CAAAA,CAAQ,IAAA,EAAM,CACnB,GAAIA,CAAAA,CAAQ,IAAA,CAAK,KAAA,GAAU9D,CAAAA,CACzB,OAAI8D,CAAAA,CAAQ,IAAA,GAAS,IAAA,CAAK,IAAA,GACxB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAAA,CAEdA,CAAAA,CAAQ,IAAA,CAAOA,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAC5B,IAAA,CAAK,MAAA,EAAA,CACE,KAETA,CAAAA,CAAUA,CAAAA,CAAQ,KACpB,CAEA,OAAO,MACT,CAEA,QAAA,CAAS9D,CAAAA,CAAmB,CAC1B,IAAA,IAAW6G,CAAAA,IAAK,IAAA,CACd,GAAIA,CAAAA,GAAM7G,CAAAA,CAAO,OAAO,KAAA,CAE1B,OAAO,MACT,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAI,CACjB,CAEA,EAAE,OAAO,QAAQ,CAAA,EAAiB,CAChC,IAAI8D,CAAAA,CAAU,IAAA,CAAK,IAAA,CACnB,KAAOA,CAAAA,EACL,MAAMA,CAAAA,CAAQ,KAAA,CACdA,CAAAA,CAAUA,CAAAA,CAAQ,KAEtB,CACF,ECxDO,IAAMgD,EAAAA,CAAN,KAAkB,CACN,IAAA,CACA,SAAA,CACA,IAAA,CAEjB,WAAA,CAAY3F,CAAAA,CAAc4F,CAAAA,CAAmB,CAC3C,GAAI5F,CAAAA,EAAQ,GAAK4F,CAAAA,EAAa,CAAA,CAC5B,MAAM,IAAI,KAAA,CAAM,4CAA4C,CAAA,CAG9D,IAAA,CAAK,IAAA,CAAO5F,CAAAA,CACZ,IAAA,CAAK,SAAA,CAAY4F,CAAAA,CACjB,IAAA,CAAK,KAAO,IAAI,UAAA,CAAW5F,CAAI,EACjC,CAIA,GAAA,CAAInB,CAAAA,CAAqB,CACvB,IAAMgH,CAAAA,CAAS,IAAA,CAAK,SAAA,CAAUhH,CAAK,CAAA,CACnC,QAAW4C,CAAAA,IAAQoE,CAAAA,CACjB,IAAA,CAAK,IAAA,CAAKpE,CAAI,CAAA,CAAI,EAEtB,CAEA,QAAA,CAAS5C,CAAAA,CAAwB,CAC/B,IAAMgH,CAAAA,CAAS,IAAA,CAAK,SAAA,CAAUhH,CAAK,CAAA,CACnC,IAAA,IAAW4C,CAAAA,IAAQoE,CAAAA,CACjB,GAAI,IAAA,CAAK,IAAA,CAAKpE,CAAI,CAAA,GAAM,CAAA,CACtB,OAAO,MAAA,CAGX,OAAO,KACT,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,CAAC,EAClB,CAIQ,SAAA,CAAU5C,CAAAA,CAAyB,CACzC,IAAMgH,CAAAA,CAAmB,EAAC,CAEtBC,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKjH,CAAAA,CAAO,IAAI,CAAA,CAC7BkH,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKlH,CAAAA,CAAO,KAAK,CAAA,CAElC,IAAA,IAASU,CAAAA,CAAI,CAAA,CAAGA,EAAI,IAAA,CAAK,SAAA,CAAWA,CAAAA,EAAAA,CAAK,CACvC,IAAMyG,CAAAA,CAAAA,CAAYF,CAAAA,CAAQvG,CAAAA,CAAIwG,CAAAA,EAAS,IAAA,CAAK,IAAA,CAC5CF,CAAAA,CAAO,IAAA,CAAKG,CAAQ,EACtB,CAEA,OAAOH,CACT,CAEQ,IAAA,CAAKI,CAAAA,CAAaC,CAAAA,CAAsB,CAC9C,IAAIzE,CAAAA,CAAOyE,CAAAA,CACX,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAID,EAAI,MAAA,CAAQ,CAAA,EAAA,CAC9BxE,CAAAA,CAAQA,CAAAA,CAAO,EAAA,CAAMwE,CAAAA,CAAI,UAAA,CAAW,CAAC,CAAA,CAEvC,OAAO,IAAA,CAAK,GAAA,CAAIxE,CAAI,CAAA,CAAI,KAAK,IAC/B,CACF,EC/DO,IAAM0E,EAAAA,CAAN,KAAqB,CACT,KAAA,CACA,KAAA,CACA,KAAA,CACA,KAAA,CAEjB,WAAA,CAAYC,CAAAA,CAAeC,CAAAA,CAAe,CACxC,GAAID,CAAAA,EAAS,CAAA,EAAKC,CAAAA,EAAS,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA,CAG1D,IAAA,CAAK,KAAA,CAAQD,CAAAA,CACb,IAAA,CAAK,KAAA,CAAQC,CAAAA,CAEb,IAAA,CAAK,KAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQA,CAAM,CAAA,CAAG,IACzC,KAAA,CAAcD,CAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAC7B,CAAA,CAGA,IAAA,CAAK,KAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQC,CAAM,CAAA,CAAG,CAACC,CAAAA,CAAG,CAAA,GAAM,CAAA,CAAI,QAAA,CAAW,EAAE,EACxE,CAOA,MAAA,CAAOzH,CAAAA,CAAe0H,CAAAA,CAAgB,CAAA,CAAS,CAC7C,GAAI,EAAAA,CAAAA,EAAS,CAAA,CAAA,CAEb,IAAA,IAAShH,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,KAAK,KAAA,CAAOA,CAAAA,EAAAA,CAAK,CACnC,IAAMC,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKX,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMU,CAAC,CAAC,CAAA,CAC5C,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAA,CAAEC,CAAK,CAAA,EAAK+G,EAC1B,CACF,CAKA,QAAA,CAAS1H,CAAAA,CAAuB,CAC9B,IAAIyF,CAAAA,CAAM,CAAA,CAAA,CAAA,CAEV,IAAA,IAAS/E,CAAAA,CAAI,EAAGA,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAOA,CAAAA,EAAAA,CAAK,CACnC,IAAMC,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAKX,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAMU,CAAC,CAAC,EAC5C+E,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAK,IAAA,CAAK,KAAA,CAAM/E,CAAC,CAAA,CAAEC,CAAK,CAAC,EAC1C,CAEA,OAAO8E,CAAAA,GAAQ,IAAW,CAAA,CAAIA,CAChC,CAEA,KAAA,EAAc,CACZ,IAAA,IAAS/E,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAOA,CAAAA,EAAAA,CAC9B,IAAA,CAAK,KAAA,CAAMA,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,EAExB,CAIQ,IAAA,CAAKV,CAAAA,CAAeqH,CAAAA,CAAsB,CAChD,IAAIzE,CAAAA,CAAOyE,CAAAA,CACX,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,EAAIrH,CAAAA,CAAM,MAAA,CAAQ,CAAA,EAAA,CAChC4C,CAAAA,CAAQA,CAAAA,CAAO,EAAA,CAAK5C,CAAAA,CAAM,UAAA,CAAW,CAAC,CAAA,GAAO,CAAA,CAE/C,OAAO4C,CAAAA,CAAO,IAAA,CAAK,KACrB,CACF,EClEO,IAAM+E,EAAAA,CAAN,KAAkB,CACN,CAAA,CACA,CAAA,CACA,SAAA,CACA,KAAA,CAEjB,WAAA,CAAYC,CAAAA,CAAY,EAAA,CAAI,CAG1B,GAAIA,EAAI,CAAA,EAAKA,CAAAA,CAAI,EAAA,CACf,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAG9C,IAAA,CAAK,CAAA,CAAIA,CAAAA,CACT,IAAA,CAAK,CAAA,CAAI,CAAA,EAAKA,CAAAA,CACd,IAAA,CAAK,SAAA,CAAY,IAAI,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,CACtC,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAC,EACnC,CAIA,IAAI5H,CAAAA,CAAqB,CACvB,IAAM4C,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK5C,CAAK,CAAA,CACtBW,CAAAA,CAAQiC,CAAAA,GAAU,EAAA,CAAK,IAAA,CAAK,CAAA,CAC5BiF,CAAAA,CAAajF,GAAQ,IAAA,CAAK,CAAA,CAAM,CAAA,EAAM,IAAA,CAAK,CAAA,CAAI,CAAA,CAC/CkF,CAAAA,CAAO,IAAA,CAAK,iBAAA,CAAkBD,CAAS,CAAA,CAAI,CAAA,CAEjD,IAAA,CAAK,SAAA,CAAUlH,CAAK,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAA,CAAGmH,CAAI,EAC9D,CAEA,KAAA,EAAgB,CACd,IAAIC,CAAAA,CAAM,CAAA,CACNC,CAAAA,CAAQ,CAAA,CAEZ,IAAA,IAAWxC,CAAAA,IAAK,IAAA,CAAK,SAAA,CACnBuC,CAAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,CAACvC,CAAC,CAAA,CACjBA,CAAAA,GAAM,CAAA,EAAGwC,IAGf,IAAIC,CAAAA,CAAW,IAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,CAAA,CAAI,IAAA,CAAK,CAAA,CAAIF,CAAAA,CAG9C,OAAIE,CAAAA,EAAY,GAAA,CAAM,IAAA,CAAK,CAAA,EAAKD,CAAAA,CAAQ,CAAA,GACtCC,CAAAA,CAAW,IAAA,CAAK,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAAA,CAAID,CAAK,CAAA,CAAA,CAGtC,IAAA,CAAK,KAAA,CAAMC,CAAQ,CAC5B,CAEA,OAAc,CACZ,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,CAAC,EACvB,CAIQ,IAAA,CAAKjI,CAAAA,CAAuB,CAElC,IAAI4C,CAAAA,CAAO,UAAA,CACX,IAAA,IAASlC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIV,CAAAA,CAAM,MAAA,CAAQU,CAAAA,EAAAA,CAChCkC,CAAAA,EAAQ5C,CAAAA,CAAM,UAAA,CAAWU,CAAC,CAAA,CAC1BkC,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAKA,CAAAA,CAAM,QAAQ,EAEjC,OAAOA,CAAAA,GAAS,CAClB,CAEQ,iBAAA,CAAkBiD,CAAAA,CAAmB,CAC3C,OAAO,IAAA,CAAK,KAAA,CAAMA,CAAC,CACrB,CAIQ,QAAA,CAASqC,EAAmB,CAClC,OAAQA,CAAAA,EACN,KAAK,EAAA,CACH,OAAO,IAAA,CACT,KAAK,EAAA,CACH,OAAO,IAAA,CACT,KAAK,EAAA,CACH,OAAO,IAAA,CACT,QACE,OAAO,KAAA,EAAU,CAAA,CAAI,KAAA,CAAQA,CAAAA,CACjC,CACF,CACF,EClFO,IAAMC,EAAAA,CAAN,KAAuB,CAM5B,WAAA,CAA6B1H,CAAAA,CAAkB,CAAlB,IAAA,CAAA,QAAA,CAAAA,CAAAA,CAC3B,GAAI,CAAC,MAAA,CAAO,SAAA,CAAUA,CAAQ,CAAA,EAAKA,CAAAA,EAAY,CAAA,CAC7C,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAAA,CAGvD,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAqBA,CAAQ,EAC/C,CAXQ,IAAA,CACA,IAAA,CAAO,CAAA,CACP,IAAA,CAAO,CAAA,CACP,MAAA,CAAS,CAAA,CAUjB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MACd,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,MAAA,GAAW,CACzB,CAEA,MAAA,EAAkB,CAChB,OAAO,IAAA,CAAK,MAAA,GAAW,IAAA,CAAK,QAC9B,CAEA,OAAA,CAAQT,CAAAA,CAAgB,CACtB,GAAI,IAAA,CAAK,MAAA,EAAO,CACd,MAAM,IAAI,KAAA,CAAM,uBAAuB,CAAA,CAGzC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAIA,CAAAA,CACvB,IAAA,CAAK,IAAA,CAAA,CAAQ,IAAA,CAAK,IAAA,CAAO,CAAA,EAAK,IAAA,CAAK,QAAA,CACnC,KAAK,MAAA,GACP,CAEA,OAAA,EAAyB,CACvB,GAAI,IAAA,CAAK,OAAA,EAAQ,CAAG,OAEpB,IAAMA,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CACjC,OAAA,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAI,MAAA,CACvB,IAAA,CAAK,IAAA,CAAA,CAAQ,IAAA,CAAK,IAAA,CAAO,CAAA,EAAK,IAAA,CAAK,QAAA,CACnC,KAAK,MAAA,EAAA,CAEEA,CACT,CAEA,IAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,OAAA,EAAQ,CAAI,MAAA,CAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAI,CACzD,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA,CAClD,IAAA,CAAK,IAAA,CAAO,CAAA,CACZ,IAAA,CAAK,IAAA,CAAO,EACZ,IAAA,CAAK,MAAA,CAAS,EAChB,CAEA,OAAA,EAAe,CACb,IAAMZ,CAAAA,CAAc,EAAC,CACrB,IAAA,IAASsB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,MAAA,CAAQA,CAAAA,EAAAA,CAC/BtB,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAA,CAAM,IAAA,CAAK,IAAA,CAAOsB,CAAAA,EAAK,IAAA,CAAK,QAAQ,CAAM,CAAA,CAE7D,OAAOtB,CACT,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,eAAA,EAAkB,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACpD,CACF,ECtEO,IAAMgJ,EAAAA,CAAN,KAAe,CACZ,KAAA,CAAa,EAAC,CAEtB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,MACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,KAAK,KAAA,CAAM,MAAA,GAAW,CAC/B,CAEA,SAAA,CAAUpI,CAAAA,CAAgB,CACxB,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQA,CAAK,EAC1B,CAEA,QAAA,CAASA,CAAAA,CAAgB,CACvB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAK,EACvB,CAEA,QAAA,EAA0B,CACxB,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,EACpB,CAEA,SAAyB,CACvB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EACpB,CAEA,SAAA,EAA2B,CACzB,OAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CACrB,CAEA,QAAA,EAA0B,CACxB,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAC,CACzC,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,OAAS,EACtB,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAA,CAAK,KAAK,CACvB,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACxC,CACF,ECzCO,IAAMqI,EAAAA,CAAN,KAAuB,CACpB,IAAA,CAA0B,EAAC,CAEnC,MAAe,CACb,OAAO,IAAA,CAAK,IAAA,CAAK,MACnB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAC9B,CAEA,OAAA,CAAQrI,CAAAA,CAAUsI,CAAAA,CAAwB,CACxC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,CAAE,KAAA,CAAAtI,CAAAA,CAAO,QAAA,CAAAsI,CAAS,CAAC,CAAA,CAClC,IAAA,CAAK,QAAA,GACP,CAEA,OAAA,EAAyB,CACvB,GAAI,IAAA,CAAK,OAAA,EAAQ,CAAG,OAEpB,IAAMzD,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAClB0D,EAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,CAE3B,OAAK,IAAA,CAAK,OAAA,EAAQ,GAChB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAIA,CAAAA,CACf,IAAA,CAAK,YAAW,CAAA,CAGX1D,CAAAA,CAAK,KACd,CAEA,IAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,KACvB,CAEQ,QAAA,EAAiB,CACvB,IAAIlE,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAE/B,KAAOA,CAAAA,CAAQ,CAAA,EAAG,CAChB,IAAMmE,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAA,CAAOnE,CAAAA,CAAQ,GAAK,CAAC,CAAA,CACzC,GAAI,IAAA,CAAK,IAAA,CAAKmE,CAAM,CAAA,CAAE,QAAA,EAAY,IAAA,CAAK,IAAA,CAAKnE,CAAK,CAAA,CAAE,QAAA,CAAU,MAE7D,CAAC,IAAA,CAAK,IAAA,CAAKmE,CAAM,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKnE,CAAK,CAAC,CAAA,CAAI,CACtC,IAAA,CAAK,IAAA,CAAKA,CAAK,CAAA,CACf,IAAA,CAAK,KAAKmE,CAAM,CAClB,CAAA,CAEAnE,CAAAA,CAAQmE,EACV,CACF,CAEQ,UAAA,EAAmB,CACzB,IAAInE,CAAAA,CAAQ,CAAA,CAEZ,OAAa,CACX,IAAMqE,CAAAA,CAAOrE,CAAAA,CAAQ,CAAA,CAAI,CAAA,CACnBsE,CAAAA,CAAQtE,CAAAA,CAAQ,CAAA,CAAI,CAAA,CACtBuE,CAAAA,CAAWvE,CAAAA,CAgBf,GAbEqE,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,EACjB,KAAK,IAAA,CAAKA,CAAI,CAAA,CAAE,QAAA,CAAW,IAAA,CAAK,IAAA,CAAKE,CAAQ,CAAA,CAAE,QAAA,GAE/CA,CAAAA,CAAWF,CAAAA,CAAAA,CAIXC,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,QAClB,IAAA,CAAK,IAAA,CAAKA,CAAK,CAAA,CAAE,QAAA,CAAW,IAAA,CAAK,IAAA,CAAKC,CAAQ,CAAA,CAAE,QAAA,GAEhDA,CAAAA,CAAWD,CAAAA,CAAAA,CAGTC,CAAAA,GAAavE,CAAAA,CAAO,MAExB,CAAC,IAAA,CAAK,IAAA,CAAKA,CAAK,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKuE,CAAQ,CAAC,CAAA,CAAI,CACxC,IAAA,CAAK,IAAA,CAAKA,CAAQ,CAAA,CAClB,IAAA,CAAK,IAAA,CAAKvE,CAAK,CACjB,CAAA,CAEAA,CAAAA,CAAQuE,EACV,CACF,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAA,CAC3B,IAAKc,CAAAA,EAAM,CAAA,EAAGA,CAAAA,CAAE,KAAK,CAAA,CAAA,EAAIA,CAAAA,CAAE,QAAQ,CAAA,CAAE,CAAA,CACrC,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACf,CACF,EC3FO,IAAMwC,EAAAA,CAAN,KAAe,CACZ,KAAA,CAAa,EAAC,CACd,IAAA,CAAO,CAAA,CAEf,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,KAAK,IAClC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,EAAK,GAAM,CACzB,CAEA,OAAA,CAAQxI,CAAAA,CAAgB,CACtB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAK,EACvB,CAEA,OAAA,EAAyB,CACvB,GAAI,IAAA,CAAK,OAAA,EAAQ,CAAG,OAEpB,IAAMA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,IAAI,CAAA,CAClC,OAAA,IAAA,CAAK,IAAA,EAAA,CAGD,IAAA,CAAK,IAAA,CAAO,EAAA,EAAM,IAAA,CAAK,IAAA,CAAO,CAAA,EAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAChD,IAAA,CAAK,MAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CACvC,IAAA,CAAK,IAAA,CAAO,CAAA,CAAA,CAGPA,CACT,CAEA,IAAA,EAAsB,CACpB,OAAO,KAAK,OAAA,EAAQ,CAAI,MAAA,CAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAC1D,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAQ,EAAC,CACd,IAAA,CAAK,IAAA,CAAO,EACd,CAEA,OAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CACnC,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,OAAA,EAAQ,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC5C,CACF,EC9CO,IAAMyI,EAAAA,CAAN,KAAmC,CAChC,MAAA,CAAoB,IAAI,GAAA,CACxB,IAAA,CAAuB,IAAI,GAAA,CAOnC,OAAA,CAAQ5C,CAAAA,CAAY,CACb,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,CAAC,CAAA,GACpB,IAAA,CAAK,OAAO,GAAA,CAAIA,CAAAA,CAAGA,CAAC,CAAA,CACpB,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAG,CAAC,CAAA,EAEtB,CAMA,IAAA,CAAKA,CAAAA,CAAS,CACZ,GAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,CAAC,CAAA,CACpB,MAAM,IAAI,KAAA,CAAM,uCAAuC,CAAA,CAGzD,IAAMf,CAAAA,CAAS,IAAA,CAAK,MAAA,CAAO,IAAIe,CAAC,CAAA,CAChC,GAAIf,CAAAA,GAAWe,CAAAA,CAAG,CAChB,IAAMhB,CAAAA,CAAO,IAAA,CAAK,IAAA,CAAKC,CAAM,CAAA,CAC7B,OAAA,IAAA,CAAK,MAAA,CAAO,IAAIe,CAAAA,CAAGhB,CAAI,CAAA,CAChBA,CACT,CAEA,OAAOgB,CACT,CAKA,KAAA,CAAMA,CAAAA,CAAME,CAAAA,CAAY,CACtB,IAAA,CAAK,OAAA,CAAQF,CAAC,CAAA,CACd,IAAA,CAAK,OAAA,CAAQE,CAAC,CAAA,CAEd,IAAI2C,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK7C,CAAC,CAAA,CACnB8C,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK5C,CAAC,CAAA,CAEvB,GAAI2C,CAAAA,GAAUC,CAAAA,CAAO,OAErB,IAAMC,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIF,CAAK,CAAA,CAC3BG,CAAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAIF,CAAK,CAAA,CAE7BC,CAAAA,CAAQC,CAAAA,CACV,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIH,CAAAA,CAAOC,CAAK,CAAA,CACnBC,CAAAA,CAAQC,CAAAA,CACjB,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIF,CAAAA,CAAOD,CAAK,CAAA,EAE5B,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIC,CAAAA,CAAOD,CAAK,CAAA,CAC5B,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAOE,CAAAA,CAAQ,CAAC,GAElC,CAKA,SAAA,CAAU/C,CAAAA,CAAME,CAAAA,CAAe,CAC7B,OAAI,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIF,CAAC,CAAA,EAAK,CAAC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIE,CAAC,CAAA,CACpC,KAAA,CAEF,IAAA,CAAK,IAAA,CAAKF,CAAC,CAAA,GAAM,IAAA,CAAK,IAAA,CAAKE,CAAC,CACrC,CAOA,SAAA,EAAoB,CAClB,IAAM+C,CAAAA,CAAQ,IAAI,GAAA,CAClB,IAAA,IAAWjD,CAAAA,IAAK,IAAA,CAAK,MAAA,CAAO,IAAA,EAAK,CAC/BiD,CAAAA,CAAM,GAAA,CAAI,IAAA,CAAK,IAAA,CAAKjD,CAAC,CAAC,CAAA,CAExB,OAAOiD,CAAAA,CAAM,IACf,CAKA,QAAA,EAAgB,CACd,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CACtC,CAKA,KAAA,EAAc,CACZ,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM,CAClB,IAAA,CAAK,IAAA,CAAK,KAAA,GACZ,CAKA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MAAA,CAAO,IACrB,CACF,EC5GO,IAAMC,EAAAA,CAAN,MAAMC,CAA6C,CAChD,KAAA,CAER,WAAA,CAAYC,CAAAA,CAAwB,CAElC,GADA,KAAK,KAAA,CAAQ,IAAI,GAAA,CACbA,CAAAA,CACF,IAAA,IAAWjJ,CAAAA,IAASiJ,CAAAA,CAClB,IAAA,CAAK,GAAA,CAAIjJ,CAAK,EAGpB,CAIA,GAAA,CAAIA,CAAAA,CAAU0H,CAAAA,CAAgB,CAAA,CAAS,CACjCA,CAAAA,EAAS,CAAA,EACb,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI1H,CAAAA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAK,CAAA,EAAK,CAAA,EAAK0H,CAAK,EAC5D,CAEA,MAAA,CAAO1H,CAAAA,CAAU0H,CAAAA,CAAgB,CAAA,CAAY,CAC3C,IAAM5D,CAAAA,CAAU,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI9D,CAAK,CAAA,CACpC,OAAI8D,CAAAA,GAAY,MAAA,CAAkB,KAAA,EAE9B4D,CAAAA,EAAS5D,CAAAA,CACX,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO9D,CAAK,CAAA,CAEvB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAAA,CAAO8D,CAAAA,CAAU4D,CAAK,EAEhC,IAAA,CACT,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,KAAA,GACb,CAIA,GAAA,CAAI1H,CAAAA,CAAmB,CACrB,OAAO,IAAA,CAAK,MAAM,GAAA,CAAIA,CAAK,CAC7B,CAEA,KAAA,CAAMA,CAAAA,CAAkB,CACtB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAK,CAAA,EAAK,CAClC,CAEA,IAAA,EAAe,CACb,IAAIkJ,CAAAA,CAAQ,CAAA,CACZ,IAAA,IAAWjD,CAAAA,IAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,CAChCiD,CAAAA,EAASjD,CAAAA,CAEX,OAAOiD,CACT,CAEA,YAAA,EAAuB,CACrB,OAAO,IAAA,CAAK,KAAA,CAAM,IACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAS,CAC7B,CAEA,MAAA,EAAc,CACZ,IAAM9J,CAAAA,CAAc,EAAC,CACrB,IAAA,GAAW,CAACY,CAAAA,CAAO0H,CAAK,CAAA,GAAK,IAAA,CAAK,KAAA,CAChC,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAIA,CAAAA,CAAO,CAAA,EAAA,CACzBtI,CAAAA,CAAO,IAAA,CAAKY,CAAK,CAAA,CAGrB,OAAOZ,CACT,CAEA,OAAA,EAA8B,CAC5B,OAAO,KAAA,CAAM,KAAK,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,CACxC,CAOA,KAAA,CAAMmG,CAAAA,CAAiC,CACrC,IAAMnG,CAAAA,CAAS,IAAI4J,CAAAA,CAEnB,IAAA,GAAW,CAAChJ,CAAAA,CAAO0H,CAAK,CAAA,GAAK,IAAA,CAAK,KAAA,CAChCtI,CAAAA,CAAO,GAAA,CAAIY,CAAAA,CAAO0H,CAAK,CAAA,CAGzB,IAAA,GAAW,CAAC1H,CAAAA,CAAO0H,CAAK,CAAA,GAAKnC,EAAM,KAAA,CAAO,CACxC,IAAMvB,CAAAA,CAAW5E,CAAAA,CAAO,KAAA,CAAMY,CAAK,CAAA,CAC/B0H,CAAAA,CAAQ1D,CAAAA,EACV5E,CAAAA,CAAO,KAAA,CAAM,GAAA,CAAIY,CAAAA,CAAO0H,CAAK,EAEjC,CAEA,OAAOtI,CACT,CAKA,YAAA,CAAamG,CAAAA,CAAiC,CAC5C,IAAMnG,CAAAA,CAAS,IAAI4J,CAAAA,CAEnB,IAAA,GAAW,CAAChJ,EAAO0H,CAAK,CAAA,GAAK,IAAA,CAAK,KAAA,CAAO,CACvC,IAAMyB,CAAAA,CAAW,IAAA,CAAK,GAAA,CAAIzB,CAAAA,CAAOnC,CAAAA,CAAM,KAAA,CAAMvF,CAAK,CAAC,CAAA,CAC/CmJ,CAAAA,CAAW,CAAA,EACb/J,CAAAA,CAAO,GAAA,CAAIY,CAAAA,CAAOmJ,CAAQ,EAE9B,CAEA,OAAO/J,CACT,CAKA,UAAA,CAAWmG,CAAAA,CAAiC,CAC1C,IAAMnG,EAAS,IAAI4J,CAAAA,CAEnB,IAAA,GAAW,CAAChJ,CAAAA,CAAO0H,CAAK,CAAA,GAAK,IAAA,CAAK,KAAA,CAAO,CACvC,IAAMG,CAAAA,CAAYH,CAAAA,CAAQnC,CAAAA,CAAM,KAAA,CAAMvF,CAAK,CAAA,CACvC6H,CAAAA,CAAY,CAAA,EACdzI,CAAAA,CAAO,GAAA,CAAIY,CAAAA,CAAO6H,CAAS,EAE/B,CAEA,OAAOzI,CACT,CAIA,CAAC,MAAA,CAAO,QAAQ,CAAA,EAA2B,CACzC,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EACnC,CACF,ECrIO,IAAMgK,EAAAA,CAAN,MAAMC,CAAqC,CACxC,KAAA,CAER,WAAA,CAAYJ,CAAAA,CAAwB,CAElC,GADA,IAAA,CAAK,KAAA,CAAQ,IAAI,GAAA,CACbA,CAAAA,CACF,IAAA,IAAWjJ,CAAAA,IAASiJ,CAAAA,CAClB,IAAA,CAAK,IAAIjJ,CAAK,EAGpB,CAIA,GAAA,CAAIA,CAAAA,CAAgB,CAClB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAAA,CAAO,IAAI,EAC5B,CAEA,MAAA,CAAOA,CAAAA,CAAmB,CACxB,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAK,CAChC,CAEA,GAAA,CAAIA,CAAAA,CAAmB,CACrB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAK,CAC7B,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,KAAA,GACb,CAIA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,IACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAS,CAC7B,CAEA,MAAA,EAAc,CACZ,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAM,IAAA,EAAM,CACrC,CAIA,KAAA,EAAuB,CACrB,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,CAAE,IAAA,EAAK,CAAE,KAClC,CAEA,IAAA,EAAsB,CACpB,IAAIuI,CAAAA,CACJ,IAAA,IAAW1F,CAAAA,IAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,CAChC0F,CAAAA,CAAO1F,CAAAA,CAET,OAAO0F,CACT,CAIA,MAAMhD,CAAAA,CAAqC,CACzC,IAAMnG,CAAAA,CAAS,IAAIiK,CAAAA,CACnB,IAAA,IAAWxC,CAAAA,IAAK,IAAA,CAAMzH,CAAAA,CAAO,GAAA,CAAIyH,CAAC,CAAA,CAClC,IAAA,IAAWA,CAAAA,IAAKtB,CAAAA,CAAOnG,CAAAA,CAAO,GAAA,CAAIyH,CAAC,CAAA,CACnC,OAAOzH,CACT,CAEA,YAAA,CAAamG,CAAAA,CAAqC,CAChD,IAAMnG,CAAAA,CAAS,IAAIiK,CAAAA,CACnB,QAAWxC,CAAAA,IAAK,IAAA,CACVtB,CAAAA,CAAM,GAAA,CAAIsB,CAAC,CAAA,EACbzH,CAAAA,CAAO,GAAA,CAAIyH,CAAC,CAAA,CAGhB,OAAOzH,CACT,CAEA,UAAA,CAAWmG,EAAqC,CAC9C,IAAMnG,CAAAA,CAAS,IAAIiK,CAAAA,CACnB,IAAA,IAAWxC,CAAAA,IAAK,IAAA,CACTtB,CAAAA,CAAM,GAAA,CAAIsB,CAAC,CAAA,EACdzH,CAAAA,CAAO,GAAA,CAAIyH,CAAC,CAAA,CAGhB,OAAOzH,CACT,CAEA,UAAA,CAAWmG,CAAAA,CAA+B,CACxC,IAAA,IAAWsB,CAAAA,IAAK,IAAA,CACd,GAAI,CAACtB,CAAAA,CAAM,GAAA,CAAIsB,CAAC,CAAA,CACd,OAAO,MAAA,CAGX,OAAO,KACT,CAEA,YAAA,CAAatB,CAAAA,CAA+B,CAC1C,OAAOA,CAAAA,CAAM,UAAA,CAAW,IAAI,CAC9B,CAIA,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAC/B,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EACpB,CACF,ECxGO,IAAM+D,EAAAA,CAAN,MAAMC,CAA8B,CACjC,KAAA,CAER,WAAA,CAAYN,CAAAA,CAAwB,CAClC,IAAA,CAAK,KAAA,CAAQ,IAAI,UAAA,CAAW,GAAA,CAAIA,CAAQ,EAC1C,CAIA,GAAA,CAAIjJ,CAAAA,CAAgB,CAClB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAK,EACtB,CAEA,MAAA,CAAOA,CAAAA,CAAmB,CACxB,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAK,CAChC,CAEA,GAAA,CAAIA,CAAAA,CAAmB,CACrB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIA,CAAK,CAC7B,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,QACb,CAIA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,IACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,CAAM,OAAS,CAC7B,CAEA,MAAA,EAAc,CACZ,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAC9B,CAIA,KAAA,CAAMuF,CAAAA,CAAuB,CAC3B,IAAMnG,CAAAA,CAAS,IAAImK,CAAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CACpC,IAAA,IAAWvJ,CAAAA,IAASuF,CAAAA,CAAM,KAAA,CACxBnG,CAAAA,CAAO,GAAA,CAAIY,CAAK,CAAA,CAElB,OAAOZ,CACT,CAEA,YAAA,CAAamG,CAAAA,CAAuB,CAClC,IAAMnG,CAAAA,CAAS,IAAImK,CAAAA,CACnB,IAAA,IAAWvJ,CAAAA,IAAS,IAAA,CAAK,KAAA,CACnBuF,CAAAA,CAAM,GAAA,CAAIvF,CAAK,CAAA,EACjBZ,CAAAA,CAAO,GAAA,CAAIY,CAAK,CAAA,CAGpB,OAAOZ,CACT,CAEA,UAAA,CAAWmG,CAAAA,CAAuB,CAChC,IAAMnG,CAAAA,CAAS,IAAImK,CAAAA,CACnB,IAAA,IAAWvJ,CAAAA,IAAS,IAAA,CAAK,KAAA,CAClBuF,CAAAA,CAAM,GAAA,CAAIvF,CAAK,CAAA,EAClBZ,CAAAA,CAAO,GAAA,CAAIY,CAAK,CAAA,CAGpB,OAAOZ,CACT,CAEA,WAAWmG,CAAAA,CAAwB,CACjC,IAAA,IAAWvF,CAAAA,IAAS,IAAA,CAAK,KAAA,CACvB,GAAI,CAACuF,CAAAA,CAAM,GAAA,CAAIvF,CAAK,CAAA,CAClB,OAAO,MAAA,CAGX,OAAO,KACT,CAEA,YAAA,CAAauF,CAAAA,CAAwB,CACnC,OAAOA,CAAAA,CAAM,UAAA,CAAW,IAAI,CAC9B,CAIA,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAC/B,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA,EACnC,CACF,EC9EA,IAAMiE,CAAAA,CAAN,KAAsB,CACpB,KAAA,CACA,MACA,IAAA,CACA,IAAA,CAAyB,IAAA,CACzB,KAAA,CAA0B,IAAA,CAE1B,WAAA,CAAYC,CAAAA,CAAcC,CAAAA,CAAc1J,CAAAA,CAAW,CACjD,IAAA,CAAK,KAAA,CAAQyJ,CAAAA,CACb,IAAA,CAAK,KAAOC,CAAAA,CACZ,IAAA,CAAK,KAAA,CAAQ1J,EACf,CACF,CAAA,CAEa2J,EAAAA,CAAN,KAAsB,CACnB,IAAA,CAAyB,IAAA,CAChB,CAAA,CAEjB,WAAA,CACEC,CAAAA,CACAC,CAAAA,CACA,CACA,GAAID,CAAAA,EAAUA,CAAAA,CAAO,MAAA,CAAS,CAAA,CAC5B,IAAA,CAAK,CAAA,CAAIA,CAAAA,CAAO,CAAC,CAAA,CAAE,KAAA,CAAM,MAAA,CACzB,IAAA,CAAK,IAAA,CAAO,KAAK,KAAA,CAAMA,CAAAA,CAAQ,CAAC,CAAA,CAAA,KAAA,GACvBC,CAAAA,GAAe,MAAA,CACxB,IAAA,CAAK,CAAA,CAAIA,CAAAA,CAAAA,KAET,MAAM,IAAI,KAAA,CAAM,2CAA2C,CAE/D,CAIA,MAAA,CAAOJ,CAAAA,CAAczJ,CAAAA,CAAiB,CACpC,GAAIyJ,CAAAA,CAAM,MAAA,GAAW,IAAA,CAAK,CAAA,CACxB,MAAM,IAAI,KAAA,CAAM,+BAA+B,CAAA,CAEjD,IAAA,CAAK,KAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAOzJ,CAAAA,CAAO,CAAC,EACxD,CAEA,QAAA,CAASyJ,CAAAA,CAAuB,CAC9B,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAO,CAAC,CAC5C,CAIA,OAAA,CAAQK,CAAAA,CAAmD,CACzD,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAAO,IAAA,CACvB,GAAIA,CAAAA,CAAO,MAAA,GAAW,IAAA,CAAK,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,+BAA+B,CAAA,CAGjD,IAAIC,CAAAA,CAA0B,IAAA,CAC1BC,EACAC,CAAAA,CAAW,CAAA,CAAA,CAAA,CAETC,CAAAA,CAAUvH,CAAAA,EAAiC,CAC/C,GAAI,CAACA,CAAAA,CAAM,OAEX,IAAMwH,CAAAA,CAAO,IAAA,CAAK,eAAA,CAAgBL,CAAAA,CAAQnH,EAAK,KAAK,CAAA,CAChDwH,CAAAA,CAAOF,CAAAA,GACTA,CAAAA,CAAWE,CAAAA,CACXJ,CAAAA,CAAYpH,CAAAA,CAAK,KAAA,CACjBqH,CAAAA,CAAYrH,CAAAA,CAAK,KAAA,CAAA,CAGnB,IAAM+G,CAAAA,CAAO/G,CAAAA,CAAK,IAAA,CACZyH,CAAAA,CAAON,CAAAA,CAAOJ,CAAI,CAAA,CAAI/G,CAAAA,CAAK,KAAA,CAAM+G,CAAI,CAAA,CAErCW,CAAAA,CAAOD,CAAAA,CAAO,CAAA,CAAIzH,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,MACnC2H,CAAAA,CAAMF,CAAAA,CAAO,CAAA,CAAIzH,CAAAA,CAAK,KAAA,CAAQA,CAAAA,CAAK,IAAA,CAEzCuH,CAAAA,CAAOG,CAAI,CAAA,CAEPD,CAAAA,CAAOA,CAAAA,CAAOH,CAAAA,EAChBC,CAAAA,CAAOI,CAAG,EAEd,CAAA,CAEA,OAAAJ,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAETH,CAAAA,CAAY,CAAE,KAAA,CAAOA,CAAAA,CAAW,KAAA,CAAOC,CAAU,CAAA,CAAI,IAC9D,CAIA,WAAA,CAAYvE,CAAAA,CAAY8E,CAAAA,CAAgD,CACtE,GAAI9E,CAAAA,CAAI,MAAA,GAAW,IAAA,CAAK,CAAA,EAAK8E,CAAAA,CAAI,MAAA,GAAW,IAAA,CAAK,CAAA,CAC/C,MAAM,IAAI,KAAA,CAAM,+BAA+B,CAAA,CAGjD,IAAMnL,CAAAA,CAA6C,EAAC,CAE9C8K,CAAAA,CAAUvH,CAAAA,EAAiC,CAC/C,GAAI,CAACA,CAAAA,CAAM,OAEP,IAAA,CAAK,QAAQA,CAAAA,CAAK,KAAA,CAAO8C,CAAAA,CAAK8E,CAAG,CAAA,EACnCnL,CAAAA,CAAO,IAAA,CAAK,CAAE,KAAA,CAAOuD,CAAAA,CAAK,KAAA,CAAO,KAAA,CAAOA,CAAAA,CAAK,KAAM,CAAC,CAAA,CAGtD,IAAM+G,CAAAA,CAAO/G,CAAAA,CAAK,IAAA,CAEd8C,CAAAA,CAAIiE,CAAI,CAAA,EAAK/G,CAAAA,CAAK,KAAA,CAAM+G,CAAI,CAAA,EAC9BQ,CAAAA,CAAOvH,CAAAA,CAAK,IAAI,CAAA,CAEd4H,CAAAA,CAAIb,CAAI,CAAA,EAAK/G,CAAAA,CAAK,KAAA,CAAM+G,CAAI,CAAA,EAC9BQ,CAAAA,CAAOvH,CAAAA,CAAK,KAAK,EAErB,CAAA,CAEA,OAAAuH,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CACT9K,CACT,CAIA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAIQ,KAAA,CACNwK,CAAAA,CACApC,CAAAA,CACkB,CAClB,GAAIoC,CAAAA,CAAO,MAAA,GAAW,CAAA,CAAG,OAAO,IAAA,CAEhC,IAAMF,CAAAA,CAAOlC,CAAAA,CAAQoC,CAAAA,CAAO,CAAC,CAAA,CAAE,KAAA,CAAM,MAAA,CACrCA,CAAAA,CAAO,IAAA,CAAK,CAAC7G,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,CAAE,KAAA,CAAM2G,CAAI,CAAA,CAAI1G,CAAAA,CAAE,KAAA,CAAM0G,CAAI,CAAC,CAAA,CAEnD,IAAMc,CAAAA,CAAS,KAAK,KAAA,CAAMZ,CAAAA,CAAO,MAAA,CAAS,CAAC,CAAA,CACrCjH,CAAAA,CAAO,IAAI6G,CAAAA,CAAOI,CAAAA,CAAOY,CAAM,CAAA,CAAE,KAAA,CAAOd,CAAAA,CAAME,CAAAA,CAAOY,CAAM,CAAA,CAAE,KAAK,CAAA,CAExE,OAAA7H,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,KAAA,CAAMiH,CAAAA,CAAO,KAAA,CAAM,CAAA,CAAGY,CAAM,CAAA,CAAGhD,CAAAA,CAAQ,CAAC,EACzD7E,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,KAAA,CAAMiH,CAAAA,CAAO,KAAA,CAAMY,CAAAA,CAAS,CAAC,CAAA,CAAGhD,CAAAA,CAAQ,CAAC,CAAA,CAEpD7E,CACT,CAEQ,WACNA,CAAAA,CACA8G,CAAAA,CACAzJ,CAAAA,CACAwH,CAAAA,CACW,CACX,GAAI,CAAC7E,CAAAA,CACH,OAAO,IAAI6G,CAAAA,CAAOC,CAAAA,CAAOjC,CAAAA,CAAQ,IAAA,CAAK,EAAGxH,CAAK,CAAA,CAGhD,IAAM0J,CAAAA,CAAO/G,CAAAA,CAAK,IAAA,CAClB,OAAI8G,CAAAA,CAAMC,CAAI,CAAA,CAAI/G,CAAAA,CAAK,KAAA,CAAM+G,CAAI,CAAA,CAC/B/G,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAM8G,CAAAA,CAAOzJ,CAAAA,CAAOwH,CAAAA,CAAQ,CAAC,CAAA,CAE9D7E,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,MAAO8G,CAAAA,CAAOzJ,CAAAA,CAAOwH,CAAAA,CAAQ,CAAC,CAAA,CAG3D7E,CACT,CAEQ,QAAA,CACNA,CAAAA,CACA8G,CAAAA,CACAjC,CAAAA,CACkB,CAClB,GAAI,CAAC7E,CAAAA,CAAM,OAAO,IAAA,CAElB,GAAI,IAAA,CAAK,WAAA,CAAYA,CAAAA,CAAK,KAAA,CAAO8G,CAAK,CAAA,CACpC,OAAO9G,CAAAA,CAGT,IAAM+G,CAAAA,CAAO/G,CAAAA,CAAK,IAAA,CAClB,OAAI8G,CAAAA,CAAMC,CAAI,CAAA,CAAI/G,CAAAA,CAAK,KAAA,CAAM+G,CAAI,CAAA,CACxB,IAAA,CAAK,QAAA,CAAS/G,CAAAA,CAAK,IAAA,CAAM8G,CAAAA,CAAOjC,CAAAA,CAAQ,CAAC,CAAA,CAE3C,IAAA,CAAK,QAAA,CAAS7E,CAAAA,CAAK,KAAA,CAAO8G,CAAAA,CAAOjC,CAAAA,CAAQ,CAAC,CACnD,CAEQ,eAAA,CAAgBzE,CAAAA,CAAUC,CAAAA,CAAkB,CAClD,IAAI+E,CAAAA,CAAM,EACV,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,CAAI,IAAA,CAAK,CAAA,CAAG,CAAA,EAAA,CAAK,CAC/B,IAAMjC,CAAAA,CAAI/C,CAAAA,CAAE,CAAC,CAAA,CAAIC,CAAAA,CAAE,CAAC,CAAA,CACpB+E,CAAAA,EAAOjC,CAAAA,CAAIA,EACb,CACA,OAAOiC,CACT,CAEQ,OAAA,CAAQ0B,CAAAA,CAAchE,CAAAA,CAAY8E,CAAAA,CAAqB,CAC7D,IAAA,IAAS,EAAI,CAAA,CAAG,CAAA,CAAI,IAAA,CAAK,CAAA,CAAG,CAAA,EAAA,CAC1B,GAAId,CAAAA,CAAM,CAAC,CAAA,CAAIhE,CAAAA,CAAI,CAAC,CAAA,EAAKgE,CAAAA,CAAM,CAAC,CAAA,CAAIc,CAAAA,CAAI,CAAC,CAAA,CACvC,OAAO,MAAA,CAGX,OAAO,KACT,CAEQ,WAAA,CAAYxH,CAAAA,CAAUC,CAAAA,CAAmB,CAC/C,IAAA,IAAStC,CAAAA,CAAI,CAAA,CAAGA,EAAI,IAAA,CAAK,CAAA,CAAGA,CAAAA,EAAAA,CAC1B,GAAIqC,CAAAA,CAAErC,CAAC,CAAA,GAAMsC,CAAAA,CAAEtC,CAAC,CAAA,CAAG,OAAO,MAAA,CAE5B,OAAO,KACT,CACF,EClNA,IAAM+J,CAAAA,CAAN,MAAMC,CAAkB,CACtB,QAAA,CACA,QAAA,CACA,MAAA,CAA+C,EAAC,CAChD,OAAA,CAAU,KAAA,CAEV,SAAA,CAAgC,IAAA,CAChC,UAAgC,IAAA,CAChC,SAAA,CAAgC,IAAA,CAChC,SAAA,CAAgC,IAAA,CAEhC,WAAA,CAAYC,CAAAA,CAAgBlK,CAAAA,CAAkB,CAC5C,IAAA,CAAK,QAAA,CAAWkK,CAAAA,CAChB,IAAA,CAAK,QAAA,CAAWlK,EAClB,CAIA,MAAA,CAAOgJ,CAAAA,CAAgBzJ,CAAAA,CAAoB,CACzC,OAAK4K,CAAAA,CAAc,IAAA,CAAK,QAAA,CAAUnB,CAAK,CAAA,CAInC,IAAA,CAAK,MAAA,CAAO,MAAA,CAAS,IAAA,CAAK,UAAY,CAAC,IAAA,CAAK,OAAA,EAC9C,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAE,KAAA,CAAAA,CAAAA,CAAO,KAAA,CAAAzJ,CAAM,CAAC,CAAA,CAC1B,IAAA,GAGJ,IAAA,CAAK,OAAA,EACR,IAAA,CAAK,SAAA,EAAU,CAIf,IAAA,CAAK,SAAA,CAAW,MAAA,CAAOyJ,CAAAA,CAAOzJ,CAAK,CAAA,EACnC,IAAA,CAAK,SAAA,CAAW,MAAA,CAAOyJ,CAAAA,CAAOzJ,CAAK,GACnC,IAAA,CAAK,SAAA,CAAW,MAAA,CAAOyJ,CAAAA,CAAOzJ,CAAK,CAAA,EACnC,IAAA,CAAK,SAAA,CAAW,MAAA,CAAOyJ,CAAAA,CAAOzJ,CAAK,CAAA,CAAA,CAhB5B,KAkBX,CAEA,QAAA,CAASyJ,CAAAA,CAAyB,CAChC,GAAI,CAACmB,CAAAA,CAAc,IAAA,CAAK,QAAA,CAAUnB,CAAK,CAAA,CACrC,OAAO,MAAA,CAGT,IAAA,IAAW7B,CAAAA,IAAK,IAAA,CAAK,MAAA,CACnB,GAAIA,CAAAA,CAAE,KAAA,CAAM,CAAA,GAAM6B,CAAAA,CAAM,CAAA,EAAK7B,CAAAA,CAAE,KAAA,CAAM,CAAA,GAAM6B,CAAAA,CAAM,CAAA,CAC/C,OAAO,KAAA,CAIX,OAAK,IAAA,CAAK,OAAA,CAGR,IAAA,CAAK,SAAA,CAAW,QAAA,CAASA,CAAK,CAAA,EAC9B,IAAA,CAAK,SAAA,CAAW,QAAA,CAASA,CAAK,CAAA,EAC9B,IAAA,CAAK,SAAA,CAAW,QAAA,CAASA,CAAK,CAAA,EAC9B,KAAK,SAAA,CAAW,QAAA,CAASA,CAAK,CAAA,CANN,KAQ5B,CAEA,KAAA,CAAMoB,CAAAA,CAAaC,CAAAA,CAAmD,CACpE,GAAKC,EAAAA,CAAW,IAAA,CAAK,QAAA,CAAUF,CAAK,CAAA,CAIpC,CAAA,IAAA,IAAWjD,CAAAA,IAAK,IAAA,CAAK,MAAA,CACfgD,CAAAA,CAAcC,CAAAA,CAAOjD,CAAAA,CAAE,KAAK,CAAA,EAC9BkD,CAAAA,CAAM,IAAA,CAAKlD,CAAC,CAAA,CAIX,IAAA,CAAK,UAEV,IAAA,CAAK,SAAA,CAAW,KAAA,CAAMiD,CAAAA,CAAOC,CAAK,CAAA,CAClC,IAAA,CAAK,SAAA,CAAW,KAAA,CAAMD,CAAAA,CAAOC,CAAK,CAAA,CAClC,IAAA,CAAK,SAAA,CAAW,MAAMD,CAAAA,CAAOC,CAAK,CAAA,CAClC,IAAA,CAAK,SAAA,CAAW,KAAA,CAAMD,CAAAA,CAAOC,CAAK,CAAA,EAAA,CACpC,CAIQ,SAAA,EAAkB,CACxB,GAAM,CAAE,EAAAjF,CAAAA,CAAG,CAAA,CAAAE,CAAAA,CAAG,CAAA,CAAAiF,CAAAA,CAAG,CAAA,CAAAC,CAAE,CAAA,CAAI,IAAA,CAAK,QAAA,CACtBC,CAAAA,CAAKF,CAAAA,CAAI,CAAA,CACTG,CAAAA,CAAKF,CAAAA,CAAI,CAAA,CAEf,IAAA,CAAK,SAAA,CAAY,IAAIP,CAAAA,CACnB,CAAE,CAAA,CAAG7E,CAAAA,CAAIqF,CAAAA,CAAI,CAAA,CAAGnF,CAAAA,CAAIoF,CAAAA,CAAI,CAAA,CAAGD,CAAAA,CAAI,CAAA,CAAGC,CAAG,CAAA,CACrC,IAAA,CAAK,QACP,CAAA,CACA,IAAA,CAAK,SAAA,CAAY,IAAIT,CAAAA,CACnB,CAAE,CAAA,CAAG7E,CAAAA,CAAIqF,CAAAA,CAAI,CAAA,CAAGnF,CAAAA,CAAIoF,CAAAA,CAAI,CAAA,CAAGD,CAAAA,CAAI,CAAA,CAAGC,CAAG,CAAA,CACrC,IAAA,CAAK,QACP,CAAA,CACA,IAAA,CAAK,SAAA,CAAY,IAAIT,CAAAA,CACnB,CAAE,CAAA,CAAG7E,CAAAA,CAAIqF,EAAI,CAAA,CAAGnF,CAAAA,CAAIoF,CAAAA,CAAI,CAAA,CAAGD,CAAAA,CAAI,CAAA,CAAGC,CAAG,CAAA,CACrC,IAAA,CAAK,QACP,CAAA,CACA,IAAA,CAAK,SAAA,CAAY,IAAIT,CAAAA,CACnB,CAAE,CAAA,CAAG7E,CAAAA,CAAIqF,CAAAA,CAAI,CAAA,CAAGnF,CAAAA,CAAIoF,CAAAA,CAAI,CAAA,CAAGD,CAAAA,CAAI,CAAA,CAAGC,CAAG,CAAA,CACrC,IAAA,CAAK,QACP,CAAA,CAEA,KAAK,OAAA,CAAU,KACjB,CACF,CAAA,CAIaC,EAAAA,CAAN,KAAwB,CACrB,IAAA,CAER,WAAA,CAAYT,CAAAA,CAAgBlK,CAAAA,CAAmB,CAAA,CAAG,CAChD,GAAIA,GAAY,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,0CAA0C,CAAA,CAE5D,IAAA,CAAK,IAAA,CAAO,IAAIgK,CAAAA,CAASE,CAAAA,CAAUlK,CAAQ,EAC7C,CAEA,OAAOgJ,CAAAA,CAAgBzJ,CAAAA,CAAoB,CACzC,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAOyJ,CAAAA,CAAOzJ,CAAK,CACtC,CAEA,QAAA,CAASyJ,CAAAA,CAAyB,CAChC,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,CAAK,CACjC,CAEA,KAAA,CAAMoB,CAAAA,CAAmD,CACvD,IAAMzL,CAAAA,CAA+C,EAAC,CACtD,OAAA,IAAA,CAAK,IAAA,CAAK,MAAMyL,CAAAA,CAAOzL,CAAM,CAAA,CACtBA,CACT,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAIqL,CAAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAU,IAAA,CAAK,IAAA,CAAK,QAAQ,EACjE,CACF,EAIA,SAASG,CAAAA,CAAcS,CAAAA,CAAY5B,CAAAA,CAAyB,CAC1D,OACEA,CAAAA,CAAM,CAAA,EAAK4B,CAAAA,CAAK,CAAA,CAAIA,EAAK,CAAA,EACzB5B,CAAAA,CAAM,CAAA,EAAK4B,CAAAA,CAAK,CAAA,CAAIA,CAAAA,CAAK,CAAA,EACzB5B,CAAAA,CAAM,CAAA,EAAK4B,CAAAA,CAAK,CAAA,CAAIA,CAAAA,CAAK,CAAA,EACzB5B,CAAAA,CAAM,CAAA,EAAK4B,CAAAA,CAAK,CAAA,CAAIA,CAAAA,CAAK,CAE7B,CAEA,SAASN,EAAAA,CAAWhI,CAAAA,CAASC,CAAAA,CAAkB,CAC7C,OAAO,EACLA,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,EAAID,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,CAAA,EACpBC,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,CAAA,CAAID,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,CAAA,EACpBC,CAAAA,CAAE,CAAA,CAAIA,EAAE,CAAA,CAAID,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,CAAA,EACpBC,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,CAAA,CAAID,CAAAA,CAAE,CAAA,CAAIA,CAAAA,CAAE,CAAA,CAExB,KC/JauI,EAAAA,CAAN,KAAkB,CACf,KAAA,CAAa,EAAC,CACd,QAAA,CAAgB,EAAC,CAEzB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,MACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,GAAW,CAC/B,CAEA,IAAA,CAAKtL,CAAAA,CAAgB,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAK,CAAA,CAAA,CAGnB,IAAA,CAAK,QAAA,CAAS,MAAA,GAAW,CAAA,EACzBA,CAAAA,EAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAC,CAAA,GAE/C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAKA,CAAK,EAE5B,CAEA,GAAA,EAAqB,CACnB,GAAI,IAAA,CAAK,OAAA,EAAQ,CAAG,OAEpB,IAAMA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,KAAI,CAE7B,OAAIA,CAAAA,GAAU,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAC,CAAA,EAClD,IAAA,CAAK,QAAA,CAAS,GAAA,EAAI,CAGbA,CACT,CAEA,IAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAC,CACzC,CAEA,MAAA,EAAwB,CACtB,OAAO,KAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAC,CAC/C,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CACpB,IAAA,CAAK,SAAS,MAAA,CAAS,EACzB,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAA,CAAK,KAAK,CACvB,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC3C,CACF,ECvDO,IAAMuL,EAAAA,CAAN,KAAkB,CACf,KAAA,CAAa,EAAC,CACd,QAAA,CAAgB,EAAC,CAEzB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,KAAA,CAAM,MACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,MAAM,MAAA,GAAW,CAC/B,CAEA,IAAA,CAAKvL,CAAAA,CAAgB,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAK,CAAA,CAAA,CAGnB,IAAA,CAAK,QAAA,CAAS,MAAA,GAAW,CAAA,EACzBA,CAAAA,EAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAC,CAAA,GAE/C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAKA,CAAK,EAE5B,CAEA,GAAA,EAAqB,CACnB,GAAI,IAAA,CAAK,OAAA,EAAQ,CAAG,OAEpB,IAAMA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,EAAI,CAE7B,OAAIA,CAAAA,GAAU,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAC,CAAA,EAClD,IAAA,CAAK,QAAA,CAAS,GAAA,EAAI,CAGbA,CACT,CAEA,IAAA,EAAsB,CACpB,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAC,CACzC,CAEA,MAAA,EAAwB,CACtB,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAC,CAC/C,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CACpB,IAAA,CAAK,QAAA,CAAS,MAAA,CAAS,EACzB,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAA,CAAK,KAAK,CACvB,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC3C,CACF,ECrDO,IAAMwL,EAAAA,CAAN,KAAsC,CACjC,KAAA,CAAa,EAAC,CAExB,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,MAAM,MACpB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,GAAW,CAC/B,CAEA,IAAA,CAAKxL,CAAAA,CAAgB,CACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,CAAK,EACvB,CAEA,GAAA,EAAqB,CACnB,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,EACpB,CAEA,IAAA,EAAsB,CACpB,OAAO,KAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAC,CACzC,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAS,EACtB,CAEA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAA,CAAK,KAAK,CACvB,CAEA,EAAE,MAAA,CAAO,QAAQ,CAAA,EAAiB,CAChC,IAAA,IAASU,CAAAA,CAAI,KAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CAAGA,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CAC1C,MAAM,IAAA,CAAK,KAAA,CAAMA,CAAC,EAEtB,CAEA,QAAA,EAAmB,CACjB,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACxC,CACF,ECzCO,IAAM+K,EAAAA,CAAN,KAAkB,CACN,IAAA,CACA,YAEjB,WAAA,CAAYC,CAAAA,CAAc,CACxB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CACZ,IAAA,CAAK,WAAA,CAAc,IAAA,CAAK,gBAAA,CAAiBA,CAAI,EAC/C,CAOA,QAAA,EAAqB,CACnB,OAAO,CAAC,GAAG,IAAA,CAAK,WAAW,CAC7B,CAKA,OAAA,EAAkB,CAChB,OAAO,IAAA,CAAK,IACd,CAKA,SAAA,CAAUhL,CAAAA,CAAmB,CAC3B,GAAIA,CAAAA,CAAI,CAAA,EAAKA,CAAAA,EAAK,IAAA,CAAK,WAAA,CAAY,MAAA,CACjC,MAAM,IAAI,UAAA,CAAW,qBAAqB,CAAA,CAE5C,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,WAAA,CAAYA,CAAC,CAAC,CAC5C,CAKA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,WAAA,CAAY,MAC1B,CAIQ,gBAAA,CAAiBiL,EAAqB,CAC5C,IAAM3F,CAAAA,CAAI2F,CAAAA,CAAE,MAAA,CACZ,GAAI3F,CAAAA,GAAM,CAAA,CAAG,OAAO,EAAC,CAErB,IAAI4F,CAAAA,CAAK,IAAI,KAAA,CAAc5F,CAAC,CAAA,CACxB8B,CAAAA,CAAO,IAAI,KAAA,CAAc9B,CAAC,CAAA,CAC1B6F,CAAAA,CAAO,IAAI,KAAA,CAAc7F,CAAC,CAAA,CAG9B,IAAA,IAAStF,CAAAA,CAAI,CAAA,CAAGA,EAAIsF,CAAAA,CAAGtF,CAAAA,EAAAA,CACrBkL,CAAAA,CAAGlL,CAAC,CAAA,CAAIA,CAAAA,CACRoH,CAAAA,CAAKpH,CAAC,CAAA,CAAIiL,CAAAA,CAAE,UAAA,CAAWjL,CAAC,CAAA,CAG1B,IAAA,IAASoL,EAAI,CAAA,CAAGA,CAAAA,CAAI9F,CAAAA,CAAG8F,CAAAA,GAAM,CAAA,CAAG,CAC9BF,CAAAA,CAAG,IAAA,CAAK,CAAC,CAAA,CAAG5I,CAAAA,GAAM,CAChB,GAAI8E,CAAAA,CAAK,CAAC,CAAA,GAAMA,CAAAA,CAAK9E,CAAC,CAAA,CACpB,OAAO8E,CAAAA,CAAK,CAAC,CAAA,CAAIA,CAAAA,CAAK9E,CAAC,CAAA,CAEzB,IAAM+I,CAAAA,CAAK,CAAA,CAAID,CAAAA,CAAI9F,CAAAA,CAAI8B,CAAAA,CAAK,CAAA,CAAIgE,CAAC,CAAA,CAAI,EAAA,CAC/BE,CAAAA,CAAKhJ,CAAAA,CAAI8I,CAAAA,CAAI9F,CAAAA,CAAI8B,CAAAA,CAAK9E,CAAAA,CAAI8I,CAAC,CAAA,CAAI,EAAA,CACrC,OAAOC,CAAAA,CAAKC,CACd,CAAC,CAAA,CAEDH,CAAAA,CAAKD,CAAAA,CAAG,CAAC,CAAC,CAAA,CAAI,CAAA,CACd,IAAA,IAASlL,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIsF,CAAAA,CAAGtF,CAAAA,EAAAA,CAAK,CAC1B,IAAMiG,CAAAA,CAAOiF,CAAAA,CAAGlL,CAAAA,CAAI,CAAC,CAAA,CACfuL,CAAAA,CAAOL,CAAAA,CAAGlL,CAAC,CAAA,CAEXwL,CAAAA,CACJpE,CAAAA,CAAKnB,CAAI,IAAMmB,CAAAA,CAAKmE,CAAI,CAAA,EAAA,CACvBtF,CAAAA,CAAOmF,CAAAA,CAAI9F,CAAAA,CAAI8B,CAAAA,CAAKnB,CAAAA,CAAOmF,CAAC,CAAA,CAAI,EAAA,KAC9BG,CAAAA,CAAOH,CAAAA,CAAI9F,CAAAA,CAAI8B,CAAAA,CAAKmE,CAAAA,CAAOH,CAAC,CAAA,CAAI,EAAA,CAAA,CAErCD,CAAAA,CAAKI,CAAI,CAAA,CAAIC,CAAAA,CAAOL,CAAAA,CAAKlF,CAAI,CAAA,CAAIkF,CAAAA,CAAKlF,CAAI,CAAA,CAAI,EAChD,CAEA,IAAA,IAASjG,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIsF,CAAAA,CAAGtF,CAAAA,EAAAA,CACrBoH,CAAAA,CAAKpH,CAAC,CAAA,CAAImL,CAAAA,CAAKnL,CAAC,CAAA,CAIlB,GAAIoH,CAAAA,CAAK8D,EAAG5F,CAAAA,CAAI,CAAC,CAAC,CAAA,GAAMA,CAAAA,CAAI,CAAA,CAAG,KACjC,CAEA,OAAO4F,CACT,CACF,EC3FA,IAAMO,CAAAA,CAAN,KAAU,CACR,KAAA,CACA,WAAA,CAAYnM,CAAAA,CAAe,CACzB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,CAAA,CAEMoM,CAAAA,CAAN,KAAqB,CACnB,QAAA,CAAwC,IAAI,GAAA,CAC5C,KAAA,CACA,GAAA,CACA,UAAA,CAAoC,IAAA,CAEpC,WAAA,CAAYlK,CAAAA,CAAemK,CAAAA,CAAU,CACnC,IAAA,CAAK,KAAA,CAAQnK,CAAAA,CACb,IAAA,CAAK,GAAA,CAAMmK,EACb,CAEA,UAAA,CAAWC,CAAAA,CAA4B,CACrC,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,CAAOA,CAAAA,CAAa,CAAC,CAAA,CAAI,IAAA,CAAK,KACzD,CACF,CAAA,CAEaC,EAAAA,CAAN,KAAiB,CACL,IAAA,CACA,IAAA,CAET,UAAA,CACA,UAAA,CAAa,EAAA,CACb,YAAA,CAAe,CAAA,CAEf,oBAAA,CAAuB,CAAA,CACd,OAAA,CAAe,IAAIJ,EAAI,EAAE,CAAA,CAE1C,WAAA,CAAYT,CAAAA,CAAc,CACxB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CACZ,IAAA,CAAK,IAAA,CAAO,IAAIU,CAAAA,CAAe,EAAA,CAAI,IAAID,CAAAA,CAAI,EAAE,CAAC,CAAA,CAC9C,IAAA,CAAK,UAAA,CAAa,IAAA,CAAK,IAAA,CAEvB,IAAA,CAAK,KAAA,GACP,CAQA,QAAA,CAASK,CAAAA,CAA0B,CACjC,GAAIA,EAAQ,MAAA,GAAW,CAAA,CAAG,OAAO,KAAA,CAEjC,IAAI7J,CAAAA,CAAO,IAAA,CAAK,IAAA,CACZjC,CAAAA,CAAI,CAAA,CAER,KAAOA,CAAAA,CAAI8L,CAAAA,CAAQ,MAAA,EAAQ,CACzB,IAAMnK,CAAAA,CAAOM,CAAAA,CAAK,QAAA,CAAS,GAAA,CAAI6J,CAAAA,CAAQ9L,CAAC,CAAC,CAAA,CACzC,GAAI,CAAC2B,CAAAA,CAAM,OAAO,MAAA,CAElB,IAAIyJ,CAAAA,CAAIzJ,CAAAA,CAAK,KAAA,CACPgK,CAAAA,CAAM,IAAA,CAAK,GAAA,CAAIhK,CAAAA,CAAK,GAAA,CAAI,KAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAC,CAAA,CAGzD,KAAOyJ,CAAAA,EAAKO,CAAAA,EAAO3L,CAAAA,CAAI8L,CAAAA,CAAQ,MAAA,EAAQ,CACrC,GAAI,IAAA,CAAK,IAAA,CAAKV,CAAC,CAAA,GAAMU,CAAAA,CAAQ9L,CAAC,CAAA,CAAG,OAAO,OACxCoL,CAAAA,EAAAA,CACApL,CAAAA,GACF,CAGA,GAAIA,CAAAA,GAAM8L,CAAAA,CAAQ,MAAA,CAChB,OAAO,KAAA,CAIT7J,CAAAA,CAAON,EACT,CAEA,OAAO,KACT,CAKA,OAAA,EAAkB,CAChB,OAAO,IAAA,CAAK,IACd,CAIQ,KAAA,EAAc,CACpB,IAAA,IAAS3B,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,IAAA,CAAK,IAAA,CAAK,MAAA,CAAQA,IACpC,IAAA,CAAK,MAAA,CAAOA,CAAC,EAEjB,CAEQ,MAAA,CAAO+L,CAAAA,CAAmB,CAChC,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAQA,CAAAA,CACrB,IAAA,CAAK,oBAAA,EAAA,CAEL,IAAIC,CAAAA,CAAqC,IAAA,CAEzC,KAAO,IAAA,CAAK,oBAAA,CAAuB,CAAA,EAAG,CAChC,IAAA,CAAK,YAAA,GAAiB,CAAA,GACxB,IAAA,CAAK,UAAA,CAAaD,CAAAA,CAAAA,CAGpB,IAAME,CAAAA,CAAW,KAAK,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,CACtCnQ,CAAAA,CAAO,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,GAAA,CAAImQ,CAAQ,CAAA,CAEhD,GAAKnQ,CAAAA,CASE,CACL,GAAI,IAAA,CAAK,QAAA,CAASA,CAAAA,CAAMiQ,CAAG,CAAA,CAAG,SAE9B,GAAI,IAAA,CAAK,IAAA,CAAKjQ,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,YAAY,CAAA,GAAM,KAAK,IAAA,CAAKiQ,CAAG,CAAA,CAAG,CAE5DC,CAAAA,EAAe,IAAA,CAAK,UAAA,GAAe,IAAA,CAAK,IAAA,GAC1CA,CAAAA,CAAY,UAAA,CAAa,IAAA,CAAK,UAAA,CAC9BA,CAAAA,CAAc,IAAA,CAAA,CAEhB,IAAA,CAAK,YAAA,EAAA,CACL,KACF,CAGA,IAAME,CAAAA,CAAW,IAAIT,CAAAA,CAAI3P,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,YAAY,CAAA,CACjDqQ,CAAAA,CAAQ,IAAIT,EAAe5P,CAAAA,CAAK,KAAA,CAAOoQ,CAAQ,CAAA,CAErD,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,GAAA,CAAID,CAAAA,CAAUE,CAAK,CAAA,CAE5C,IAAMC,CAAAA,CAAO,IAAIV,CAAAA,CAAeK,CAAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CACjDI,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,IAAA,CAAKJ,CAAG,CAAA,CAAGK,CAAI,CAAA,CAEvCtQ,CAAAA,CAAK,KAAA,EAAS,KAAK,YAAA,CACnBqQ,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,IAAA,CAAKrQ,CAAAA,CAAK,KAAK,CAAA,CAAGA,CAAI,CAAA,CAE1CkQ,CAAAA,GACFA,CAAAA,CAAY,UAAA,CAAaG,CAAAA,CAAAA,CAG3BH,CAAAA,CAAcG,EAChB,CAAA,KAvCW,CAET,IAAMC,CAAAA,CAAO,IAAIV,CAAAA,CAAeK,CAAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CACjD,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAIE,CAAAA,CAAUG,CAAI,CAAA,CAEvCJ,CAAAA,GACFA,CAAAA,CAAY,UAAA,CAAa,IAAA,CAAK,UAAA,CAC9BA,CAAAA,CAAc,IAAA,EAElB,CAgCA,IAAA,CAAK,oBAAA,EAAA,CAED,IAAA,CAAK,aAAe,IAAA,CAAK,IAAA,EAAQ,IAAA,CAAK,YAAA,CAAe,CAAA,EACvD,IAAA,CAAK,YAAA,EAAA,CACL,IAAA,CAAK,UAAA,CAAaD,CAAAA,CAAM,IAAA,CAAK,oBAAA,CAAuB,CAAA,EAC3C,IAAA,CAAK,aAAe,IAAA,CAAK,IAAA,GAClC,IAAA,CAAK,UAAA,CAAa,IAAA,CAAK,UAAA,CAAW,UAAA,EAAc,IAAA,CAAK,IAAA,EAEzD,CACF,CAEQ,QAAA,CAAS9J,CAAAA,CAAsB8J,CAAAA,CAAsB,CAC3D,IAAM1H,CAAAA,CAASpC,CAAAA,CAAK,UAAA,CAAW8J,CAAG,CAAA,CAClC,OAAI,IAAA,CAAK,YAAA,EAAgB1H,CAAAA,EACvB,IAAA,CAAK,UAAA,EAAcA,CAAAA,CACnB,IAAA,CAAK,YAAA,EAAgBA,EACrB,IAAA,CAAK,UAAA,CAAapC,CAAAA,CACX,IAAA,EAEF,KACT,CACF,ECtKO,IAAMoK,EAAAA,CAAN,KAAqB,CACT,CAAA,CACA,GAAA,CACA,KAAA,CACA,OAAA,CAEjB,WAAA,CAAYC,CAAAA,CAAUC,CAAAA,CAA4B,CAChD,GAAID,CAAAA,CAAI,MAAA,GAAW,CAAA,CACjB,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA,CAG1D,IAAA,CAAK,CAAA,CAAIA,EAAI,MAAA,CACb,IAAA,CAAK,OAAA,CAAUC,CAAAA,CAGf,IAAA,CAAK,GAAA,CAAM,IAAI,KAAA,CAAM,IAAA,CAAK,CAAA,CAAI,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,CACvC,IAAA,IAAS,CAAA,CAAI,CAAA,CAAG,CAAA,EAAK,IAAA,CAAK,CAAA,CAAG,CAAA,EAAA,CAC3B,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,EAAI,CAAC,CAAC,CAAA,CAAI,CAAA,CAG9C,IAAMC,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,CAC5B,IAAA,CAAK,KAAA,CAAQ,KAAA,CAAM,KAAK,CAAE,MAAA,CAAQA,CAAAA,CAAO,CAAE,CAAA,CAAG,IAC5C,IAAI,KAAA,CAAS,IAAA,CAAK,CAAC,CACrB,CAAA,CAGA,IAAA,IAAS,CAAA,CAAI,EAAG,CAAA,CAAI,IAAA,CAAK,CAAA,CAAG,CAAA,EAAA,CAC1B,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA,CAAIF,CAAAA,CAAI,CAAC,CAAA,CAI1B,IAAA,IAASlB,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAKoB,CAAAA,CAAMpB,CAAAA,EAAAA,CAAK,CAC9B,IAAMqB,CAAAA,CAAM,CAAA,EAAKrB,CAAAA,CACjB,IAAA,IAASpL,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIyM,CAAAA,EAAO,IAAA,CAAK,EAAGzM,CAAAA,EAAAA,CACjC,IAAA,CAAK,KAAA,CAAMoL,CAAC,CAAA,CAAEpL,CAAC,CAAA,CAAI,IAAA,CAAK,OAAA,CACtB,IAAA,CAAK,KAAA,CAAMoL,CAAAA,CAAI,CAAC,CAAA,CAAEpL,CAAC,CAAA,CACnB,IAAA,CAAK,KAAA,CAAMoL,CAAAA,CAAI,CAAC,CAAA,CAAEpL,CAAAA,EAAKyM,CAAAA,EAAO,CAAA,CAAE,CAClC,EAEJ,CACF,CAOA,KAAA,CAAMC,CAAAA,CAAW5H,EAAc,CAC7B,GAAI4H,CAAAA,CAAI,CAAA,EAAK5H,CAAAA,EAAK,IAAA,CAAK,CAAA,EAAK4H,CAAAA,CAAI5H,CAAAA,CAC9B,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAGvC,IAAMT,CAAAA,CAASS,CAAAA,CAAI4H,CAAAA,CAAI,CAAA,CACjBtB,CAAAA,CAAI,IAAA,CAAK,GAAA,CAAI/G,CAAM,CAAA,CAEzB,OAAO,IAAA,CAAK,OAAA,CACV,IAAA,CAAK,KAAA,CAAM+G,CAAC,EAAEsB,CAAC,CAAA,CACf,IAAA,CAAK,KAAA,CAAMtB,CAAC,CAAA,CAAEtG,CAAAA,EAAK,CAAA,EAAKsG,CAAAA,CAAAA,CAAK,CAAC,CAChC,CACF,CAIA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,CACd,CACF,ECzEA,IAAMuB,CAAAA,CAAN,KAAiB,CACf,KAAA,CACA,IAAA,CAA0B,IAAA,CAC1B,KAAA,CAA2B,IAAA,CAC3B,OAAiB,CAAA,CAEjB,WAAA,CAAYrN,CAAAA,CAAU,CACpB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,CAAA,CAEasN,EAAAA,CAAN,KAAiB,CACd,IAAA,CAA0B,IAAA,CAC1B,OAAA,CAER,WAAA,CAAYhI,CAAAA,CAAoC,CAC9C,IAAA,CAAK,OAAA,CACHA,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,GAChE,CAIA,MAAA,CAAOhD,CAAAA,CAAgB,CACrB,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAK,EAC9C,CAEA,MAAA,CAAOA,CAAAA,CAAgB,CACrB,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAK,EAC9C,CAEA,QAAA,CAASA,CAAAA,CAAmB,CAC1B,OAAO,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA,CAAMA,CAAK,CACrC,CAEA,OAAA,EAAe,CACb,IAAMZ,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAC/BA,CACT,CAEA,QAAA,EAAgB,CACd,IAAMA,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAA,CAAMA,CAAM,EAChCA,CACT,CAEA,SAAA,EAAiB,CACf,IAAMA,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CACjCA,CACT,CAEA,MAAA,EAAiB,CACf,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAI,CAClC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,OAAS,IACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIQ,UAAA,CAAWuD,CAAAA,CAAyB3C,CAAAA,CAAsB,CAChE,GAAI,CAAC2C,CAAAA,CAAM,OAAO,IAAI0K,CAAAA,CAAQrN,CAAK,CAAA,CAEnC,IAAMuN,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAC1C,GAAI4K,CAAAA,CAAM,EAAG5K,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAM3C,CAAK,CAAA,CAAA,KAAA,GAChDuN,CAAAA,CAAM,CAAA,CAAG5K,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAO3C,CAAK,CAAA,CAAA,KAC3D,OAAO2C,CAAAA,CAEZ,OAAA,IAAA,CAAK,YAAA,CAAaA,CAAI,CAAA,CACf,IAAA,CAAK,SAAA,CAAUA,CAAI,CAC5B,CAEQ,UAAA,CAAWA,EAAyB3C,CAAAA,CAA6B,CACvE,GAAI,CAAC2C,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAM4K,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAE1C,GAAI4K,CAAAA,CAAM,CAAA,CACR5K,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAM3C,CAAK,CAAA,CAAA,KAAA,GACnCuN,CAAAA,CAAM,CAAA,CACf5K,CAAAA,CAAK,KAAA,CAAQ,KAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAO3C,CAAK,CAAA,CAAA,KACzC,CAEL,GAAI,CAAC2C,CAAAA,CAAK,IAAA,EAAQ,CAACA,CAAAA,CAAK,KAAA,CACtB,OAAOA,EAAK,IAAA,EAAQA,CAAAA,CAAK,KAAA,CAG3B,IAAM6K,CAAAA,CAAY,IAAA,CAAK,OAAA,CAAQ7K,CAAAA,CAAK,KAAK,CAAA,CACzCA,CAAAA,CAAK,KAAA,CAAQ6K,CAAAA,CAAU,KAAA,CACvB7K,EAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAO6K,CAAAA,CAAU,KAAK,EAC1D,CAEA,OAAA,IAAA,CAAK,YAAA,CAAa7K,CAAI,CAAA,CACf,IAAA,CAAK,SAAA,CAAUA,CAAI,CAC5B,CAEQ,MAAA,CAAOA,CAAAA,CAAyB3C,CAAAA,CAAmB,CACzD,GAAI,CAAC2C,CAAAA,CAAM,OAAO,MAAA,CAClB,IAAM4K,CAAAA,CAAM,IAAA,CAAK,QAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAC1C,OAAI4K,CAAAA,GAAQ,CAAA,CAAU,IAAA,CAClBA,CAAAA,CAAM,CAAA,CAAU,IAAA,CAAK,MAAA,CAAO5K,CAAAA,CAAK,IAAA,CAAM3C,CAAK,CAAA,CACzC,IAAA,CAAK,MAAA,CAAO2C,CAAAA,CAAK,KAAA,CAAO3C,CAAK,CACtC,CAIQ,WAAA,CAAY+F,CAAAA,CAA2B,CAC7C,IAAMF,CAAAA,CAAIE,CAAAA,CAAE,IAAA,CACN0H,EAAK5H,CAAAA,CAAE,KAAA,CAEb,OAAAA,CAAAA,CAAE,KAAA,CAAQE,CAAAA,CACVA,CAAAA,CAAE,IAAA,CAAO0H,CAAAA,CAET,IAAA,CAAK,YAAA,CAAa1H,CAAC,CAAA,CACnB,IAAA,CAAK,YAAA,CAAaF,CAAC,CAAA,CAEZA,CACT,CAEQ,UAAA,CAAWA,CAAAA,CAA2B,CAC5C,IAAME,CAAAA,CAAIF,CAAAA,CAAE,KAAA,CACN4H,CAAAA,CAAK1H,CAAAA,CAAE,IAAA,CAEb,OAAAA,EAAE,IAAA,CAAOF,CAAAA,CACTA,CAAAA,CAAE,KAAA,CAAQ4H,CAAAA,CAEV,IAAA,CAAK,YAAA,CAAa5H,CAAC,CAAA,CACnB,IAAA,CAAK,YAAA,CAAaE,CAAC,CAAA,CAEZA,CACT,CAEQ,SAAA,CAAUpD,CAAAA,CAA8B,CAC9C,IAAM+K,CAAAA,CAAU,IAAA,CAAK,UAAA,CAAW/K,CAAI,CAAA,CAGpC,OAAI+K,CAAAA,CAAU,CAAA,EACR,IAAA,CAAK,UAAA,CAAW/K,CAAAA,CAAK,IAAK,CAAA,CAAI,CAAA,GAChCA,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAK,CAAA,CAAA,CAEjC,IAAA,CAAK,WAAA,CAAYA,CAAI,CAAA,EAI1B+K,CAAAA,CAAU,EAAA,EACR,IAAA,CAAK,UAAA,CAAW/K,CAAAA,CAAK,KAAM,CAAA,CAAI,CAAA,GACjCA,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,WAAA,CAAYA,CAAAA,CAAK,KAAM,CAAA,CAAA,CAEpC,IAAA,CAAK,UAAA,CAAWA,CAAI,CAAA,EAGtBA,CACT,CAIQ,UAAA,CAAWA,CAAAA,CAAiC,CAClD,OAAOA,CAAAA,CAAOA,CAAAA,CAAK,MAAA,CAAS,EAC9B,CAEQ,YAAA,CAAaA,CAAAA,CAAwB,CAC3CA,CAAAA,CAAK,MAAA,CACH,CAAA,CAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAI,CAAA,CAAG,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAK,CAAC,EACxE,CAEQ,UAAA,CAAWA,CAAAA,CAA0B,CAC3C,OAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAI,CAAA,CAAI,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAK,CAChE,CAEQ,OAAA,CAAQA,CAAAA,CAA8B,CAC5C,KAAOA,CAAAA,CAAK,IAAA,EAAMA,CAAAA,CAAOA,CAAAA,CAAK,IAAA,CAC9B,OAAOA,CACT,CAEQ,eAAA,CAAgBA,CAAAA,CAAyBvD,EAAmB,CAC7DuD,CAAAA,GACL,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACtCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,gBAAgBA,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EACzC,CAEQ,gBAAA,CAAiBuD,CAAAA,CAAyBvD,CAAAA,CAAmB,CAC9DuD,CAAAA,GACLvD,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,EACtB,IAAA,CAAK,gBAAA,CAAiBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACvC,IAAA,CAAK,gBAAA,CAAiBuD,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EAC1C,CAEQ,iBAAA,CAAkBuD,CAAAA,CAAyBvD,CAAAA,CAAmB,CAC/DuD,CAAAA,GACL,IAAA,CAAK,iBAAA,CAAkBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACxC,IAAA,CAAK,iBAAA,CAAkBuD,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,CACzCA,EAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,EACxB,CACF,EChMA,IAAMgL,CAAAA,CAAN,KAAgB,CACd,KAAA,CACA,KAAA,CAAe,CAAA,CACf,IAAA,CAAyB,IAAA,CACzB,KAAA,CAA0B,IAAA,CAC1B,MAAA,CAA2B,IAAA,CAE3B,WAAA,CAAY3N,CAAAA,CAAU,CACpB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,CAAA,CAEa4N,EAAAA,CAAN,KAAsB,CACnB,KAAyB,IAAA,CACzB,OAAA,CAER,WAAA,CAAYtI,CAAAA,CAAoC,CAC9C,IAAA,CAAK,OAAA,CACHA,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOhD,CAAAA,CAAgB,CACrB,IAAM2C,CAAAA,CAAO,IAAIgL,CAAAA,CAAO3N,CAAK,CAAA,CAC7B,IAAA,CAAK,IAAA,CAAO,KAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAM2C,CAAI,CAAA,CAC1C,IAAA,CAAK,SAAA,CAAUA,CAAI,EACrB,CAEA,MAAA,CAAO3C,CAAAA,CAAgB,CACrB,IAAM2C,EAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAA,CAAM3C,CAAK,CAAA,CACtC2C,CAAAA,EACL,IAAA,CAAK,UAAA,CAAWA,CAAI,EACtB,CAEA,QAAA,CAAS3C,CAAAA,CAAmB,CAC1B,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAA,CAAMA,CAAK,CACzC,CAEA,OAAA,EAAe,CACb,IAAMZ,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAC/BA,CACT,CAEA,MAAA,EAAiB,CACf,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CACvC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIQ,SAAA,CAAUyF,CAAAA,CAAwBlC,CAAAA,CAA4B,CACpE,GAAI,CAACkC,CAAAA,CAAM,OAAOlC,CAAAA,CAElB,IAAM4K,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ5K,CAAAA,CAAK,KAAA,CAAOkC,EAAK,KAAK,CAAA,CAC/C,OAAI0I,CAAAA,CAAM,CAAA,EACR1I,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAK,IAAA,CAAMlC,CAAI,CAAA,CAC1CkC,CAAAA,CAAK,IAAA,CAAM,MAAA,CAASA,CAAAA,EACX0I,CAAAA,CAAM,CAAA,GACf1I,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAK,KAAA,CAAOlC,CAAI,CAAA,CAC5CkC,CAAAA,CAAK,KAAA,CAAO,MAAA,CAASA,GAGhBA,CACT,CAIQ,SAAA,CAAUlC,CAAAA,CAAuB,CACvC,KAAOA,CAAAA,CAAK,MAAA,EAAUA,CAAAA,CAAK,MAAA,CAAO,KAAA,GAAU,CAAA,EAAW,CACrD,IAAMmC,EAASnC,CAAAA,CAAK,MAAA,CACdkL,CAAAA,CAAc/I,CAAAA,CAAO,MAAA,CAC3B,GAAIA,CAAAA,GAAW+I,CAAAA,CAAY,IAAA,CAAM,CAC/B,IAAMC,CAAAA,CAAQD,CAAAA,CAAY,KAAA,CACtBC,GAASA,CAAAA,CAAM,KAAA,GAAU,CAAA,EAE3BhJ,CAAAA,CAAO,KAAA,CAAQ,CAAA,CACfgJ,CAAAA,CAAM,KAAA,CAAQ,CAAA,CACdD,CAAAA,CAAY,KAAA,CAAQ,CAAA,CACpBlL,CAAAA,CAAOkL,CAAAA,GAEHlL,CAAAA,GAASmC,CAAAA,CAAO,KAAA,GAElBnC,CAAAA,CAAOmC,CAAAA,CACP,IAAA,CAAK,UAAA,CAAWnC,CAAI,CAAA,CAAA,CAGtBmC,CAAAA,CAAO,KAAA,CAAQ,CAAA,CACf+I,CAAAA,CAAY,KAAA,CAAQ,CAAA,CACpB,IAAA,CAAK,YAAYA,CAAW,CAAA,EAEhC,CAAA,KAAO,CACL,IAAMC,CAAAA,CAAQD,CAAAA,CAAY,IAAA,CACtBC,CAAAA,EAASA,CAAAA,CAAM,KAAA,GAAU,CAAA,EAC3BhJ,CAAAA,CAAO,KAAA,CAAQ,CAAA,CACfgJ,CAAAA,CAAM,KAAA,CAAQ,CAAA,CACdD,CAAAA,CAAY,KAAA,CAAQ,CAAA,CACpBlL,CAAAA,CAAOkL,CAAAA,GAEHlL,CAAAA,GAASmC,CAAAA,CAAO,IAAA,GAClBnC,CAAAA,CAAOmC,CAAAA,CACP,IAAA,CAAK,WAAA,CAAYnC,CAAI,CAAA,CAAA,CAEvBmC,CAAAA,CAAO,KAAA,CAAQ,CAAA,CACf+I,CAAAA,CAAY,KAAA,CAAQ,CAAA,CACpB,IAAA,CAAK,UAAA,CAAWA,CAAW,CAAA,EAE/B,CACF,CACA,IAAA,CAAK,IAAA,CAAM,KAAA,CAAQ,EACrB,CAIQ,UAAA,CAAWlL,CAAAA,CAAuB,CACxC,IAAIoD,CAAAA,CAAIpD,CAAAA,CACJoL,CAAAA,CAAiBhI,CAAAA,CAAE,KAAA,CACnBF,CAAAA,CAEClD,CAAAA,CAAK,IAAA,CAGEA,EAAK,KAAA,EAIfoD,CAAAA,CAAI,IAAA,CAAK,OAAA,CAAQpD,CAAAA,CAAK,KAAK,CAAA,CAC3BoL,CAAAA,CAAiBhI,CAAAA,CAAE,KAAA,CACnBF,CAAAA,CAAIE,CAAAA,CAAE,KAAA,CAEFA,CAAAA,CAAE,SAAWpD,CAAAA,CACXkD,CAAAA,GAAGA,CAAAA,CAAE,MAAA,CAASE,CAAAA,CAAAA,EAElB,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAGA,CAAAA,CAAE,KAAK,CAAA,CAC1BA,CAAAA,CAAE,KAAA,CAAQpD,CAAAA,CAAK,MACfoD,CAAAA,CAAE,KAAA,CAAO,MAAA,CAASA,CAAAA,CAAAA,CAGpB,IAAA,CAAK,UAAA,CAAWpD,CAAAA,CAAMoD,CAAC,CAAA,CACvBA,CAAAA,CAAE,IAAA,CAAOpD,CAAAA,CAAK,IAAA,CACdoD,CAAAA,CAAE,IAAA,CAAM,MAAA,CAASA,CAAAA,CACjBA,CAAAA,CAAE,KAAA,CAAQpD,CAAAA,CAAK,KAAA,GAlBfkD,CAAAA,CAAIlD,CAAAA,CAAK,IAAA,CACT,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAMA,CAAAA,CAAK,IAAI,CAAA,CAAA,EAJ/BkD,EAAIlD,CAAAA,CAAK,KAAA,CACT,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAMA,CAAAA,CAAK,KAAK,CAAA,CAAA,CAuB9BoL,CAAAA,GAAmB,CAAA,EACrB,IAAA,CAAK,SAAA,CAAUlI,CAAAA,CAAGlD,CAAAA,CAAK,MAAM,EAEjC,CAEQ,SAAA,CAAUA,CAAAA,CAAwBmC,CAAAA,CAAgC,CACxE,KAAOnC,CAAAA,GAAS,IAAA,CAAK,IAAA,GAAS,CAACA,CAAAA,EAAQA,CAAAA,CAAK,KAAA,GAAU,CAAA,CAAA,EACpD,GAAIA,CAAAA,GAASmC,CAAAA,EAAQ,IAAA,CAAM,CACzB,IAAIkJ,CAAAA,CAAUlJ,CAAAA,CAAO,KAAA,CACjBkJ,CAAAA,EAAS,KAAA,GAAU,CAAA,GACrBA,CAAAA,CAAQ,KAAA,CAAQ,CAAA,CAChBlJ,CAAAA,CAAO,KAAA,CAAQ,CAAA,CACf,IAAA,CAAK,UAAA,CAAWA,CAAM,CAAA,CACtBkJ,CAAAA,CAAUlJ,CAAAA,CAAO,KAAA,CAAA,CAAA,CAGhB,CAACkJ,CAAAA,EAAS,IAAA,EAAQA,CAAAA,CAAQ,IAAA,CAAK,KAAA,GAAU,KACzC,CAACA,CAAAA,EAAS,KAAA,EAASA,CAAAA,CAAQ,KAAA,CAAM,KAAA,GAAU,CAAA,CAAA,EAE5CA,CAAAA,CAAS,KAAA,CAAQ,CAAA,CACjBrL,CAAAA,CAAOmC,CAAAA,CACPA,CAAAA,CAASnC,CAAAA,CAAK,UAEV,CAACqL,CAAAA,EAAS,KAAA,EAASA,CAAAA,CAAQ,KAAA,CAAM,KAAA,GAAU,CAAA,IACzCA,CAAAA,EAAS,IAAA,GAAMA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAQ,CAAA,CAAA,CACxCA,CAAAA,CAAS,MAAQ,CAAA,CACjB,IAAA,CAAK,WAAA,CAAYA,CAAQ,CAAA,CACzBA,CAAAA,CAAUlJ,CAAAA,CAAO,KAAA,CAAA,CAEnBkJ,CAAAA,CAAS,KAAA,CAAQlJ,CAAAA,CAAO,KAAA,CACxBA,CAAAA,CAAO,KAAA,CAAQ,CAAA,CACXkJ,CAAAA,EAAS,KAAA,GAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAAQ,CAAA,CAAA,CAC1C,IAAA,CAAK,UAAA,CAAWlJ,CAAM,CAAA,CACtBnC,CAAAA,CAAO,IAAA,CAAK,IAAA,EAEhB,CAAA,KAAO,CACL,IAAIqL,CAAAA,CAAUlJ,CAAAA,EAAQ,IAAA,CAClBkJ,CAAAA,EAAS,KAAA,GAAU,CAAA,GACrBA,CAAAA,CAAQ,KAAA,CAAQ,CAAA,CAChBlJ,CAAAA,CAAQ,KAAA,CAAQ,CAAA,CAChB,IAAA,CAAK,WAAA,CAAYA,CAAO,CAAA,CACxBkJ,CAAAA,CAAUlJ,CAAAA,CAAQ,IAAA,CAAA,CAAA,CAGjB,CAACkJ,CAAAA,EAAS,IAAA,EAAQA,CAAAA,CAAQ,IAAA,CAAK,KAAA,GAAU,CAAA,IACzC,CAACA,CAAAA,EAAS,KAAA,EAASA,CAAAA,CAAQ,MAAM,KAAA,GAAU,CAAA,CAAA,EAE5CA,CAAAA,CAAS,KAAA,CAAQ,CAAA,CACjBrL,CAAAA,CAAOmC,CAAAA,CACPA,CAAAA,CAASnC,CAAAA,CAAK,MAAA,GAAA,CAEV,CAACqL,CAAAA,EAAS,IAAA,EAAQA,CAAAA,CAAQ,IAAA,CAAK,KAAA,GAAU,CAAA,IACvCA,CAAAA,EAAS,KAAA,GAAOA,CAAAA,CAAQ,KAAA,CAAM,KAAA,CAAQ,CAAA,CAAA,CAC1CA,CAAAA,CAAS,KAAA,CAAQ,CAAA,CACjB,IAAA,CAAK,UAAA,CAAWA,CAAQ,CAAA,CACxBA,EAAUlJ,CAAAA,CAAQ,IAAA,CAAA,CAEpBkJ,CAAAA,CAAS,KAAA,CAAQlJ,CAAAA,CAAQ,KAAA,CACzBA,CAAAA,CAAQ,KAAA,CAAQ,CAAA,CACZkJ,CAAAA,EAAS,IAAA,GAAMA,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAQ,GACxC,IAAA,CAAK,WAAA,CAAYlJ,CAAO,CAAA,CACxBnC,CAAAA,CAAO,IAAA,CAAK,IAAA,EAEhB,CAEEA,CAAAA,GAAMA,CAAAA,CAAK,KAAA,CAAQ,CAAA,EACzB,CAIQ,UAAA,CAAWkD,EAAoB,CACrC,IAAME,CAAAA,CAAIF,CAAAA,CAAE,KAAA,CACZA,CAAAA,CAAE,KAAA,CAAQE,CAAAA,CAAE,IAAA,CACRA,CAAAA,CAAE,IAAA,GAAMA,CAAAA,CAAE,IAAA,CAAK,MAAA,CAASF,CAAAA,CAAAA,CAE5BE,CAAAA,CAAE,MAAA,CAASF,CAAAA,CAAE,MAAA,CACRA,CAAAA,CAAE,MAAA,CACEA,CAAAA,GAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAOE,CAAAA,CACzCF,CAAAA,CAAE,OAAO,KAAA,CAAQE,CAAAA,CAFP,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAI3BA,CAAAA,CAAE,IAAA,CAAOF,CAAAA,CACTA,CAAAA,CAAE,MAAA,CAASE,EACb,CAEQ,WAAA,CAAYA,CAAAA,CAAoB,CACtC,IAAMF,CAAAA,CAAIE,CAAAA,CAAE,IAAA,CACZA,CAAAA,CAAE,IAAA,CAAOF,CAAAA,CAAE,KAAA,CACPA,CAAAA,CAAE,KAAA,GAAOA,CAAAA,CAAE,KAAA,CAAM,MAAA,CAASE,CAAAA,CAAAA,CAE9BF,CAAAA,CAAE,OAASE,CAAAA,CAAE,MAAA,CACRA,CAAAA,CAAE,MAAA,CACEA,CAAAA,GAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAOF,CAAAA,CACzCE,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAQF,CAAAA,CAFP,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAI3BA,CAAAA,CAAE,KAAA,CAAQE,CAAAA,CACVA,CAAAA,CAAE,MAAA,CAASF,EACb,CAIQ,UAAA,CAAWoI,CAAAA,CAAcpH,CAAAA,CAA2B,CACrDoH,EAAE,MAAA,CACEA,CAAAA,GAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAOpH,CAAAA,CACzCoH,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAQpH,CAAAA,CAFP,IAAA,CAAK,KAAOA,CAAAA,CAGvBA,CAAAA,GAAGA,CAAAA,CAAE,MAAA,CAASoH,CAAAA,CAAE,MAAA,EACtB,CAEQ,OAAA,CAAQtL,CAAAA,CAA4B,CAC1C,KAAOA,CAAAA,CAAK,IAAA,EAAMA,CAAAA,CAAOA,EAAK,IAAA,CAC9B,OAAOA,CACT,CAEQ,QAAA,CAASA,CAAAA,CAAwB3C,CAAAA,CAA4B,CACnE,GAAI,CAAC2C,CAAAA,CAAM,OAAO,IAAA,CAClB,IAAM4K,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAC1C,OAAI4K,CAAAA,GAAQ,CAAA,CAAU5K,CAAAA,CAClB4K,CAAAA,CAAM,CAAA,CAAU,IAAA,CAAK,QAAA,CAAS5K,CAAAA,CAAK,KAAM3C,CAAK,CAAA,CAC3C,IAAA,CAAK,QAAA,CAAS2C,CAAAA,CAAK,KAAA,CAAO3C,CAAK,CACxC,CAEQ,eAAA,CAAgB2C,CAAAA,CAAwBvD,CAAAA,CAAmB,CAC5DuD,CAAAA,GACL,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACtCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAA,CAAOvD,CAAM,GACzC,CAEQ,eAAA,CAAgBuD,CAAAA,CAAgC,CACtD,OAAKA,CAAAA,CAEH,CAAA,CACA,IAAA,CAAK,GAAA,CACH,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAI,CAAA,CAC9B,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAK,CACjC,CAAA,CANgB,EAQpB,CACF,ECvSA,IAAMuL,CAAAA,CAAN,KAAmB,CACjB,KAAA,CACA,IAAA,CAA4B,IAAA,CAC5B,MAA6B,IAAA,CAC7B,MAAA,CAA8B,IAAA,CAE9B,WAAA,CAAYlO,CAAAA,CAAU,CACpB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,CAAA,CAEamO,EAAAA,CAAN,KAAmB,CAChB,IAAA,CAA4B,IAAA,CAC5B,OAAA,CAER,WAAA,CAAY7I,CAAAA,CAAoC,CAC9C,IAAA,CAAK,OAAA,CACHA,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,EAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOhD,CAAAA,CAAgB,CACrB,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,CACd,IAAA,CAAK,IAAA,CAAO,IAAIkO,CAAAA,CAAUlO,CAAK,CAAA,CAC/B,MACF,CAEA,IAAI8D,CAAAA,CAA+B,IAAA,CAAK,IAAA,CACpCgB,CAAAA,CAA8B,IAAA,CAElC,KAAOhB,CAAAA,EAAS,CACdgB,CAAAA,CAAShB,CAAAA,CACT,IAAMyJ,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO8D,CAAAA,CAAQ,KAAK,CAAA,CAC7C,GAAIyJ,CAAAA,CAAM,CAAA,CAAGzJ,CAAAA,CAAUA,CAAAA,CAAQ,IAAA,CAAA,KAAA,GACtByJ,CAAAA,CAAM,CAAA,CAAGzJ,CAAAA,CAAUA,CAAAA,CAAQ,KAAA,CAAA,KAC/B,CAEH,IAAA,CAAK,KAAA,CAAMA,CAAO,CAAA,CAClB,MACF,CACF,CAEA,IAAMnB,CAAAA,CAAO,IAAIuL,CAAAA,CAAUlO,CAAK,CAAA,CAChC2C,CAAAA,CAAK,MAAA,CAASmC,CAAAA,CAEV,IAAA,CAAK,OAAA,CAAQ9E,CAAAA,CAAO8E,CAAAA,CAAQ,KAAK,CAAA,CAAI,CAAA,CAAGA,CAAAA,CAAQ,IAAA,CAAOnC,CAAAA,CACtDmC,CAAAA,CAAQ,KAAA,CAAQnC,CAAAA,CAErB,IAAA,CAAK,KAAA,CAAMA,CAAI,EACjB,CAEA,QAAA,CAAS3C,CAAAA,CAAmB,CAC1B,IAAM2C,CAAAA,CAAO,IAAA,CAAK,QAAA,CAAS3C,CAAK,EAChC,OAAI2C,CAAAA,EACF,IAAA,CAAK,KAAA,CAAMA,CAAI,CAAA,CACR,IAAA,EAEF,KACT,CAEA,MAAA,CAAO3C,CAAAA,CAAgB,CACrB,IAAM2C,CAAAA,CAAO,KAAK,QAAA,CAAS3C,CAAK,CAAA,CAChC,GAAK2C,CAAAA,CAIL,GAFA,IAAA,CAAK,KAAA,CAAMA,CAAI,CAAA,CAEX,CAACA,CAAAA,CAAK,IAAA,CACR,IAAA,CAAK,YAAYA,CAAAA,CAAK,KAAK,CAAA,CAAA,KAAA,GAClB,CAACA,CAAAA,CAAK,KAAA,CACf,IAAA,CAAK,WAAA,CAAYA,CAAAA,CAAK,IAAI,CAAA,CAAA,KACrB,CACL,IAAMyL,CAAAA,CAAU,IAAA,CAAK,UAAA,CAAWzL,CAAAA,CAAK,IAAI,CAAA,CACzC,IAAA,CAAK,KAAA,CAAMyL,CAAO,CAAA,CAElBA,CAAAA,CAAQ,KAAA,CAAQzL,CAAAA,CAAK,KAAA,CACjBA,CAAAA,CAAK,KAAA,GAAOA,CAAAA,CAAK,MAAM,MAAA,CAASyL,CAAAA,CAAAA,CAEpC,IAAA,CAAK,IAAA,CAAOA,CAAAA,CACZA,CAAAA,CAAQ,MAAA,CAAS,KACnB,CACF,CAEA,OAAA,EAAe,CACb,IAAMhP,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAC/BA,CACT,CAEA,MAAA,EAAiB,CACf,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CACvC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIQ,KAAA,CAAMuD,CAAAA,CAA0B,CACtC,KAAOA,CAAAA,CAAK,MAAA,EAAQ,CAClB,IAAMmC,CAAAA,CAASnC,CAAAA,CAAK,MAAA,CACdkL,CAAAA,CAAc/I,CAAAA,CAAO,MAAA,CAGtB+I,CAAAA,CAKIlL,IAASmC,CAAAA,CAAO,IAAA,EAAQA,CAAAA,GAAW+I,CAAAA,CAAY,IAAA,EACtD,IAAA,CAAK,WAAA,CAAYA,CAAW,CAAA,CAC5B,IAAA,CAAK,WAAA,CAAY/I,CAAM,CAAA,EACdnC,CAAAA,GAASmC,EAAO,KAAA,EAASA,CAAAA,GAAW+I,CAAAA,CAAY,KAAA,EACzD,IAAA,CAAK,UAAA,CAAWA,CAAW,CAAA,CAC3B,IAAA,CAAK,UAAA,CAAW/I,CAAM,CAAA,EAGfnC,CAAAA,GAASmC,CAAAA,CAAO,OAASA,CAAAA,GAAW+I,CAAAA,CAAY,IAAA,EACvD,IAAA,CAAK,UAAA,CAAW/I,CAAM,CAAA,CACtB,IAAA,CAAK,WAAA,CAAY+I,CAAW,CAAA,GAE5B,IAAA,CAAK,WAAA,CAAY/I,CAAM,CAAA,CACvB,IAAA,CAAK,UAAA,CAAW+I,CAAW,CAAA,CAAA,CAjBvBlL,CAAAA,GAASmC,CAAAA,CAAO,IAAA,CAAM,IAAA,CAAK,WAAA,CAAYA,CAAM,CAAA,CAC5C,IAAA,CAAK,UAAA,CAAWA,CAAM,EAkB/B,CAEA,IAAA,CAAK,IAAA,CAAOnC,EACd,CAIQ,UAAA,CAAWkD,CAAAA,CAAuB,CACxC,IAAME,CAAAA,CAAIF,CAAAA,CAAE,KAAA,CACZA,CAAAA,CAAE,KAAA,CAAQE,CAAAA,CAAE,IAAA,CACRA,CAAAA,CAAE,IAAA,GAAMA,CAAAA,CAAE,IAAA,CAAK,MAAA,CAASF,CAAAA,CAAAA,CAE5BE,CAAAA,CAAE,MAAA,CAASF,CAAAA,CAAE,MAAA,CACRA,CAAAA,CAAE,MAAA,CACEA,CAAAA,GAAMA,CAAAA,CAAE,MAAA,CAAO,KAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAOE,CAAAA,CACzCF,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAQE,CAAAA,CAFP,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAI3BA,CAAAA,CAAE,IAAA,CAAOF,CAAAA,CACTA,CAAAA,CAAE,MAAA,CAASE,EACb,CAEQ,WAAA,CAAYA,CAAAA,CAAuB,CACzC,IAAMF,CAAAA,CAAIE,CAAAA,CAAE,IAAA,CACZA,CAAAA,CAAE,IAAA,CAAOF,CAAAA,CAAE,KAAA,CACPA,CAAAA,CAAE,QAAOA,CAAAA,CAAE,KAAA,CAAM,MAAA,CAASE,CAAAA,CAAAA,CAE9BF,CAAAA,CAAE,MAAA,CAASE,CAAAA,CAAE,MAAA,CACRA,CAAAA,CAAE,MAAA,CACEA,CAAAA,GAAMA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAMA,EAAE,MAAA,CAAO,IAAA,CAAOF,CAAAA,CACzCE,CAAAA,CAAE,MAAA,CAAO,KAAA,CAAQF,CAAAA,CAFP,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAI3BA,CAAAA,CAAE,KAAA,CAAQE,CAAAA,CACVA,CAAAA,CAAE,OAASF,EACb,CAIQ,QAAA,CAAS7F,CAAAA,CAA+B,CAC9C,IAAI8D,CAAAA,CAAU,IAAA,CAAK,IAAA,CACnB,KAAOA,CAAAA,EAAS,CACd,IAAMyJ,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO8D,CAAAA,CAAQ,KAAK,CAAA,CAC7C,GAAIyJ,CAAAA,GAAQ,CAAA,CAAG,OAAOzJ,CAAAA,CACtBA,CAAAA,CAAUyJ,CAAAA,CAAM,CAAA,CAAIzJ,CAAAA,CAAQ,IAAA,CAAOA,EAAQ,MAC7C,CACA,OAAO,IACT,CAEQ,WAAA,CAAYnB,CAAAA,CAAiC,CACnD,IAAA,CAAK,IAAA,CAAOA,CAAAA,CACRA,CAAAA,GAAMA,CAAAA,CAAK,MAAA,CAAS,IAAA,EAC1B,CAEQ,UAAA,CAAWA,CAAAA,CAAkC,CACnD,KAAOA,CAAAA,CAAK,KAAA,EAAOA,CAAAA,CAAOA,CAAAA,CAAK,KAAA,CAC/B,OAAOA,CACT,CAEQ,eAAA,CAAgBA,CAAAA,CAA2BvD,EAAmB,CAC/DuD,CAAAA,GACL,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACtCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EACzC,CAEQ,eAAA,CAAgBuD,CAAAA,CAAmC,CACzD,OAAKA,CAAAA,CAEH,CAAA,CACA,IAAA,CAAK,GAAA,CACH,IAAA,CAAK,eAAA,CAAgBA,EAAK,IAAI,CAAA,CAC9B,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAK,CACjC,CAAA,CANgB,EAQpB,CACF,EC3MA,IAAM0L,CAAAA,CAAN,KAAiB,CACf,KAAA,CACA,IAAA,CAA0B,IAAA,CAC1B,KAAA,CAA2B,IAAA,CAE3B,WAAA,CAAYrO,CAAAA,CAAU,CACpB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,CAAA,CAEasO,EAAAA,CAAN,KAA0B,CACvB,IAAA,CAA0B,IAAA,CAC1B,OAAA,CAER,WAAA,CAAYhJ,CAAAA,CAAoC,CAE9C,IAAA,CAAK,OAAA,CACHA,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOhD,CAAAA,CAAgB,CACrB,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAK,EAC9C,CAEA,QAAA,CAASA,CAAAA,CAAmB,CAC1B,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAMA,CAAK,CACrC,CAEA,MAAA,CAAOA,CAAAA,CAAgB,CACrB,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAK,EAC9C,CAEA,OAAA,EAAe,CACb,IAAMZ,CAAAA,CAAc,GACpB,OAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAC/BA,CACT,CAEA,QAAA,EAAgB,CACd,IAAMA,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAChCA,CACT,CAEA,SAAA,EAAiB,CACf,IAAMA,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,iBAAA,CAAkB,KAAK,IAAA,CAAMA,CAAM,CAAA,CACjCA,CACT,CAEA,GAAA,EAAqB,CACnB,GAAK,IAAA,CAAK,IAAA,CACV,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,CAAE,KACjC,CAEA,GAAA,EAAqB,CACnB,GAAK,IAAA,CAAK,IAAA,CACV,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,CAAE,KACjC,CAEA,MAAA,EAAiB,CACf,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CACvC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIQ,UAAA,CAAWuD,CAAAA,CAAyB3C,CAAAA,CAAsB,CAChE,GAAI,CAAC2C,CAAAA,CAAM,OAAO,IAAI0L,CAAAA,CAAQrO,CAAK,CAAA,CAEnC,IAAMuN,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAC1C,OAAI4K,CAAAA,CAAM,CAAA,CACR5K,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAM3C,CAAK,CAAA,CACnCuN,CAAAA,CAAM,CAAA,GACf5K,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,MAAO3C,CAAK,CAAA,CAAA,CAGzC2C,CACT,CAEQ,MAAA,CAAOA,CAAAA,CAAyB3C,CAAAA,CAAmB,CACzD,GAAI,CAAC2C,CAAAA,CAAM,OAAO,MAAA,CAElB,IAAM4K,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAC1C,OAAI4K,CAAAA,GAAQ,CAAA,CAAU,IAAA,CAClBA,CAAAA,CAAM,CAAA,CAAU,IAAA,CAAK,MAAA,CAAO5K,CAAAA,CAAK,KAAM3C,CAAK,CAAA,CACzC,IAAA,CAAK,MAAA,CAAO2C,CAAAA,CAAK,KAAA,CAAO3C,CAAK,CACtC,CAEQ,UAAA,CAAW2C,CAAAA,CAAyB3C,CAAAA,CAA6B,CACvE,GAAI,CAAC2C,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAM4K,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQvN,CAAAA,CAAO2C,CAAAA,CAAK,KAAK,CAAA,CAE1C,GAAI4K,CAAAA,CAAM,CAAA,CACR5K,EAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAM3C,CAAK,CAAA,CAAA,KAAA,GACnCuN,CAAAA,CAAM,CAAA,CACf5K,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAO3C,CAAK,CAAA,CAAA,KACzC,CAEL,GAAI,CAAC2C,CAAAA,CAAK,IAAA,EAAQ,CAACA,CAAAA,CAAK,KAAA,CAAO,OAAO,IAAA,CAGtC,GAAI,CAACA,CAAAA,CAAK,KAAM,OAAOA,CAAAA,CAAK,KAAA,CAC5B,GAAI,CAACA,CAAAA,CAAK,KAAA,CAAO,OAAOA,CAAAA,CAAK,IAAA,CAG7B,IAAM6K,CAAAA,CAAY,IAAA,CAAK,OAAA,CAAQ7K,CAAAA,CAAK,KAAK,CAAA,CACzCA,CAAAA,CAAK,KAAA,CAAQ6K,CAAAA,CAAU,KAAA,CACvB7K,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAO6K,CAAAA,CAAU,KAAK,EAC1D,CAEA,OAAO7K,CACT,CAEQ,eAAA,CAAgBA,CAAAA,CAAyBvD,CAAAA,CAAmB,CAC7DuD,CAAAA,GACL,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACtCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EACzC,CAEQ,gBAAA,CAAiBuD,CAAAA,CAAyBvD,CAAAA,CAAmB,CAC9DuD,IACLvD,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,gBAAA,CAAiBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACvC,IAAA,CAAK,gBAAA,CAAiBuD,CAAAA,CAAK,MAAOvD,CAAM,CAAA,EAC1C,CAEQ,iBAAA,CAAkBuD,CAAAA,CAAyBvD,CAAAA,CAAmB,CAC/DuD,CAAAA,GACL,IAAA,CAAK,iBAAA,CAAkBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACxC,KAAK,iBAAA,CAAkBuD,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,CACzCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,EACxB,CAEQ,OAAA,CAAQA,CAAAA,CAA8B,CAC5C,KAAOA,CAAAA,CAAK,IAAA,EAAMA,CAAAA,CAAOA,CAAAA,CAAK,IAAA,CAC9B,OAAOA,CACT,CAEQ,OAAA,CAAQA,CAAAA,CAA8B,CAC5C,KAAOA,CAAAA,CAAK,KAAA,EAAOA,CAAAA,CAAOA,EAAK,KAAA,CAC/B,OAAOA,CACT,CAEQ,eAAA,CAAgBA,CAAAA,CAAiC,CACvD,OAAKA,CAAAA,CAEH,CAAA,CACA,IAAA,CAAK,GAAA,CACH,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAI,CAAA,CAC9B,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAK,CACjC,CAAA,CANgB,EAQpB,CACF,ECzKO,IAAM4L,CAAAA,CAAN,KAAkB,CACvB,MACA,IAAA,CAA2B,IAAA,CAC3B,KAAA,CAA4B,IAAA,CAE5B,WAAA,CAAYvO,CAAAA,CAAU,CACpB,IAAA,CAAK,KAAA,CAAQA,EACf,CACF,CAAA,CAEawO,EAAAA,CAAN,KAAoB,CACzB,IAAA,CAA2B,IAAA,CAE3B,WAAA,CAAYC,CAAAA,CAAe,CACrBA,CAAAA,GAAc,MAAA,GAChB,IAAA,CAAK,IAAA,CAAO,IAAIF,CAAAA,CAASE,CAAS,CAAA,EAEtC,CAQA,MAAA,CAAOzO,EAAgB,CACrB,IAAMwE,CAAAA,CAAU,IAAI+J,CAAAA,CAASvO,CAAK,CAAA,CAElC,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,CACd,IAAA,CAAK,IAAA,CAAOwE,CAAAA,CACZ,MACF,CAEA,IAAMpC,CAAAA,CAAuB,CAAC,IAAA,CAAK,IAAI,CAAA,CAEvC,KAAOA,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG,CACvB,IAAM0B,CAAAA,CAAU1B,EAAM,KAAA,EAAM,CAE5B,GAAK0B,CAAAA,CAAQ,IAAA,CAIX1B,CAAAA,CAAM,IAAA,CAAK0B,CAAAA,CAAQ,IAAI,CAAA,CAAA,KAJN,CACjBA,CAAAA,CAAQ,IAAA,CAAOU,CAAAA,CACf,MACF,CAIA,GAAKV,CAAAA,CAAQ,KAAA,CAIX1B,CAAAA,CAAM,IAAA,CAAK0B,CAAAA,CAAQ,KAAK,CAAA,CAAA,KAJN,CAClBA,CAAAA,CAAQ,KAAA,CAAQU,CAAAA,CAChB,MACF,CAGF,CACF,CAIA,OAAA,EAAe,CACb,IAAMpF,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAC/BA,CACT,CAEA,QAAA,EAAgB,CACd,IAAMA,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CAChCA,CACT,CAEA,SAAA,EAAiB,CACf,IAAMA,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CACjCA,CACT,CAEA,UAAA,EAAkB,CAChB,IAAMA,CAAAA,CAAc,EAAC,CACrB,GAAI,CAAC,IAAA,CAAK,IAAA,CAAM,OAAOA,CAAAA,CAEvB,IAAMgD,CAAAA,CAAuB,CAAC,IAAA,CAAK,IAAI,CAAA,CAEvC,KAAOA,CAAAA,CAAM,MAAA,CAAS,CAAA,EAAG,CACvB,IAAMO,CAAAA,CAAOP,CAAAA,CAAM,KAAA,EAAM,CACzBhD,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CAElBA,EAAK,IAAA,EAAMP,CAAAA,CAAM,IAAA,CAAKO,CAAAA,CAAK,IAAI,CAAA,CAC/BA,CAAAA,CAAK,KAAA,EAAOP,CAAAA,CAAM,IAAA,CAAKO,CAAAA,CAAK,KAAK,EACvC,CAEA,OAAOvD,CACT,CAIA,MAAA,EAAiB,CACf,OAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CACvC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAIQ,eAAA,CAAgBuD,CAAAA,CAA0BvD,CAAAA,CAAmB,CAC9DuD,CAAAA,GACL,IAAA,CAAK,gBAAgBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACtCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EACzC,CAEQ,gBAAA,CAAiBuD,CAAAA,CAA0BvD,CAAAA,CAAmB,CAC/DuD,CAAAA,GACLvD,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,CACtB,IAAA,CAAK,gBAAA,CAAiBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACvC,IAAA,CAAK,gBAAA,CAAiBuD,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EAC1C,CAEQ,iBAAA,CAAkBuD,CAAAA,CAA0BvD,CAAAA,CAAmB,CAChEuD,CAAAA,GACL,IAAA,CAAK,iBAAA,CAAkBA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CACxC,IAAA,CAAK,iBAAA,CAAkBuD,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,CACzCA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,KAAK,CAAA,EACxB,CAEQ,eAAA,CAAgBA,CAAAA,CAAkC,CACxD,OAAKA,CAAAA,CAEH,CAAA,CACA,IAAA,CAAK,GAAA,CACH,IAAA,CAAK,eAAA,CAAgBA,CAAAA,CAAK,IAAI,CAAA,CAC9B,IAAA,CAAK,gBAAgBA,CAAAA,CAAK,KAAK,CACjC,CAAA,CANgB,EAQpB,CACF,EClIA,IAAM+L,CAAAA,CAAN,KAAmB,CACjB,IAAA,CAAY,EAAC,CACb,SAA2B,EAAC,CAC5B,IAAA,CACA,IAAA,CAA4B,IAAA,CAE5B,WAAA,CAAY5B,CAAAA,CAAe,CACzB,IAAA,CAAK,IAAA,CAAOA,EACd,CACF,CAAA,CAEa6B,EAAAA,CAAN,KAAmB,CAChB,IAAA,CACS,CAAA,CACT,OAAA,CAER,WAAA,CAAYC,CAAAA,CAAmBtJ,CAAAA,CAAoC,CACjE,GAAIsJ,CAAAA,CAAY,CAAA,CACd,MAAM,IAAI,KAAA,CAAM,uCAAuC,EAGzD,IAAA,CAAK,CAAA,CAAIA,CAAAA,CACT,IAAA,CAAK,IAAA,CAAO,IAAIF,CAAAA,CAAa,IAAI,CAAA,CACjC,IAAA,CAAK,OAAA,CACHpJ,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOH,CAAAA,CAAiB,CAEtB,OADa,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAMA,CAAG,CAAA,CAC7B,IAAA,CAAK,IAAA,CAAMiJ,CAAAA,EAAM,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAGjJ,CAAG,CAAA,GAAM,CAAC,CACzD,CAEA,MAAA,CAAOA,CAAAA,CAAc,CACnB,IAAMgC,CAAAA,CAAO,IAAA,CAAK,IAAA,CAElB,GAAIA,CAAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAAA,CAAI,IAAA,CAAK,CAAA,CAAI,CAAA,CAAG,CACvC,IAAMgK,EAAU,IAAIH,CAAAA,CAAa,KAAK,CAAA,CACtCG,CAAAA,CAAQ,QAAA,CAAS,CAAC,CAAA,CAAIhK,CAAAA,CACtB,IAAA,CAAK,UAAA,CAAWgK,CAAAA,CAAS,CAAC,CAAA,CAC1B,KAAK,IAAA,CAAOA,EACd,CAEA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAA,CAAMhM,CAAG,EACnC,CAEA,MAAA,CAAOA,CAAAA,CAAc,CACnB,IAAA,CAAK,eAAe,IAAA,CAAK,IAAA,CAAMA,CAAG,CAAA,CAE9B,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAAA,GAC/C,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,EAEpC,CAEA,QAAA,EAAgB,CACd,IAAMzD,CAAAA,CAAc,EAAC,CACjBuD,CAAAA,CAA4B,IAAA,CAAK,IAAA,CAErC,KAAOA,CAAAA,EAAQ,CAACA,CAAAA,CAAK,IAAA,EACnBA,CAAAA,CAAOA,CAAAA,CAAK,QAAA,CAAS,CAAC,CAAA,CAGxB,KAAOA,CAAAA,EACLvD,CAAAA,CAAO,IAAA,CAAK,GAAGuD,CAAAA,CAAK,IAAI,CAAA,CACxBA,CAAAA,CAAOA,CAAAA,CAAK,IAAA,CAGd,OAAOvD,CACT,CAEA,KAAA,CAAMqC,CAAAA,CAASC,CAAAA,CAAY,CACzB,IAAMtC,CAAAA,CAAc,GAChBuD,CAAAA,CAA4B,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,IAAA,CAAMlB,CAAI,CAAA,CAE7D,KAAOkB,CAAAA,EAAM,CACX,IAAA,IAAWE,CAAAA,IAAOF,CAAAA,CAAK,IAAA,CAAM,CAC3B,GAAI,IAAA,CAAK,OAAA,CAAQE,CAAAA,CAAKnB,CAAE,CAAA,CAAI,CAAA,CAAG,OAAOtC,CAAAA,CAClC,IAAA,CAAK,OAAA,CAAQyD,CAAAA,CAAKpB,CAAI,CAAA,EAAK,CAAA,EAC7BrC,EAAO,IAAA,CAAKyD,CAAG,EAEnB,CACAF,CAAAA,CAAOA,CAAAA,CAAK,KACd,CAEA,OAAOvD,CACT,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,KAAO,IAAIsP,CAAAA,CAAa,IAAI,EACnC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CACnC,CAIQ,SAAS/L,CAAAA,CAAoBE,CAAAA,CAAsB,CACzD,KAAO,CAACF,CAAAA,CAAK,IAAA,EAAM,CACjB,IAAIjC,CAAAA,CAAI,CAAA,CACR,KAAOA,CAAAA,CAAIiC,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQE,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,EAAK,CAAA,EAChEA,CAAAA,EAAAA,CAEFiC,CAAAA,CAAOA,CAAAA,CAAK,QAAA,CAASjC,CAAC,EACxB,CACA,OAAOiC,CACT,CAEQ,aAAA,CAAcA,CAAAA,CAAoBE,CAAAA,CAAc,CACtD,GAAIF,CAAAA,CAAK,IAAA,CAAM,CACbA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAKE,CAAG,CAAA,CAClBF,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAC3B,MACF,CAEA,IAAIjC,CAAAA,CAAI,CAAA,CACR,KAAOA,CAAAA,CAAIiC,EAAK,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQE,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,EAAK,CAAA,EAChEA,CAAAA,EAAAA,CAGEiC,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,GAAW,CAAA,CAAI,IAAA,CAAK,CAAA,CAAI,CAAA,GAChD,IAAA,CAAK,UAAA,CAAWiC,CAAAA,CAAMjC,CAAC,CAAA,CACnB,IAAA,CAAK,OAAA,CAAQmC,CAAAA,CAAKF,EAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,EAAK,CAAA,EACrCA,CAAAA,EAAAA,CAAAA,CAIJ,IAAA,CAAK,aAAA,CAAciC,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAGmC,CAAG,EAC1C,CAEQ,UAAA,CAAWiC,CAAAA,CAAsBnE,CAAAA,CAAqB,CAC5D,IAAM+E,CAAAA,CAAQZ,CAAAA,CAAO,QAAA,CAASnE,CAAK,CAAA,CAC7B6D,CAAAA,CAAU,IAAIkK,CAAAA,CAAahJ,CAAAA,CAAM,IAAI,CAAA,CAErCvC,CAAAA,CAAM,IAAA,CAAK,CAAA,CAEjB,GAAIuC,CAAAA,CAAM,IAAA,CACRlB,CAAAA,CAAQ,IAAA,CAAOkB,CAAAA,CAAM,IAAA,CAAK,MAAA,CAAOvC,CAAG,CAAA,CACpC2B,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAOnE,CAAAA,CAAO,CAAA,CAAG6D,CAAAA,CAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,CAE5CA,CAAAA,CAAQ,IAAA,CAAOkB,CAAAA,CAAM,IAAA,CACrBA,CAAAA,CAAM,IAAA,CAAOlB,OACR,CACL,IAAMsK,CAAAA,CAAcpJ,CAAAA,CAAM,IAAA,CAAKvC,CAAG,CAAA,CAClCqB,CAAAA,CAAQ,IAAA,CAAOkB,CAAAA,CAAM,IAAA,CAAK,MAAA,CAAOvC,CAAAA,CAAM,CAAC,CAAA,CACxCuC,CAAAA,CAAM,IAAA,CAAK,MAAA,CAAOvC,CAAG,CAAA,CAErBqB,CAAAA,CAAQ,QAAA,CAAWkB,CAAAA,CAAM,QAAA,CAAS,MAAA,CAAOvC,CAAAA,CAAM,CAAC,CAAA,CAChD2B,CAAAA,CAAO,IAAA,CAAK,OAAOnE,CAAAA,CAAO,CAAA,CAAGmO,CAAW,EAC1C,CAEAhK,CAAAA,CAAO,QAAA,CAAS,MAAA,CAAOnE,CAAAA,CAAQ,CAAA,CAAG,CAAA,CAAG6D,CAAO,EAC9C,CAEQ,cAAA,CAAe7B,CAAAA,CAAoBE,CAAAA,CAAc,CACvD,GAAIF,CAAAA,CAAK,IAAA,CAAM,CACbA,CAAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAQmJ,CAAAA,EAAM,IAAA,CAAK,OAAA,CAAQA,EAAGjJ,CAAG,CAAA,GAAM,CAAC,CAAA,CAC9D,MACF,CAEA,IAAInC,CAAAA,CAAI,CAAA,CACR,KAAOA,CAAAA,CAAIiC,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAU,KAAK,OAAA,CAAQE,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,EAAK,CAAA,EAChEA,CAAAA,EAAAA,CAGF,IAAA,CAAK,cAAA,CAAeiC,CAAAA,CAAK,QAAA,CAASjC,CAAC,EAAGmC,CAAG,CAAA,CAErCF,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAS,IAAA,CAAK,CAAA,CAAI,CAAA,EAC1C,IAAA,CAAK,SAAA,CAAUiC,CAAAA,CAAMjC,CAAC,EAE1B,CAEQ,SAAA,CAAUoE,CAAAA,CAAsBnE,CAAAA,CAAqB,CAC3D,IAAM+E,CAAAA,CAAQZ,CAAAA,CAAO,QAAA,CAASnE,CAAK,CAAA,CAE7BoO,CAAAA,CAAcpO,CAAAA,CAAQ,CAAA,CAAImE,EAAO,QAAA,CAASnE,CAAAA,CAAQ,CAAC,CAAA,CAAI,IAAA,CACvDqO,CAAAA,CACJrO,CAAAA,CAAQmE,CAAAA,CAAO,QAAA,CAAS,MAAA,CAAS,CAAA,CAAIA,CAAAA,CAAO,QAAA,CAASnE,CAAAA,CAAQ,CAAC,CAAA,CAAI,IAAA,CAGpE,GAAIoO,CAAAA,EAAeA,CAAAA,CAAY,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,CAAA,CAAG,CACpDrJ,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQqJ,CAAAA,CAAY,IAAA,CAAK,KAAM,CAAA,CAC1CjK,CAAAA,CAAO,IAAA,CAAKnE,CAAAA,CAAQ,CAAC,CAAA,CAAI+E,CAAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CACrC,MACF,CAGA,GAAIsJ,CAAAA,EAAgBA,CAAAA,CAAa,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,CAAA,CAAG,CACtDtJ,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAKsJ,CAAAA,CAAa,IAAA,CAAK,KAAA,EAAQ,CAAA,CAC1ClK,CAAAA,CAAO,KAAKnE,CAAK,CAAA,CAAIqO,CAAAA,CAAa,IAAA,CAAK,CAAC,CAAA,CACxC,MACF,CAGID,CAAAA,EACFA,CAAAA,CAAY,IAAA,CAAK,IAAA,CAAK,GAAGrJ,CAAAA,CAAM,IAAI,CAAA,CACnCqJ,CAAAA,CAAY,IAAA,CAAOrJ,CAAAA,CAAM,IAAA,CACzBZ,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAOnE,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,CAC/BmE,CAAAA,CAAO,QAAA,CAAS,OAAOnE,CAAAA,CAAO,CAAC,CAAA,EACtBqO,CAAAA,GACTtJ,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAGsJ,CAAAA,CAAa,IAAI,CAAA,CACpCtJ,CAAAA,CAAM,IAAA,CAAOsJ,CAAAA,CAAa,IAAA,CAC1BlK,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAOnE,CAAAA,CAAO,CAAC,CAAA,CAC3BmE,CAAAA,CAAO,QAAA,CAAS,MAAA,CAAOnE,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,EAEvC,CACF,MClNMsO,CAAAA,CAAN,KAAmB,CACjB,IAAA,CAAY,EAAC,CACb,QAAA,CAA2B,EAAC,CAC5B,IAAA,CAEA,WAAA,CAAYnC,CAAAA,CAAe,CACzB,IAAA,CAAK,IAAA,CAAOA,EACd,CACF,CAAA,CAEaoC,EAAAA,CAAN,KAAe,CACZ,IAAA,CACS,CAAA,CACT,OAAA,CAER,WAAA,CAAYN,CAAAA,CAAmBtJ,CAAAA,CAAoC,CACjE,GAAIsJ,CAAAA,CAAY,EACd,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA,CAGrD,IAAA,CAAK,CAAA,CAAIA,CAAAA,CACT,IAAA,CAAK,IAAA,CAAO,IAAIK,CAAAA,CAAa,IAAI,CAAA,CACjC,IAAA,CAAK,OAAA,CACH3J,CAAAA,GAAc,CAACvC,CAAAA,CAAQC,CAAAA,GAAYD,CAAAA,CAAIC,CAAAA,CAAI,EAAA,CAAKD,CAAAA,CAAIC,CAAAA,CAAI,CAAA,CAAI,CAAA,EAChE,CAIA,MAAA,CAAOH,CAAAA,CAAiB,CACtB,OAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAG,CACvC,CAEA,MAAA,CAAOA,CAAAA,CAAc,CACnB,IAAM2C,CAAAA,CAAI,IAAA,CAAK,IAAA,CAEf,GAAIA,CAAAA,CAAE,IAAA,CAAK,MAAA,GAAW,CAAA,CAAI,IAAA,CAAK,CAAA,CAAI,CAAA,CAAG,CACpC,IAAMmG,CAAAA,CAAI,IAAIsD,CAAAA,CAAa,KAAK,CAAA,CAChCtD,EAAE,QAAA,CAAS,CAAC,CAAA,CAAInG,CAAAA,CAChB,IAAA,CAAK,UAAA,CAAWmG,CAAAA,CAAG,CAAC,CAAA,CACpB,IAAA,CAAK,IAAA,CAAOA,CAAAA,CACZ,IAAA,CAAK,aAAA,CAAcA,CAAAA,CAAG9I,CAAG,EAC3B,CAAA,KACE,IAAA,CAAK,aAAA,CAAc2C,CAAAA,CAAG3C,CAAG,EAE7B,CAEA,MAAA,CAAOA,CAAAA,CAAc,CACnB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,KAAMA,CAAG,CAAA,CAE9B,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CAAA,EAAK,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,GAC5C,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,EAEpC,CAEA,QAAA,EAAgB,CACd,IAAMzD,CAAAA,CAAc,EAAC,CACrB,OAAA,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAA,CAAMA,CAAM,EAC5BA,CACT,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAI6P,CAAAA,CAAa,IAAI,EACnC,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAW,CACnC,CAIQ,UAAA,CAAWtM,CAAAA,CAAoBE,CAAAA,CAAiB,CACtD,IAAInC,CAAAA,CAAI,CAAA,CACR,KAAOA,CAAAA,CAAIiC,CAAAA,CAAK,KAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQE,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,CAAI,CAAA,EAC/DA,CAAAA,EAAAA,CAGF,OAAIA,CAAAA,CAAIiC,CAAAA,CAAK,KAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQE,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,GAAM,CAAA,CACvD,IAAA,CAGLiC,CAAAA,CAAK,IAAA,CAAa,KAAA,CAEf,KAAK,UAAA,CAAWA,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAGmC,CAAG,CAC9C,CAIQ,aAAA,CAAcF,CAAAA,CAAoBE,CAAAA,CAAc,CACtD,IAAInC,CAAAA,CAAIiC,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAE3B,GAAIA,CAAAA,CAAK,IAAA,CAAM,CAEb,IADAA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAKE,CAAG,CAAA,CACXnC,CAAAA,EAAK,CAAA,EAAK,KAAK,OAAA,CAAQmC,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,CAAI,CAAA,EACjDiC,CAAAA,CAAK,IAAA,CAAKjC,CAAAA,CAAI,CAAC,CAAA,CAAIiC,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAA,CAC9BA,CAAAA,EAAAA,CAEFiC,CAAAA,CAAK,IAAA,CAAKjC,CAAAA,CAAI,CAAC,CAAA,CAAImC,EACrB,CAAA,KAAO,CACL,KAAOnC,CAAAA,EAAK,CAAA,EAAK,IAAA,CAAK,QAAQmC,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,CAAI,CAAA,EACjDA,CAAAA,EAAAA,CAEFA,CAAAA,EAAAA,CAEIiC,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,GAAW,CAAA,CAAI,IAAA,CAAK,CAAA,CAAI,CAAA,GAChD,IAAA,CAAK,UAAA,CAAWiC,CAAAA,CAAMjC,CAAC,CAAA,CACnB,IAAA,CAAK,OAAA,CAAQmC,CAAAA,CAAKF,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,CAAI,CAAA,EACpCA,CAAAA,EAAAA,CAAAA,CAGJ,IAAA,CAAK,aAAA,CAAciC,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAGmC,CAAG,EAC1C,CACF,CAEQ,UAAA,CAAWiC,EAAsBnE,CAAAA,CAAqB,CAC5D,IAAMwO,CAAAA,CAAI,IAAA,CAAK,CAAA,CACTpJ,CAAAA,CAAIjB,CAAAA,CAAO,QAAA,CAASnE,CAAK,CAAA,CACzBuF,CAAAA,CAAI,IAAI+I,CAAAA,CAAalJ,EAAE,IAAI,CAAA,CAEjCG,CAAAA,CAAE,IAAA,CAAOH,CAAAA,CAAE,IAAA,CAAK,MAAA,CAAOoJ,CAAC,CAAA,CACxB,IAAMC,CAAAA,CAASrJ,CAAAA,CAAE,IAAA,CAAK,GAAA,EAAI,CAErBA,CAAAA,CAAE,IAAA,GACLG,CAAAA,CAAE,QAAA,CAAWH,CAAAA,CAAE,QAAA,CAAS,MAAA,CAAOoJ,CAAC,CAAA,CAAA,CAGlCrK,CAAAA,CAAO,QAAA,CAAS,MAAA,CAAOnE,CAAAA,CAAQ,CAAA,CAAG,CAAA,CAAGuF,CAAC,CAAA,CACtCpB,CAAAA,CAAO,IAAA,CAAK,MAAA,CAAOnE,CAAAA,CAAO,CAAA,CAAGyO,CAAM,EACrC,CAIQ,cAAA,CAAezM,CAAAA,CAAoBE,CAAAA,CAAc,CACvD,IAAMwM,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ1M,CAAAA,CAAME,CAAG,CAAA,CAElC,GAAIwM,CAAAA,CAAM1M,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAK,IAAA,CAAK0M,CAAG,EAAGxM,CAAG,CAAA,GAAM,CAAA,CAC9DF,CAAAA,CAAK,IAAA,CACPA,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAO0M,CAAAA,CAAK,CAAC,CAAA,CAEvB,IAAA,CAAK,kBAAA,CAAmB1M,CAAAA,CAAME,CAAAA,CAAKwM,CAAG,CAAA,CAAA,KAEnC,CACL,GAAI1M,CAAAA,CAAK,IAAA,CAAM,OAEHA,CAAAA,CAAK,QAAA,CAAS0M,CAAG,CAAA,CAEnB,IAAA,CAAK,MAAA,CAAS,IAAA,CAAK,CAAA,EAC3B,KAAK,IAAA,CAAK1M,CAAAA,CAAM0M,CAAG,CAAA,CAGrB,IAAMC,CAAAA,CACJD,CAAAA,CAAM1M,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAA,CAAGxM,CAAG,CAAA,CAAI,CAAA,CAC1DwM,CAAAA,CAAM,CAAA,CACNA,CAAAA,CAEN,IAAA,CAAK,cAAA,CAAe1M,CAAAA,CAAK,QAAA,CAAS2M,CAAO,CAAA,CAAGzM,CAAG,EACjD,CACF,CAEQ,kBAAA,CAAmBF,CAAAA,CAAoBE,CAAAA,CAAQwM,CAAAA,CAAmB,CACxE,IAAME,CAAAA,CAAY5M,CAAAA,CAAK,QAAA,CAAS0M,CAAG,CAAA,CAC7BG,CAAAA,CAAa7M,CAAAA,CAAK,QAAA,CAAS0M,CAAAA,CAAM,CAAC,CAAA,CAExC,GAAIE,CAAAA,CAAU,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,CAAA,CAAG,CACnC,IAAME,CAAAA,CAAO,IAAA,CAAK,cAAA,CAAeF,CAAS,CAAA,CAC1C5M,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAA,CAAII,CAAAA,CACjB,IAAA,CAAK,cAAA,CAAeF,CAAAA,CAAWE,CAAI,EACrC,CAAA,KAAA,GAAWD,CAAAA,CAAW,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,CAAA,CAAG,CAC3C,IAAME,CAAAA,CAAO,IAAA,CAAK,YAAA,CAAaF,CAAU,CAAA,CACzC7M,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAA,CAAIK,CAAAA,CACjB,IAAA,CAAK,eAAeF,CAAAA,CAAYE,CAAI,EACtC,CAAA,KACE,IAAA,CAAK,KAAA,CAAM/M,CAAAA,CAAM0M,CAAG,CAAA,CACpB,IAAA,CAAK,cAAA,CAAeE,CAAAA,CAAW1M,CAAG,EAEtC,CAEQ,IAAA,CAAKF,CAAAA,CAAoB0M,CAAAA,CAAmB,CAC9CA,CAAAA,CAAM,CAAA,EAAK1M,CAAAA,CAAK,QAAA,CAAS0M,CAAAA,CAAM,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,CAAA,CACxD,KAAK,cAAA,CAAe1M,CAAAA,CAAM0M,CAAG,CAAA,CAE7BA,CAAAA,CAAM1M,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAA,EAC7BA,CAAAA,CAAK,QAAA,CAAS0M,CAAAA,CAAM,CAAC,CAAA,CAAE,KAAK,MAAA,EAAU,IAAA,CAAK,CAAA,CAE3C,IAAA,CAAK,cAAA,CAAe1M,CAAAA,CAAM0M,CAAG,CAAA,CAEzBA,CAAAA,CAAM1M,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAS,CAAA,CAC/B,IAAA,CAAK,MAAMA,CAAAA,CAAM0M,CAAG,CAAA,CAEpB,IAAA,CAAK,KAAA,CAAM1M,CAAAA,CAAM0M,CAAAA,CAAM,CAAC,EAG9B,CAEQ,cAAA,CAAe1M,CAAAA,CAAoB0M,CAAAA,CAAmB,CAC5D,IAAM3J,CAAAA,CAAQ/C,CAAAA,CAAK,QAAA,CAAS0M,CAAG,CAAA,CACzBrB,CAAAA,CAAUrL,CAAAA,CAAK,QAAA,CAAS0M,CAAAA,CAAM,CAAC,CAAA,CAErC3J,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ/C,CAAAA,CAAK,KAAK0M,CAAAA,CAAM,CAAC,CAAC,CAAA,CACrC1M,CAAAA,CAAK,IAAA,CAAK0M,CAAAA,CAAM,CAAC,CAAA,CAAIrB,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAEjCA,CAAAA,CAAQ,IAAA,EACXtI,CAAAA,CAAM,QAAA,CAAS,OAAA,CAAQsI,CAAAA,CAAQ,QAAA,CAAS,GAAA,EAAM,EAElD,CAEQ,cAAA,CAAerL,CAAAA,CAAoB0M,CAAAA,CAAmB,CAC5D,IAAM3J,CAAAA,CAAQ/C,EAAK,QAAA,CAAS0M,CAAG,CAAA,CACzBrB,CAAAA,CAAUrL,CAAAA,CAAK,QAAA,CAAS0M,CAAAA,CAAM,CAAC,CAAA,CAErC3J,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK/C,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAC,CAAA,CAC9B1M,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAA,CAAIrB,CAAAA,CAAQ,IAAA,CAAK,KAAA,EAAM,CAE/BA,CAAAA,CAAQ,IAAA,EACXtI,CAAAA,CAAM,QAAA,CAAS,IAAA,CAAKsI,EAAQ,QAAA,CAAS,KAAA,EAAQ,EAEjD,CAEQ,KAAA,CAAMrL,CAAAA,CAAoB0M,CAAAA,CAAmB,CACnD,IAAM3J,CAAAA,CAAQ/C,CAAAA,CAAK,QAAA,CAAS0M,CAAG,EACzBrB,CAAAA,CAAUrL,CAAAA,CAAK,QAAA,CAAS0M,CAAAA,CAAM,CAAC,CAAA,CAErC3J,CAAAA,CAAM,IAAA,CAAK,IAAA,CAAK/C,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAA,CAAG,GAAGrB,EAAQ,IAAI,CAAA,CAE1CtI,CAAAA,CAAM,IAAA,EACTA,CAAAA,CAAM,QAAA,CAAS,IAAA,CAAK,GAAGsI,CAAAA,CAAQ,QAAQ,CAAA,CAGzCrL,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAO0M,CAAAA,CAAK,CAAC,CAAA,CACvB1M,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAO0M,CAAAA,CAAM,CAAA,CAAG,CAAC,EACjC,CAIQ,OAAA,CAAQ1M,CAAAA,CAAoBE,CAAAA,CAAgB,CAClD,IAAIwM,EAAM,CAAA,CACV,KAAOA,CAAAA,CAAM1M,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAU,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAK,IAAA,CAAK0M,CAAG,CAAA,CAAGxM,CAAG,CAAA,CAAI,CAAA,EACnEwM,CAAAA,EAAAA,CAEF,OAAOA,CACT,CAEQ,cAAA,CAAe1M,CAAAA,CAAuB,CAC5C,KAAO,CAACA,CAAAA,CAAK,IAAA,EACXA,CAAAA,CAAOA,CAAAA,CAAK,QAAA,CAASA,CAAAA,CAAK,SAAS,MAAA,CAAS,CAAC,CAAA,CAE/C,OAAOA,CAAAA,CAAK,IAAA,CAAKA,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,CAAC,CACvC,CAEQ,YAAA,CAAaA,CAAAA,CAAuB,CAC1C,KAAO,CAACA,CAAAA,CAAK,IAAA,EACXA,CAAAA,CAAOA,CAAAA,CAAK,QAAA,CAAS,CAAC,CAAA,CAExB,OAAOA,CAAAA,CAAK,IAAA,CAAK,CAAC,CACpB,CAEQ,aAAaA,CAAAA,CAAoBvD,CAAAA,CAAmB,CAC1D,IAAIsB,CAAAA,CAAI,CAAA,CACR,KAAOA,CAAAA,CAAIiC,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAQjC,CAAAA,EAAAA,CACtBiC,CAAAA,CAAK,IAAA,EACR,KAAK,YAAA,CAAaA,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAGtB,CAAM,CAAA,CAE5CA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,IAAA,CAAKjC,CAAC,CAAC,CAAA,CAErBiC,EAAK,IAAA,EACR,IAAA,CAAK,YAAA,CAAaA,CAAAA,CAAK,QAAA,CAASjC,CAAC,CAAA,CAAGtB,CAAM,EAE9C,CACF,ECzQA,IAAMuQ,CAAAA,CAAN,KAAgB,CACd,QAAA,CAAmC,IAAI,GAAA,CACvC,WAAA,CAAc,KAChB,CAAA,CAEaC,EAAAA,CAAN,KAAgB,CACb,IAAA,CAAkB,IAAID,CAAAA,CAI9B,MAAA,CAAOE,CAAAA,CAAoB,CACzB,IAAI/L,CAAAA,CAAU,IAAA,CAAK,IAAA,CACf+D,CAAAA,CAAYgI,CAAAA,CAEhB,KAAOhI,CAAAA,CAAU,MAAA,CAAS,CAAA,EAAG,CAC3B,IAAIiI,CAAAA,CAAU,KAAA,CAEd,IAAA,GAAW,CAACzN,CAAAA,CAAMqD,CAAK,CAAA,GAAK5B,CAAAA,CAAQ,QAAA,CAAU,CAC5C,IAAMiM,CAAAA,CAAS,IAAA,CAAK,YAAA,CAAa1N,CAAAA,CAAMwF,CAAS,CAAA,CAChD,GAAIkI,CAAAA,CAAO,SAAW,CAAA,CAAG,SAGzB,GAAIA,CAAAA,CAAO,MAAA,GAAW1N,CAAAA,CAAK,MAAA,CAAQ,CACjCyB,CAAAA,CAAU4B,CAAAA,CACVmC,CAAAA,CAAYA,CAAAA,CAAU,KAAA,CAAMkI,CAAAA,CAAO,MAAM,CAAA,CACzCD,CAAAA,CAAU,IAAA,CACV,KACF,CAGA,IAAME,CAAAA,CAAa3N,CAAAA,CAAK,KAAA,CAAM0N,CAAAA,CAAO,MAAM,CAAA,CACrCE,CAAAA,CAAapI,CAAAA,CAAU,KAAA,CAAMkI,EAAO,MAAM,CAAA,CAE1CG,CAAAA,CAAY,IAAIP,CAAAA,CAYtB,GATAO,CAAAA,CAAU,WAAA,CAAc,KAAA,CAGxBpM,CAAAA,CAAQ,QAAA,CAAS,MAAA,CAAOzB,CAAI,CAAA,CAC5ByB,EAAQ,QAAA,CAAS,GAAA,CAAIiM,CAAAA,CAAQG,CAAS,CAAA,CAEtCA,CAAAA,CAAU,QAAA,CAAS,GAAA,CAAIF,CAAAA,CAAYtK,CAAK,CAAA,CAGpCuK,CAAAA,CAAW,MAAA,CAAS,CAAA,CAAG,CACzB,IAAMzL,CAAAA,CAAU,IAAImL,CAAAA,CACpBnL,CAAAA,CAAQ,WAAA,CAAc,IAAA,CACtB0L,CAAAA,CAAU,QAAA,CAAS,GAAA,CAAID,CAAAA,CAAYzL,CAAO,EAC5C,CAAA,KACE0L,CAAAA,CAAU,WAAA,CAAc,IAAA,CAG1B,MACF,CAGA,GAAI,CAACJ,CAAAA,CAAS,CACZ,IAAMnN,CAAAA,CAAO,IAAIgN,CAAAA,CACjBhN,CAAAA,CAAK,WAAA,CAAc,IAAA,CACnBmB,EAAQ,QAAA,CAAS,GAAA,CAAI+D,CAAAA,CAAWlF,CAAI,CAAA,CACpC,MACF,CACF,CAEAmB,CAAAA,CAAQ,WAAA,CAAc,KACxB,CAEA,MAAA,CAAO+L,CAAAA,CAAuB,CAC5B,IAAMlN,CAAAA,CAAO,IAAA,CAAK,QAAA,CAASkN,CAAAA,CAAM,IAAI,CAAA,CACrC,OAAO,CAAC,CAAClN,CAAAA,EAAQA,CAAAA,CAAK,WACxB,CAEA,UAAA,CAAWxD,EAAyB,CAClC,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,CAASA,CAAAA,CAAQ,KAAK,CACtC,CAEA,MAAA,CAAO0Q,CAAAA,CAAoB,CACzB,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAA,CAAMA,CAAI,EACnC,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAIF,EAClB,CAEA,OAAA,EAAmB,CACjB,OAAO,KAAK,IAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CACrC,CAIQ,QAAA,CAASE,CAAAA,CAAcM,CAAAA,CAAkC,CAC/D,IAAIrM,CAAAA,CAAU,IAAA,CAAK,IAAA,CACf+D,CAAAA,CAAYgI,CAAAA,CAEhB,KAAOhI,CAAAA,CAAU,MAAA,CAAS,CAAA,EAAG,CAC3B,IAAIiI,CAAAA,CAAU,KAAA,CAEd,IAAA,GAAW,CAACzN,CAAAA,CAAMqD,CAAK,CAAA,GAAK5B,CAAAA,CAAQ,QAAA,CAAU,CAC5C,GAAI+D,CAAAA,CAAU,UAAA,CAAWxF,CAAI,CAAA,CAAG,CAC9BwF,CAAAA,CAAYA,CAAAA,CAAU,KAAA,CAAMxF,CAAAA,CAAK,MAAM,CAAA,CACvCyB,CAAAA,CAAU4B,CAAAA,CACVoK,CAAAA,CAAU,IAAA,CACV,KACF,CAGA,GAAI,CAACK,CAAAA,EAAS9N,CAAAA,CAAK,UAAA,CAAWwF,CAAS,CAAA,CACrC,OAAOnC,CAEX,CAEA,GAAI,CAACoK,EAAS,OAAO,IACvB,CAEA,OAAOhM,CACT,CAEQ,YAAA,CAAanB,CAAAA,CAAiBkN,CAAAA,CAAuB,CAC3D,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAClB,OAAKlN,CAAAA,CAAK,WAAA,EACVA,CAAAA,CAAK,WAAA,CAAc,KAAA,CACZA,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CAAA,EAFA,KAAA,CAKhC,IAAA,GAAW,CAACN,CAAAA,CAAMqD,CAAK,CAAA,GAAK/C,EAAK,QAAA,CAAU,CACzC,GAAI,CAACkN,CAAAA,CAAK,UAAA,CAAWxN,CAAI,CAAA,CAAG,SAI5B,GAFqB,IAAA,CAAK,YAAA,CAAaqD,CAAAA,CAAOmK,CAAAA,CAAK,KAAA,CAAMxN,CAAAA,CAAK,MAAM,CAAC,CAAA,CAEnD,CAIhB,GAHAM,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAON,CAAI,CAAA,CAGrBM,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CAAA,EAAK,CAACA,CAAAA,CAAK,WAAA,CAAa,CACjD,IAAMW,CAAAA,CAAQX,CAAAA,CAAK,QAAA,CAAS,OAAA,EAAQ,CAAE,IAAA,EAAK,CAAE,KAAA,CAC7C,GAAIW,CAAAA,CAAO,CACT,GAAM,CAAC8M,CAAAA,CAAUC,CAAQ,CAAA,CAAI/M,CAAAA,CAC7BX,CAAAA,CAAK,QAAA,CAAS,KAAA,EAAM,CACpBA,CAAAA,CAAK,QAAA,CAAS,GAAA,CAAIN,CAAAA,CAAO+N,EAAUC,CAAQ,EAC7C,CACF,CAEA,OAAO1N,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CAAA,EAAK,CAACA,CAAAA,CAAK,WAC3C,CAEA,OAAO,MACT,CAEA,OAAO,MACT,CAEQ,YAAA,CAAaI,CAAAA,CAAWC,CAAAA,CAAmB,CACjD,IAAItC,CAAAA,CAAI,CAAA,CACR,KAAOA,CAAAA,CAAIqC,CAAAA,CAAE,MAAA,EAAUrC,EAAIsC,CAAAA,CAAE,MAAA,EAAUD,CAAAA,CAAErC,CAAC,CAAA,GAAMsC,CAAAA,CAAEtC,CAAC,CAAA,EACjDA,CAAAA,EAAAA,CAEF,OAAOqC,CAAAA,CAAE,KAAA,CAAM,CAAA,CAAGrC,CAAC,CACrB,CACF,EChKA,IAAM4P,CAAAA,CAAN,KAAc,CACZ,IAAA,CACA,WAAA,CAAc,KAAA,CAEd,IAAA,CAAuB,IAAA,CACvB,KAAA,CAAwB,IAAA,CACxB,KAAA,CAAwB,IAAA,CAExB,YAAYC,CAAAA,CAAc,CACxB,IAAA,CAAK,IAAA,CAAOA,EACd,CACF,CAAA,CAEaC,EAAAA,CAAN,KAAwB,CACrB,IAAA,CAAuB,IAAA,CAI/B,MAAA,CAAOX,CAAAA,CAAoB,CACrBA,CAAAA,CAAK,MAAA,GAAW,CAAA,GACpB,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAM,CAAC,CAAA,EAChD,CAEA,MAAA,CAAOA,CAAAA,CAAuB,CAC5B,GAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAG,OAAO,MAAA,CAC9B,IAAMlN,CAAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMkN,CAAAA,CAAM,CAAC,EAC/C,OAAO,CAAC,CAAClN,CAAAA,EAAQA,CAAAA,CAAK,WACxB,CAEA,UAAA,CAAWxD,CAAAA,CAAyB,CAClC,OAAIA,CAAAA,CAAO,MAAA,GAAW,CAAA,CAAU,KACzB,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAQ,CAAC,CAC/C,CAEA,MAAA,CAAO0Q,CAAAA,CAAoB,CACrBA,CAAAA,CAAK,MAAA,GAAW,CAAA,GACpB,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAM,CAAC,CAAA,EAChD,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,KACd,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAIQ,UAAA,CACNlN,CAAAA,CACAkN,CAAAA,CACAlP,CAAAA,CACS,CACT,IAAM4P,CAAAA,CAAOV,CAAAA,CAAKlP,CAAK,CAAA,CAEvB,OAAKgC,CAAAA,GACHA,CAAAA,CAAO,IAAI2N,CAAAA,CAAQC,CAAI,CAAA,CAAA,CAGrBA,CAAAA,CAAO5N,CAAAA,CAAK,IAAA,CACdA,CAAAA,CAAK,IAAA,CAAO,KAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAMkN,CAAAA,CAAMlP,CAAK,CAAA,CACzC4P,CAAAA,CAAO5N,CAAAA,CAAK,IAAA,CACrBA,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAOkN,CAAAA,CAAMlP,CAAK,CAAA,CAEhDA,CAAAA,CAAQ,CAAA,GAAMkP,CAAAA,CAAK,MAAA,CACrBlN,CAAAA,CAAK,WAAA,CAAc,IAAA,CAEnBA,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,MAAOkN,CAAAA,CAAMlP,CAAAA,CAAQ,CAAC,CAAA,CAIrDgC,CACT,CAEQ,UAAA,CACNA,CAAAA,CACAkN,CAAAA,CACAlP,CAAAA,CACgB,CAChB,GAAI,CAACgC,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAM4N,CAAAA,CAAOV,CAAAA,CAAKlP,CAAK,CAAA,CAEvB,OAAI4P,CAAAA,CAAO5N,CAAAA,CAAK,IAAA,CACP,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAMkN,EAAMlP,CAAK,CAAA,CAE3C4P,CAAAA,CAAO5N,CAAAA,CAAK,IAAA,CACP,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAOkN,CAAAA,CAAMlP,CAAK,CAAA,CAI5CA,CAAAA,CAAQ,CAAA,GAAMkP,CAAAA,CAAK,MAAA,CACdlN,CAAAA,CAGF,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAOkN,CAAAA,CAAMlP,CAAAA,CAAQ,CAAC,CACpD,CAEQ,UAAA,CACNgC,CAAAA,CACAkN,CAAAA,CACAlP,CAAAA,CACgB,CAChB,GAAI,CAACgC,CAAAA,CAAM,OAAO,IAAA,CAElB,IAAM4N,CAAAA,CAAOV,CAAAA,CAAKlP,CAAK,CAAA,CAEvB,GAAI4P,CAAAA,CAAO5N,CAAAA,CAAK,IAAA,CACdA,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAMkN,CAAAA,CAAMlP,CAAK,CAAA,CAAA,KAAA,GACzC4P,CAAAA,CAAO5N,CAAAA,CAAK,IAAA,CACrBA,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,EAAK,KAAA,CAAOkN,CAAAA,CAAMlP,CAAK,CAAA,CAAA,KAAA,GAEhDA,CAAAA,CAAQ,CAAA,GAAMkP,CAAAA,CAAK,MAAA,CACrBlN,CAAAA,CAAK,WAAA,CAAc,KAAA,CAEnBA,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAOkN,CAAAA,CAAMlP,CAAAA,CAAQ,CAAC,CAAA,CAItD,CAACgC,CAAAA,CAAK,WAAA,EAAe,CAACA,CAAAA,CAAK,IAAA,EAAQ,CAACA,CAAAA,CAAK,KAAA,EAAS,CAACA,CAAAA,CAAK,KAAA,CAC1D,OAAO,IAAA,CAIX,OAAOA,CACT,CACF,EC/HA,IAAM8N,CAAAA,CAAN,KAAe,CACb,QAAA,CAAkC,IAAI,IACtC,WAAA,CAAc,KAChB,CAAA,CAEaC,EAAAA,CAAN,KAAW,CACR,IAAA,CAAiB,IAAID,CAAAA,CAI7B,MAAA,CAAOZ,CAAAA,CAAoB,CACzB,IAAI/L,CAAAA,CAAU,KAAK,IAAA,CAEnB,IAAA,IAAWyM,CAAAA,IAAQV,CAAAA,CACZ/L,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAIyM,CAAI,CAAA,EAC5BzM,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAIyM,CAAAA,CAAM,IAAIE,CAAU,CAAA,CAE3C3M,CAAAA,CAAUA,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAIyM,CAAI,CAAA,CAGrCzM,CAAAA,CAAQ,WAAA,CAAc,KACxB,CAEA,MAAA,CAAO+L,CAAAA,CAAuB,CAC5B,IAAMlN,EAAO,IAAA,CAAK,QAAA,CAASkN,CAAI,CAAA,CAC/B,OAAO,CAAC,CAAClN,CAAAA,EAAQA,CAAAA,CAAK,WACxB,CAEA,UAAA,CAAWxD,CAAAA,CAAyB,CAClC,OAAO,CAAC,CAAC,IAAA,CAAK,QAAA,CAASA,CAAM,CAC/B,CAEA,MAAA,CAAO0Q,CAAAA,CAAoB,CACzB,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAA,CAAMA,CAAAA,CAAM,CAAC,EACtC,CAEA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAO,IAAIY,EAClB,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CACrC,CAIQ,QAAA,CAAStR,CAAAA,CAAiC,CAChD,IAAI2E,CAAAA,CAAU,IAAA,CAAK,IAAA,CAEnB,IAAA,IAAWyM,CAAAA,IAAQpR,CAAAA,CAAQ,CACzB,IAAM3C,EAAOsH,CAAAA,CAAQ,QAAA,CAAS,GAAA,CAAIyM,CAAI,CAAA,CACtC,GAAI,CAAC/T,CAAAA,CAAM,OAAO,IAAA,CAClBsH,CAAAA,CAAUtH,EACZ,CAEA,OAAOsH,CACT,CAEQ,YAAA,CACNnB,CAAAA,CACAkN,CAAAA,CACAlP,CAAAA,CACS,CACT,GAAIA,CAAAA,GAAUkP,CAAAA,CAAK,MAAA,CACjB,OAAKlN,CAAAA,CAAK,WAAA,EAEVA,CAAAA,CAAK,YAAc,KAAA,CACZA,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CAAA,EAHA,KAAA,CAMhC,IAAM4N,CAAAA,CAAOV,CAAAA,CAAKlP,CAAK,CAAA,CACjB+E,CAAAA,CAAQ/C,CAAAA,CAAK,QAAA,CAAS,GAAA,CAAI4N,CAAI,CAAA,CACpC,OAAK7K,CAAAA,EAEqB,IAAA,CAAK,YAAA,CAC7BA,CAAAA,CACAmK,CAAAA,CACAlP,CAAAA,CAAQ,CACV,CAAA,EAGEgC,CAAAA,CAAK,QAAA,CAAS,MAAA,CAAO4N,CAAI,EAEvB5N,CAAAA,CAAK,QAAA,CAAS,IAAA,GAAS,CAAA,EAAK,CAACA,CAAAA,CAAK,WAAA,EAXnB,KAgBrB,CACF,EC7FO,IAAMgO,EAAAA,CAAN,KAAkB,CACN,CAAA,CACT,IAAA,CAER,WAAA,CAAYC,CAAAA,CAAgC,CAC1C,GAAI,OAAOA,CAAAA,EAAgB,QAAA,CAAU,CACnC,GAAIA,CAAAA,EAAe,CAAA,CACjB,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA,CAEhD,IAAA,CAAK,CAAA,CAAIA,CAAAA,CACT,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,CAAA,CAAI,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,EAC1C,CAAA,KAAO,CACL,GAAIA,CAAAA,CAAY,MAAA,GAAW,CAAA,CACzB,MAAM,IAAI,KAAA,CAAM,qCAAqC,CAAA,CAEvD,IAAA,CAAK,CAAA,CAAIA,CAAAA,CAAY,MAAA,CACrB,KAAK,IAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,CAAA,CAAI,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,CACxC,IAAA,IAASlQ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAI,KAAK,CAAA,CAAGA,CAAAA,EAAAA,CAC1B,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAGkQ,CAAAA,CAAYlQ,CAAC,CAAC,EAE9B,CACF,CAOA,GAAA,CAAIC,CAAAA,CAAeX,CAAAA,CAAqB,CACtC,GAAIW,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,EAAS,IAAA,CAAK,CAAA,CAC7B,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAGvC,IAAID,CAAAA,CAAIC,CAAAA,CAAQ,CAAA,CAChB,KAAOD,CAAAA,EAAK,IAAA,CAAK,CAAA,EACf,IAAA,CAAK,IAAA,CAAKA,CAAC,CAAA,EAAKV,CAAAA,CAChBU,CAAAA,EAAKA,CAAAA,CAAI,CAACA,EAEd,CAKA,GAAA,CAAIC,EAAuB,CACzB,GAAIA,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,EAAS,IAAA,CAAK,CAAA,CAC7B,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAGvC,IAAIvB,CAAAA,CAAS,CAAA,CACTsB,CAAAA,CAAIC,CAAAA,CAAQ,CAAA,CAChB,KAAOD,CAAAA,CAAI,CAAA,EACTtB,CAAAA,EAAU,IAAA,CAAK,IAAA,CAAKsB,CAAC,CAAA,CACrBA,CAAAA,EAAKA,CAAAA,CAAI,CAACA,CAAAA,CAEZ,OAAOtB,CACT,CAKA,QAAA,CAAS4F,CAAAA,CAAcC,CAAAA,CAAuB,CAC5C,GAAID,CAAAA,CAAO,CAAA,EAAKC,CAAAA,EAAS,IAAA,CAAK,CAAA,EAAKD,CAAAA,CAAOC,CAAAA,CACxC,MAAM,IAAI,KAAA,CAAM,eAAe,CAAA,CAEjC,OAAO,IAAA,CAAK,GAAA,CAAIA,CAAK,CAAA,EAAKD,CAAAA,CAAO,CAAA,CAAI,IAAA,CAAK,GAAA,CAAIA,CAAAA,CAAO,CAAC,EAAI,CAAA,CAC5D,CAKA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,CACd,CAKA,KAAA,EAAc,CACZ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,CAAC,EAClB,CACF,ECxEA,IAAM6L,CAAAA,CAAN,KAAmB,CACjB,QAAA,CACA,GAAA,CACA,IAAA,CAA4B,IAAA,CAC5B,KAAA,CAA6B,IAAA,CAE7B,WAAA,CAAYC,CAAAA,CAAoB,CAC9B,GAAIA,CAAAA,CAAS,GAAA,CAAMA,CAAAA,CAAS,IAAA,CAC1B,MAAM,IAAI,KAAA,CAAM,8BAA8B,CAAA,CAEhD,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAChB,IAAA,CAAK,GAAA,CAAMA,CAAAA,CAAS,KACtB,CACF,CAAA,CAEaC,EAAAA,CAAN,KAAmB,CAChB,IAAA,CAA4B,IAAA,CAIpC,MAAA,CAAOD,CAAAA,CAA0B,CAC/B,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA,CAAMA,CAAQ,EACjD,CAEA,MAAA,CAAOA,CAAAA,CAA0B,CAC/B,IAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAMA,CAAQ,EACjD,CAKA,MAAA,CAAOpU,CAAAA,CAA0B,CAC/B,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAA,CAAMA,CAAK,CAAA,GAAM,IAC9C,CAKA,SAAA,CAAUA,EAA6B,CACrC,IAAM0C,CAAAA,CAAqB,EAAC,CAC5B,OAAA,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,IAAA,CAAM1C,CAAAA,CAAO0C,CAAM,CAAA,CACpCA,CACT,CAKA,QAAA,EAAuB,CACrB,IAAMA,CAAAA,CAAqB,EAAC,CAC5B,OAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAMA,CAAM,CAAA,CACvBA,CACT,CAEA,KAAA,EAAc,CACZ,KAAK,IAAA,CAAO,KACd,CAEA,OAAA,EAAmB,CACjB,OAAO,IAAA,CAAK,IAAA,GAAS,IACvB,CAIQ,UAAA,CACNuD,CAAAA,CACAmO,CAAAA,CACc,CACd,OAAKnO,CAAAA,EAIDmO,CAAAA,CAAS,GAAA,CAAMnO,CAAAA,CAAK,QAAA,CAAS,GAAA,CAC/BA,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAMmO,CAAQ,CAAA,CAE/CnO,CAAAA,CAAK,MAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAOmO,CAAQ,CAAA,CAGnDnO,CAAAA,CAAK,GAAA,CAAM,IAAA,CAAK,GAAA,CACdA,CAAAA,CAAK,GAAA,CACLmO,CAAAA,CAAS,IAAA,CACTnO,CAAAA,CAAK,IAAA,EAAM,GAAA,EAAO,EAAA,CAAA,CAAA,CAClBA,CAAAA,CAAK,KAAA,EAAO,GAAA,EAAO,EAAA,CAAA,CACrB,CAAA,CAEOA,CAAAA,EAhBE,IAAIkO,CAAAA,CAAaC,CAAQ,CAiBpC,CAEQ,UAAA,CACNnO,EACAmO,CAAAA,CACqB,CACrB,GAAI,CAACnO,CAAAA,CAAM,OAAO,IAAA,CAElB,GACEmO,CAAAA,CAAS,GAAA,GAAQnO,CAAAA,CAAK,QAAA,CAAS,GAAA,EAC/BmO,CAAAA,CAAS,IAAA,GAASnO,CAAAA,CAAK,QAAA,CAAS,IAAA,CAChC,CAEA,GAAI,CAACA,CAAAA,CAAK,IAAA,CAAM,OAAOA,CAAAA,CAAK,KAAA,CAC5B,GAAI,CAACA,CAAAA,CAAK,KAAA,CAAO,OAAOA,CAAAA,CAAK,IAAA,CAG7B,IAAM6K,CAAAA,CAAY,IAAA,CAAK,OAAA,CAAQ7K,CAAAA,CAAK,KAAK,CAAA,CACzCA,CAAAA,CAAK,QAAA,CAAW6K,CAAAA,CAAU,QAAA,CAC1B7K,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAO6K,CAAAA,CAAU,QAAQ,EAC7D,CAAA,KAAWsD,CAAAA,CAAS,GAAA,CAAMnO,CAAAA,CAAK,QAAA,CAAS,GAAA,CACtCA,CAAAA,CAAK,IAAA,CAAO,KAAK,UAAA,CAAWA,CAAAA,CAAK,IAAA,CAAMmO,CAAQ,CAAA,CAE/CnO,CAAAA,CAAK,KAAA,CAAQ,IAAA,CAAK,UAAA,CAAWA,CAAAA,CAAK,KAAA,CAAOmO,CAAQ,CAAA,CAInD,OAAAnO,EAAK,GAAA,CAAM,IAAA,CAAK,GAAA,CACdA,CAAAA,CAAK,QAAA,CAAS,IAAA,CACdA,CAAAA,CAAK,IAAA,EAAM,GAAA,EAAO,EAAA,CAAA,CAAA,CAClBA,CAAAA,CAAK,KAAA,EAAO,GAAA,EAAO,EAAA,CAAA,CACrB,EAEOA,CACT,CAEQ,SAAA,CACNA,CAAAA,CACAjG,CAAAA,CACqB,CACrB,OAAKiG,CAAAA,CAED,IAAA,CAAK,QAAA,CAASA,CAAAA,CAAK,QAAA,CAAUjG,CAAK,CAAA,CAC7BiG,CAAAA,CAGLA,CAAAA,CAAK,IAAA,EAAQA,CAAAA,CAAK,IAAA,CAAK,GAAA,EAAOjG,CAAAA,CAAM,GAAA,CAC/B,IAAA,CAAK,SAAA,CAAUiG,CAAAA,CAAK,IAAA,CAAMjG,CAAK,CAAA,CAGjC,IAAA,CAAK,SAAA,CAAUiG,EAAK,KAAA,CAAOjG,CAAK,CAAA,CAVrB,IAWpB,CAEQ,aAAA,CACNiG,CAAAA,CACAjG,CAAAA,CACA0C,CAAAA,CACM,CACDuD,CAAAA,GAED,IAAA,CAAK,QAAA,CAASA,CAAAA,CAAK,QAAA,CAAUjG,CAAK,CAAA,EACpC0C,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,QAAQ,CAAA,CAGvBA,CAAAA,CAAK,IAAA,EAAQA,CAAAA,CAAK,IAAA,CAAK,GAAA,EAAOjG,CAAAA,CAAM,GAAA,EACtC,IAAA,CAAK,cAAciG,CAAAA,CAAK,IAAA,CAAMjG,CAAAA,CAAO0C,CAAM,CAAA,CAGzCuD,CAAAA,CAAK,KAAA,EAASA,CAAAA,CAAK,QAAA,CAAS,GAAA,EAAOjG,CAAAA,CAAM,IAAA,EAC3C,IAAA,CAAK,aAAA,CAAciG,CAAAA,CAAK,KAAA,CAAOjG,CAAAA,CAAO0C,CAAM,CAAA,EAEhD,CAEQ,QAAA,CAAS2D,CAAAA,CAAaC,CAAAA,CAAsB,CAClD,OAAOD,CAAAA,CAAE,GAAA,EAAOC,CAAAA,CAAE,IAAA,EAAQA,CAAAA,CAAE,KAAOD,CAAAA,CAAE,IACvC,CAEQ,OAAA,CAAQJ,CAAAA,CAAkC,CAChD,KAAOA,CAAAA,CAAK,IAAA,EACVA,CAAAA,CAAOA,CAAAA,CAAK,IAAA,CAEd,OAAOA,CACT,CAEQ,OAAA,CAAQA,CAAAA,CAA2BvD,CAAAA,CAA0B,CAC9DuD,CAAAA,GACL,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAK,IAAA,CAAMvD,CAAM,CAAA,CAC9BA,CAAAA,CAAO,IAAA,CAAKuD,CAAAA,CAAK,QAAQ,CAAA,CACzB,IAAA,CAAK,OAAA,CAAQA,CAAAA,CAAK,KAAA,CAAOvD,CAAM,CAAA,EACjC,CACF,EClLO,IAAM4R,EAAAA,CAAN,KAAqB,CAClB,IAAA,CACA,IAAA,CACS,CAAA,CACA,KAAA,CACA,QAAA,CAEjB,WAAA,CAAYhE,CAAAA,CAAUiE,CAAAA,CAA4BC,CAAAA,CAAa,CAC7D,GAAIlE,CAAAA,CAAI,MAAA,GAAW,CAAA,CACjB,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA,CAG1D,IAAA,CAAK,IAAA,CAAO,CAAC,GAAGA,CAAG,CAAA,CACnB,IAAA,CAAK,CAAA,CAAIA,CAAAA,CAAI,MAAA,CACb,IAAA,CAAK,KAAA,CAAQiE,CAAAA,CACb,IAAA,CAAK,QAAA,CAAWC,CAAAA,CAGhB,IAAA,CAAK,IAAA,CAAO,IAAI,KAAA,CAAS,CAAA,CAAI,IAAA,CAAK,CAAC,CAAA,CACnC,IAAA,CAAK,KAAA,CAAM,CAAA,CAAG,CAAA,CAAG,IAAA,CAAK,EAAI,CAAC,EAC7B,CAOA,KAAA,CAAM9D,CAAAA,CAAW5H,CAAAA,CAAc,CAC7B,GAAI4H,CAAAA,CAAI,CAAA,EAAK5H,CAAAA,EAAK,IAAA,CAAK,CAAA,EAAK4H,CAAAA,CAAI5H,CAAAA,CAC9B,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAEvC,OAAO,IAAA,CAAK,UAAA,CAAW,CAAA,CAAG,CAAA,CAAG,IAAA,CAAK,CAAA,CAAI,CAAA,CAAG4H,CAAAA,CAAG5H,CAAC,CAC/C,CAKA,MAAA,CAAO7E,CAAAA,CAAeX,CAAAA,CAAgB,CACpC,GAAIW,CAAAA,CAAQ,CAAA,EAAKA,CAAAA,EAAS,IAAA,CAAK,CAAA,CAC7B,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAEvC,IAAA,CAAK,IAAA,CAAKA,CAAK,CAAA,CAAIX,CAAAA,CACnB,IAAA,CAAK,WAAA,CAAY,CAAA,CAAG,CAAA,CAAG,IAAA,CAAK,CAAA,CAAI,CAAA,CAAGW,CAAAA,CAAOX,CAAK,EACjD,CAKA,OAAA,EAAe,CACb,OAAO,CAAC,GAAG,IAAA,CAAK,IAAI,CACtB,CAEA,IAAA,EAAe,CACb,OAAO,IAAA,CAAK,CACd,CAIQ,KAAA,CAAM2C,CAAAA,CAAcT,CAAAA,CAAemK,CAAAA,CAAmB,CAC5D,GAAInK,CAAAA,GAAUmK,CAAAA,CAAK,CACjB,IAAA,CAAK,IAAA,CAAK1J,CAAI,CAAA,CAAI,KAAK,IAAA,CAAKT,CAAK,CAAA,CACjC,MACF,CAEA,IAAMiB,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAA,CAAOjB,CAAAA,CAAQmK,CAAAA,EAAO,CAAC,CAAA,CAClCrH,CAAAA,CAAOrC,CAAAA,CAAO,CAAA,CAAI,CAAA,CAClBsC,CAAAA,CAAQtC,CAAAA,CAAO,CAAA,CAAI,CAAA,CAEzB,IAAA,CAAK,KAAA,CAAMqC,CAAAA,CAAM9C,CAAAA,CAAOiB,CAAG,CAAA,CAC3B,IAAA,CAAK,KAAA,CAAM8B,CAAAA,CAAO9B,EAAM,CAAA,CAAGkJ,CAAG,CAAA,CAE9B,IAAA,CAAK,IAAA,CAAK1J,CAAI,CAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAKqC,CAAI,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKC,CAAK,CAAC,EAChE,CAEQ,UAAA,CACNtC,CAAAA,CACAT,CAAAA,CACAmK,CAAAA,CACAe,CAAAA,CACA5H,CAAAA,CACG,CAEH,GAAIA,CAAAA,CAAItD,CAAAA,EAASmK,CAAAA,CAAMe,EACrB,OAAO,IAAA,CAAK,QAAA,CAId,GAAIA,CAAAA,EAAKlL,CAAAA,EAASmK,CAAAA,EAAO7G,CAAAA,CACvB,OAAO,IAAA,CAAK,IAAA,CAAK7C,CAAI,CAAA,CAIvB,IAAMQ,EAAM,IAAA,CAAK,KAAA,CAAA,CAAOjB,CAAAA,CAAQmK,CAAAA,EAAO,CAAC,CAAA,CAClCrH,CAAAA,CAAOrC,CAAAA,CAAO,CAAA,CAAI,CAAA,CAClBsC,CAAAA,CAAQtC,CAAAA,CAAO,CAAA,CAAI,CAAA,CAEnBwO,EAAa,IAAA,CAAK,UAAA,CAAWnM,CAAAA,CAAM9C,CAAAA,CAAOiB,CAAAA,CAAKiK,CAAAA,CAAG5H,CAAC,CAAA,CACnD4L,CAAAA,CAAc,IAAA,CAAK,UAAA,CAAWnM,CAAAA,CAAO9B,CAAAA,CAAM,CAAA,CAAGkJ,CAAAA,CAAKe,CAAAA,CAAG5H,CAAC,CAAA,CAE7D,OAAO,IAAA,CAAK,KAAA,CAAM2L,CAAAA,CAAYC,CAAW,CAC3C,CAEQ,WAAA,CACNzO,CAAAA,CACAT,CAAAA,CACAmK,CAAAA,CACA1L,CAAAA,CACAX,EACM,CACN,GAAIkC,CAAAA,GAAUmK,CAAAA,CAAK,CACjB,IAAA,CAAK,IAAA,CAAK1J,CAAI,CAAA,CAAI3C,CAAAA,CAClB,MACF,CAEA,IAAMmD,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAA,CAAOjB,CAAAA,CAAQmK,CAAAA,EAAO,CAAC,CAAA,CAClCrH,CAAAA,CAAOrC,CAAAA,CAAO,CAAA,CAAI,CAAA,CAClBsC,CAAAA,CAAQtC,CAAAA,CAAO,CAAA,CAAI,CAAA,CAErBhC,CAAAA,EAASwC,CAAAA,CACX,KAAK,WAAA,CAAY6B,CAAAA,CAAM9C,CAAAA,CAAOiB,CAAAA,CAAKxC,CAAAA,CAAOX,CAAK,CAAA,CAE/C,IAAA,CAAK,WAAA,CAAYiF,CAAAA,CAAO9B,CAAAA,CAAM,CAAA,CAAGkJ,CAAAA,CAAK1L,CAAAA,CAAOX,CAAK,CAAA,CAGpD,IAAA,CAAK,IAAA,CAAK2C,CAAI,CAAA,CAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAKqC,CAAI,CAAA,CAAG,IAAA,CAAK,IAAA,CAAKC,CAAK,CAAC,EAChE,CACF,EC9IO,IAAMoM,EAAAA,CAAiB,CAC5BC,CAAAA,CACAC,CAAAA,CACA/U,CAAAA,GACS,CACTA,CAAAA,GACF,ECGA,IAAMgV,EAAAA,CAAqBC,GACzB,IAAI/V,CAAAA,CAAS,CAAA,QAAA,EAAW+V,CAAAA,CAAI,IAAI,CAAA,EAAA,EAAKA,CAAAA,CAAI,KAAK,CAAA,CAAA,CAAI,GAAA,CAAK,CACrD,IAAA,CAAM,YACR,CAAC,EAEGC,EAAAA,CAA2BD,CAAAA,EAEjB,CACd,IAAMzR,CAAAA,CAAQyR,CAAAA,CAAI,QAAA,CAAW,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAI,QAAQ,CAAA,CAAI,iBAAA,CAE5D,OAAO,IAAI/V,CAAAA,CAAS,CAAA,uBAAA,EAA0BsE,CAAK,CAAA,CAAA,CAAI,GAAA,CAAK,CAC1D,IAAA,CAAM,iBACR,CAAC,CACH,CAAA,CAEM2R,EAAAA,CACJF,CAAAA,EACa,CACb,IAAMG,EAAS,MAAA,CAAO,MAAA,CAAOH,CAAAA,CAAI,MAAM,CAAA,CAAE,GAAA,CAAK5U,CAAAA,EAAOA,CAAAA,CAAG,OAAO,CAAA,CAE/D,OAAO,IAAInB,CAAAA,CAAS,oBAAA,CAAsB,GAAA,CAAK,CAC7C,IAAA,CAAM,kBAAA,CACN,OAAA,CAASkW,CACX,CAAC,CACH,CAAA,CAMMC,EAAAA,CAAiB,IACrB,IAAInW,CAAAA,CAAS,qCAAA,CAAuC,GAAG,CAAA,CAEnDoW,GAAwB,IAC5B,IAAIpW,CAAAA,CAAS,8CAAA,CAAgD,GAAG,CAAA,CAMrDqW,EAAAA,CACX,CAACC,CAAAA,CAAS,KAAA,GACV,CACEP,CAAAA,CACAH,CAAAA,CACAtV,CAAAA,CACAiW,CAAAA,GACa,CACb,IAAI1S,CAAAA,CAgEJ,OA1DIkS,CAAAA,YAAe/V,CAAAA,CACjB6D,CAAAA,CAAQkS,CAAAA,CACCA,CAAAA,YAAe,KAAA,EACxBlS,CAAAA,CAAQ,IAAI7D,CAAAA,CAAS+V,CAAAA,CAAI,OAAA,CAAS,GAAG,CAAA,CACrClS,CAAAA,CAAM,aAAA,CAAgB,KAAA,GAEtBA,CAAAA,CAAQ,IAAI7D,CAAAA,CAAS,uBAAA,CAAyB,GAAG,CAAA,CACjD6D,CAAAA,CAAM,aAAA,CAAgB,KAAA,CAAA,CAOpBkS,CAAAA,EAAQA,EAAsB,IAAA,GAAS,WAAA,GACzClS,CAAAA,CAAQiS,EAAAA,CAAkBC,CAA8B,CAAA,CAAA,CAIxDA,CAAAA,EACA,OAAOA,CAAAA,EAAQ,QAAA,EACdA,CAAAA,CAA0B,IAAA,GAAS,IAAA,GAEpClS,CAAAA,CAAQmS,GACND,CACF,CAAA,CAAA,CAGEA,CAAAA,EAAQA,CAAAA,CAAsB,IAAA,GAAS,iBAAA,GACzClS,CAAAA,CAAQoS,EAAAA,CAAwBF,CAAoC,CAAA,CAAA,CAOjEA,CAAAA,EAAe,IAAA,GAAS,mBAAA,GAC3BlS,CAAAA,CAAQsS,EAAAA,EAAe,CAAA,CAGpBJ,CAAAA,EAAe,IAAA,GAAS,mBAAA,GAC3BlS,CAAAA,CAAQuS,EAAAA,EAAsB,CAAA,CAO3BvS,CAAAA,CAAM,aAAA,CAGTG,CAAAA,CAAO,MAAA,CAAO,mBAAA,CAAqB,CAAE,OAAA,CAASH,CAAAA,CAAM,OAAQ,CAAC,CAAA,CAF7DG,CAAAA,CAAO,MAAA,CAAO,mBAAA,CAAqB+R,CAAG,CAAA,CASnCO,CAAAA,CAcElW,CAAAA,CAAY,IAAA,CAAKE,CAAAA,CAAK,CAC3B,OAAA,CAAS,KAAA,CACT,UAAA,CAAYuD,CAAAA,CAAM,UAAA,CAClB,OAAA,CAASA,CAAAA,CAAM,aAAA,CAAgBA,CAAAA,CAAM,OAAA,CAAU,sBACjD,CAAC,CAAA,CAhBQzD,CAAAA,CAAY,IAAA,CAAKE,CAAAA,CAAK,CAC3B,OAAA,CAAS,MACT,UAAA,CAAYuD,CAAAA,CAAM,UAAA,CAClB,OAAA,CAASA,CAAAA,CAAM,OAAA,CACf,IAAA,CAAM,CACJ,KAAA,CAAQkS,CAAAA,EAAe,KAAA,CACvB,OAAA,CAASlS,CAAAA,CAAM,OACjB,CACF,CAAC,CASL,EC3IK,IAAM2S,EAAAA,CACVnS,CAAAA,EACD,CAACxD,CAAAA,CAAcgV,CAAAA,CAAgB/U,CAAAA,GAA6B,CAC1D,GAAM,CAAE,KAAA,CAAA+C,CAAM,EAAIQ,CAAAA,CAAO,QAAA,CAASxD,CAAAA,CAAI,IAAI,CAAA,CAE1C,GAAIgD,CAAAA,CACF,OAAO/C,CAAAA,CAAK+C,CAAK,CAAA,CAGnB/C,CAAAA,GACF,MCNoB2V,EAAAA,CAAf,KAA8B,CACzB,KAAA,CACA,YAAA,CAEV,WAAA,CAAYC,CAAAA,CAAiBC,CAAAA,CAAsB,CACjD,IAAA,CAAK,KAAA,CAAQD,CAAAA,CACb,IAAA,CAAK,YAAA,CAAeC,EACtB,CAEA,MAAM,MAAA,CAAOnW,CAAAA,CAA8B,CAEzC,OADY,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAW,CAEjD,CAEA,MAAM,OAAA,EAAwB,CAC5B,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EACpB,CAEA,MAAM,QAAA,CAASoW,CAAAA,CAAwB,CACrC,IAAM5U,CAAAA,CAAM,MAAM,IAAA,CAAK,MAAM,QAAA,CAAS4U,CAAE,CAAA,CAExC,GAAI,CAAC5U,CAAAA,CACH,MAAM,IAAIhC,CAAAA,CAAS,CAAA,EAAG,IAAA,CAAK,YAAY,CAAA,UAAA,CAAA,CAAc,GAAA,CAAK,CACxD,IAAA,CAAM,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,CAAA,UAAA,CAC1C,CAAC,CAAA,CAGH,OAAOgC,CACT,CAEA,MAAM,UAAA,CAAW4U,CAAAA,CAAYpW,EAAkC,CAC7D,IAAMwB,CAAAA,CAAM,MAAM,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB4U,CAAAA,CAAIpW,CAAAA,CAAM,CACvD,GAAA,CAAK,IAAA,CACL,aAAA,CAAe,IACjB,CAAC,CAAA,CAED,GAAI,CAACwB,CAAAA,CACH,MAAM,IAAIhC,CAAAA,CAAS,CAAA,EAAG,IAAA,CAAK,YAAY,CAAA,UAAA,CAAA,CAAc,GAAA,CAAK,CACxD,IAAA,CAAM,CAAA,EAAG,KAAK,YAAA,CAAa,WAAA,EAAa,CAAA,UAAA,CAC1C,CAAC,CAAA,CAGH,OAAOgC,CACT,CAEA,MAAM,UAAA,CAAW4U,CAAAA,CAAwB,CACvC,IAAM5U,CAAAA,CAAM,MAAM,IAAA,CAAK,KAAA,CAAM,iBAAA,CAAkB4U,CAAE,CAAA,CAEjD,GAAI,CAAC5U,CAAAA,CACH,MAAM,IAAIhC,CAAAA,CAAS,CAAA,EAAG,IAAA,CAAK,YAAY,aAAc,GAAA,CAAK,CACxD,IAAA,CAAM,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,CAAA,UAAA,CAC1C,CAAC,CAAA,CAGH,OAAOgC,CACT,CACF,EC/DO,SAAS6U,EAAAA,CAAavS,CAAAA,CAAuB,CAClD,OAAOA,CACT,CAEO,SAASwS,EAAAA,CAAQxS,CAAAA,CAAuB,CAC7C,OAAOA,CAAAA,CAAQ,GACjB,CAEO,SAASyS,EAAAA,CAAQzS,CAAAA,CAAuB,CAC7C,OAAOA,CAAAA,CAAQ,GACjB,CAEO,SAAS0S,EAAAA,CAAM1S,CAAAA,CAAuB,CAC3C,OAAOA,CAAAA,CAAQ,IACjB,CAEO,SAAS2S,EAAAA,CAAK3S,CAAAA,CAAuB,CAC1C,OAAOA,CAAAA,CAAQ,KACjB,CAEO,SAAS4S,EAAAA,CAAUC,CAAAA,CAAoB,CAC5C,OAAOA,CAAAA,CAAK,GACd,CAEO,SAASC,EAAAA,CAAUD,CAAAA,CAAoB,CAC5C,OAAOA,CAAAA,CAAK,GACd,CAEO,SAASE,EAAAA,CAAQF,CAAAA,CAAoB,CAC1C,OAAOA,CAAAA,CAAK,IACd,CAEO,SAASG,EAAAA,CAAMH,CAAAA,CAA2B,CAC/C,OAAO,IAAI,OAAA,CAAS9T,CAAAA,EAAY,UAAA,CAAWA,CAAAA,CAAS8T,CAAE,CAAC,CACzD","file":"index.js","sourcesContent":["export class AppError extends Error {\n statusCode: number;\n status: string;\n isOperational: boolean;\n code?: string;\n details?: unknown;\n\n constructor(\n message: string,\n statusCode: number = 500,\n options?: { code?: string; details?: unknown }\n ) {\n super(message);\n\n this.statusCode = statusCode;\n this.status = `${statusCode}`.startsWith(\"4\") ? \"fail\" : \"error\";\n this.isOperational = true;\n this.code = options?.code;\n this.details = options?.details;\n\n Error.captureStackTrace(this, this.constructor);\n }\n}\n","import { Response } from \"express\";\n\nexport class APIResponse {\n static send(\n res: Response,\n options: {\n statusCode?: number;\n success?: boolean;\n message?: string;\n data?: unknown;\n meta?: unknown;\n }\n ) {\n const {\n statusCode = 200,\n success = true,\n message = \"Success\",\n data,\n meta,\n } = options;\n\n if (statusCode === 204) {\n return res.status(204).send();\n }\n\n const body: Record<string, unknown> = { success, message };\n if (data !== undefined) body.data = data;\n if (meta !== undefined) body.meta = meta;\n\n return res.status(statusCode).json(body);\n }\n\n static ok(res: Response, data: unknown, message?: string, meta?: unknown) {\n return APIResponse.send(res, { statusCode: 200, data, message, meta });\n }\n\n static created(res: Response, data: unknown, message?: string) {\n return APIResponse.send(res, { statusCode: 201, data, message });\n }\n\n static noContent(res: Response) {\n return APIResponse.send(res, { statusCode: 204 });\n }\n\n // ❌ Error response (optional use in controllers)\n static error(res: Response, message?: string, statusCode: number = 500) {\n return APIResponse.send(res, {\n success: false,\n statusCode,\n message,\n });\n }\n}\n","import { Request, Response, NextFunction } from \"express\";\n\nexport const asyncHandler =\n (fn: (req: Request, res: Response, next: NextFunction) => Promise<void>) =>\n (req: Request, res: Response, next: NextFunction) =>\n Promise.resolve(fn(req, res, next)).catch(next);\n","import type { Query, PopulateOptions } from \"mongoose\";\n\n/**\n * Generic API Features helper for Mongoose queries\n */\nclass APIFeatures<T> {\n public query: Query<T[], T>;\n public queryString: Record<string, unknown>;\n public page: number;\n public limit: number;\n\n constructor(query: Query<T[], T>, queryString: Record<string, unknown>) {\n this.query = query;\n this.queryString = queryString;\n this.page = 1;\n this.limit = 100;\n }\n\n filter(): this {\n const queryObj = { ...this.queryString };\n\n [\"page\", \"sort\", \"limit\", \"fields\"].forEach((el) => delete queryObj[el]);\n\n let queryStr = JSON.stringify(queryObj);\n queryStr = queryStr.replace(\n /\\b(gte|gt|lte|lt|in)\\b/g,\n (match) => `$${match}`\n );\n\n this.query = this.query.find(JSON.parse(queryStr));\n\n return this;\n }\n\n sort(): this {\n if (this.queryString.sort) {\n const sortBy = String(this.queryString.sort).split(\",\").join(\" \");\n this.query = this.query.sort(sortBy);\n } else {\n this.query = this.query.sort(\"-createdAt\");\n }\n\n return this;\n }\n\n limitFields(): this {\n if (this.queryString.fields) {\n const fields = String(this.queryString.fields).split(\",\").join(\" \");\n this.query = this.query.select(fields);\n } else {\n this.query = this.query.select(\"-__v\");\n }\n\n return this;\n }\n\n paginate(): this {\n this.page = Number(this.queryString.page) || 1;\n this.limit = Number(this.queryString.limit) || 100;\n\n const skip = (this.page - 1) * this.limit;\n\n this.query = this.query.skip(skip).limit(this.limit);\n\n return this;\n }\n\n populate(populateOptions?: PopulateOptions | PopulateOptions[]): this {\n if (populateOptions) {\n this.query = this.query.populate(populateOptions);\n }\n\n return this;\n }\n}\n\nexport default APIFeatures;\n","import type { Request } from \"express\";\nimport type { Model, PopulateOptions } from \"mongoose\";\n\nimport { AppError } from \"../errors/appError.js\";\nimport { APIResponse } from \"./apiResponse.js\";\nimport { asyncHandler } from \"./asyncHandler.js\";\nimport APIFeatures from \"./apiFeatures.js\";\n\n/**\n * Options for API factory methods\n */\ninterface ApiFactoryOptions<T = unknown> {\n message?: string;\n notFoundMessage?: string;\n populate?: PopulateOptions | PopulateOptions[];\n filter?: (req: Request) => Record<string, unknown>;\n}\n\n/**\n * Generic API Factory (Hybrid Pattern)\n * For simple CRUD operations without business logic\n */\nexport class APIFactory {\n static getAll<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const filter = options.filter ? options.filter(req) : {};\n\n const features = new APIFeatures(Model.find(filter), req.query)\n .filter()\n .sort()\n .limitFields()\n .paginate()\n .populate(options.populate);\n\n const docs = await features.query;\n\n APIResponse.ok(\n res,\n docs,\n options.message ?? \"Records fetched successfully\",\n {\n count: docs.length,\n page: features.page,\n limit: features.limit,\n }\n );\n });\n }\n\n static getOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n let query = Model.findById(req.params.id);\n\n if (options.populate) {\n query = query.populate(\n options.populate as PopulateOptions | PopulateOptions[]\n );\n }\n\n const doc = await query;\n\n if (!doc) {\n throw new AppError(\n options.notFoundMessage ?? \"Resource not found\",\n 404,\n { code: \"RESOURCE_NOT_FOUND\" }\n );\n }\n\n APIResponse.ok(res, doc);\n });\n }\n\n static createOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const doc = await Model.create(req.body);\n\n APIResponse.created(\n res,\n doc,\n options.message ?? \"Resource created successfully\"\n );\n });\n }\n\n static updateOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const doc = await Model.findByIdAndUpdate(\n req.params.id,\n req.body as Partial<T>,\n {\n new: true,\n runValidators: true,\n }\n );\n\n if (!doc) {\n throw new AppError(\n options.notFoundMessage ?? \"Resource not found\",\n 404\n );\n }\n\n APIResponse.ok(\n res,\n doc,\n options.message ?? \"Resource updated successfully\"\n );\n });\n }\n\n static deleteOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const doc = await Model.findByIdAndDelete(req.params.id);\n\n if (!doc) {\n throw new AppError(\n options.notFoundMessage ?? \"Resource not found\",\n 404\n );\n }\n\n APIResponse.noContent(res);\n });\n }\n}\n","import {\n BlobServiceClient,\n StorageSharedKeyCredential,\n BlockBlobClient,\n} from \"@azure/storage-blob\";\n\nimport fs from \"fs\";\n\nexport interface AzureBlobConfig {\n connectionString: string;\n accountName: string;\n accountKey: string;\n containerName: string;\n}\n\nexport type ProgressCallback = (percentage: string) => void;\n\nexport class AzureBlobService {\n private containerName: string;\n private blobServiceClient: BlobServiceClient;\n private containerClient;\n private sharedKeyCredential: StorageSharedKeyCredential;\n\n constructor(config: AzureBlobConfig) {\n const { connectionString, accountName, accountKey, containerName } = config;\n\n this.containerName = containerName;\n\n this.blobServiceClient =\n BlobServiceClient.fromConnectionString(connectionString);\n\n this.containerClient =\n this.blobServiceClient.getContainerClient(containerName);\n\n this.sharedKeyCredential = new StorageSharedKeyCredential(\n accountName,\n accountKey\n );\n }\n\n // Upload file\n async uploadFile(\n localPath: string,\n blobName: string,\n onProgress?: ProgressCallback\n ): Promise<string> {\n const blockBlobClient: BlockBlobClient =\n this.containerClient.getBlockBlobClient(blobName);\n\n const fileSize = fs.statSync(localPath).size;\n const readStream = fs.createReadStream(localPath);\n\n await blockBlobClient.uploadStream(\n readStream,\n 4 * 1024 * 1024, // buffer size\n 20, // max concurrency\n {\n onProgress: (ev) => {\n if (onProgress) {\n const percent = ((ev.loadedBytes / fileSize) * 100).toFixed(2);\n onProgress(percent);\n }\n },\n }\n );\n\n return blockBlobClient.url;\n }\n\n // Download file\n async downloadFile(\n blobName: string,\n downloadPath: string,\n onProgress?: ProgressCallback\n ): Promise<void> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n const response = await blobClient.download();\n\n const fileSize = response.contentLength || 0;\n let downloaded = 0;\n\n return new Promise((resolve, reject) => {\n const writable = fs.createWriteStream(downloadPath);\n\n response.readableStreamBody?.on(\"data\", (chunk) => {\n downloaded += chunk.length;\n\n if (onProgress && fileSize > 0) {\n const percent = ((downloaded / fileSize) * 100).toFixed(2);\n onProgress(percent);\n }\n });\n\n response.readableStreamBody?.pipe(writable);\n\n writable.on(\"finish\", resolve);\n writable.on(\"error\", reject);\n });\n }\n\n // Delete file\n async deleteFile(blobName: string): Promise<boolean> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n await blobClient.deleteIfExists();\n return true;\n }\n\n // List blobs\n async listFiles(prefix: string = \"\"): Promise<string[]> {\n const result: string[] = [];\n\n for await (const blob of this.containerClient.listBlobsFlat({ prefix })) {\n result.push(blob.name);\n }\n\n return result;\n }\n\n // Check existence\n async blobExists(blobName: string): Promise<boolean> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n return blobClient.exists();\n }\n}\n","export function errorToString(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}\\n${error.stack ?? \"\"}`;\n }\n\n if (typeof error === \"object\") {\n try {\n return JSON.stringify(error, null, 2);\n } catch {\n return \"[Unserializable object]\";\n }\n }\n\n return String(error);\n}\n","import { errorToString } from \"../utils/errorToString.js\";\n\nexport interface LoggerOptions {\n timestamp?: boolean;\n enabled?: boolean;\n}\n\nclass Logger {\n private timestamp = true;\n private enabled = true;\n\n // Use to configure once at the root\n configure(options: LoggerOptions = {}) {\n this.timestamp = options.timestamp ?? this.timestamp;\n this.enabled = options.enabled ?? this.enabled;\n }\n\n private format(msg: string): string {\n if (!this.timestamp) return msg;\n return `[${new Date().toISOString()}] ${msg}`;\n }\n\n private output(msg: string): void {\n if (!this.enabled) return;\n console.log(this.format(msg));\n }\n\n // Log Levels\n success(msg: string): void {\n this.output(`✅ ${msg}`);\n }\n\n info(msg: string): void {\n this.output(`ℹ️ ${msg}`);\n }\n\n warning(msg: string): void {\n this.output(`⚠️ ${msg}`);\n }\n\n danger(message: string, error?: unknown): void {\n if (error) {\n this.output(`❌ ${message}\\n${errorToString(error)}`);\n } else {\n this.output(`❌ ${message}`);\n }\n }\n\n log(msg: string): void {\n this.output(`• ${msg}`);\n }\n}\n\nexport const logger = new Logger();\n","import mongoose from \"mongoose\";\nimport { logger } from \"./logger.js\";\n\nexport interface DatabaseConfig {\n uri: string;\n}\n\nexport async function connectMongoDB(config: DatabaseConfig): Promise<void> {\n try {\n mongoose.set(\"strictQuery\", true);\n\n await mongoose.connect(config.uri);\n\n logger.success(\"Database connected successfully\");\n\n process.on(\"SIGINT\", async () => {\n await mongoose.connection.close();\n logger.success(\"Database connection closed\");\n process.exit(0);\n });\n } catch (error: unknown) {\n logger.danger(\"Database connection failed\");\n\n if (error instanceof Error) {\n logger.danger(error.message);\n }\n\n process.exit(1);\n }\n}\n","import dotenv from \"dotenv\";\nimport type Joi from \"joi\";\n\nimport { logger } from \"./logger.js\";\n\ndotenv.config({ quiet: true });\n\n/**\n * Generic env loader for Elseware apps\n * App provides its own Joi schema\n */\nexport function loadEnv<T>(schema: Joi.ObjectSchema<T>): T {\n const { value, error } = schema.validate(process.env, {\n abortEarly: false,\n allowUnknown: true,\n });\n\n if (error) {\n throw new Error(`❌ Env validation error: ${error.message}`);\n }\n\n logger.success(\"Configurations passed\");\n\n return value;\n}\n","export interface AllowedOriginsOptions {\n origins?: string | string[];\n defaults?: string[];\n}\n\nexport function createAllowedOrigins(\n options: AllowedOriginsOptions = {}\n): string[] {\n const { origins, defaults = [\"http://localhost:3000\"] } = options;\n\n let allowedOrigins: string[] = [];\n\n if (typeof origins === \"string\") {\n allowedOrigins = origins\n .split(\",\")\n .map((origin) => origin.trim())\n .filter(Boolean);\n }\n\n if (Array.isArray(origins)) {\n allowedOrigins = origins.map((origin) => origin.trim()).filter(Boolean);\n }\n\n // Fallback if empty\n if (allowedOrigins.length === 0) {\n allowedOrigins = [...defaults];\n }\n\n return allowedOrigins;\n}\n","import type { CorsOptions } from \"cors\";\n\nexport function createCorsOptions(allowedOrigins: string[]): CorsOptions {\n return {\n origin(origin, callback) {\n if (!origin || allowedOrigins.includes(origin)) {\n return callback(null, true);\n }\n\n return callback(new Error(`CORS blocked: ${origin} is not allowed`));\n },\n\n credentials: true,\n\n methods: [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"],\n\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"X-Requested-With\",\n \"Accept\",\n ],\n\n exposedHeaders: [\"Set-Cookie\"],\n\n optionsSuccessStatus: 204,\n };\n}\n","/**\n * CircularArray (Ring Buffer)\n * ---------------------------\n * A fixed-capacity circular array implementation.\n *\n * Characteristics:\n * - Fixed capacity\n * - O(1) enqueue / dequeue\n * - Wrap-around indexing\n * - Bounds-safe\n * - Generic\n * - Iterable (logical order)\n *\n * Use cases:\n * - Queues\n * - Circular buffers\n * - Sliding windows\n * - Game event buffers\n */\n\nexport class CircularArray<T> implements Iterable<T> {\n private readonly capacity: number;\n private data: (T | undefined)[];\n private head: number;\n private tail: number;\n private length: number;\n\n constructor(capacity: number) {\n if (!Number.isInteger(capacity) || capacity <= 0) {\n throw new Error(\"CircularArray capacity must be a positive integer\");\n }\n\n this.capacity = capacity;\n this.data = new Array<T | undefined>(capacity);\n this.head = 0;\n this.tail = 0;\n this.length = 0;\n }\n\n // Number of elements\n size(): number {\n return this.length;\n }\n\n // Max capacity\n getCapacity(): number {\n return this.capacity;\n }\n\n // Check if empty\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n // Check if full\n isFull(): boolean {\n return this.length === this.capacity;\n }\n\n // Add element at the end\n enqueue(value: T): void {\n if (this.isFull()) {\n throw new Error(\"CircularArray is full\");\n }\n\n this.data[this.tail] = value;\n this.tail = (this.tail + 1) % this.capacity;\n this.length++;\n }\n\n // Remove element from front\n dequeue(): T | undefined {\n if (this.isEmpty()) {\n return undefined;\n }\n\n const value = this.data[this.head];\n this.data[this.head] = undefined;\n this.head = (this.head + 1) % this.capacity;\n this.length--;\n\n return value;\n }\n\n // Peek front element\n peek(): T | undefined {\n return this.isEmpty() ? undefined : this.data[this.head];\n }\n\n // Clear buffer\n clear(): void {\n this.data = new Array<T | undefined>(this.capacity);\n this.head = 0;\n this.tail = 0;\n this.length = 0;\n }\n\n // Convert to array (logical order)\n toArray(): T[] {\n const result: T[] = [];\n\n for (let i = 0; i < this.length; i++) {\n const index = (this.head + i) % this.capacity;\n result.push(this.data[index] as T);\n }\n\n return result;\n }\n\n // Iterator support\n *[Symbol.iterator](): Iterator<T> {\n for (let i = 0; i < this.length; i++) {\n const index = (this.head + i) % this.capacity;\n yield this.data[index] as T;\n }\n }\n\n // String representation\n toString(): string {\n return `CircularArray(size=${this.length}, capacity=${\n this.capacity\n }) [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * DynamicArray\n * ------------\n * A resizable array implementation similar to ArrayList / Vector.\n *\n * Characteristics:\n * - Automatically resizes when capacity is exceeded\n * - O(1) amortized append\n * - O(1) access by index\n * - Bounds-safe\n * - Generic\n * - Iterable\n *\n * Use cases:\n * - General-purpose collections\n * - Algorithm implementations\n * - Game entity lists\n * - Backend buffers\n */\n\nexport class DynamicArray<T> implements Iterable<T> {\n private data: (T | undefined)[];\n private capacity: number;\n private length: number;\n\n constructor(initialCapacity: number = 4) {\n if (!Number.isInteger(initialCapacity) || initialCapacity <= 0) {\n throw new Error(\"Initial capacity must be a positive integer\");\n }\n\n this.capacity = initialCapacity;\n this.length = 0;\n this.data = new Array<T | undefined>(this.capacity);\n }\n\n // Current number of elements\n size(): number {\n return this.length;\n }\n\n // Total allocated capacity\n getCapacity(): number {\n return this.capacity;\n }\n\n // Bounds check\n private checkBounds(index: number): void {\n if (!Number.isInteger(index)) {\n throw new Error(\"Index must be an integer\");\n }\n\n if (index < 0 || index >= this.length) {\n throw new RangeError(\n `Index ${index} out of bounds (0 - ${this.length - 1})`\n );\n }\n }\n\n // Resize internal storage\n private resize(newCapacity: number): void {\n const newData = new Array<T | undefined>(newCapacity);\n for (let i = 0; i < this.length; i++) {\n newData[i] = this.data[i];\n }\n this.data = newData;\n this.capacity = newCapacity;\n }\n\n // Get element\n get(index: number): T | undefined {\n this.checkBounds(index);\n return this.data[index];\n }\n\n // Set element\n set(index: number, value: T): void {\n this.checkBounds(index);\n this.data[index] = value;\n }\n\n // Append element\n push(value: T): void {\n if (this.length === this.capacity) {\n this.resize(this.capacity * 2);\n }\n\n this.data[this.length] = value;\n this.length++;\n }\n\n // Remove and return last element\n pop(): T | undefined {\n if (this.length === 0) {\n return undefined;\n }\n\n const value = this.data[this.length - 1];\n this.data[this.length - 1] = undefined;\n this.length--;\n\n // Optional shrink (avoid memory waste)\n if (this.length > 0 && this.length <= this.capacity / 4) {\n this.resize(Math.max(4, Math.floor(this.capacity / 2)));\n }\n\n return value;\n }\n\n // Insert at index\n insert(index: number, value: T): void {\n if (index < 0 || index > this.length) {\n throw new RangeError(`Index ${index} out of bounds`);\n }\n\n if (this.length === this.capacity) {\n this.resize(this.capacity * 2);\n }\n\n for (let i = this.length; i > index; i--) {\n this.data[i] = this.data[i - 1];\n }\n\n this.data[index] = value;\n this.length++;\n }\n\n // Remove element at index\n removeAt(index: number): T | undefined {\n this.checkBounds(index);\n\n const removed = this.data[index];\n\n for (let i = index; i < this.length - 1; i++) {\n this.data[i] = this.data[i + 1];\n }\n\n this.data[this.length - 1] = undefined;\n this.length--;\n\n return removed;\n }\n\n // Check if value exists\n contains(value: T): boolean {\n for (let i = 0; i < this.length; i++) {\n if (this.data[i] === value) {\n return true;\n }\n }\n return false;\n }\n\n // Convert to JS array\n toArray(): T[] {\n return this.data.slice(0, this.length) as T[];\n }\n\n // Clear array\n clear(): void {\n this.data = new Array<T | undefined>(this.capacity);\n this.length = 0;\n }\n\n // Iterator support\n *[Symbol.iterator](): Iterator<T> {\n for (let i = 0; i < this.length; i++) {\n yield this.data[i] as T;\n }\n }\n\n // String representation\n toString(): string {\n return `DynamicArray(size=${this.length}, capacity=${\n this.capacity\n }) [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * StaticArray\n * -----------\n * A fixed-size array implementation.\n *\n * Characteristics:\n * - Size is defined at creation time and cannot be changed\n * - O(1) access by index\n * - Bounds-safe\n * - Generic\n * - Iterable\n *\n * Use cases:\n * - Fixed buffers\n * - Memory-sensitive systems\n * - Game grids / tiles\n * - Algorithm demonstrations\n */\n\nexport class StaticArray<T> implements Iterable<T> {\n private readonly capacity: number;\n private readonly data: (T | undefined)[];\n\n /**\n * Creates a static array with a fixed size.\n * @param size Total capacity of the array\n * @param initialValue Optional default value for all indices\n */\n constructor(size: number, initialValue?: T) {\n if (!Number.isInteger(size) || size <= 0) {\n throw new Error(\"StaticArray size must be a positive integer\");\n }\n\n this.capacity = size;\n this.data = new Array<T | undefined>(size);\n\n if (initialValue !== undefined) {\n this.fill(initialValue);\n }\n }\n\n // Returns the size (capacity) of the array\n size(): number {\n return this.capacity;\n }\n\n // Checks if the index is within bounds\n private checkBounds(index: number): void {\n if (!Number.isInteger(index)) {\n throw new Error(\"Index must be an integer\");\n }\n\n if (index < 0 || index >= this.capacity) {\n throw new RangeError(\n `Index ${index} out of bounds (0 - ${this.capacity - 1})`\n );\n }\n }\n\n // Gets value at index\n get(index: number): T | undefined {\n this.checkBounds(index);\n return this.data[index];\n }\n\n // Sets value at index\n set(index: number, value: T): void {\n this.checkBounds(index);\n this.data[index] = value;\n }\n\n // Fills entire array with a value\n fill(value: T): void {\n for (let i = 0; i < this.capacity; i++) {\n this.data[i] = value;\n }\n }\n\n // Clears the array (sets all values to undefined)\n clear(): void {\n for (let i = 0; i < this.capacity; i++) {\n this.data[i] = undefined;\n }\n }\n\n // Checks whether the array contains a value\n contains(value: T): boolean {\n for (let i = 0; i < this.capacity; i++) {\n if (this.data[i] === value) {\n return true;\n }\n }\n return false;\n }\n\n // Finds the first index of a value\n indexOf(value: T): number {\n for (let i = 0; i < this.capacity; i++) {\n if (this.data[i] === value) {\n return i;\n }\n }\n return -1;\n }\n\n // Converts StaticArray to a standard JS array\n toArray(): (T | undefined)[] {\n return [...this.data];\n }\n\n // Iterator support (for...of)\n *[Symbol.iterator](): Iterator<T> {\n for (let i = 0; i < this.capacity; i++) {\n const value = this.data[i];\n if (value !== undefined) {\n yield value;\n }\n }\n }\n\n // Executes a callback for each element\n forEach(callback: (value: T | undefined, index: number) => void): void {\n for (let i = 0; i < this.capacity; i++) {\n callback(this.data[i], i);\n }\n }\n\n // Creates a shallow copy of the StaticArray\n clone(): StaticArray<T> {\n const copy = new StaticArray<T>(this.capacity);\n for (let i = 0; i < this.capacity; i++) {\n copy.data[i] = this.data[i];\n }\n return copy;\n }\n\n // String representation\n toString(): string {\n return `StaticArray(${this.capacity}) [${this.data.join(\", \")}]`;\n }\n}\n","/**\n * AdjacencyList\n * -------------\n * A generic adjacency list data structure.\n *\n * Characteristics:\n * - Stores neighbors for each vertex\n * - Supports weighted or unweighted edges\n * - No traversal or algorithms included\n *\n * Intended to be used as a building block\n * for Graph / DirectedGraph implementations.\n */\n\nexport interface AdjacentEdge<T = string> {\n to: T;\n weight?: number;\n}\n\nexport class AdjacencyList<T = string> {\n private list: Map<T, AdjacentEdge<T>[]> = new Map();\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (!this.list.has(vertex)) {\n this.list.set(vertex, []);\n }\n }\n\n removeVertex(vertex: T): void {\n this.list.delete(vertex);\n\n for (const edges of this.list.values()) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === vertex) {\n edges.splice(i, 1);\n }\n }\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.list.has(vertex);\n }\n\n getVertices(): T[] {\n return Array.from(this.list.keys());\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight?: number): void {\n this.addVertex(from);\n this.addVertex(to);\n\n this.list.get(from)!.push({ to, weight });\n }\n\n removeEdge(from: T, to: T): void {\n const edges = this.list.get(from);\n if (!edges) return;\n\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === to) {\n edges.splice(i, 1);\n }\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n return this.list.get(from)?.some((e) => e.to === to) ?? false;\n }\n\n getEdges(vertex: T): AdjacentEdge<T>[] {\n return this.list.get(vertex)?.slice() ?? [];\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n clear(): void {\n this.list.clear();\n }\n\n size(): number {\n return this.list.size;\n }\n}\n\nexport default AdjacencyList;\n","/**\n * AdjacencyMatrix\n * ---------------\n * Matrix-based graph representation.\n *\n * Characteristics:\n * - Directed or Undirected\n * - Weighted or Unweighted\n * - Dense graph friendly\n * - No traversal or algorithms included\n *\n * Internally maps vertices to indices.\n */\n\nexport class AdjacencyMatrix<T = string> {\n private readonly directed: boolean;\n private matrix: number[][];\n private vertices: T[] = [];\n private indexMap: Map<T, number> = new Map();\n\n constructor(directed: boolean = false) {\n this.directed = directed;\n this.matrix = [];\n }\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (this.indexMap.has(vertex)) return;\n\n const index = this.vertices.length;\n this.vertices.push(vertex);\n this.indexMap.set(vertex, index);\n\n // expand matrix\n for (const row of this.matrix) {\n row.push(0);\n }\n\n this.matrix.push(new Array(index + 1).fill(0));\n }\n\n removeVertex(vertex: T): void {\n const index = this.indexMap.get(vertex);\n if (index === undefined) return;\n\n // remove vertex\n this.vertices.splice(index, 1);\n this.indexMap.delete(vertex);\n\n // remove row\n this.matrix.splice(index, 1);\n\n // remove column\n for (const row of this.matrix) {\n row.splice(index, 1);\n }\n\n // reindex remaining vertices\n for (let i = index; i < this.vertices.length; i++) {\n this.indexMap.set(this.vertices[i], i);\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.indexMap.has(vertex);\n }\n\n getVertices(): T[] {\n return [...this.vertices];\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight: number = 1): void {\n this.addVertex(from);\n this.addVertex(to);\n\n const i = this.indexMap.get(from)!;\n const j = this.indexMap.get(to)!;\n\n this.matrix[i][j] = weight;\n\n if (!this.directed) {\n this.matrix[j][i] = weight;\n }\n }\n\n removeEdge(from: T, to: T): void {\n const i = this.indexMap.get(from);\n const j = this.indexMap.get(to);\n if (i === undefined || j === undefined) return;\n\n this.matrix[i][j] = 0;\n\n if (!this.directed) {\n this.matrix[j][i] = 0;\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n const i = this.indexMap.get(from);\n const j = this.indexMap.get(to);\n if (i === undefined || j === undefined) return false;\n\n return this.matrix[i][j] !== 0;\n }\n\n getWeight(from: T, to: T): number | undefined {\n const i = this.indexMap.get(from);\n const j = this.indexMap.get(to);\n if (i === undefined || j === undefined) return undefined;\n\n return this.matrix[i][j] || undefined;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n size(): number {\n return this.vertices.length;\n }\n\n clear(): void {\n this.vertices = [];\n this.indexMap.clear();\n this.matrix = [];\n }\n\n isDirected(): boolean {\n return this.directed;\n }\n\n /**\n * Returns a copy of the adjacency matrix\n */\n toMatrix(): number[][] {\n return this.matrix.map((row) => [...row]);\n }\n}\n\nexport default AdjacencyMatrix;\n","/**\n * DirectedGraph\n * -------------\n * Adjacency-list based directed graph data structure.\n *\n * Characteristics:\n * - Directed edges only\n * - Weighted or unweighted edges (stored, not processed)\n * - Includes general traversals: BFS & DFS\n *\n * Advanced algorithms should live separately.\n */\n\nexport interface DirectedEdge<T = string> {\n to: T;\n weight?: number;\n}\n\nexport class DirectedGraph<T = string> {\n private adjList: Map<T, DirectedEdge<T>[]> = new Map();\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (!this.adjList.has(vertex)) {\n this.adjList.set(vertex, []);\n }\n }\n\n removeVertex(vertex: T): void {\n this.adjList.delete(vertex);\n\n for (const edges of this.adjList.values()) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === vertex) {\n edges.splice(i, 1);\n }\n }\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.adjList.has(vertex);\n }\n\n getVertices(): T[] {\n return Array.from(this.adjList.keys());\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight?: number): void {\n this.addVertex(from);\n this.addVertex(to);\n\n this.adjList.get(from)!.push({ to, weight });\n }\n\n removeEdge(from: T, to: T): void {\n const edges = this.adjList.get(from);\n if (!edges) return;\n\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === to) {\n edges.splice(i, 1);\n }\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n return this.adjList.get(from)?.some((e) => e.to === to) ?? false;\n }\n\n getEdges(vertex: T): DirectedEdge<T>[] {\n return this.adjList.get(vertex)?.slice() ?? [];\n }\n\n /* ------------------------ Traversals ------------------------ */\n\n /**\n * Breadth-First Search (BFS)\n */\n bfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const queue: T[] = [];\n const result: T[] = [];\n\n visited.add(start);\n queue.push(start);\n\n while (queue.length > 0) {\n const vertex = queue.shift()!;\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visited.add(edge.to);\n queue.push(edge.to);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Depth-First Search (DFS)\n */\n dfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const result: T[] = [];\n\n const visit = (vertex: T): void => {\n visited.add(vertex);\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visit(edge.to);\n }\n }\n };\n\n visit(start);\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n clear(): void {\n this.adjList.clear();\n }\n\n size(): number {\n return this.adjList.size;\n }\n\n isDirected(): true {\n return true;\n }\n}\n\nexport default DirectedGraph;\n","/**\n * Graph\n * -----\n * General-purpose adjacency list graph data structure.\n *\n * Includes:\n * - Directed / Undirected graph support\n * - Weighted or unweighted edges (stored, not processed)\n * - General traversal algorithms: BFS & DFS\n *\n * Advanced algorithms (Dijkstra, MST, etc.) should live separately.\n */\n\nexport interface Edge<T = string> {\n to: T;\n weight?: number;\n}\n\nexport class Graph<T = string> {\n private readonly directed: boolean;\n private adjList: Map<T, Edge<T>[]> = new Map();\n\n constructor(directed: boolean = false) {\n this.directed = directed;\n }\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (!this.adjList.has(vertex)) {\n this.adjList.set(vertex, []);\n }\n }\n\n removeVertex(vertex: T): void {\n this.adjList.delete(vertex);\n\n for (const edges of this.adjList.values()) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === vertex) {\n edges.splice(i, 1);\n }\n }\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.adjList.has(vertex);\n }\n\n getVertices(): T[] {\n return Array.from(this.adjList.keys());\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight?: number): void {\n this.addVertex(from);\n this.addVertex(to);\n\n this.adjList.get(from)!.push({ to, weight });\n\n if (!this.directed) {\n this.adjList.get(to)!.push({ to: from, weight });\n }\n }\n\n removeEdge(from: T, to: T): void {\n const edges = this.adjList.get(from);\n if (edges) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === to) {\n edges.splice(i, 1);\n }\n }\n }\n\n if (!this.directed) {\n const reverse = this.adjList.get(to);\n if (reverse) {\n for (let i = reverse.length - 1; i >= 0; i--) {\n if (reverse[i].to === from) {\n reverse.splice(i, 1);\n }\n }\n }\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n return this.adjList.get(from)?.some((e) => e.to === to) ?? false;\n }\n\n getEdges(vertex: T): Edge<T>[] {\n return this.adjList.get(vertex)?.slice() ?? [];\n }\n\n /* ------------------------ Traversals ------------------------ */\n\n /**\n * Breadth-First Search (BFS)\n */\n bfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const queue: T[] = [];\n const result: T[] = [];\n\n visited.add(start);\n queue.push(start);\n\n while (queue.length > 0) {\n const vertex = queue.shift()!;\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visited.add(edge.to);\n queue.push(edge.to);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Depth-First Search (DFS)\n */\n dfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const result: T[] = [];\n\n const visit = (vertex: T): void => {\n visited.add(vertex);\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visit(edge.to);\n }\n }\n };\n\n visit(start);\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n clear(): void {\n this.adjList.clear();\n }\n\n size(): number {\n return this.adjList.size;\n }\n\n isDirected(): boolean {\n return this.directed;\n }\n}\n\nexport default Graph;\n","/**\n * ConsistentHash\n * --------------\n * Consistent hashing implementation with virtual nodes.\n *\n * Use cases:\n * - Load balancers\n * - Distributed caches\n * - Database sharding\n *\n * Characteristics:\n * - Minimal key remapping on node add/remove\n * - Supports virtual nodes (replicas)\n * - Deterministic hashing\n */\n\nexport class ConsistentHash<T extends string | number> {\n private ring = new Map<number, T>();\n private sortedKeys: number[] = [];\n private replicas: number;\n\n constructor(replicas = 100) {\n if (replicas <= 0) {\n throw new Error(\"Replicas must be greater than 0\");\n }\n this.replicas = replicas;\n }\n\n /* ------------------------ Public API ------------------------ */\n\n addNode(node: T): void {\n for (let i = 0; i < this.replicas; i++) {\n const hash = this.hash(`${node}:${i}`);\n this.ring.set(hash, node);\n this.sortedKeys.push(hash);\n }\n\n this.sortRing();\n }\n\n removeNode(node: T): void {\n for (let i = 0; i < this.replicas; i++) {\n const hash = this.hash(`${node}:${i}`);\n this.ring.delete(hash);\n const index = this.sortedKeys.indexOf(hash);\n if (index !== -1) {\n this.sortedKeys.splice(index, 1);\n }\n }\n }\n\n getNode(key: string | number): T | undefined {\n if (this.ring.size === 0) return undefined;\n\n const hash = this.hash(String(key));\n\n const index = this.findClosestIndex(hash);\n const ringKey = this.sortedKeys[index];\n\n return this.ring.get(ringKey);\n }\n\n getNodes(): T[] {\n return Array.from(new Set(this.ring.values()));\n }\n\n size(): number {\n return this.getNodes().length;\n }\n\n clear(): void {\n this.ring.clear();\n this.sortedKeys = [];\n }\n\n /* ------------------------ Internal ------------------------ */\n\n private hash(value: string): number {\n let hash = 0;\n\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) >>> 0;\n }\n\n return hash;\n }\n\n private sortRing(): void {\n this.sortedKeys.sort((a, b) => a - b);\n }\n\n private findClosestIndex(hash: number): number {\n let low = 0;\n let high = this.sortedKeys.length - 1;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (this.sortedKeys[mid] === hash) return mid;\n if (this.sortedKeys[mid] < hash) low = mid + 1;\n else high = mid - 1;\n }\n\n return low < this.sortedKeys.length ? low : 0;\n }\n}\n\nexport default ConsistentHash;\n","/**\n * HashMap\n * -------\n * A generic hash map implementation using separate chaining.\n *\n * Characteristics:\n * - Generic key-value support\n * - Handles collisions via linked lists (arrays)\n * - Automatically resizes when load factor exceeds threshold\n *\n * Time Complexity:\n * - Average: O(1)\n * - Worst: O(n)\n */\n\ntype HashEntry<K, V> = {\n key: K;\n value: V;\n};\n\nexport class HashMap<K extends string | number, V> {\n private buckets: Array<HashEntry<K, V>[]>;\n private capacity: number;\n private size: number;\n private readonly LOAD_FACTOR = 0.75;\n\n constructor(initialCapacity = 16) {\n if (initialCapacity <= 0) {\n throw new Error(\"Initial capacity must be greater than 0\");\n }\n\n this.capacity = initialCapacity;\n this.size = 0;\n this.buckets = Array.from({ length: this.capacity }, () => []);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n set(key: K, value: V): void {\n const index = this.hash(key);\n const bucket = this.buckets[index];\n\n for (const entry of bucket) {\n if (entry.key === key) {\n entry.value = value;\n return;\n }\n }\n\n bucket.push({ key, value });\n this.size++;\n\n if (this.size / this.capacity > this.LOAD_FACTOR) {\n this.resize();\n }\n }\n\n get(key: K): V | undefined {\n const index = this.hash(key);\n const bucket = this.buckets[index];\n\n for (const entry of bucket) {\n if (entry.key === key) {\n return entry.value;\n }\n }\n\n return undefined;\n }\n\n has(key: K): boolean {\n return this.get(key) !== undefined;\n }\n\n delete(key: K): boolean {\n const index = this.hash(key);\n const bucket = this.buckets[index];\n\n const entryIndex = bucket.findIndex((e) => e.key === key);\n if (entryIndex === -1) return false;\n\n bucket.splice(entryIndex, 1);\n this.size--;\n return true;\n }\n\n clear(): void {\n this.buckets = Array.from({ length: this.capacity }, () => []);\n this.size = 0;\n }\n\n keys(): K[] {\n return this.buckets.flatMap((bucket) => bucket.map((e) => e.key));\n }\n\n values(): V[] {\n return this.buckets.flatMap((bucket) => bucket.map((e) => e.value));\n }\n\n entries(): Array<[K, V]> {\n return this.buckets.flatMap((bucket) =>\n bucket.map((e) => [e.key, e.value] as [K, V])\n );\n }\n\n getSize(): number {\n return this.size;\n }\n\n getCapacity(): number {\n return this.capacity;\n }\n\n /* ------------------------ Internal ------------------------ */\n\n private hash(key: K): number {\n const strKey = String(key);\n let hash = 0;\n\n for (let i = 0; i < strKey.length; i++) {\n hash = (hash * 31 + strKey.charCodeAt(i)) % this.capacity;\n }\n\n return hash;\n }\n\n private resize(): void {\n const oldBuckets = this.buckets;\n this.capacity *= 2;\n this.size = 0;\n this.buckets = Array.from({ length: this.capacity }, () => []);\n\n for (const bucket of oldBuckets) {\n for (const entry of bucket) {\n this.set(entry.key, entry.value);\n }\n }\n }\n}\n\nexport default HashMap;\n","/**\n * HashSet\n * -------\n * A generic hash set implementation built on top of HashMap.\n *\n * Characteristics:\n * - Stores unique values only\n * - Backed by HashMap for O(1) average operations\n *\n * Time Complexity:\n * - Average: O(1)\n * - Worst: O(n)\n */\n\nimport HashMap from \"./HashMap.js\";\n\nexport class HashSet<T extends string | number> {\n private map: HashMap<T, boolean>;\n\n constructor(initialCapacity = 16) {\n this.map = new HashMap<T, boolean>(initialCapacity);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n add(value: T): void {\n this.map.set(value, true);\n }\n\n has(value: T): boolean {\n return this.map.has(value);\n }\n\n delete(value: T): boolean {\n return this.map.delete(value);\n }\n\n clear(): void {\n this.map.clear();\n }\n\n size(): number {\n return this.map.getSize();\n }\n\n values(): T[] {\n return this.map.keys();\n }\n\n /* ------------------------ Utility ------------------------ */\n\n isEmpty(): boolean {\n return this.size() === 0;\n }\n}\n\nexport default HashSet;\n","export class Node<T> {\n value: T;\n next: Node<T> | null = null;\n prev: Node<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n","import { Node } from \"./Node.js\";\n\nexport class DoublyLinkedList<T> implements Iterable<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n private length = 0;\n\n size(): number {\n return this.length;\n }\n\n add(value: T): void {\n const node = new Node(value);\n\n if (!this.head) {\n this.head = this.tail = node;\n } else {\n node.prev = this.tail;\n this.tail!.next = node;\n this.tail = node;\n }\n\n this.length++;\n }\n\n remove(value: T): boolean {\n let current = this.head;\n\n while (current) {\n if (current.value === value) {\n if (current.prev) current.prev.next = current.next;\n else this.head = current.next;\n\n if (current.next) current.next.prev = current.prev;\n else this.tail = current.prev;\n\n this.length--;\n return true;\n }\n current = current.next;\n }\n\n return false;\n }\n\n toArray(): T[] {\n return [...this];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n let current = this.head;\n while (current) {\n yield current.value;\n current = current.next;\n }\n }\n}\n","/**\n * LFUCache\n * --------\n * Least Frequently Used cache implementation.\n *\n * Eviction rules:\n * 1. Evict the lowest frequency\n * 2. If tie, evict least recently used (LRU)\n *\n * Uses:\n * - HashMap for O(1) lookup\n * - Frequency Map → DoublyLinkedList for LRU ordering\n */\n\nimport { DoublyLinkedList } from \"../linked-list/DoublyLinkedList.js\";\n\ntype CacheEntry<K, V> = {\n key: K;\n value: V;\n freq: number;\n};\n\nexport class LFUCache<K extends string | number, V> {\n private capacity: number;\n private size: number = 0;\n private minFreq: number = 0;\n\n private cache = new Map<K, CacheEntry<K, V>>();\n private freqMap = new Map<number, DoublyLinkedList<CacheEntry<K, V>>>();\n\n constructor(capacity: number) {\n if (capacity <= 0) {\n throw new Error(\"Capacity must be greater than 0\");\n }\n this.capacity = capacity;\n }\n\n /* ------------------------ Public API ------------------------ */\n\n get(key: K): V | undefined {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n this.updateFrequency(entry);\n return entry.value;\n }\n\n put(key: K, value: V): void {\n if (this.capacity === 0) return;\n\n const existing = this.cache.get(key);\n if (existing) {\n existing.value = value;\n this.updateFrequency(existing);\n return;\n }\n\n if (this.size >= this.capacity) {\n this.evictLFU();\n }\n\n const entry: CacheEntry<K, V> = {\n key,\n value,\n freq: 1,\n };\n\n this.cache.set(key, entry);\n this.getFreqList(1).add(entry);\n this.minFreq = 1;\n this.size++;\n }\n\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n sizeOf(): number {\n return this.size;\n }\n\n clear(): void {\n this.cache.clear();\n this.freqMap.clear();\n this.size = 0;\n this.minFreq = 0;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private updateFrequency(entry: CacheEntry<K, V>): void {\n const oldFreq = entry.freq;\n const oldList = this.freqMap.get(oldFreq)!;\n\n oldList.remove(entry);\n\n if (oldFreq === this.minFreq && oldList.size() === 0) {\n this.minFreq++;\n }\n\n entry.freq++;\n this.getFreqList(entry.freq).add(entry);\n }\n\n private evictLFU(): void {\n const list = this.freqMap.get(this.minFreq);\n if (!list) return;\n\n // LRU eviction → first element in DLL\n const [lruEntry] = list.toArray();\n if (!lruEntry) return;\n\n list.remove(lruEntry);\n this.cache.delete(lruEntry.key);\n this.size--;\n }\n\n private getFreqList(freq: number): DoublyLinkedList<CacheEntry<K, V>> {\n let list = this.freqMap.get(freq);\n if (!list) {\n list = new DoublyLinkedList<CacheEntry<K, V>>();\n this.freqMap.set(freq, list);\n }\n return list;\n }\n}\n\nexport default LFUCache;\n","/**\n * LRUCache\n * --------\n * Least Recently Used (LRU) Cache implementation.\n *\n * Characteristics:\n * - O(1) get and put operations\n * - Evicts least recently used item when capacity is exceeded\n *\n * Data Structures Used:\n * - HashMap for fast lookup\n * - Doubly Linked List for usage order\n */\n\ntype Node<K, V> = {\n key: K;\n value: V;\n prev: Node<K, V> | null;\n next: Node<K, V> | null;\n};\n\nexport class LRUCache<K extends string | number, V> {\n private capacity: number;\n private cache: Map<K, Node<K, V>>;\n private head: Node<K, V> | null;\n private tail: Node<K, V> | null;\n\n constructor(capacity: number) {\n if (capacity <= 0) {\n throw new Error(\"Capacity must be greater than 0\");\n }\n\n this.capacity = capacity;\n this.cache = new Map();\n this.head = null;\n this.tail = null;\n }\n\n /* ------------------------ Public API ------------------------ */\n\n get(key: K): V | undefined {\n const node = this.cache.get(key);\n if (!node) return undefined;\n\n this.moveToFront(node);\n return node.value;\n }\n\n put(key: K, value: V): void {\n const existingNode = this.cache.get(key);\n\n if (existingNode) {\n existingNode.value = value;\n this.moveToFront(existingNode);\n return;\n }\n\n const newNode: Node<K, V> = {\n key,\n value,\n prev: null,\n next: null,\n };\n\n this.cache.set(key, newNode);\n this.addToFront(newNode);\n\n if (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed();\n }\n }\n\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n size(): number {\n return this.cache.size;\n }\n\n clear(): void {\n this.cache.clear();\n this.head = null;\n this.tail = null;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private addToFront(node: Node<K, V>): void {\n node.prev = null;\n node.next = this.head;\n\n if (this.head) {\n this.head.prev = node;\n }\n\n this.head = node;\n\n if (!this.tail) {\n this.tail = node;\n }\n }\n\n private removeNode(node: Node<K, V>): void {\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n this.head = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n this.tail = node.prev;\n }\n\n node.prev = null;\n node.next = null;\n }\n\n private moveToFront(node: Node<K, V>): void {\n if (node === this.head) return;\n\n this.removeNode(node);\n this.addToFront(node);\n }\n\n private evictLeastRecentlyUsed(): void {\n if (!this.tail) return;\n\n const lruKey = this.tail.key;\n this.removeNode(this.tail);\n this.cache.delete(lruKey);\n }\n}\n\nexport default LRUCache;\n","/**\n * BinaryHeap\n * ----------\n * A generic binary heap implementation.\n *\n * By default this is a min-heap.\n * You can create a max-heap by providing a custom comparator.\n *\n * Time Complexity:\n * - Insert: O(log n)\n * - Extract: O(log n)\n * - Peek: O(1)\n */\n\nexport class BinaryHeap<T> {\n private heap: T[] = [];\n private readonly compare: (a: T, b: T) => number;\n\n constructor(comparator?: (a: T, b: T) => number, initial?: T[]) {\n this.compare =\n comparator ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n\n if (initial && initial.length > 0) {\n this.heap = [...initial];\n this.heapify();\n }\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n this.heap.push(value);\n this.siftUp(this.heap.length - 1);\n }\n\n extract(): T | undefined {\n if (this.heap.length === 0) return undefined;\n if (this.heap.length === 1) return this.heap.pop();\n\n const root = this.heap[0];\n this.heap[0] = this.heap.pop()!;\n this.siftDown(0);\n return root;\n }\n\n peek(): T | undefined {\n return this.heap[0];\n }\n\n size(): number {\n return this.heap.length;\n }\n\n isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n toArray(): T[] {\n return [...this.heap];\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private heapify(): void {\n for (let i = Math.floor(this.heap.length / 2) - 1; i >= 0; i--) {\n this.siftDown(i);\n }\n }\n\n private siftUp(index: number): void {\n let current = index;\n\n while (current > 0) {\n const parent = Math.floor((current - 1) / 2);\n if (this.compare(this.heap[current], this.heap[parent]) >= 0) {\n break;\n }\n this.swap(current, parent);\n current = parent;\n }\n }\n\n private siftDown(index: number): void {\n let current = index;\n const length = this.heap.length;\n\n while (true) {\n const left = current * 2 + 1;\n const right = current * 2 + 2;\n let smallest = current;\n\n if (\n left < length &&\n this.compare(this.heap[left], this.heap[smallest]) < 0\n ) {\n smallest = left;\n }\n\n if (\n right < length &&\n this.compare(this.heap[right], this.heap[smallest]) < 0\n ) {\n smallest = right;\n }\n\n if (smallest === current) break;\n\n this.swap(current, smallest);\n current = smallest;\n }\n }\n\n private swap(i: number, j: number): void {\n [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]];\n }\n}\n\nexport default BinaryHeap;\n","/**\n * FibonacciHeap\n * -------------\n * Amortized-optimal heap supporting:\n * - insert: O(1)\n * - findMin: O(1)\n * - merge: O(1)\n * - decreaseKey: O(1) amortized\n * - extractMin: O(log n) amortized\n */\n\nexport class FibNode<T> {\n key: T;\n parent: FibNode<T> | null = null;\n children: FibNode<T>[] = [];\n mark = false;\n\n constructor(key: T) {\n this.key = key;\n }\n}\n\nexport class FibonacciHeap<T> {\n private roots: FibNode<T>[] = [];\n private minNode: FibNode<T> | null = null;\n private _size = 0;\n private readonly compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ---------------- Public API ---------------- */\n\n insert(key: T): FibNode<T> {\n const node = new FibNode(key);\n this.roots.push(node);\n if (!this.minNode || this.compare(key, this.minNode.key) < 0) {\n this.minNode = node;\n }\n this._size++;\n return node;\n }\n\n findMin(): T | undefined {\n return this.minNode?.key;\n }\n\n size(): number {\n return this._size;\n }\n\n isEmpty(): boolean {\n return this._size === 0;\n }\n\n merge(other: FibonacciHeap<T>): void {\n for (const r of other.roots) {\n this.roots.push(r);\n }\n\n if (\n other.minNode &&\n (!this.minNode || this.compare(other.minNode.key, this.minNode.key) < 0)\n ) {\n this.minNode = other.minNode;\n }\n\n this._size += other._size;\n other.clear();\n }\n\n extractMin(): T | undefined {\n if (!this.minNode) return undefined;\n\n const min = this.minNode;\n\n // move children to root list\n for (const child of min.children) {\n child.parent = null;\n this.roots.push(child);\n }\n\n // remove min from roots\n this.roots = this.roots.filter((r) => r !== min);\n this._size--;\n\n if (this.roots.length === 0) {\n this.minNode = null;\n return min.key;\n }\n\n this.consolidate();\n return min.key;\n }\n\n decreaseKey(node: FibNode<T>, newKey: T): void {\n if (this.compare(newKey, node.key) > 0) {\n throw new Error(\"New key is greater than current key\");\n }\n\n node.key = newKey;\n const parent = node.parent;\n\n if (parent && this.compare(node.key, parent.key) < 0) {\n this.cut(node, parent);\n this.cascadingCut(parent);\n }\n\n if (this.minNode && this.compare(node.key, this.minNode.key) < 0) {\n this.minNode = node;\n }\n }\n\n clear(): void {\n this.roots = [];\n this.minNode = null;\n this._size = 0;\n }\n\n /* ---------------- Internal Logic ---------------- */\n\n private consolidate(): void {\n const table = new Map<number, FibNode<T>>();\n\n for (const node of [...this.roots]) {\n let x = node;\n let d = x.children.length;\n\n while (table.has(d)) {\n let y = table.get(d)!;\n if (this.compare(y.key, x.key) < 0) {\n [x, y] = [y, x];\n }\n this.link(y, x);\n table.delete(d);\n d = x.children.length;\n }\n table.set(d, x);\n }\n\n this.roots = [];\n this.minNode = null;\n\n for (const n of table.values()) {\n this.roots.push(n);\n if (!this.minNode || this.compare(n.key, this.minNode.key) < 0) {\n this.minNode = n;\n }\n }\n }\n\n private link(y: FibNode<T>, x: FibNode<T>): void {\n this.roots = this.roots.filter((r) => r !== y);\n y.parent = x;\n y.mark = false;\n x.children.push(y);\n }\n\n private cut(x: FibNode<T>, y: FibNode<T>): void {\n y.children = y.children.filter((c) => c !== x);\n x.parent = null;\n x.mark = false;\n this.roots.push(x);\n }\n\n private cascadingCut(y: FibNode<T>): void {\n const z = y.parent;\n if (!z) return;\n\n if (!y.mark) {\n y.mark = true;\n } else {\n this.cut(y, z);\n this.cascadingCut(z);\n }\n }\n}\n\nexport default FibonacciHeap;\n","/**\n * MaxHeap\n * -------\n * A specialized MaxHeap implementation built on top of BinaryHeap.\n *\n * Characteristics:\n * - Always extracts the maximum element\n * - O(log n) insert & extract\n * - O(1) peek\n */\n\nimport BinaryHeap from \"./BinaryHeap.js\";\n\nexport class MaxHeap<T> extends BinaryHeap<T> {\n constructor(initial?: T[]) {\n super((a: any, b: any) => (a > b ? -1 : a < b ? 1 : 0), initial);\n }\n}\n\nexport default MaxHeap;\n","/**\n * MinHeap\n * -------\n * A specialized MinHeap implementation built on top of BinaryHeap.\n *\n * Characteristics:\n * - Always extracts the minimum element\n * - O(log n) insert & extract\n * - O(1) peek\n */\n\nimport BinaryHeap from \"./BinaryHeap.js\";\n\nexport class MinHeap<T> extends BinaryHeap<T> {\n constructor(initial?: T[]) {\n super((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0), initial);\n }\n}\n\nexport default MinHeap;\n","/**\n * PairingHeap\n * -----------\n * A self-adjusting heap with excellent practical performance.\n *\n * Time Complexity (amortized):\n * - insert: O(1)\n * - merge: O(1)\n * - findMin: O(1)\n * - extractMin: O(log n)\n * - decreaseKey: O(log n)\n *\n * Simpler and safer than Fibonacci Heap.\n */\n\nexport class PairingNode<T> {\n key: T;\n child: PairingNode<T> | null = null;\n sibling: PairingNode<T> | null = null;\n parent: PairingNode<T> | null = null;\n\n constructor(key: T) {\n this.key = key;\n }\n}\n\nexport class PairingHeap<T> {\n private root: PairingNode<T> | null = null;\n private _size = 0;\n private readonly compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(key: T): PairingNode<T> {\n const node = new PairingNode(key);\n this.root = this.mergeNodes(this.root, node);\n this._size++;\n return node;\n }\n\n findMin(): T | undefined {\n return this.root?.key;\n }\n\n size(): number {\n return this._size;\n }\n\n isEmpty(): boolean {\n return this._size === 0;\n }\n\n merge(other: PairingHeap<T>): void {\n if (!other.root) return;\n\n this.root = this.mergeNodes(this.root, other.root);\n this._size += other._size;\n\n other.clear();\n }\n\n extractMin(): T | undefined {\n if (!this.root) return undefined;\n\n const min = this.root.key;\n if (!this.root.child) {\n this.root = null;\n } else {\n this.root = this.combineSiblings(this.root.child);\n this.root.parent = null;\n }\n\n this._size--;\n return min;\n }\n\n decreaseKey(node: PairingNode<T>, newKey: T): void {\n if (this.compare(newKey, node.key) > 0) {\n throw new Error(\"New key is greater than current key\");\n }\n\n node.key = newKey;\n if (node !== this.root) {\n this.cut(node);\n this.root = this.mergeNodes(this.root, node);\n }\n }\n\n clear(): void {\n this.root = null;\n this._size = 0;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private mergeNodes(\n a: PairingNode<T> | null,\n b: PairingNode<T> | null\n ): PairingNode<T> | null {\n if (!a) return b;\n if (!b) return a;\n\n if (this.compare(a.key, b.key) <= 0) {\n // a becomes parent of b\n b.parent = a;\n b.sibling = a.child;\n a.child = b;\n return a;\n } else {\n // b becomes parent of a\n a.parent = b;\n a.sibling = b.child;\n b.child = a;\n return b;\n }\n }\n\n /**\n * Two-pass pairing: first pair siblings, then merge back\n */\n private combineSiblings(first: PairingNode<T>): PairingNode<T> {\n const siblings: PairingNode<T>[] = [];\n\n // detach siblings\n let current: PairingNode<T> | null = first;\n while (current) {\n const next = current.sibling;\n current.sibling = null;\n siblings.push(current);\n current = next;\n }\n\n // first pass: pairwise merge\n const merged: PairingNode<T>[] = [];\n for (let i = 0; i < siblings.length; i += 2) {\n if (i + 1 < siblings.length) {\n merged.push(this.mergeNodes(siblings[i], siblings[i + 1])!);\n } else {\n merged.push(siblings[i]);\n }\n }\n\n // second pass: merge from right to left\n let result = merged[merged.length - 1];\n for (let i = merged.length - 2; i >= 0; i--) {\n result = this.mergeNodes(merged[i], result)!;\n }\n\n return result;\n }\n\n private cut(node: PairingNode<T>): void {\n const parent = node.parent;\n if (!parent) return;\n\n if (parent.child === node) {\n parent.child = node.sibling;\n } else {\n let current = parent.child;\n while (current && current.sibling !== node) {\n current = current.sibling;\n }\n if (current) {\n current.sibling = node.sibling;\n }\n }\n\n node.parent = null;\n node.sibling = null;\n }\n}\n\nexport default PairingHeap;\n","import { Node } from \"./Node.js\";\n\nexport class CircularLinkedList<T> implements Iterable<T> {\n private tail: Node<T> | null = null;\n private length = 0;\n\n size(): number {\n return this.length;\n }\n\n add(value: T): void {\n const node = new Node(value);\n\n if (!this.tail) {\n node.next = node;\n this.tail = node;\n } else {\n node.next = this.tail.next;\n this.tail.next = node;\n this.tail = node;\n }\n\n this.length++;\n }\n\n remove(value: T): boolean {\n if (!this.tail) return false;\n\n let current = this.tail.next!;\n let prev = this.tail;\n\n do {\n if (current.value === value) {\n if (current === this.tail && current.next === current) {\n this.tail = null;\n } else {\n prev.next = current.next;\n if (current === this.tail) {\n this.tail = prev;\n }\n }\n this.length--;\n return true;\n }\n prev = current;\n current = current.next!;\n } while (current !== this.tail.next);\n\n return false;\n }\n\n toArray(): T[] {\n return [...this];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n if (!this.tail) return;\n\n let current = this.tail.next!;\n do {\n yield current.value;\n current = current.next!;\n } while (current !== this.tail.next);\n }\n}","import { Node } from \"./Node.js\";\n\nexport class SinglyLinkedList<T> implements Iterable<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n private length = 0;\n\n size(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n add(value: T): void {\n const node = new Node(value);\n\n if (!this.head) {\n this.head = this.tail = node;\n } else {\n this.tail!.next = node;\n this.tail = node;\n }\n\n this.length++;\n }\n\n remove(value: T): boolean {\n if (!this.head) return false;\n\n if (this.head.value === value) {\n this.head = this.head.next;\n if (!this.head) this.tail = null;\n this.length--;\n return true;\n }\n\n let current = this.head;\n while (current.next) {\n if (current.next.value === value) {\n if (current.next === this.tail) {\n this.tail = current;\n }\n current.next = current.next.next;\n this.length--;\n return true;\n }\n current = current.next;\n }\n\n return false;\n }\n\n contains(value: T): boolean {\n for (const v of this) {\n if (v === value) return true;\n }\n return false;\n }\n\n toArray(): T[] {\n return [...this];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n let current = this.head;\n while (current) {\n yield current.value;\n current = current.next;\n }\n }\n}\n","/**\n * BloomFilter\n * -----------\n * A probabilistic data structure for fast membership testing.\n *\n * Characteristics:\n * - No false negatives\n * - Possible false positives\n * - Space efficient\n * - Insert & lookup only\n *\n * Time Complexity:\n * - add: O(k)\n * - contains: O(k)\n */\n\nexport class BloomFilter {\n private readonly size: number;\n private readonly hashCount: number;\n private readonly bits: Uint8Array;\n\n constructor(size: number, hashCount: number) {\n if (size <= 0 || hashCount <= 0) {\n throw new Error(\"BloomFilter size and hashCount must be > 0\");\n }\n\n this.size = size;\n this.hashCount = hashCount;\n this.bits = new Uint8Array(size);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: string): void {\n const hashes = this.getHashes(value);\n for (const hash of hashes) {\n this.bits[hash] = 1;\n }\n }\n\n contains(value: string): boolean {\n const hashes = this.getHashes(value);\n for (const hash of hashes) {\n if (this.bits[hash] === 0) {\n return false;\n }\n }\n return true;\n }\n\n clear(): void {\n this.bits.fill(0);\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n private getHashes(value: string): number[] {\n const hashes: number[] = [];\n\n let hash1 = this.hash(value, 5381);\n let hash2 = this.hash(value, 52711);\n\n for (let i = 0; i < this.hashCount; i++) {\n const combined = (hash1 + i * hash2) % this.size;\n hashes.push(combined);\n }\n\n return hashes;\n }\n\n private hash(str: string, seed: number): number {\n let hash = seed;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return Math.abs(hash) % this.size;\n }\n}\n\nexport default BloomFilter;\n","/**\n * CountMinSketch\n * --------------\n * A probabilistic data structure for frequency estimation.\n *\n * Guarantees:\n * - Estimated count >= true count\n * - No false negatives\n *\n * Time Complexity:\n * - update: O(d)\n * - estimate: O(d)\n */\n\nexport class CountMinSketch {\n private readonly width: number;\n private readonly depth: number;\n private readonly table: number[][];\n private readonly seeds: number[];\n\n constructor(width: number, depth: number) {\n if (width <= 0 || depth <= 0) {\n throw new Error(\"Width and depth must be greater than 0\");\n }\n\n this.width = width;\n this.depth = depth;\n\n this.table = Array.from({ length: depth }, () =>\n Array<number>(width).fill(0)\n );\n\n // Different seeds for each hash function\n this.seeds = Array.from({ length: depth }, (_, i) => i * 73856093 + 17);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n /**\n * Increments the count of an item\n */\n update(value: string, count: number = 1): void {\n if (count <= 0) return;\n\n for (let i = 0; i < this.depth; i++) {\n const index = this.hash(value, this.seeds[i]);\n this.table[i][index] += count;\n }\n }\n\n /**\n * Returns the estimated frequency of an item\n */\n estimate(value: string): number {\n let min = Infinity;\n\n for (let i = 0; i < this.depth; i++) {\n const index = this.hash(value, this.seeds[i]);\n min = Math.min(min, this.table[i][index]);\n }\n\n return min === Infinity ? 0 : min;\n }\n\n clear(): void {\n for (let i = 0; i < this.depth; i++) {\n this.table[i].fill(0);\n }\n }\n\n /* ------------------------ Hashing ------------------------ */\n\n private hash(value: string, seed: number): number {\n let hash = seed;\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) >>> 0;\n }\n return hash % this.width;\n }\n}\n\nexport default CountMinSketch;","/**\n * HyperLogLog\n * -----------\n * Probabilistic data structure for cardinality estimation.\n *\n * Guarantees:\n * - Approximates number of distinct elements\n * - Small memory footprint\n *\n * Error rate ≈ 1.04 / sqrt(m)\n * where m = number of registers\n */\n\nexport class HyperLogLog {\n private readonly p: number;\n private readonly m: number;\n private readonly registers: Uint8Array;\n private readonly alpha: number;\n\n constructor(p: number = 10) {\n // p controls accuracy & memory\n // p=10 → 1024 registers → ~3.25% error\n if (p < 4 || p > 16) {\n throw new Error(\"p must be between 4 and 16\");\n }\n\n this.p = p;\n this.m = 1 << p;\n this.registers = new Uint8Array(this.m);\n this.alpha = this.getAlpha(this.m);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: string): void {\n const hash = this.hash(value);\n const index = hash >>> (32 - this.p);\n const remaining = (hash << this.p) | (1 << (this.p - 1));\n const rank = this.countLeadingZeros(remaining) + 1;\n\n this.registers[index] = Math.max(this.registers[index], rank);\n }\n\n count(): number {\n let sum = 0;\n let zeros = 0;\n\n for (const r of this.registers) {\n sum += Math.pow(2, -r);\n if (r === 0) zeros++;\n }\n\n let estimate = this.alpha * this.m * this.m / sum;\n\n // Small range correction (linear counting)\n if (estimate <= 2.5 * this.m && zeros > 0) {\n estimate = this.m * Math.log(this.m / zeros);\n }\n\n return Math.round(estimate);\n }\n\n clear(): void {\n this.registers.fill(0);\n }\n\n /* ------------------------ Hashing ------------------------ */\n\n private hash(value: string): number {\n // 32-bit FNV-1a\n let hash = 2166136261;\n for (let i = 0; i < value.length; i++) {\n hash ^= value.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n }\n\n private countLeadingZeros(x: number): number {\n return Math.clz32(x);\n }\n\n /* ------------------------ Constants ------------------------ */\n\n private getAlpha(m: number): number {\n switch (m) {\n case 16:\n return 0.673;\n case 32:\n return 0.697;\n case 64:\n return 0.709;\n default:\n return 0.7213 / (1 + 1.079 / m);\n }\n }\n}\n\nexport default HyperLogLog;","/**\n * CircularQueue\n * -------------\n * Fixed-size circular FIFO queue.\n *\n * Characteristics:\n * - O(1) enqueue / dequeue\n * - Fixed capacity\n *\n * Use cases:\n * - Ring buffers\n * - Real-time systems\n */\n\nexport class CircularQueue<T> {\n private data: (T | undefined)[];\n private head = 0;\n private tail = 0;\n private length = 0;\n\n constructor(private readonly capacity: number) {\n if (!Number.isInteger(capacity) || capacity <= 0) {\n throw new Error(\"Capacity must be a positive integer\");\n }\n\n this.data = new Array<T | undefined>(capacity);\n }\n\n size(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n isFull(): boolean {\n return this.length === this.capacity;\n }\n\n enqueue(value: T): void {\n if (this.isFull()) {\n throw new Error(\"CircularQueue is full\");\n }\n\n this.data[this.tail] = value;\n this.tail = (this.tail + 1) % this.capacity;\n this.length++;\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.data[this.head];\n this.data[this.head] = undefined;\n this.head = (this.head + 1) % this.capacity;\n this.length--;\n\n return value;\n }\n\n peek(): T | undefined {\n return this.isEmpty() ? undefined : this.data[this.head];\n }\n\n clear(): void {\n this.data = new Array<T | undefined>(this.capacity);\n this.head = 0;\n this.tail = 0;\n this.length = 0;\n }\n\n toArray(): T[] {\n const result: T[] = [];\n for (let i = 0; i < this.length; i++) {\n result.push(this.data[(this.head + i) % this.capacity] as T);\n }\n return result;\n }\n\n toString(): string {\n return `CircularQueue [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * Deque\n * -----\n * Double-ended queue.\n *\n * Characteristics:\n * - O(1) add/remove from both ends\n *\n * Use cases:\n * - Sliding window problems\n * - Palindrome checking\n */\n\nexport class Deque<T> {\n private items: T[] = [];\n\n size(): number {\n return this.items.length;\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n pushFront(value: T): void {\n this.items.unshift(value);\n }\n\n pushBack(value: T): void {\n this.items.push(value);\n }\n\n popFront(): T | undefined {\n return this.items.shift();\n }\n\n popBack(): T | undefined {\n return this.items.pop();\n }\n\n peekFront(): T | undefined {\n return this.items[0];\n }\n\n peekBack(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n clear(): void {\n this.items.length = 0;\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toString(): string {\n return `Deque [${this.items.join(\", \")}]`;\n }\n}\n","/**\n * PriorityQueue (Min-Heap)\n * ------------------------\n * Elements with lower priority value are dequeued first.\n *\n * Characteristics:\n * - O(log n) enqueue / dequeue\n *\n * Use cases:\n * - Dijkstra / A*\n * - Task scheduling\n */\n\ntype PriorityNode<T> = {\n value: T;\n priority: number;\n};\n\nexport class PriorityQueue<T> {\n private heap: PriorityNode<T>[] = [];\n\n size(): number {\n return this.heap.length;\n }\n\n isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(value: T, priority: number): void {\n this.heap.push({ value, priority });\n this.bubbleUp();\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const root = this.heap[0];\n const last = this.heap.pop()!;\n\n if (!this.isEmpty()) {\n this.heap[0] = last;\n this.bubbleDown();\n }\n\n return root.value;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.value;\n }\n\n private bubbleUp(): void {\n let index = this.heap.length - 1;\n\n while (index > 0) {\n const parent = Math.floor((index - 1) / 2);\n if (this.heap[parent].priority <= this.heap[index].priority) break;\n\n [this.heap[parent], this.heap[index]] = [\n this.heap[index],\n this.heap[parent],\n ];\n\n index = parent;\n }\n }\n\n private bubbleDown(): void {\n let index = 0;\n\n while (true) {\n const left = index * 2 + 1;\n const right = index * 2 + 2;\n let smallest = index;\n\n if (\n left < this.heap.length &&\n this.heap[left].priority < this.heap[smallest].priority\n ) {\n smallest = left;\n }\n\n if (\n right < this.heap.length &&\n this.heap[right].priority < this.heap[smallest].priority\n ) {\n smallest = right;\n }\n\n if (smallest === index) break;\n\n [this.heap[index], this.heap[smallest]] = [\n this.heap[smallest],\n this.heap[index],\n ];\n\n index = smallest;\n }\n }\n\n toString(): string {\n return `PriorityQueue [${this.heap\n .map((n) => `${n.value}:${n.priority}`)\n .join(\", \")}]`;\n }\n}\n","/**\n * Queue\n * -----\n * FIFO (First In First Out) queue.\n *\n * Characteristics:\n * - O(1) enqueue / dequeue (amortized)\n * - Generic\n *\n * Use cases:\n * - Task scheduling\n * - Event processing\n * - BFS traversal\n */\n\nexport class Queue<T> {\n private items: T[] = [];\n private head = 0;\n\n size(): number {\n return this.items.length - this.head;\n }\n\n isEmpty(): boolean {\n return this.size() === 0;\n }\n\n enqueue(value: T): void {\n this.items.push(value);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.items[this.head];\n this.head++;\n\n // Compact memory occasionally\n if (this.head > 50 && this.head * 2 >= this.items.length) {\n this.items = this.items.slice(this.head);\n this.head = 0;\n }\n\n return value;\n }\n\n peek(): T | undefined {\n return this.isEmpty() ? undefined : this.items[this.head];\n }\n\n clear(): void {\n this.items = [];\n this.head = 0;\n }\n\n toArray(): T[] {\n return this.items.slice(this.head);\n }\n\n toString(): string {\n return `Queue [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * Disjoint Set Union (Union-Find)\n * ------------------------------\n * Data structure that keeps track of a partition of a set into\n * disjoint (non-overlapping) subsets.\n *\n * Optimizations:\n * - Path compression\n * - Union by rank\n *\n * Time Complexity (amortized):\n * - find: O(α(n))\n * - union: O(α(n))\n * - connected: O(α(n))\n */\n\nexport class DisjointSetUnion<T = number> {\n private parent: Map<T, T> = new Map();\n private rank: Map<T, number> = new Map();\n\n /* ------------------------ Core Operations ------------------------ */\n\n /**\n * Creates a new set containing `x` if it doesn't exist.\n */\n makeSet(x: T): void {\n if (!this.parent.has(x)) {\n this.parent.set(x, x);\n this.rank.set(x, 0);\n }\n }\n\n /**\n * Finds the representative (root) of the set containing `x`.\n * Applies path compression.\n */\n find(x: T): T {\n if (!this.parent.has(x)) {\n throw new Error(\"Element not found in DisjointSetUnion\");\n }\n\n const parent = this.parent.get(x)!;\n if (parent !== x) {\n const root = this.find(parent);\n this.parent.set(x, root);\n return root;\n }\n\n return x;\n }\n\n /**\n * Unions the sets containing `x` and `y`.\n */\n union(x: T, y: T): void {\n this.makeSet(x);\n this.makeSet(y);\n\n let rootX = this.find(x);\n let rootY = this.find(y);\n\n if (rootX === rootY) return;\n\n const rankX = this.rank.get(rootX)!;\n const rankY = this.rank.get(rootY)!;\n\n if (rankX < rankY) {\n this.parent.set(rootX, rootY);\n } else if (rankX > rankY) {\n this.parent.set(rootY, rootX);\n } else {\n this.parent.set(rootY, rootX);\n this.rank.set(rootX, rankX + 1);\n }\n }\n\n /**\n * Checks whether `x` and `y` belong to the same set.\n */\n connected(x: T, y: T): boolean {\n if (!this.parent.has(x) || !this.parent.has(y)) {\n return false;\n }\n return this.find(x) === this.find(y);\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n /**\n * Returns the number of disjoint sets.\n */\n countSets(): number {\n const roots = new Set<T>();\n for (const x of this.parent.keys()) {\n roots.add(this.find(x));\n }\n return roots.size;\n }\n\n /**\n * Returns all elements.\n */\n elements(): T[] {\n return Array.from(this.parent.keys());\n }\n\n /**\n * Clears all sets.\n */\n clear(): void {\n this.parent.clear();\n this.rank.clear();\n }\n\n /**\n * Returns total number of elements.\n */\n size(): number {\n return this.parent.size;\n }\n}\n\nexport default DisjointSetUnion;\n","/**\n * MultiSet (Bag)\n * --------------\n * A set-like data structure that allows duplicate elements\n * and tracks the count of each element.\n *\n * Characteristics:\n * - Elements can appear multiple times\n * - Count-based operations\n * - No ordering guarantees\n */\n\nexport class MultiSet<T> implements Iterable<[T, number]> {\n private store: Map<T, number>;\n\n constructor(iterable?: Iterable<T>) {\n this.store = new Map();\n if (iterable) {\n for (const value of iterable) {\n this.add(value);\n }\n }\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: T, count: number = 1): void {\n if (count <= 0) return;\n this.store.set(value, (this.store.get(value) ?? 0) + count);\n }\n\n remove(value: T, count: number = 1): boolean {\n const current = this.store.get(value);\n if (current === undefined) return false;\n\n if (count >= current) {\n this.store.delete(value);\n } else {\n this.store.set(value, current - count);\n }\n return true;\n }\n\n clear(): void {\n this.store.clear();\n }\n\n /* ------------------------ Query Operations ------------------------ */\n\n has(value: T): boolean {\n return this.store.has(value);\n }\n\n count(value: T): number {\n return this.store.get(value) ?? 0;\n }\n\n size(): number {\n let total = 0;\n for (const c of this.store.values()) {\n total += c;\n }\n return total;\n }\n\n distinctSize(): number {\n return this.store.size;\n }\n\n isEmpty(): boolean {\n return this.store.size === 0;\n }\n\n values(): T[] {\n const result: T[] = [];\n for (const [value, count] of this.store) {\n for (let i = 0; i < count; i++) {\n result.push(value);\n }\n }\n return result;\n }\n\n entries(): Array<[T, number]> {\n return Array.from(this.store.entries());\n }\n\n /* ------------------------ Multiset Operations ------------------------ */\n\n /**\n * Union: max(countA, countB)\n */\n union(other: MultiSet<T>): MultiSet<T> {\n const result = new MultiSet<T>();\n\n for (const [value, count] of this.store) {\n result.add(value, count);\n }\n\n for (const [value, count] of other.store) {\n const existing = result.count(value);\n if (count > existing) {\n result.store.set(value, count);\n }\n }\n\n return result;\n }\n\n /**\n * Intersection: min(countA, countB)\n */\n intersection(other: MultiSet<T>): MultiSet<T> {\n const result = new MultiSet<T>();\n\n for (const [value, count] of this.store) {\n const minCount = Math.min(count, other.count(value));\n if (minCount > 0) {\n result.add(value, minCount);\n }\n }\n\n return result;\n }\n\n /**\n * Difference: countA - countB (floor at 0)\n */\n difference(other: MultiSet<T>): MultiSet<T> {\n const result = new MultiSet<T>();\n\n for (const [value, count] of this.store) {\n const remaining = count - other.count(value);\n if (remaining > 0) {\n result.add(value, remaining);\n }\n }\n\n return result;\n }\n\n /* ------------------------ Iteration ------------------------ */\n\n [Symbol.iterator](): Iterator<[T, number]> {\n return this.store[Symbol.iterator]();\n }\n}\n\nexport default MultiSet;\n","/**\n * OrderedSet\n * ----------\n * A set data structure that preserves insertion order.\n *\n * Characteristics:\n * - Unique elements\n * - Deterministic iteration order\n * - Supports standard set operations\n *\n * Backed by Map to guarantee order.\n */\n\nexport class OrderedSet<T> implements Iterable<T> {\n private store: Map<T, true>;\n\n constructor(iterable?: Iterable<T>) {\n this.store = new Map();\n if (iterable) {\n for (const value of iterable) {\n this.add(value);\n }\n }\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: T): void {\n this.store.set(value, true);\n }\n\n delete(value: T): boolean {\n return this.store.delete(value);\n }\n\n has(value: T): boolean {\n return this.store.has(value);\n }\n\n clear(): void {\n this.store.clear();\n }\n\n /* ------------------------ Query Operations ------------------------ */\n\n size(): number {\n return this.store.size;\n }\n\n isEmpty(): boolean {\n return this.store.size === 0;\n }\n\n values(): T[] {\n return Array.from(this.store.keys());\n }\n\n /* ------------------------ Ordered Utilities ------------------------ */\n\n first(): T | undefined {\n return this.store.keys().next().value;\n }\n\n last(): T | undefined {\n let last: T | undefined;\n for (const key of this.store.keys()) {\n last = key;\n }\n return last;\n }\n\n /* ------------------------ Set Operations ------------------------ */\n\n union(other: OrderedSet<T>): OrderedSet<T> {\n const result = new OrderedSet<T>();\n for (const v of this) result.add(v);\n for (const v of other) result.add(v);\n return result;\n }\n\n intersection(other: OrderedSet<T>): OrderedSet<T> {\n const result = new OrderedSet<T>();\n for (const v of this) {\n if (other.has(v)) {\n result.add(v);\n }\n }\n return result;\n }\n\n difference(other: OrderedSet<T>): OrderedSet<T> {\n const result = new OrderedSet<T>();\n for (const v of this) {\n if (!other.has(v)) {\n result.add(v);\n }\n }\n return result;\n }\n\n isSubsetOf(other: OrderedSet<T>): boolean {\n for (const v of this) {\n if (!other.has(v)) {\n return false;\n }\n }\n return true;\n }\n\n isSupersetOf(other: OrderedSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n /* ------------------------ Iteration ------------------------ */\n\n [Symbol.iterator](): Iterator<T> {\n return this.store.keys();\n }\n}\n\nexport default OrderedSet;\n","/**\n * Set\n * ---\n * A generic Set data structure abstraction.\n *\n * Characteristics:\n * - Stores unique elements\n * - No ordering guarantees\n * - Supports standard set operations\n *\n * Internally backed by JavaScript's Set,\n * but exposes a clean, controlled API.\n */\n\nexport class Set<T> implements Iterable<T> {\n private store: globalThis.Set<T>;\n\n constructor(iterable?: Iterable<T>) {\n this.store = new globalThis.Set(iterable);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: T): void {\n this.store.add(value);\n }\n\n delete(value: T): boolean {\n return this.store.delete(value);\n }\n\n has(value: T): boolean {\n return this.store.has(value);\n }\n\n clear(): void {\n this.store.clear();\n }\n\n /* ------------------------ Query Operations ------------------------ */\n\n size(): number {\n return this.store.size;\n }\n\n isEmpty(): boolean {\n return this.store.size === 0;\n }\n\n values(): T[] {\n return Array.from(this.store);\n }\n\n /* ------------------------ Set Operations ------------------------ */\n\n union(other: Set<T>): Set<T> {\n const result = new Set<T>(this.store);\n for (const value of other.store) {\n result.add(value);\n }\n return result;\n }\n\n intersection(other: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const value of this.store) {\n if (other.has(value)) {\n result.add(value);\n }\n }\n return result;\n }\n\n difference(other: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const value of this.store) {\n if (!other.has(value)) {\n result.add(value);\n }\n }\n return result;\n }\n\n isSubsetOf(other: Set<T>): boolean {\n for (const value of this.store) {\n if (!other.has(value)) {\n return false;\n }\n }\n return true;\n }\n\n isSupersetOf(other: Set<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n /* ------------------------ Iteration ------------------------ */\n\n [Symbol.iterator](): Iterator<T> {\n return this.store[Symbol.iterator]();\n }\n}\n\nexport default Set;\n","/**\n * KDTree (k-dimensional tree)\n * ---------------------------\n * A space-partitioning data structure for organizing points\n * in a k-dimensional space.\n *\n * Use cases:\n * - Nearest neighbor search\n * - Range queries\n * - Spatial indexing\n *\n * Characteristics:\n * - Binary tree\n * - Splits space by alternating dimensions\n *\n * Time Complexity (average):\n * - Build: O(n log n)\n * - Insert: O(log n)\n * - Search: O(log n)\n */\n\nexport type Point = number[];\n\nclass KDNode<T = any> {\n point: Point;\n value?: T;\n axis: number;\n left: KDNode<T> | null = null;\n right: KDNode<T> | null = null;\n\n constructor(point: Point, axis: number, value?: T) {\n this.point = point;\n this.axis = axis;\n this.value = value;\n }\n}\n\nexport class KDTree<T = any> {\n private root: KDNode<T> | null = null;\n private readonly k: number;\n\n constructor(\n points?: Array<{ point: Point; value?: T }>,\n dimensions?: number\n ) {\n if (points && points.length > 0) {\n this.k = points[0].point.length;\n this.root = this.build(points, 0);\n } else if (dimensions !== undefined) {\n this.k = dimensions;\n } else {\n throw new Error(\"KDTree requires points or dimension count\");\n }\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n insert(point: Point, value?: T): void {\n if (point.length !== this.k) {\n throw new Error(\"Point dimensionality mismatch\");\n }\n this.root = this.insertNode(this.root, point, value, 0);\n }\n\n contains(point: Point): boolean {\n return !!this.findNode(this.root, point, 0);\n }\n\n /* ------------------------ Nearest Neighbor ------------------------ */\n\n nearest(target: Point): { point: Point; value?: T } | null {\n if (!this.root) return null;\n if (target.length !== this.k) {\n throw new Error(\"Point dimensionality mismatch\");\n }\n\n let bestPoint: Point | null = null;\n let bestValue: T | undefined = undefined;\n let bestDist = Infinity;\n\n const search = (node: KDNode<T> | null): void => {\n if (!node) return;\n\n const dist = this.distanceSquared(target, node.point);\n if (dist < bestDist) {\n bestDist = dist;\n bestPoint = node.point;\n bestValue = node.value;\n }\n\n const axis = node.axis;\n const diff = target[axis] - node.point[axis];\n\n const near = diff < 0 ? node.left : node.right;\n const far = diff < 0 ? node.right : node.left;\n\n search(near);\n\n if (diff * diff < bestDist) {\n search(far);\n }\n };\n\n search(this.root);\n\n return bestPoint ? { point: bestPoint, value: bestValue } : null;\n }\n\n /* ------------------------ Range Query ------------------------ */\n\n rangeSearch(min: Point, max: Point): Array<{ point: Point; value?: T }> {\n if (min.length !== this.k || max.length !== this.k) {\n throw new Error(\"Point dimensionality mismatch\");\n }\n\n const result: Array<{ point: Point; value?: T }> = [];\n\n const search = (node: KDNode<T> | null): void => {\n if (!node) return;\n\n if (this.inRange(node.point, min, max)) {\n result.push({ point: node.point, value: node.value });\n }\n\n const axis = node.axis;\n\n if (min[axis] <= node.point[axis]) {\n search(node.left);\n }\n if (max[axis] >= node.point[axis]) {\n search(node.right);\n }\n };\n\n search(this.root);\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private build(\n points: Array<{ point: Point; value?: T }>,\n depth: number\n ): KDNode<T> | null {\n if (points.length === 0) return null;\n\n const axis = depth % points[0].point.length;\n points.sort((a, b) => a.point[axis] - b.point[axis]);\n\n const median = Math.floor(points.length / 2);\n const node = new KDNode(points[median].point, axis, points[median].value);\n\n node.left = this.build(points.slice(0, median), depth + 1);\n node.right = this.build(points.slice(median + 1), depth + 1);\n\n return node;\n }\n\n private insertNode(\n node: KDNode<T> | null,\n point: Point,\n value: T | undefined,\n depth: number\n ): KDNode<T> {\n if (!node) {\n return new KDNode(point, depth % this.k, value);\n }\n\n const axis = node.axis;\n if (point[axis] < node.point[axis]) {\n node.left = this.insertNode(node.left, point, value, depth + 1);\n } else {\n node.right = this.insertNode(node.right, point, value, depth + 1);\n }\n\n return node;\n }\n\n private findNode(\n node: KDNode<T> | null,\n point: Point,\n depth: number\n ): KDNode<T> | null {\n if (!node) return null;\n\n if (this.pointsEqual(node.point, point)) {\n return node;\n }\n\n const axis = node.axis;\n if (point[axis] < node.point[axis]) {\n return this.findNode(node.left, point, depth + 1);\n }\n return this.findNode(node.right, point, depth + 1);\n }\n\n private distanceSquared(a: Point, b: Point): number {\n let sum = 0;\n for (let i = 0; i < this.k; i++) {\n const d = a[i] - b[i];\n sum += d * d;\n }\n return sum;\n }\n\n private inRange(point: Point, min: Point, max: Point): boolean {\n for (let i = 0; i < this.k; i++) {\n if (point[i] < min[i] || point[i] > max[i]) {\n return false;\n }\n }\n return true;\n }\n\n private pointsEqual(a: Point, b: Point): boolean {\n for (let i = 0; i < this.k; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n}\n\nexport default KDTree;\n","/**\n * QuadTree\n * --------\n * A 2D spatial partitioning data structure that recursively subdivides\n * space into four quadrants.\n */\n\nexport type Point2D = { x: number; y: number };\n\nexport type Rect = {\n x: number; // center x\n y: number; // center y\n w: number; // half width\n h: number; // half height\n};\n\nclass QuadNode<T = any> {\n boundary: Rect;\n capacity: number;\n points: Array<{ point: Point2D; value?: T }> = [];\n divided = false;\n\n northeast: QuadNode<T> | null = null;\n northwest: QuadNode<T> | null = null;\n southeast: QuadNode<T> | null = null;\n southwest: QuadNode<T> | null = null;\n\n constructor(boundary: Rect, capacity: number) {\n this.boundary = boundary;\n this.capacity = capacity;\n }\n\n /* ------------------------ Node Operations ------------------------ */\n\n insert(point: Point2D, value?: T): boolean {\n if (!containsPoint(this.boundary, point)) {\n return false;\n }\n\n if (this.points.length < this.capacity && !this.divided) {\n this.points.push({ point, value });\n return true;\n }\n\n if (!this.divided) {\n this.subdivide();\n }\n\n return (\n this.northeast!.insert(point, value) ||\n this.northwest!.insert(point, value) ||\n this.southeast!.insert(point, value) ||\n this.southwest!.insert(point, value)\n );\n }\n\n contains(point: Point2D): boolean {\n if (!containsPoint(this.boundary, point)) {\n return false;\n }\n\n for (const p of this.points) {\n if (p.point.x === point.x && p.point.y === point.y) {\n return true;\n }\n }\n\n if (!this.divided) return false;\n\n return (\n this.northeast!.contains(point) ||\n this.northwest!.contains(point) ||\n this.southeast!.contains(point) ||\n this.southwest!.contains(point)\n );\n }\n\n query(range: Rect, found: Array<{ point: Point2D; value?: T }>): void {\n if (!intersects(this.boundary, range)) {\n return;\n }\n\n for (const p of this.points) {\n if (containsPoint(range, p.point)) {\n found.push(p);\n }\n }\n\n if (!this.divided) return;\n\n this.northeast!.query(range, found);\n this.northwest!.query(range, found);\n this.southeast!.query(range, found);\n this.southwest!.query(range, found);\n }\n\n /* ------------------------ Subdivision ------------------------ */\n\n private subdivide(): void {\n const { x, y, w, h } = this.boundary;\n const hw = w / 2;\n const hh = h / 2;\n\n this.northeast = new QuadNode(\n { x: x + hw, y: y - hh, w: hw, h: hh },\n this.capacity\n );\n this.northwest = new QuadNode(\n { x: x - hw, y: y - hh, w: hw, h: hh },\n this.capacity\n );\n this.southeast = new QuadNode(\n { x: x + hw, y: y + hh, w: hw, h: hh },\n this.capacity\n );\n this.southwest = new QuadNode(\n { x: x - hw, y: y + hh, w: hw, h: hh },\n this.capacity\n );\n\n this.divided = true;\n }\n}\n\n/* ------------------------ QuadTree ------------------------ */\n\nexport class QuadTree<T = any> {\n private root: QuadNode<T>;\n\n constructor(boundary: Rect, capacity: number = 4) {\n if (capacity <= 0) {\n throw new Error(\"QuadTree capacity must be greater than 0\");\n }\n this.root = new QuadNode(boundary, capacity);\n }\n\n insert(point: Point2D, value?: T): boolean {\n return this.root.insert(point, value);\n }\n\n contains(point: Point2D): boolean {\n return this.root.contains(point);\n }\n\n query(range: Rect): Array<{ point: Point2D; value?: T }> {\n const result: Array<{ point: Point2D; value?: T }> = [];\n this.root.query(range, result);\n return result;\n }\n\n clear(): void {\n this.root = new QuadNode(this.root.boundary, this.root.capacity);\n }\n}\n\n/* ------------------------ Geometry Helpers ------------------------ */\n\nfunction containsPoint(rect: Rect, point: Point2D): boolean {\n return (\n point.x >= rect.x - rect.w &&\n point.x <= rect.x + rect.w &&\n point.y >= rect.y - rect.h &&\n point.y <= rect.y + rect.h\n );\n}\n\nfunction intersects(a: Rect, b: Rect): boolean {\n return !(\n b.x - b.w > a.x + a.w ||\n b.x + b.w < a.x - a.w ||\n b.y - b.h > a.y + a.h ||\n b.y + b.h < a.y - a.h\n );\n}\n\nexport default QuadTree;","/**\n * MaxStack\n * --------\n * Stack with constant-time maximum lookup.\n *\n * Characteristics:\n * - O(1) push / pop / getMax\n * - Uses auxiliary stack\n *\n * Use cases:\n * - Sliding window problems\n * - Game stat tracking\n */\n\nexport class MaxStack<T> {\n private stack: T[] = [];\n private maxStack: T[] = [];\n\n size(): number {\n return this.stack.length;\n }\n\n isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n push(value: T): void {\n this.stack.push(value);\n\n if (\n this.maxStack.length === 0 ||\n value >= this.maxStack[this.maxStack.length - 1]\n ) {\n this.maxStack.push(value);\n }\n }\n\n pop(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.stack.pop() as T;\n\n if (value === this.maxStack[this.maxStack.length - 1]) {\n this.maxStack.pop();\n }\n\n return value;\n }\n\n peek(): T | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getMax(): T | undefined {\n return this.maxStack[this.maxStack.length - 1];\n }\n\n clear(): void {\n this.stack.length = 0;\n this.maxStack.length = 0;\n }\n\n toArray(): T[] {\n return [...this.stack];\n }\n\n toString(): string {\n return `MaxStack [${this.stack.join(\", \")}]`;\n }\n}\n","/**\n * MinStack\n * --------\n * Stack with constant-time minimum lookup.\n *\n * Characteristics:\n * - O(1) push / pop / getMin\n * - Uses auxiliary stack\n *\n * Use cases:\n * - Range queries\n * - Algorithm optimization\n */\n\nexport class MinStack<T> {\n private stack: T[] = [];\n private minStack: T[] = [];\n\n size(): number {\n return this.stack.length;\n }\n\n isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n push(value: T): void {\n this.stack.push(value);\n\n if (\n this.minStack.length === 0 ||\n value <= this.minStack[this.minStack.length - 1]\n ) {\n this.minStack.push(value);\n }\n }\n\n pop(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.stack.pop() as T;\n\n if (value === this.minStack[this.minStack.length - 1]) {\n this.minStack.pop();\n }\n\n return value;\n }\n\n peek(): T | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getMin(): T | undefined {\n return this.minStack[this.minStack.length - 1];\n }\n\n clear(): void {\n this.stack.length = 0;\n this.minStack.length = 0;\n }\n\n toArray(): T[] {\n return [...this.stack];\n }\n\n toString(): string {\n return `MinStack [${this.stack.join(\", \")}]`;\n }\n}\n","/**\n * Stack\n * -----\n * LIFO (Last In First Out) stack implementation.\n *\n * Characteristics:\n * - O(1) push / pop / peek\n * - Generic\n * - Iterable (top → bottom)\n *\n * Use cases:\n * - Function calls\n * - Undo/redo systems\n * - Expression evaluation\n */\n\nexport class Stack<T> implements Iterable<T> {\n protected items: T[] = [];\n\n size(): number {\n return this.items.length;\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n push(value: T): void {\n this.items.push(value);\n }\n\n pop(): T | undefined {\n return this.items.pop();\n }\n\n peek(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n clear(): void {\n this.items.length = 0;\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n for (let i = this.items.length - 1; i >= 0; i--) {\n yield this.items[i];\n }\n }\n\n toString(): string {\n return `Stack [${this.items.join(\", \")}]`;\n }\n}\n","/**\n * SuffixArray\n * -----------\n * Data structure that stores the sorted order of all suffixes of a string.\n *\n * Use cases:\n * - Fast substring search\n * - Pattern matching\n * - Longest repeated substring\n * - Longest common prefix (with LCP)\n *\n * Construction:\n * - O(n log n) using prefix-doubling\n */\n\nexport class SuffixArray {\n private readonly text: string;\n private readonly suffixArray: number[];\n\n constructor(text: string) {\n this.text = text;\n this.suffixArray = this.buildSuffixArray(text);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Returns the suffix array (indices of sorted suffixes)\n */\n getArray(): number[] {\n return [...this.suffixArray];\n }\n\n /**\n * Returns the original string\n */\n getText(): string {\n return this.text;\n }\n\n /**\n * Returns the suffix at a given position in the suffix array\n */\n getSuffix(i: number): string {\n if (i < 0 || i >= this.suffixArray.length) {\n throw new RangeError(\"Index out of bounds\");\n }\n return this.text.slice(this.suffixArray[i]);\n }\n\n /**\n * Number of suffixes\n */\n size(): number {\n return this.suffixArray.length;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private buildSuffixArray(s: string): number[] {\n const n = s.length;\n if (n === 0) return [];\n\n let sa = new Array<number>(n);\n let rank = new Array<number>(n);\n let temp = new Array<number>(n);\n\n // initial ranking by characters\n for (let i = 0; i < n; i++) {\n sa[i] = i;\n rank[i] = s.charCodeAt(i);\n }\n\n for (let k = 1; k < n; k <<= 1) {\n sa.sort((a, b) => {\n if (rank[a] !== rank[b]) {\n return rank[a] - rank[b];\n }\n const ra = a + k < n ? rank[a + k] : -1;\n const rb = b + k < n ? rank[b + k] : -1;\n return ra - rb;\n });\n\n temp[sa[0]] = 0;\n for (let i = 1; i < n; i++) {\n const prev = sa[i - 1];\n const curr = sa[i];\n\n const same =\n rank[prev] === rank[curr] &&\n (prev + k < n ? rank[prev + k] : -1) ===\n (curr + k < n ? rank[curr + k] : -1);\n\n temp[curr] = same ? temp[prev] : temp[prev] + 1;\n }\n\n for (let i = 0; i < n; i++) {\n rank[i] = temp[i];\n }\n\n // optimization: all ranks are unique\n if (rank[sa[n - 1]] === n - 1) break;\n }\n\n return sa;\n }\n}\n\nexport default SuffixArray;","/**\n * SuffixTree\n * ----------\n * A compressed trie of all suffixes of a string.\n *\n * Implementation:\n * - Ukkonen's algorithm (online, O(n))\n * - Uses implicit end index for leaf edges\n *\n * Use cases:\n * - Fast substring queries\n * - Longest repeated substring\n * - Pattern matching\n */\n\nclass End {\n value: number;\n constructor(value: number) {\n this.value = value;\n }\n}\n\nclass SuffixTreeNode {\n children: Map<string, SuffixTreeNode> = new Map();\n start: number;\n end: End;\n suffixLink: SuffixTreeNode | null = null;\n\n constructor(start: number, end: End) {\n this.start = start;\n this.end = end;\n }\n\n edgeLength(currentEnd: number): number {\n return Math.min(this.end.value, currentEnd + 1) - this.start;\n }\n}\n\nexport class SuffixTree {\n private readonly text: string;\n private readonly root: SuffixTreeNode;\n\n private activeNode: SuffixTreeNode;\n private activeEdge = -1;\n private activeLength = 0;\n\n private remainingSuffixCount = 0;\n private readonly leafEnd: End = new End(-1);\n\n constructor(text: string) {\n this.text = text;\n this.root = new SuffixTreeNode(-1, new End(-1));\n this.activeNode = this.root;\n\n this.build();\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Checks if a pattern exists in the text.\n * (Traversal only; no extra algorithms.)\n */\n contains(pattern: string): boolean {\n if (pattern.length === 0) return true;\n\n let node = this.root;\n let i = 0;\n\n while (i < pattern.length) {\n const edge = node.children.get(pattern[i]);\n if (!edge) return false;\n\n let k = edge.start;\n const end = Math.min(edge.end.value, this.text.length - 1);\n\n // walk along edge\n while (k <= end && i < pattern.length) {\n if (this.text[k] !== pattern[i]) return false;\n k++;\n i++;\n }\n\n // pattern finished (possibly mid-edge) → success\n if (i === pattern.length) {\n return true;\n }\n\n // edge fully consumed → move to child node\n node = edge;\n }\n\n return true;\n }\n\n /**\n * Returns the original text\n */\n getText(): string {\n return this.text;\n }\n\n /* ------------------------ Construction ------------------------ */\n\n private build(): void {\n for (let i = 0; i < this.text.length; i++) {\n this.extend(i);\n }\n }\n\n private extend(pos: number): void {\n this.leafEnd.value = pos;\n this.remainingSuffixCount++;\n\n let lastNewNode: SuffixTreeNode | null = null;\n\n while (this.remainingSuffixCount > 0) {\n if (this.activeLength === 0) {\n this.activeEdge = pos;\n }\n\n const edgeChar = this.text[this.activeEdge];\n let next = this.activeNode.children.get(edgeChar);\n\n if (!next) {\n // Rule 2 (new leaf)\n const leaf = new SuffixTreeNode(pos, this.leafEnd);\n this.activeNode.children.set(edgeChar, leaf);\n\n if (lastNewNode) {\n lastNewNode.suffixLink = this.activeNode;\n lastNewNode = null;\n }\n } else {\n if (this.walkDown(next, pos)) continue;\n\n if (this.text[next.start + this.activeLength] === this.text[pos]) {\n // Rule 3 (already exists)\n if (lastNewNode && this.activeNode !== this.root) {\n lastNewNode.suffixLink = this.activeNode;\n lastNewNode = null;\n }\n this.activeLength++;\n break;\n }\n\n // Rule 2 (split)\n const splitEnd = new End(next.start + this.activeLength);\n const split = new SuffixTreeNode(next.start, splitEnd);\n\n this.activeNode.children.set(edgeChar, split);\n\n const leaf = new SuffixTreeNode(pos, this.leafEnd);\n split.children.set(this.text[pos], leaf);\n\n next.start += this.activeLength;\n split.children.set(this.text[next.start], next);\n\n if (lastNewNode) {\n lastNewNode.suffixLink = split;\n }\n\n lastNewNode = split;\n }\n\n this.remainingSuffixCount--;\n\n if (this.activeNode === this.root && this.activeLength > 0) {\n this.activeLength--;\n this.activeEdge = pos - this.remainingSuffixCount + 1;\n } else if (this.activeNode !== this.root) {\n this.activeNode = this.activeNode.suffixLink ?? this.root;\n }\n }\n }\n\n private walkDown(node: SuffixTreeNode, pos: number): boolean {\n const length = node.edgeLength(pos);\n if (this.activeLength >= length) {\n this.activeEdge += length;\n this.activeLength -= length;\n this.activeNode = node;\n return true;\n }\n return false;\n }\n}\n\nexport default SuffixTree;\n","/**\n * SparseTable\n * -----------\n * Data structure for answering range queries on static arrays.\n *\n * Supports:\n * - Range Min Query (RMQ)\n * - Range Max Query\n * - Any idempotent operation\n *\n * Constraints:\n * - Array is immutable\n * - Operation must be associative\n * - Operation should be idempotent for O(1) queries\n *\n * Time Complexity:\n * - Build: O(n log n)\n * - Query: O(1)\n */\n\nexport class SparseTable<T> {\n private readonly n: number;\n private readonly log: number[];\n private readonly table: T[][];\n private readonly combine: (a: T, b: T) => T;\n\n constructor(arr: T[], combine: (a: T, b: T) => T) {\n if (arr.length === 0) {\n throw new Error(\"SparseTable requires a non-empty array\");\n }\n\n this.n = arr.length;\n this.combine = combine;\n\n // Precompute logs\n this.log = new Array(this.n + 1).fill(0);\n for (let i = 2; i <= this.n; i++) {\n this.log[i] = this.log[Math.floor(i / 2)] + 1;\n }\n\n const maxK = this.log[this.n];\n this.table = Array.from({ length: maxK + 1 }, () =>\n new Array<T>(this.n)\n );\n\n // Base level (k = 0)\n for (let i = 0; i < this.n; i++) {\n this.table[0][i] = arr[i];\n }\n\n // Build higher levels\n for (let k = 1; k <= maxK; k++) {\n const len = 1 << k;\n for (let i = 0; i + len <= this.n; i++) {\n this.table[k][i] = this.combine(\n this.table[k - 1][i],\n this.table[k - 1][i + (len >> 1)]\n );\n }\n }\n }\n\n /* ------------------------ Query ------------------------ */\n\n /**\n * Queries range [l, r] inclusive\n */\n query(l: number, r: number): T {\n if (l < 0 || r >= this.n || l > r) {\n throw new Error(\"Invalid query range\");\n }\n\n const length = r - l + 1;\n const k = this.log[length];\n\n return this.combine(\n this.table[k][l],\n this.table[k][r - (1 << k) + 1]\n );\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n size(): number {\n return this.n;\n }\n}\n\nexport default SparseTable;","/**\n * AVLTree\n * -------\n * Self-balancing Binary Search Tree (AVL).\n *\n * Properties:\n * - Balance factor = height(left) - height(right)\n * - Balance factor ∈ {-1, 0, 1}\n *\n * Guarantees:\n * - O(log n) insert, delete, search\n */\n\nclass AVLNode<T> {\n value: T;\n left: AVLNode<T> | null = null;\n right: AVLNode<T> | null = null;\n height: number = 0;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class AVLTree<T> {\n private root: AVLNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n this.root = this.insertNode(this.root, value);\n }\n\n remove(value: T): void {\n this.root = this.removeNode(this.root, value);\n }\n\n contains(value: T): boolean {\n return this.search(this.root, value);\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n preorder(): T[] {\n const result: T[] = [];\n this.preorderTraverse(this.root, result);\n return result;\n }\n\n postorder(): T[] {\n const result: T[] = [];\n this.postorderTraverse(this.root, result);\n return result;\n }\n\n height(): number {\n return this.nodeHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private insertNode(node: AVLNode<T> | null, value: T): AVLNode<T> {\n if (!node) return new AVLNode(value);\n\n const cmp = this.compare(value, node.value);\n if (cmp < 0) node.left = this.insertNode(node.left, value);\n else if (cmp > 0) node.right = this.insertNode(node.right, value);\n else return node; // ignore duplicates\n\n this.updateHeight(node);\n return this.rebalance(node);\n }\n\n private removeNode(node: AVLNode<T> | null, value: T): AVLNode<T> | null {\n if (!node) return null;\n\n const cmp = this.compare(value, node.value);\n\n if (cmp < 0) {\n node.left = this.removeNode(node.left, value);\n } else if (cmp > 0) {\n node.right = this.removeNode(node.right, value);\n } else {\n // node found\n if (!node.left || !node.right) {\n return node.left ?? node.right;\n }\n\n const successor = this.findMin(node.right);\n node.value = successor.value;\n node.right = this.removeNode(node.right, successor.value);\n }\n\n this.updateHeight(node);\n return this.rebalance(node);\n }\n\n private search(node: AVLNode<T> | null, value: T): boolean {\n if (!node) return false;\n const cmp = this.compare(value, node.value);\n if (cmp === 0) return true;\n if (cmp < 0) return this.search(node.left, value);\n return this.search(node.right, value);\n }\n\n /* ------------------------ Rotations ------------------------ */\n\n private rotateRight(y: AVLNode<T>): AVLNode<T> {\n const x = y.left!;\n const t2 = x.right;\n\n x.right = y;\n y.left = t2;\n\n this.updateHeight(y);\n this.updateHeight(x);\n\n return x;\n }\n\n private rotateLeft(x: AVLNode<T>): AVLNode<T> {\n const y = x.right!;\n const t2 = y.left;\n\n y.left = x;\n x.right = t2;\n\n this.updateHeight(x);\n this.updateHeight(y);\n\n return y;\n }\n\n private rebalance(node: AVLNode<T>): AVLNode<T> {\n const balance = this.getBalance(node);\n\n // Left Heavy\n if (balance > 1) {\n if (this.getBalance(node.left!) < 0) {\n node.left = this.rotateLeft(node.left!); // LR\n }\n return this.rotateRight(node); // LL\n }\n\n // Right Heavy\n if (balance < -1) {\n if (this.getBalance(node.right!) > 0) {\n node.right = this.rotateRight(node.right!); // RL\n }\n return this.rotateLeft(node); // RR\n }\n\n return node;\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private nodeHeight(node: AVLNode<T> | null): number {\n return node ? node.height : -1;\n }\n\n private updateHeight(node: AVLNode<T>): void {\n node.height =\n 1 + Math.max(this.nodeHeight(node.left), this.nodeHeight(node.right));\n }\n\n private getBalance(node: AVLNode<T>): number {\n return this.nodeHeight(node.left) - this.nodeHeight(node.right);\n }\n\n private findMin(node: AVLNode<T>): AVLNode<T> {\n while (node.left) node = node.left;\n return node;\n }\n\n private inorderTraverse(node: AVLNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private preorderTraverse(node: AVLNode<T> | null, result: T[]): void {\n if (!node) return;\n result.push(node.value);\n this.preorderTraverse(node.left, result);\n this.preorderTraverse(node.right, result);\n }\n\n private postorderTraverse(node: AVLNode<T> | null, result: T[]): void {\n if (!node) return;\n this.postorderTraverse(node.left, result);\n this.postorderTraverse(node.right, result);\n result.push(node.value);\n }\n}\n\nexport default AVLTree;\n","/**\n * RedBlackTree\n * ------------\n * Self-balancing Binary Search Tree using red-black properties.\n *\n * Properties:\n * 1. Every node is either red or black\n * 2. Root is always black\n * 3. Red nodes cannot have red children\n * 4. Every path from a node to its null leaves\n * has the same number of black nodes\n *\n * Guarantees:\n * - O(log n) insert, delete, search\n */\n\nenum Color {\n RED,\n BLACK,\n}\n\nclass RBNode<T> {\n value: T;\n color: Color = Color.RED;\n left: RBNode<T> | null = null;\n right: RBNode<T> | null = null;\n parent: RBNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class RedBlackTree<T> {\n private root: RBNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n const node = new RBNode(value);\n this.root = this.bstInsert(this.root, node);\n this.fixInsert(node);\n }\n\n remove(value: T): void {\n const node = this.findNode(this.root, value);\n if (!node) return;\n this.deleteNode(node);\n }\n\n contains(value: T): boolean {\n return !!this.findNode(this.root, value);\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ BST Insert ------------------------ */\n\n private bstInsert(root: RBNode<T> | null, node: RBNode<T>): RBNode<T> {\n if (!root) return node;\n\n const cmp = this.compare(node.value, root.value);\n if (cmp < 0) {\n root.left = this.bstInsert(root.left, node);\n root.left!.parent = root;\n } else if (cmp > 0) {\n root.right = this.bstInsert(root.right, node);\n root.right!.parent = root;\n }\n // ignore duplicates\n return root;\n }\n\n /* ------------------------ Insert Fix ------------------------ */\n\n private fixInsert(node: RBNode<T>): void {\n while (node.parent && node.parent.color === Color.RED) {\n const parent = node.parent;\n const grandparent = parent.parent!;\n if (parent === grandparent.left) {\n const uncle = grandparent.right;\n if (uncle && uncle.color === Color.RED) {\n // Case 1: recolor\n parent.color = Color.BLACK;\n uncle.color = Color.BLACK;\n grandparent.color = Color.RED;\n node = grandparent;\n } else {\n if (node === parent.right) {\n // Case 2: rotate left\n node = parent;\n this.rotateLeft(node);\n }\n // Case 3: rotate right\n parent.color = Color.BLACK;\n grandparent.color = Color.RED;\n this.rotateRight(grandparent);\n }\n } else {\n const uncle = grandparent.left;\n if (uncle && uncle.color === Color.RED) {\n parent.color = Color.BLACK;\n uncle.color = Color.BLACK;\n grandparent.color = Color.RED;\n node = grandparent;\n } else {\n if (node === parent.left) {\n node = parent;\n this.rotateRight(node);\n }\n parent.color = Color.BLACK;\n grandparent.color = Color.RED;\n this.rotateLeft(grandparent);\n }\n }\n }\n this.root!.color = Color.BLACK;\n }\n\n /* ------------------------ Deletion ------------------------ */\n\n private deleteNode(node: RBNode<T>): void {\n let y = node;\n let yOriginalColor = y.color;\n let x: RBNode<T> | null;\n\n if (!node.left) {\n x = node.right;\n this.transplant(node, node.right);\n } else if (!node.right) {\n x = node.left;\n this.transplant(node, node.left);\n } else {\n y = this.minimum(node.right);\n yOriginalColor = y.color;\n x = y.right;\n\n if (y.parent === node) {\n if (x) x.parent = y;\n } else {\n this.transplant(y, y.right);\n y.right = node.right;\n y.right!.parent = y;\n }\n\n this.transplant(node, y);\n y.left = node.left;\n y.left!.parent = y;\n y.color = node.color;\n }\n\n if (yOriginalColor === Color.BLACK) {\n this.fixDelete(x, node.parent);\n }\n }\n\n private fixDelete(node: RBNode<T> | null, parent: RBNode<T> | null): void {\n while (node !== this.root && (!node || node.color === Color.BLACK)) {\n if (node === parent?.left) {\n let sibling = parent.right;\n if (sibling?.color === Color.RED) {\n sibling.color = Color.BLACK;\n parent.color = Color.RED;\n this.rotateLeft(parent);\n sibling = parent.right;\n }\n if (\n (!sibling?.left || sibling.left.color === Color.BLACK) &&\n (!sibling?.right || sibling.right.color === Color.BLACK)\n ) {\n sibling!.color = Color.RED;\n node = parent;\n parent = node.parent;\n } else {\n if (!sibling?.right || sibling.right.color === Color.BLACK) {\n if (sibling?.left) sibling.left.color = Color.BLACK;\n sibling!.color = Color.RED;\n this.rotateRight(sibling!);\n sibling = parent.right;\n }\n sibling!.color = parent.color;\n parent.color = Color.BLACK;\n if (sibling?.right) sibling.right.color = Color.BLACK;\n this.rotateLeft(parent);\n node = this.root;\n }\n } else {\n let sibling = parent?.left;\n if (sibling?.color === Color.RED) {\n sibling.color = Color.BLACK;\n parent!.color = Color.RED;\n this.rotateRight(parent!);\n sibling = parent!.left;\n }\n if (\n (!sibling?.left || sibling.left.color === Color.BLACK) &&\n (!sibling?.right || sibling.right.color === Color.BLACK)\n ) {\n sibling!.color = Color.RED;\n node = parent!;\n parent = node.parent;\n } else {\n if (!sibling?.left || sibling.left.color === Color.BLACK) {\n if (sibling?.right) sibling.right.color = Color.BLACK;\n sibling!.color = Color.RED;\n this.rotateLeft(sibling!);\n sibling = parent!.left;\n }\n sibling!.color = parent!.color;\n parent!.color = Color.BLACK;\n if (sibling?.left) sibling.left.color = Color.BLACK;\n this.rotateRight(parent!);\n node = this.root;\n }\n }\n }\n if (node) node.color = Color.BLACK;\n }\n\n /* ------------------------ Rotations ------------------------ */\n\n private rotateLeft(x: RBNode<T>): void {\n const y = x.right!;\n x.right = y.left;\n if (y.left) y.left.parent = x;\n\n y.parent = x.parent;\n if (!x.parent) this.root = y;\n else if (x === x.parent.left) x.parent.left = y;\n else x.parent.right = y;\n\n y.left = x;\n x.parent = y;\n }\n\n private rotateRight(y: RBNode<T>): void {\n const x = y.left!;\n y.left = x.right;\n if (x.right) x.right.parent = y;\n\n x.parent = y.parent;\n if (!y.parent) this.root = x;\n else if (y === y.parent.left) y.parent.left = x;\n else y.parent.right = x;\n\n x.right = y;\n y.parent = x;\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private transplant(u: RBNode<T>, v: RBNode<T> | null): void {\n if (!u.parent) this.root = v;\n else if (u === u.parent.left) u.parent.left = v;\n else u.parent.right = v;\n if (v) v.parent = u.parent;\n }\n\n private minimum(node: RBNode<T>): RBNode<T> {\n while (node.left) node = node.left;\n return node;\n }\n\n private findNode(node: RBNode<T> | null, value: T): RBNode<T> | null {\n if (!node) return null;\n const cmp = this.compare(value, node.value);\n if (cmp === 0) return node;\n if (cmp < 0) return this.findNode(node.left, value);\n return this.findNode(node.right, value);\n }\n\n private inorderTraverse(node: RBNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private calculateHeight(node: RBNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default RedBlackTree;\n","/**\n * SplayTree\n * ---------\n * Self-adjusting Binary Search Tree.\n *\n * Properties:\n * - Recently accessed elements are moved to the root\n * - Amortized O(log n) for insert, search, delete\n *\n * Splaying operations:\n * - Zig\n * - Zig-Zig\n * - Zig-Zag\n */\n\nclass SplayNode<T> {\n value: T;\n left: SplayNode<T> | null = null;\n right: SplayNode<T> | null = null;\n parent: SplayNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class SplayTree<T> {\n private root: SplayNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n if (!this.root) {\n this.root = new SplayNode(value);\n return;\n }\n\n let current: SplayNode<T> | null = this.root;\n let parent: SplayNode<T> | null = null;\n\n while (current) {\n parent = current;\n const cmp = this.compare(value, current.value);\n if (cmp < 0) current = current.left;\n else if (cmp > 0) current = current.right;\n else {\n // Duplicate → splay existing node\n this.splay(current);\n return;\n }\n }\n\n const node = new SplayNode(value);\n node.parent = parent;\n\n if (this.compare(value, parent!.value) < 0) parent!.left = node;\n else parent!.right = node;\n\n this.splay(node);\n }\n\n contains(value: T): boolean {\n const node = this.findNode(value);\n if (node) {\n this.splay(node);\n return true;\n }\n return false;\n }\n\n remove(value: T): void {\n const node = this.findNode(value);\n if (!node) return;\n\n this.splay(node);\n\n if (!node.left) {\n this.replaceRoot(node.right);\n } else if (!node.right) {\n this.replaceRoot(node.left);\n } else {\n const maxLeft = this.subtreeMax(node.left);\n this.splay(maxLeft);\n\n maxLeft.right = node.right;\n if (node.right) node.right.parent = maxLeft;\n\n this.root = maxLeft;\n maxLeft.parent = null;\n }\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Splaying ------------------------ */\n\n private splay(node: SplayNode<T>): void {\n while (node.parent) {\n const parent = node.parent;\n const grandparent = parent.parent;\n\n // Zig\n if (!grandparent) {\n if (node === parent.left) this.rotateRight(parent);\n else this.rotateLeft(parent);\n }\n // Zig-Zig\n else if (node === parent.left && parent === grandparent.left) {\n this.rotateRight(grandparent);\n this.rotateRight(parent);\n } else if (node === parent.right && parent === grandparent.right) {\n this.rotateLeft(grandparent);\n this.rotateLeft(parent);\n }\n // Zig-Zag\n else if (node === parent.right && parent === grandparent.left) {\n this.rotateLeft(parent);\n this.rotateRight(grandparent);\n } else {\n this.rotateRight(parent);\n this.rotateLeft(grandparent);\n }\n }\n\n this.root = node;\n }\n\n /* ------------------------ Rotations ------------------------ */\n\n private rotateLeft(x: SplayNode<T>): void {\n const y = x.right!;\n x.right = y.left;\n if (y.left) y.left.parent = x;\n\n y.parent = x.parent;\n if (!x.parent) this.root = y;\n else if (x === x.parent.left) x.parent.left = y;\n else x.parent.right = y;\n\n y.left = x;\n x.parent = y;\n }\n\n private rotateRight(y: SplayNode<T>): void {\n const x = y.left!;\n y.left = x.right;\n if (x.right) x.right.parent = y;\n\n x.parent = y.parent;\n if (!y.parent) this.root = x;\n else if (y === y.parent.left) y.parent.left = x;\n else y.parent.right = x;\n\n x.right = y;\n y.parent = x;\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private findNode(value: T): SplayNode<T> | null {\n let current = this.root;\n while (current) {\n const cmp = this.compare(value, current.value);\n if (cmp === 0) return current;\n current = cmp < 0 ? current.left : current.right;\n }\n return null;\n }\n\n private replaceRoot(node: SplayNode<T> | null): void {\n this.root = node;\n if (node) node.parent = null;\n }\n\n private subtreeMax(node: SplayNode<T>): SplayNode<T> {\n while (node.right) node = node.right;\n return node;\n }\n\n private inorderTraverse(node: SplayNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private calculateHeight(node: SplayNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default SplayTree;\n","/**\n * BinarySearchTree\n * ----------------\n * A classic Binary Search Tree (BST) implementation.\n *\n * Properties:\n * - Left subtree values < node value\n * - Right subtree values > node value\n * - No duplicate values (by default)\n *\n * Time Complexity:\n * - Average: O(log n)\n * - Worst: O(n) (skewed tree)\n */\n\nclass BSTNode<T> {\n value: T;\n left: BSTNode<T> | null = null;\n right: BSTNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class BinarySearchTree<T> {\n private root: BSTNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n // Default comparator works for number & string\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n this.root = this.insertNode(this.root, value);\n }\n\n contains(value: T): boolean {\n return this.search(this.root, value);\n }\n\n remove(value: T): void {\n this.root = this.removeNode(this.root, value);\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n preorder(): T[] {\n const result: T[] = [];\n this.preorderTraverse(this.root, result);\n return result;\n }\n\n postorder(): T[] {\n const result: T[] = [];\n this.postorderTraverse(this.root, result);\n return result;\n }\n\n min(): T | undefined {\n if (!this.root) return undefined;\n return this.findMin(this.root).value;\n }\n\n max(): T | undefined {\n if (!this.root) return undefined;\n return this.findMax(this.root).value;\n }\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private insertNode(node: BSTNode<T> | null, value: T): BSTNode<T> {\n if (!node) return new BSTNode(value);\n\n const cmp = this.compare(value, node.value);\n if (cmp < 0) {\n node.left = this.insertNode(node.left, value);\n } else if (cmp > 0) {\n node.right = this.insertNode(node.right, value);\n }\n // duplicates ignored\n return node;\n }\n\n private search(node: BSTNode<T> | null, value: T): boolean {\n if (!node) return false;\n\n const cmp = this.compare(value, node.value);\n if (cmp === 0) return true;\n if (cmp < 0) return this.search(node.left, value);\n return this.search(node.right, value);\n }\n\n private removeNode(node: BSTNode<T> | null, value: T): BSTNode<T> | null {\n if (!node) return null;\n\n const cmp = this.compare(value, node.value);\n\n if (cmp < 0) {\n node.left = this.removeNode(node.left, value);\n } else if (cmp > 0) {\n node.right = this.removeNode(node.right, value);\n } else {\n // Case 1: no child\n if (!node.left && !node.right) return null;\n\n // Case 2: one child\n if (!node.left) return node.right;\n if (!node.right) return node.left;\n\n // Case 3: two children\n const successor = this.findMin(node.right);\n node.value = successor.value;\n node.right = this.removeNode(node.right, successor.value);\n }\n\n return node;\n }\n\n private inorderTraverse(node: BSTNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private preorderTraverse(node: BSTNode<T> | null, result: T[]): void {\n if (!node) return;\n result.push(node.value);\n this.preorderTraverse(node.left, result);\n this.preorderTraverse(node.right, result);\n }\n\n private postorderTraverse(node: BSTNode<T> | null, result: T[]): void {\n if (!node) return;\n this.postorderTraverse(node.left, result);\n this.postorderTraverse(node.right, result);\n result.push(node.value);\n }\n\n private findMin(node: BSTNode<T>): BSTNode<T> {\n while (node.left) node = node.left;\n return node;\n }\n\n private findMax(node: BSTNode<T>): BSTNode<T> {\n while (node.right) node = node.right;\n return node;\n }\n\n private calculateHeight(node: BSTNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default BinarySearchTree;\n","/**\n * BinaryTree\n * ----------\n * A generic binary tree implementation.\n *\n * Characteristics:\n * - Each node has at most two children\n * - No ordering constraints (not a BST)\n * - Supports DFS & BFS traversals\n */\n\nexport class TreeNode<T> {\n value: T;\n left: TreeNode<T> | null = null;\n right: TreeNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class BinaryTree<T> {\n root: TreeNode<T> | null = null;\n\n constructor(rootValue?: T) {\n if (rootValue !== undefined) {\n this.root = new TreeNode(rootValue);\n }\n }\n\n /* ------------------------ Insert ------------------------ */\n\n /**\n * Inserts a value using level-order traversal\n * (keeps tree as balanced as possible)\n */\n insert(value: T): void {\n const newNode = new TreeNode(value);\n\n if (!this.root) {\n this.root = newNode;\n return;\n }\n\n const queue: TreeNode<T>[] = [this.root];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (!current.left) {\n current.left = newNode;\n return;\n } else {\n queue.push(current.left);\n }\n\n if (!current.right) {\n current.right = newNode;\n return;\n } else {\n queue.push(current.right);\n }\n }\n }\n\n /* ------------------------ Traversals ------------------------ */\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n preorder(): T[] {\n const result: T[] = [];\n this.preorderTraverse(this.root, result);\n return result;\n }\n\n postorder(): T[] {\n const result: T[] = [];\n this.postorderTraverse(this.root, result);\n return result;\n }\n\n levelOrder(): T[] {\n const result: T[] = [];\n if (!this.root) return result;\n\n const queue: TreeNode<T>[] = [this.root];\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n result.push(node.value);\n\n if (node.left) queue.push(node.left);\n if (node.right) queue.push(node.right);\n }\n\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private inorderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private preorderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (!node) return;\n result.push(node.value);\n this.preorderTraverse(node.left, result);\n this.preorderTraverse(node.right, result);\n }\n\n private postorderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (!node) return;\n this.postorderTraverse(node.left, result);\n this.postorderTraverse(node.right, result);\n result.push(node.value);\n }\n\n private calculateHeight(node: TreeNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default BinaryTree;\n","/**\n * BPlusTree\n * ---------\n * B+ Tree implementation where:\n * - All values are stored in leaf nodes\n * - Internal nodes contain only keys for routing\n * - Leaf nodes are linked for fast range queries\n *\n * Order (t):\n * - Max keys per node = 2t - 1\n * - Min keys per non-root node = t - 1\n *\n * Time Complexity:\n * - Search: O(log n)\n * - Insert: O(log n)\n * - Delete: O(log n)\n * - Range Scan: O(log n + k)\n */\n\nclass BPlusNode<T> {\n keys: T[] = [];\n children: BPlusNode<T>[] = [];\n leaf: boolean;\n next: BPlusNode<T> | null = null;\n\n constructor(leaf: boolean) {\n this.leaf = leaf;\n }\n}\n\nexport class BPlusTree<T> {\n private root: BPlusNode<T>;\n private readonly t: number;\n private compare: (a: T, b: T) => number;\n\n constructor(minDegree: number, compareFn?: (a: T, b: T) => number) {\n if (minDegree < 2) {\n throw new Error(\"BPlusTree minimum degree must be >= 2\");\n }\n\n this.t = minDegree;\n this.root = new BPlusNode<T>(true);\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n search(key: T): boolean {\n const leaf = this.findLeaf(this.root, key);\n return leaf.keys.some((k) => this.compare(k, key) === 0);\n }\n\n insert(key: T): void {\n const root = this.root;\n\n if (root.keys.length === 2 * this.t - 1) {\n const newRoot = new BPlusNode<T>(false);\n newRoot.children[0] = root;\n this.splitChild(newRoot, 0);\n this.root = newRoot;\n }\n\n this.insertNonFull(this.root, key);\n }\n\n delete(key: T): void {\n this.deleteFromNode(this.root, key);\n\n if (!this.root.leaf && this.root.keys.length === 0) {\n this.root = this.root.children[0];\n }\n }\n\n traverse(): T[] {\n const result: T[] = [];\n let node: BPlusNode<T> | null = this.root;\n\n while (node && !node.leaf) {\n node = node.children[0];\n }\n\n while (node) {\n result.push(...node.keys);\n node = node.next;\n }\n\n return result;\n }\n\n range(from: T, to: T): T[] {\n const result: T[] = [];\n let node: BPlusNode<T> | null = this.findLeaf(this.root, from);\n\n while (node) {\n for (const key of node.keys) {\n if (this.compare(key, to) > 0) return result;\n if (this.compare(key, from) >= 0) {\n result.push(key);\n }\n }\n node = node.next;\n }\n\n return result;\n }\n\n clear(): void {\n this.root = new BPlusNode<T>(true);\n }\n\n isEmpty(): boolean {\n return this.root.keys.length === 0;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private findLeaf(node: BPlusNode<T>, key: T): BPlusNode<T> {\n while (!node.leaf) {\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n node = node.children[i];\n }\n return node;\n }\n\n private insertNonFull(node: BPlusNode<T>, key: T): void {\n if (node.leaf) {\n node.keys.push(key);\n node.keys.sort(this.compare);\n return;\n }\n\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n\n if (node.children[i].keys.length === 2 * this.t - 1) {\n this.splitChild(node, i);\n if (this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n }\n\n this.insertNonFull(node.children[i], key);\n }\n\n private splitChild(parent: BPlusNode<T>, index: number): void {\n const child = parent.children[index];\n const newNode = new BPlusNode<T>(child.leaf);\n\n const mid = this.t;\n\n if (child.leaf) {\n newNode.keys = child.keys.splice(mid);\n parent.keys.splice(index, 0, newNode.keys[0]);\n\n newNode.next = child.next;\n child.next = newNode;\n } else {\n const promotedKey = child.keys[mid];\n newNode.keys = child.keys.splice(mid + 1);\n child.keys.splice(mid);\n\n newNode.children = child.children.splice(mid + 1);\n parent.keys.splice(index, 0, promotedKey);\n }\n\n parent.children.splice(index + 1, 0, newNode);\n }\n\n private deleteFromNode(node: BPlusNode<T>, key: T): void {\n if (node.leaf) {\n node.keys = node.keys.filter((k) => this.compare(k, key) !== 0);\n return;\n }\n\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n\n this.deleteFromNode(node.children[i], key);\n\n if (node.children[i].keys.length < this.t - 1) {\n this.rebalance(node, i);\n }\n }\n\n private rebalance(parent: BPlusNode<T>, index: number): void {\n const child = parent.children[index];\n\n const leftSibling = index > 0 ? parent.children[index - 1] : null;\n const rightSibling =\n index < parent.children.length - 1 ? parent.children[index + 1] : null;\n\n // Borrow from left\n if (leftSibling && leftSibling.keys.length >= this.t) {\n child.keys.unshift(leftSibling.keys.pop()!);\n parent.keys[index - 1] = child.keys[0];\n return;\n }\n\n // Borrow from right\n if (rightSibling && rightSibling.keys.length >= this.t) {\n child.keys.push(rightSibling.keys.shift()!);\n parent.keys[index] = rightSibling.keys[0];\n return;\n }\n\n // Merge\n if (leftSibling) {\n leftSibling.keys.push(...child.keys);\n leftSibling.next = child.next;\n parent.keys.splice(index - 1, 1);\n parent.children.splice(index, 1);\n } else if (rightSibling) {\n child.keys.push(...rightSibling.keys);\n child.next = rightSibling.next;\n parent.keys.splice(index, 1);\n parent.children.splice(index + 1, 1);\n }\n }\n}\n\nexport default BPlusTree;\n","/**\n * BTree\n * -----\n * A classic B-Tree implementation.\n *\n * Properties (minimum degree = t):\n * - Every node has at most 2t - 1 keys\n * - Every non-root node has at least t - 1 keys\n * - All leaves appear at the same level\n *\n * Time Complexity:\n * - Search: O(log n)\n * - Insert: O(log n)\n * - Delete: O(log n)\n */\n\nclass BTreeNode<T> {\n keys: T[] = [];\n children: BTreeNode<T>[] = [];\n leaf: boolean;\n\n constructor(leaf: boolean) {\n this.leaf = leaf;\n }\n}\n\nexport class BTree<T> {\n private root: BTreeNode<T>;\n private readonly t: number;\n private compare: (a: T, b: T) => number;\n\n constructor(minDegree: number, compareFn?: (a: T, b: T) => number) {\n if (minDegree < 2) {\n throw new Error(\"BTree minimum degree must be >= 2\");\n }\n\n this.t = minDegree;\n this.root = new BTreeNode<T>(true);\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n search(key: T): boolean {\n return this.searchNode(this.root, key);\n }\n\n insert(key: T): void {\n const r = this.root;\n\n if (r.keys.length === 2 * this.t - 1) {\n const s = new BTreeNode<T>(false);\n s.children[0] = r;\n this.splitChild(s, 0);\n this.root = s;\n this.insertNonFull(s, key);\n } else {\n this.insertNonFull(r, key);\n }\n }\n\n delete(key: T): void {\n this.deleteFromNode(this.root, key);\n\n if (this.root.keys.length === 0 && !this.root.leaf) {\n this.root = this.root.children[0];\n }\n }\n\n traverse(): T[] {\n const result: T[] = [];\n this.traverseNode(this.root, result);\n return result;\n }\n\n clear(): void {\n this.root = new BTreeNode<T>(true);\n }\n\n isEmpty(): boolean {\n return this.root.keys.length === 0;\n }\n\n /* ------------------------ Search ------------------------ */\n\n private searchNode(node: BTreeNode<T>, key: T): boolean {\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) > 0) {\n i++;\n }\n\n if (i < node.keys.length && this.compare(key, node.keys[i]) === 0) {\n return true;\n }\n\n if (node.leaf) return false;\n\n return this.searchNode(node.children[i], key);\n }\n\n /* ------------------------ Insert ------------------------ */\n\n private insertNonFull(node: BTreeNode<T>, key: T): void {\n let i = node.keys.length - 1;\n\n if (node.leaf) {\n node.keys.push(key);\n while (i >= 0 && this.compare(key, node.keys[i]) < 0) {\n node.keys[i + 1] = node.keys[i];\n i--;\n }\n node.keys[i + 1] = key;\n } else {\n while (i >= 0 && this.compare(key, node.keys[i]) < 0) {\n i--;\n }\n i++;\n\n if (node.children[i].keys.length === 2 * this.t - 1) {\n this.splitChild(node, i);\n if (this.compare(key, node.keys[i]) > 0) {\n i++;\n }\n }\n this.insertNonFull(node.children[i], key);\n }\n }\n\n private splitChild(parent: BTreeNode<T>, index: number): void {\n const t = this.t;\n const y = parent.children[index];\n const z = new BTreeNode<T>(y.leaf);\n\n z.keys = y.keys.splice(t);\n const middle = y.keys.pop()!;\n\n if (!y.leaf) {\n z.children = y.children.splice(t);\n }\n\n parent.children.splice(index + 1, 0, z);\n parent.keys.splice(index, 0, middle);\n }\n\n /* ------------------------ Delete ------------------------ */\n\n private deleteFromNode(node: BTreeNode<T>, key: T): void {\n const idx = this.findKey(node, key);\n\n if (idx < node.keys.length && this.compare(node.keys[idx], key) === 0) {\n if (node.leaf) {\n node.keys.splice(idx, 1);\n } else {\n this.deleteInternalNode(node, key, idx);\n }\n } else {\n if (node.leaf) return;\n\n let child = node.children[idx];\n\n if (child.keys.length < this.t) {\n this.fill(node, idx);\n }\n\n const nextIdx =\n idx < node.keys.length && this.compare(node.keys[idx], key) < 0\n ? idx + 1\n : idx;\n\n this.deleteFromNode(node.children[nextIdx], key);\n }\n }\n\n private deleteInternalNode(node: BTreeNode<T>, key: T, idx: number): void {\n const leftChild = node.children[idx];\n const rightChild = node.children[idx + 1];\n\n if (leftChild.keys.length >= this.t) {\n const pred = this.getPredecessor(leftChild);\n node.keys[idx] = pred;\n this.deleteFromNode(leftChild, pred);\n } else if (rightChild.keys.length >= this.t) {\n const succ = this.getSuccessor(rightChild);\n node.keys[idx] = succ;\n this.deleteFromNode(rightChild, succ);\n } else {\n this.merge(node, idx);\n this.deleteFromNode(leftChild, key);\n }\n }\n\n private fill(node: BTreeNode<T>, idx: number): void {\n if (idx > 0 && node.children[idx - 1].keys.length >= this.t) {\n this.borrowFromPrev(node, idx);\n } else if (\n idx < node.children.length - 1 &&\n node.children[idx + 1].keys.length >= this.t\n ) {\n this.borrowFromNext(node, idx);\n } else {\n if (idx < node.children.length - 1) {\n this.merge(node, idx);\n } else {\n this.merge(node, idx - 1);\n }\n }\n }\n\n private borrowFromPrev(node: BTreeNode<T>, idx: number): void {\n const child = node.children[idx];\n const sibling = node.children[idx - 1];\n\n child.keys.unshift(node.keys[idx - 1]);\n node.keys[idx - 1] = sibling.keys.pop()!;\n\n if (!sibling.leaf) {\n child.children.unshift(sibling.children.pop()!);\n }\n }\n\n private borrowFromNext(node: BTreeNode<T>, idx: number): void {\n const child = node.children[idx];\n const sibling = node.children[idx + 1];\n\n child.keys.push(node.keys[idx]);\n node.keys[idx] = sibling.keys.shift()!;\n\n if (!sibling.leaf) {\n child.children.push(sibling.children.shift()!);\n }\n }\n\n private merge(node: BTreeNode<T>, idx: number): void {\n const child = node.children[idx];\n const sibling = node.children[idx + 1];\n\n child.keys.push(node.keys[idx], ...sibling.keys);\n\n if (!child.leaf) {\n child.children.push(...sibling.children);\n }\n\n node.keys.splice(idx, 1);\n node.children.splice(idx + 1, 1);\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private findKey(node: BTreeNode<T>, key: T): number {\n let idx = 0;\n while (idx < node.keys.length && this.compare(node.keys[idx], key) < 0) {\n idx++;\n }\n return idx;\n }\n\n private getPredecessor(node: BTreeNode<T>): T {\n while (!node.leaf) {\n node = node.children[node.children.length - 1];\n }\n return node.keys[node.keys.length - 1];\n }\n\n private getSuccessor(node: BTreeNode<T>): T {\n while (!node.leaf) {\n node = node.children[0];\n }\n return node.keys[0];\n }\n\n private traverseNode(node: BTreeNode<T>, result: T[]): void {\n let i = 0;\n for (; i < node.keys.length; i++) {\n if (!node.leaf) {\n this.traverseNode(node.children[i], result);\n }\n result.push(node.keys[i]);\n }\n if (!node.leaf) {\n this.traverseNode(node.children[i], result);\n }\n }\n}\n\nexport default BTree;\n","/**\n * RadixTree (Compressed Trie / Patricia Trie)\n * -------------------------------------------\n * Optimized trie where chains of single-child nodes\n * are compressed into single edges.\n *\n * Use cases:\n * - Autocomplete\n * - Routing tables\n * - Prefix matching\n *\n * Time Complexity:\n * - Insert: O(n)\n * - Search: O(n)\n * - Delete: O(n)\n * - Prefix lookup: O(n)\n */\n\nclass RadixNode {\n children: Map<string, RadixNode> = new Map();\n isEndOfWord = false;\n}\n\nexport class RadixTree {\n private root: RadixNode = new RadixNode();\n\n /* ------------------------ Public API ------------------------ */\n\n insert(word: string): void {\n let current = this.root;\n let remaining = word;\n\n while (remaining.length > 0) {\n let matched = false;\n\n for (const [edge, child] of current.children) {\n const common = this.commonPrefix(edge, remaining);\n if (common.length === 0) continue;\n\n // Case 1: edge fully matches → descend\n if (common.length === edge.length) {\n current = child;\n remaining = remaining.slice(common.length);\n matched = true;\n break;\n }\n\n // Case 2: partial match → split edge\n const edgeSuffix = edge.slice(common.length);\n const wordSuffix = remaining.slice(common.length);\n\n const splitNode = new RadixNode();\n\n // 🔥 Preserve old word ending\n splitNode.isEndOfWord = false;\n\n // Rewire tree\n current.children.delete(edge);\n current.children.set(common, splitNode);\n\n splitNode.children.set(edgeSuffix, child);\n\n // Insert new word or mark split as terminal\n if (wordSuffix.length > 0) {\n const newNode = new RadixNode();\n newNode.isEndOfWord = true;\n splitNode.children.set(wordSuffix, newNode);\n } else {\n splitNode.isEndOfWord = true;\n }\n\n return;\n }\n\n // No matching edge → create new\n if (!matched) {\n const node = new RadixNode();\n node.isEndOfWord = true;\n current.children.set(remaining, node);\n return;\n }\n }\n\n current.isEndOfWord = true;\n }\n\n search(word: string): boolean {\n const node = this.findNode(word, true);\n return !!node && node.isEndOfWord;\n }\n\n startsWith(prefix: string): boolean {\n return !!this.findNode(prefix, false);\n }\n\n delete(word: string): void {\n this.deleteHelper(this.root, word);\n }\n\n clear(): void {\n this.root = new RadixNode();\n }\n\n isEmpty(): boolean {\n return this.root.children.size === 0;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private findNode(word: string, exact: boolean): RadixNode | null {\n let current = this.root;\n let remaining = word;\n\n while (remaining.length > 0) {\n let matched = false;\n\n for (const [edge, child] of current.children) {\n if (remaining.startsWith(edge)) {\n remaining = remaining.slice(edge.length);\n current = child;\n matched = true;\n break;\n }\n\n // ⚠️ prefix-only match allowed for startsWith\n if (!exact && edge.startsWith(remaining)) {\n return child;\n }\n }\n\n if (!matched) return null;\n }\n\n return current;\n }\n\n private deleteHelper(node: RadixNode, word: string): boolean {\n if (word.length === 0) {\n if (!node.isEndOfWord) return false;\n node.isEndOfWord = false;\n return node.children.size === 0;\n }\n\n for (const [edge, child] of node.children) {\n if (!word.startsWith(edge)) continue;\n\n const shouldDelete = this.deleteHelper(child, word.slice(edge.length));\n\n if (shouldDelete) {\n node.children.delete(edge);\n\n // Merge single-child paths\n if (node.children.size === 1 && !node.isEndOfWord) {\n const entry = node.children.entries().next().value;\n if (entry) {\n const [nextEdge, nextNode] = entry;\n node.children.clear();\n node.children.set(edge + nextEdge, nextNode);\n }\n }\n\n return node.children.size === 0 && !node.isEndOfWord;\n }\n\n return false;\n }\n\n return false;\n }\n\n private commonPrefix(a: string, b: string): string {\n let i = 0;\n while (i < a.length && i < b.length && a[i] === b[i]) {\n i++;\n }\n return a.slice(0, i);\n }\n}\n\nexport default RadixTree;\n","/**\n * TernarySearchTree (TST)\n * ----------------------\n * A space-efficient string tree where each node stores\n * a single character and has three children:\n *\n * - left → characters less than current\n * - equal → next character in word\n * - right → characters greater than current\n *\n * Time Complexity:\n * - Insert: O(n)\n * - Search: O(n)\n * - Delete: O(n)\n * - Prefix lookup: O(n)\n */\n\nclass TSTNode {\n char: string;\n isEndOfWord = false;\n\n left: TSTNode | null = null;\n equal: TSTNode | null = null;\n right: TSTNode | null = null;\n\n constructor(char: string) {\n this.char = char;\n }\n}\n\nexport class TernarySearchTree {\n private root: TSTNode | null = null;\n\n /* ------------------------ Public API ------------------------ */\n\n insert(word: string): void {\n if (word.length === 0) return;\n this.root = this.insertNode(this.root, word, 0);\n }\n\n search(word: string): boolean {\n if (word.length === 0) return false;\n const node = this.searchNode(this.root, word, 0);\n return !!node && node.isEndOfWord;\n }\n\n startsWith(prefix: string): boolean {\n if (prefix.length === 0) return true;\n return !!this.searchNode(this.root, prefix, 0);\n }\n\n delete(word: string): void {\n if (word.length === 0) return;\n this.root = this.deleteNode(this.root, word, 0);\n }\n\n clear(): void {\n this.root = null;\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private insertNode(\n node: TSTNode | null,\n word: string,\n index: number\n ): TSTNode {\n const char = word[index];\n\n if (!node) {\n node = new TSTNode(char);\n }\n\n if (char < node.char) {\n node.left = this.insertNode(node.left, word, index);\n } else if (char > node.char) {\n node.right = this.insertNode(node.right, word, index);\n } else {\n if (index + 1 === word.length) {\n node.isEndOfWord = true;\n } else {\n node.equal = this.insertNode(node.equal, word, index + 1);\n }\n }\n\n return node;\n }\n\n private searchNode(\n node: TSTNode | null,\n word: string,\n index: number\n ): TSTNode | null {\n if (!node) return null;\n\n const char = word[index];\n\n if (char < node.char) {\n return this.searchNode(node.left, word, index);\n }\n if (char > node.char) {\n return this.searchNode(node.right, word, index);\n }\n\n // char === node.char\n if (index + 1 === word.length) {\n return node;\n }\n\n return this.searchNode(node.equal, word, index + 1);\n }\n\n private deleteNode(\n node: TSTNode | null,\n word: string,\n index: number\n ): TSTNode | null {\n if (!node) return null;\n\n const char = word[index];\n\n if (char < node.char) {\n node.left = this.deleteNode(node.left, word, index);\n } else if (char > node.char) {\n node.right = this.deleteNode(node.right, word, index);\n } else {\n if (index + 1 === word.length) {\n node.isEndOfWord = false;\n } else {\n node.equal = this.deleteNode(node.equal, word, index + 1);\n }\n\n // Cleanup unused nodes\n if (!node.isEndOfWord && !node.left && !node.equal && !node.right) {\n return null;\n }\n }\n\n return node;\n }\n}\n\nexport default TernarySearchTree;\n","/**\n * Trie (Prefix Tree)\n * ------------------\n * Efficient tree-based data structure for storing strings.\n *\n * Use cases:\n * - Autocomplete\n * - Spell checking\n * - Prefix search\n *\n * Time Complexity:\n * - Insert: O(n)\n * - Search: O(n)\n * - Delete: O(n)\n * - Prefix lookup: O(n)\n */\n\nclass TrieNode {\n children: Map<string, TrieNode> = new Map();\n isEndOfWord = false;\n}\n\nexport class Trie {\n private root: TrieNode = new TrieNode();\n\n /* ------------------------ Public API ------------------------ */\n\n insert(word: string): void {\n let current = this.root;\n\n for (const char of word) {\n if (!current.children.has(char)) {\n current.children.set(char, new TrieNode());\n }\n current = current.children.get(char)!;\n }\n\n current.isEndOfWord = true;\n }\n\n search(word: string): boolean {\n const node = this.findNode(word);\n return !!node && node.isEndOfWord;\n }\n\n startsWith(prefix: string): boolean {\n return !!this.findNode(prefix);\n }\n\n delete(word: string): void {\n this.deleteHelper(this.root, word, 0);\n }\n\n clear(): void {\n this.root = new TrieNode();\n }\n\n isEmpty(): boolean {\n return this.root.children.size === 0;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private findNode(prefix: string): TrieNode | null {\n let current = this.root;\n\n for (const char of prefix) {\n const next = current.children.get(char);\n if (!next) return null;\n current = next;\n }\n\n return current;\n }\n\n private deleteHelper(\n node: TrieNode,\n word: string,\n index: number\n ): boolean {\n if (index === word.length) {\n if (!node.isEndOfWord) return false;\n\n node.isEndOfWord = false;\n return node.children.size === 0;\n }\n\n const char = word[index];\n const child = node.children.get(char);\n if (!child) return false;\n\n const shouldDeleteChild = this.deleteHelper(\n child,\n word,\n index + 1\n );\n\n if (shouldDeleteChild) {\n node.children.delete(char);\n return (\n node.children.size === 0 && !node.isEndOfWord\n );\n }\n\n return false;\n }\n}\n\nexport default Trie;","/**\n * FenwickTree (Binary Indexed Tree)\n * --------------------------------\n * Efficient data structure for prefix sums.\n *\n * Supports:\n * - Point update: O(log n)\n * - Prefix sum query: O(log n)\n * - Range sum query: O(log n)\n *\n * Internally uses 1-based indexing.\n */\n\nexport class FenwickTree {\n private readonly n: number;\n private tree: number[];\n\n constructor(sizeOrArray: number | number[]) {\n if (typeof sizeOrArray === \"number\") {\n if (sizeOrArray <= 0) {\n throw new Error(\"FenwickTree size must be > 0\");\n }\n this.n = sizeOrArray;\n this.tree = new Array(this.n + 1).fill(0);\n } else {\n if (sizeOrArray.length === 0) {\n throw new Error(\"FenwickTree array must not be empty\");\n }\n this.n = sizeOrArray.length;\n this.tree = new Array(this.n + 1).fill(0);\n for (let i = 0; i < this.n; i++) {\n this.add(i, sizeOrArray[i]);\n }\n }\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Add value to index (0-based)\n */\n add(index: number, value: number): void {\n if (index < 0 || index >= this.n) {\n throw new Error(\"Index out of bounds\");\n }\n\n let i = index + 1;\n while (i <= this.n) {\n this.tree[i] += value;\n i += i & -i;\n }\n }\n\n /**\n * Prefix sum from 0 to index (inclusive)\n */\n sum(index: number): number {\n if (index < 0 || index >= this.n) {\n throw new Error(\"Index out of bounds\");\n }\n\n let result = 0;\n let i = index + 1;\n while (i > 0) {\n result += this.tree[i];\n i -= i & -i;\n }\n return result;\n }\n\n /**\n * Range sum [left, right]\n */\n rangeSum(left: number, right: number): number {\n if (left < 0 || right >= this.n || left > right) {\n throw new Error(\"Invalid range\");\n }\n return this.sum(right) - (left > 0 ? this.sum(left - 1) : 0);\n }\n\n /**\n * Get size of tree\n */\n size(): number {\n return this.n;\n }\n\n /**\n * Reset all values\n */\n clear(): void {\n this.tree.fill(0);\n }\n}\n\nexport default FenwickTree;\n","/**\n * IntervalTree\n * ------------\n * Augmented Binary Search Tree for interval overlap queries.\n *\n * Each node stores:\n * - interval [low, high]\n * - max: maximum high endpoint in its subtree\n *\n * Time Complexity (average):\n * - Insert: O(log n)\n * - Delete: O(log n)\n * - Search overlap: O(log n)\n * - Search all overlaps: O(k + log n)\n */\n\nexport interface Interval {\n low: number;\n high: number;\n}\n\nclass IntervalNode {\n interval: Interval;\n max: number;\n left: IntervalNode | null = null;\n right: IntervalNode | null = null;\n\n constructor(interval: Interval) {\n if (interval.low > interval.high) {\n throw new Error(\"Invalid interval: low > high\");\n }\n this.interval = interval;\n this.max = interval.high;\n }\n}\n\nexport class IntervalTree {\n private root: IntervalNode | null = null;\n\n /* ------------------------ Public API ------------------------ */\n\n insert(interval: Interval): void {\n this.root = this.insertNode(this.root, interval);\n }\n\n delete(interval: Interval): void {\n this.root = this.deleteNode(this.root, interval);\n }\n\n /**\n * Returns true if any interval overlaps with the query interval\n */\n search(query: Interval): boolean {\n return this.searchAny(this.root, query) !== null;\n }\n\n /**\n * Returns all intervals that overlap with the query interval\n */\n searchAll(query: Interval): Interval[] {\n const result: Interval[] = [];\n this.searchAllFrom(this.root, query, result);\n return result;\n }\n\n /**\n * In-order traversal (sorted by low)\n */\n traverse(): Interval[] {\n const result: Interval[] = [];\n this.inOrder(this.root, result);\n return result;\n }\n\n clear(): void {\n this.root = null;\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private insertNode(\n node: IntervalNode | null,\n interval: Interval\n ): IntervalNode {\n if (!node) {\n return new IntervalNode(interval);\n }\n\n if (interval.low < node.interval.low) {\n node.left = this.insertNode(node.left, interval);\n } else {\n node.right = this.insertNode(node.right, interval);\n }\n\n node.max = Math.max(\n node.max,\n interval.high,\n node.left?.max ?? -Infinity,\n node.right?.max ?? -Infinity\n );\n\n return node;\n }\n\n private deleteNode(\n node: IntervalNode | null,\n interval: Interval\n ): IntervalNode | null {\n if (!node) return null;\n\n if (\n interval.low === node.interval.low &&\n interval.high === node.interval.high\n ) {\n // Node to delete found\n if (!node.left) return node.right;\n if (!node.right) return node.left;\n\n // Two children: get inorder successor\n const successor = this.minNode(node.right);\n node.interval = successor.interval;\n node.right = this.deleteNode(node.right, successor.interval);\n } else if (interval.low < node.interval.low) {\n node.left = this.deleteNode(node.left, interval);\n } else {\n node.right = this.deleteNode(node.right, interval);\n }\n\n // Recompute max\n node.max = Math.max(\n node.interval.high,\n node.left?.max ?? -Infinity,\n node.right?.max ?? -Infinity\n );\n\n return node;\n }\n\n private searchAny(\n node: IntervalNode | null,\n query: Interval\n ): IntervalNode | null {\n if (!node) return null;\n\n if (this.overlaps(node.interval, query)) {\n return node;\n }\n\n if (node.left && node.left.max >= query.low) {\n return this.searchAny(node.left, query);\n }\n\n return this.searchAny(node.right, query);\n }\n\n private searchAllFrom(\n node: IntervalNode | null,\n query: Interval,\n result: Interval[]\n ): void {\n if (!node) return;\n\n if (this.overlaps(node.interval, query)) {\n result.push(node.interval);\n }\n\n if (node.left && node.left.max >= query.low) {\n this.searchAllFrom(node.left, query, result);\n }\n\n if (node.right && node.interval.low <= query.high) {\n this.searchAllFrom(node.right, query, result);\n }\n }\n\n private overlaps(a: Interval, b: Interval): boolean {\n return a.low <= b.high && b.low <= a.high;\n }\n\n private minNode(node: IntervalNode): IntervalNode {\n while (node.left) {\n node = node.left;\n }\n return node;\n }\n\n private inOrder(node: IntervalNode | null, result: Interval[]): void {\n if (!node) return;\n this.inOrder(node.left, result);\n result.push(node.interval);\n this.inOrder(node.right, result);\n }\n}\n\nexport default IntervalTree;\n","/**\n * SegmentTree\n * -----------\n * A generic segment tree implementation for range queries.\n *\n * Supports:\n * - Range query: O(log n)\n * - Point update: O(log n)\n *\n * Requirements:\n * - Merge function must be associative\n *\n * Examples:\n * - Sum: (a, b) => a + b\n * - Min: Math.min\n * - Max: Math.max\n */\n\nexport class SegmentTree<T> {\n private tree: T[];\n private data: T[];\n private readonly n: number;\n private readonly merge: (a: T, b: T) => T;\n private readonly identity: T;\n\n constructor(arr: T[], mergeFn: (a: T, b: T) => T, identity: T) {\n if (arr.length === 0) {\n throw new Error(\"SegmentTree requires a non-empty array\");\n }\n\n this.data = [...arr];\n this.n = arr.length;\n this.merge = mergeFn;\n this.identity = identity;\n\n // Safe size: 4 * n\n this.tree = new Array<T>(4 * this.n);\n this.build(0, 0, this.n - 1);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Query range [l, r]\n */\n query(l: number, r: number): T {\n if (l < 0 || r >= this.n || l > r) {\n throw new Error(\"Invalid query range\");\n }\n return this.queryRange(0, 0, this.n - 1, l, r);\n }\n\n /**\n * Update value at index\n */\n update(index: number, value: T): void {\n if (index < 0 || index >= this.n) {\n throw new Error(\"Index out of bounds\");\n }\n this.data[index] = value;\n this.updatePoint(0, 0, this.n - 1, index, value);\n }\n\n /**\n * Get original array\n */\n toArray(): T[] {\n return [...this.data];\n }\n\n size(): number {\n return this.n;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private build(node: number, start: number, end: number): void {\n if (start === end) {\n this.tree[node] = this.data[start];\n return;\n }\n\n const mid = Math.floor((start + end) / 2);\n const left = node * 2 + 1;\n const right = node * 2 + 2;\n\n this.build(left, start, mid);\n this.build(right, mid + 1, end);\n\n this.tree[node] = this.merge(this.tree[left], this.tree[right]);\n }\n\n private queryRange(\n node: number,\n start: number,\n end: number,\n l: number,\n r: number\n ): T {\n // No overlap\n if (r < start || end < l) {\n return this.identity;\n }\n\n // Total overlap\n if (l <= start && end <= r) {\n return this.tree[node];\n }\n\n // Partial overlap\n const mid = Math.floor((start + end) / 2);\n const left = node * 2 + 1;\n const right = node * 2 + 2;\n\n const leftResult = this.queryRange(left, start, mid, l, r);\n const rightResult = this.queryRange(right, mid + 1, end, l, r);\n\n return this.merge(leftResult, rightResult);\n }\n\n private updatePoint(\n node: number,\n start: number,\n end: number,\n index: number,\n value: T\n ): void {\n if (start === end) {\n this.tree[node] = value;\n return;\n }\n\n const mid = Math.floor((start + end) / 2);\n const left = node * 2 + 1;\n const right = node * 2 + 2;\n\n if (index <= mid) {\n this.updatePoint(left, start, mid, index, value);\n } else {\n this.updatePoint(right, mid + 1, end, index, value);\n }\n\n this.tree[node] = this.merge(this.tree[left], this.tree[right]);\n }\n}\n\nexport default SegmentTree;\n","import type { Request, Response, NextFunction } from \"express\";\n\nexport const authMiddleware = (\n _req: Request,\n _res: Response,\n next: NextFunction\n): void => {\n next(); // placeholder\n};\n","import type { Request, Response, NextFunction } from \"express\";\nimport type { Error as MongooseError } from \"mongoose\";\n\nimport { AppError } from \"../errors/appError.js\";\nimport { APIResponse } from \"../api/apiResponse.js\";\nimport { logger } from \"../configs/logger.js\";\n\n/* ======================================================\n MongoDB Error Handlers\n====================================================== */\n\nconst handleCastErrorDB = (err: MongooseError.CastError): AppError =>\n new AppError(`Invalid ${err.path}: ${err.value}`, 400, {\n code: \"INVALID_ID\",\n });\n\nconst handleDuplicateFieldsDB = (err: {\n keyValue?: Record<string, unknown>;\n}): AppError => {\n const value = err.keyValue ? JSON.stringify(err.keyValue) : \"duplicate value\";\n\n return new AppError(`Duplicate field value: ${value}`, 400, {\n code: \"DUPLICATE_FIELD\",\n });\n};\n\nconst handleValidationErrorDB = (\n err: MongooseError.ValidationError\n): AppError => {\n const errors = Object.values(err.errors).map((el) => el.message);\n\n return new AppError(\"Invalid input data\", 400, {\n code: \"VALIDATION_ERROR\",\n details: errors,\n });\n};\n\n/* ======================================================\n JWT Error Handlers\n====================================================== */\n\nconst handleJWTError = (): AppError =>\n new AppError(\"Invalid token. Please log in again.\", 401);\n\nconst handleJWTExpiredError = (): AppError =>\n new AppError(\"Your token has expired. Please log in again.\", 401);\n\n/* ======================================================\n Global Error Middleware\n====================================================== */\n\nexport const GlobalErrorHandler =\n (isProd = false) =>\n (\n err: unknown,\n _req: Request,\n res: Response,\n _next: NextFunction\n ): Response => {\n let error: AppError;\n\n /* --------------------\n Normalize error\n -------------------- */\n\n if (err instanceof AppError) {\n error = err;\n } else if (err instanceof Error) {\n error = new AppError(err.message, 500);\n error.isOperational = false;\n } else {\n error = new AppError(\"Internal Server Error\", 500);\n error.isOperational = false;\n }\n\n /* --------------------\n MongoDB errors\n -------------------- */\n\n if (err && (err as MongooseError).name === \"CastError\") {\n error = handleCastErrorDB(err as MongooseError.CastError);\n }\n\n if (\n err &&\n typeof err === \"object\" &&\n (err as { code?: number }).code === 11000\n ) {\n error = handleDuplicateFieldsDB(\n err as { keyValue?: Record<string, unknown> }\n );\n }\n\n if (err && (err as MongooseError).name === \"ValidationError\") {\n error = handleValidationErrorDB(err as MongooseError.ValidationError);\n }\n\n /* --------------------\n JWT errors\n -------------------- */\n\n if ((err as Error)?.name === \"JsonWebTokenError\") {\n error = handleJWTError();\n }\n\n if ((err as Error)?.name === \"TokenExpiredError\") {\n error = handleJWTExpiredError();\n }\n\n /* --------------------\n Logging\n -------------------- */\n\n if (!error.isOperational) {\n logger.danger(\"Programming error\", err);\n } else {\n logger.danger(\"Operational error\", { message: error.message });\n }\n\n /* --------------------\n Response\n -------------------- */\n\n if (!isProd) {\n // DEV: detailed error\n return APIResponse.send(res, {\n success: false,\n statusCode: error.statusCode,\n message: error.message,\n data: {\n stack: (err as Error)?.stack,\n details: error.details,\n },\n });\n }\n\n // PROD: safe error\n return APIResponse.send(res, {\n success: false,\n statusCode: error.statusCode,\n message: error.isOperational ? error.message : \"Something went wrong\",\n });\n };\n","import type { Request, Response, NextFunction } from \"express\";\nimport type { Schema } from \"joi\";\n\nexport const validate =\n (schema: Schema) =>\n (req: Request, _res: Response, next: NextFunction): void => {\n const { error } = schema.validate(req.body);\n\n if (error) {\n return next(error);\n }\n\n next();\n };\n","import type { Model, UpdateQuery } from \"mongoose\";\nimport { AppError } from \"../errors/appError.js\";\n\n/**\n * Generic Base Service\n * Provides default CRUD operations\n */\nexport abstract class BaseService<T> {\n protected model: Model<T>;\n protected resourceName: string;\n\n constructor(model: Model<T>, resourceName: string) {\n this.model = model;\n this.resourceName = resourceName;\n }\n\n async create(data: Partial<T>): Promise<T> {\n const doc = await this.model.create(data as any);\n return doc as T;\n }\n\n async findAll(): Promise<T[]> {\n return this.model.find();\n }\n\n async findById(id: string): Promise<T> {\n const doc = await this.model.findById(id);\n\n if (!doc) {\n throw new AppError(`${this.resourceName} not found`, 404, {\n code: `${this.resourceName.toUpperCase()}_NOT_FOUND`,\n });\n }\n\n return doc;\n }\n\n async updateById(id: string, data: UpdateQuery<T>): Promise<T> {\n const doc = await this.model.findByIdAndUpdate(id, data, {\n new: true,\n runValidators: true,\n });\n\n if (!doc) {\n throw new AppError(`${this.resourceName} not found`, 404, {\n code: `${this.resourceName.toUpperCase()}_NOT_FOUND`,\n });\n }\n\n return doc;\n }\n\n async deleteById(id: string): Promise<T> {\n const doc = await this.model.findByIdAndDelete(id);\n\n if (!doc) {\n throw new AppError(`${this.resourceName} not found`, 404, {\n code: `${this.resourceName.toUpperCase()}_NOT_FOUND`,\n });\n }\n\n return doc;\n }\n}\n","export function milliseconds(value: number): number {\n return value;\n}\n\nexport function seconds(value: number): number {\n return value * 1000;\n}\n\nexport function minutes(value: number): number {\n return value * 60000;\n}\n\nexport function hours(value: number): number {\n return value * 3600000;\n}\n\nexport function days(value: number): number {\n return value * 86400000;\n}\n\nexport function toSeconds(ms: number): number {\n return ms / 1000;\n}\n\nexport function toMinutes(ms: number): number {\n return ms / 60000;\n}\n\nexport function toHours(ms: number): number {\n return ms / 3600000;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/appError.ts","../src/api/apiResponse.ts","../src/api/asyncHandler.ts","../src/api/apiFeatures.ts","../src/api/apiFactory.ts","../src/cloud/azure/AzureBlobService.ts","../src/utils/errorToString.ts","../src/configs/logger.ts","../src/configs/database.ts","../src/configs/env.ts","../src/configs/cors/allowedOrigins.ts","../src/configs/cors/corsOptions.ts","../src/data-structures/array/CircularArray.ts","../src/data-structures/array/DynamicArray.ts","../src/data-structures/array/StaticArray.ts","../src/data-structures/graph/AdjacencyList.ts","../src/data-structures/graph/AdjacencyMatrix.ts","../src/data-structures/graph/DirectedGraph.ts","../src/data-structures/graph/Graph.ts","../src/data-structures/hash/ConsistentHash.ts","../src/data-structures/hash/HashMap.ts","../src/data-structures/hash/HashSet.ts","../src/data-structures/linked-list/Node.ts","../src/data-structures/linked-list/DoublyLinkedList.ts","../src/data-structures/hash/LFUCache.ts","../src/data-structures/hash/LRUCache.ts","../src/data-structures/heap/BinaryHeap.ts","../src/data-structures/heap/FibonacciHeap.ts","../src/data-structures/heap/MaxHeap.ts","../src/data-structures/heap/MinHeap.ts","../src/data-structures/heap/PairingHeap.ts","../src/data-structures/linked-list/CircularLinkedList.ts","../src/data-structures/linked-list/SinglyLinkedList.ts","../src/data-structures/probabilistic/BloomFilter.ts","../src/data-structures/probabilistic/CountMinSketch.ts","../src/data-structures/probabilistic/HyperLogLog.ts","../src/data-structures/queue/CircularQueue.ts","../src/data-structures/queue/Deque.ts","../src/data-structures/queue/PriorityQueue.ts","../src/data-structures/queue/Queue.ts","../src/data-structures/set/DisjointSetUnion.ts","../src/data-structures/set/MultiSet.ts","../src/data-structures/set/OrderedSet.ts","../src/data-structures/set/Set.ts","../src/data-structures/spatial/KDTree.ts","../src/data-structures/spatial/QuadTree.ts","../src/data-structures/stack/MaxStack.ts","../src/data-structures/stack/MinStack.ts","../src/data-structures/stack/Stack.ts","../src/data-structures/string/SuffixArray.ts","../src/data-structures/string/SuffixTree.ts","../src/data-structures/table/SparseTable.ts","../src/data-structures/tree/balanced/AVLTree.ts","../src/data-structures/tree/balanced/RedBlackTree.ts","../src/data-structures/tree/balanced/SplayTree.ts","../src/data-structures/tree/binary/BinarySearchTree.ts","../src/data-structures/tree/binary/BinaryTree.ts","../src/data-structures/tree/multiway/BPlusTree.ts","../src/data-structures/tree/multiway/BTree.ts","../src/data-structures/tree/prefix/RadixTree.ts","../src/data-structures/tree/prefix/TernarySearchTree.ts","../src/data-structures/tree/prefix/Trie.ts","../src/data-structures/tree/range/FenwickTree.ts","../src/data-structures/tree/range/IntervalTree.ts","../src/data-structures/tree/range/SegmentTree.ts","../src/middlewares/auth.middleware.ts","../src/middlewares/error.middleware.ts","../src/middlewares/validate.middleware.ts","../src/services/base.service.ts","../src/utils/time.ts"],"names":["AppError","message","statusCode","options","APIResponse","_APIResponse","res","success","data","meta","body","asyncHandler","fn","req","next","APIFeatures","query","queryString","queryObj","el","queryStr","match","sortBy","fields","skip","populateOptions","apiFeatures_default","APIFactory","Model","filter","features","docs","doc","AzureBlobService","config","connectionString","accountName","accountKey","containerName","BlobServiceClient","StorageSharedKeyCredential","localPath","blobName","onProgress","blockBlobClient","fileSize","fs","readStream","ev","percent","downloadPath","response","downloaded","resolve","reject","writable","chunk","prefix","result","blob","expiresInMinutes","blobClient","sasToken","generateBlobSASQueryParameters","BlobSASPermissions","errorToString","error","Logger","msg","logger","connectMongoDB","mongoose","dotenv","loadEnv","schema","value","createAllowedOrigins","origins","defaults","allowedOrigins","origin","createCorsOptions","callback","CircularArray","capacity","i","index","DynamicArray","initialCapacity","newCapacity","newData","removed","StaticArray","_StaticArray","size","initialValue","copy","AdjacencyList","vertex","edges","from","to","weight","e","AdjacencyMatrix","directed","row","j","DirectedGraph","start","visited","queue","edge","visit","Graph","reverse","ConsistentHash","replicas","node","hash","key","ringKey","a","b","low","high","mid","HashMap","bucket","entry","entryIndex","strKey","oldBuckets","HashMap_default","HashSet","Node","DoublyLinkedList","current","LFUCache","existing","oldFreq","oldList","list","lruEntry","freq","LRUCache","existingNode","newNode","lruKey","BinaryHeap","comparator","initial","root","parent","length","left","right","smallest","BinaryHeap_default","FibNode","FibonacciHeap","compareFn","other","r","min","child","newKey","table","x","d","y","n","c","z","MaxHeap","MinHeap","PairingNode","PairingHeap","first","siblings","merged","CircularLinkedList","prev","SinglyLinkedList","v","BloomFilter","hashCount","hashes","hash1","hash2","combined","str","seed","CountMinSketch","width","depth","_","count","HyperLogLog","p","remaining","rank","sum","zeros","estimate","m","CircularQueue","Deque","PriorityQueue","priority","last","Queue","DisjointSetUnion","rootX","rootY","rankX","rankY","roots","MultiSet","_MultiSet","iterable","total","minCount","OrderedSet","_OrderedSet","Set","_Set","KDNode","point","axis","KDTree","points","dimensions","target","bestPoint","bestValue","bestDist","search","dist","diff","near","far","max","median","QuadNode","_QuadNode","boundary","containsPoint","range","found","intersects","w","h","hw","hh","QuadTree","rect","MaxStack","MinStack","Stack","SuffixArray","text","s","sa","temp","k","ra","rb","curr","same","End","SuffixTreeNode","end","currentEnd","SuffixTree","pattern","pos","lastNewNode","edgeChar","splitEnd","split","leaf","SparseTable","arr","combine","maxK","len","l","AVLNode","AVLTree","cmp","successor","t2","balance","RBNode","RedBlackTree","grandparent","uncle","yOriginalColor","sibling","u","SplayNode","SplayTree","maxLeft","BSTNode","BinarySearchTree","TreeNode","BinaryTree","rootValue","BPlusNode","BPlusTree","minDegree","newRoot","promotedKey","leftSibling","rightSibling","BTreeNode","BTree","t","middle","idx","nextIdx","leftChild","rightChild","pred","succ","RadixNode","RadixTree","word","matched","common","edgeSuffix","wordSuffix","splitNode","exact","nextEdge","nextNode","TSTNode","char","TernarySearchTree","TrieNode","Trie","FenwickTree","sizeOrArray","IntervalNode","interval","IntervalTree","SegmentTree","mergeFn","identity","leftResult","rightResult","authMiddleware","_req","_res","handleCastErrorDB","err","handleDuplicateFieldsDB","handleValidationErrorDB","errors","handleJWTError","handleJWTExpiredError","GlobalErrorHandler","isProd","_next","validate","BaseService","model","resourceName","id","milliseconds","seconds","minutes","hours","days","toSeconds","ms","toMinutes","toHours","sleep"],"mappings":"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","file":"index.js","sourcesContent":["export class AppError extends Error {\n statusCode: number;\n status: string;\n isOperational: boolean;\n code?: string;\n details?: unknown;\n\n constructor(\n message: string,\n statusCode: number = 500,\n options?: { code?: string; details?: unknown }\n ) {\n super(message);\n\n this.statusCode = statusCode;\n this.status = `${statusCode}`.startsWith(\"4\") ? \"fail\" : \"error\";\n this.isOperational = true;\n this.code = options?.code;\n this.details = options?.details;\n\n Error.captureStackTrace(this, this.constructor);\n }\n}\n","import { Response } from \"express\";\n\nexport class APIResponse {\n static send(\n res: Response,\n options: {\n statusCode?: number;\n success?: boolean;\n message?: string;\n data?: unknown;\n meta?: unknown;\n }\n ) {\n const {\n statusCode = 200,\n success = true,\n message = \"Success\",\n data,\n meta,\n } = options;\n\n if (statusCode === 204) {\n return res.status(204).send();\n }\n\n const body: Record<string, unknown> = { success, message };\n if (data !== undefined) body.data = data;\n if (meta !== undefined) body.meta = meta;\n\n return res.status(statusCode).json(body);\n }\n\n static ok(res: Response, data: unknown, message?: string, meta?: unknown) {\n return APIResponse.send(res, { statusCode: 200, data, message, meta });\n }\n\n static created(res: Response, data: unknown, message?: string) {\n return APIResponse.send(res, { statusCode: 201, data, message });\n }\n\n static noContent(res: Response) {\n return APIResponse.send(res, { statusCode: 204 });\n }\n\n // ❌ Error response (optional use in controllers)\n static error(res: Response, message?: string, statusCode: number = 500) {\n return APIResponse.send(res, {\n success: false,\n statusCode,\n message,\n });\n }\n}\n","import { Request, Response, NextFunction } from \"express\";\n\nexport const asyncHandler =\n (fn: (req: Request, res: Response, next: NextFunction) => Promise<void>) =>\n (req: Request, res: Response, next: NextFunction) =>\n Promise.resolve(fn(req, res, next)).catch(next);\n","import type { Query, PopulateOptions } from \"mongoose\";\n\n/**\n * Generic API Features helper for Mongoose queries\n */\nclass APIFeatures<T> {\n public query: Query<T[], T>;\n public queryString: Record<string, unknown>;\n public page: number;\n public limit: number;\n\n constructor(query: Query<T[], T>, queryString: Record<string, unknown>) {\n this.query = query;\n this.queryString = queryString;\n this.page = 1;\n this.limit = 100;\n }\n\n filter(): this {\n const queryObj = { ...this.queryString };\n\n [\"page\", \"sort\", \"limit\", \"fields\"].forEach((el) => delete queryObj[el]);\n\n let queryStr = JSON.stringify(queryObj);\n queryStr = queryStr.replace(\n /\\b(gte|gt|lte|lt|in)\\b/g,\n (match) => `$${match}`\n );\n\n this.query = this.query.find(JSON.parse(queryStr));\n\n return this;\n }\n\n sort(): this {\n if (this.queryString.sort) {\n const sortBy = String(this.queryString.sort).split(\",\").join(\" \");\n this.query = this.query.sort(sortBy);\n } else {\n this.query = this.query.sort(\"-createdAt\");\n }\n\n return this;\n }\n\n limitFields(): this {\n if (this.queryString.fields) {\n const fields = String(this.queryString.fields).split(\",\").join(\" \");\n this.query = this.query.select(fields);\n } else {\n this.query = this.query.select(\"-__v\");\n }\n\n return this;\n }\n\n paginate(): this {\n this.page = Number(this.queryString.page) || 1;\n this.limit = Number(this.queryString.limit) || 100;\n\n const skip = (this.page - 1) * this.limit;\n\n this.query = this.query.skip(skip).limit(this.limit);\n\n return this;\n }\n\n populate(populateOptions?: PopulateOptions | PopulateOptions[]): this {\n if (populateOptions) {\n this.query = this.query.populate(populateOptions);\n }\n\n return this;\n }\n}\n\nexport default APIFeatures;\n","import type { Request } from \"express\";\nimport type { Model, PopulateOptions } from \"mongoose\";\n\nimport { AppError } from \"../errors/appError.js\";\nimport { APIResponse } from \"./apiResponse.js\";\nimport { asyncHandler } from \"./asyncHandler.js\";\nimport APIFeatures from \"./apiFeatures.js\";\n\n/**\n * Options for API factory methods\n */\ninterface ApiFactoryOptions<T = unknown> {\n message?: string;\n notFoundMessage?: string;\n populate?: PopulateOptions | PopulateOptions[];\n filter?: (req: Request) => Record<string, unknown>;\n}\n\n/**\n * Generic API Factory (Hybrid Pattern)\n * For simple CRUD operations without business logic\n */\nexport class APIFactory {\n static getAll<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const filter = options.filter ? options.filter(req) : {};\n\n const features = new APIFeatures(Model.find(filter), req.query)\n .filter()\n .sort()\n .limitFields()\n .paginate()\n .populate(options.populate);\n\n const docs = await features.query;\n\n APIResponse.ok(\n res,\n docs,\n options.message ?? \"Records fetched successfully\",\n {\n count: docs.length,\n page: features.page,\n limit: features.limit,\n }\n );\n });\n }\n\n static getOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n let query = Model.findById(req.params.id);\n\n if (options.populate) {\n query = query.populate(\n options.populate as PopulateOptions | PopulateOptions[]\n );\n }\n\n const doc = await query;\n\n if (!doc) {\n throw new AppError(\n options.notFoundMessage ?? \"Resource not found\",\n 404,\n { code: \"RESOURCE_NOT_FOUND\" }\n );\n }\n\n APIResponse.ok(res, doc);\n });\n }\n\n static createOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const doc = await Model.create(req.body);\n\n APIResponse.created(\n res,\n doc,\n options.message ?? \"Resource created successfully\"\n );\n });\n }\n\n static updateOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const doc = await Model.findByIdAndUpdate(\n req.params.id,\n req.body as Partial<T>,\n {\n new: true,\n runValidators: true,\n }\n );\n\n if (!doc) {\n throw new AppError(\n options.notFoundMessage ?? \"Resource not found\",\n 404\n );\n }\n\n APIResponse.ok(\n res,\n doc,\n options.message ?? \"Resource updated successfully\"\n );\n });\n }\n\n static deleteOne<T>(Model: Model<T>, options: ApiFactoryOptions<T> = {}) {\n return asyncHandler(async (req, res) => {\n const doc = await Model.findByIdAndDelete(req.params.id);\n\n if (!doc) {\n throw new AppError(\n options.notFoundMessage ?? \"Resource not found\",\n 404\n );\n }\n\n APIResponse.noContent(res);\n });\n }\n}\n","import {\n BlobServiceClient,\n StorageSharedKeyCredential,\n BlockBlobClient,\n generateBlobSASQueryParameters,\n BlobSASPermissions\n} from \"@azure/storage-blob\";\n\nimport fs from \"fs\";\n\nexport interface AzureBlobConfig {\n connectionString: string;\n accountName: string;\n accountKey: string;\n containerName: string;\n}\n\nexport type ProgressCallback = (percentage: string) => void;\n\nexport class AzureBlobService {\n private containerName: string;\n private blobServiceClient: BlobServiceClient;\n private containerClient;\n private sharedKeyCredential: StorageSharedKeyCredential;\n\n constructor(config: AzureBlobConfig) {\n const { connectionString, accountName, accountKey, containerName } = config;\n\n this.containerName = containerName;\n\n this.blobServiceClient =\n BlobServiceClient.fromConnectionString(connectionString);\n\n this.containerClient =\n this.blobServiceClient.getContainerClient(containerName);\n\n this.sharedKeyCredential = new StorageSharedKeyCredential(\n accountName,\n accountKey\n );\n }\n\n // Upload file\n async uploadFile(\n localPath: string,\n blobName: string,\n onProgress?: ProgressCallback\n ): Promise<string> {\n const blockBlobClient: BlockBlobClient =\n this.containerClient.getBlockBlobClient(blobName);\n\n const fileSize = fs.statSync(localPath).size;\n const readStream = fs.createReadStream(localPath);\n\n await blockBlobClient.uploadStream(\n readStream,\n 4 * 1024 * 1024, // buffer size\n 20, // max concurrency\n {\n onProgress: (ev) => {\n if (onProgress) {\n const percent = ((ev.loadedBytes / fileSize) * 100).toFixed(2);\n onProgress(percent);\n }\n },\n }\n );\n\n return blockBlobClient.url;\n }\n\n // Download file\n async downloadFile(\n blobName: string,\n downloadPath: string,\n onProgress?: ProgressCallback\n ): Promise<void> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n const response = await blobClient.download();\n\n const fileSize = response.contentLength || 0;\n let downloaded = 0;\n\n return new Promise((resolve, reject) => {\n const writable = fs.createWriteStream(downloadPath);\n\n response.readableStreamBody?.on(\"data\", (chunk) => {\n downloaded += chunk.length;\n\n if (onProgress && fileSize > 0) {\n const percent = ((downloaded / fileSize) * 100).toFixed(2);\n onProgress(percent);\n }\n });\n\n response.readableStreamBody?.pipe(writable);\n\n writable.on(\"finish\", resolve);\n writable.on(\"error\", reject);\n });\n }\n\n // Delete file\n async deleteFile(blobName: string): Promise<boolean> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n await blobClient.deleteIfExists();\n return true;\n }\n\n // List blobs\n async listFiles(prefix: string = \"\"): Promise<string[]> {\n const result: string[] = [];\n\n for await (const blob of this.containerClient.listBlobsFlat({ prefix })) {\n result.push(blob.name);\n }\n\n return result;\n }\n\n // Check existence\n async blobExists(blobName: string): Promise<boolean> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n return blobClient.exists();\n }\n\n // Generate temporary read-only SAS URL\n async generateSasUrl(\n blobName: string,\n expiresInMinutes: number = 60\n ): Promise<string> {\n const blobClient = this.containerClient.getBlobClient(blobName);\n\n const sasToken = generateBlobSASQueryParameters(\n {\n containerName: this.containerName,\n blobName: blobClient.name,\n expiresOn: new Date(Date.now() + expiresInMinutes * 60 * 1000),\n permissions: BlobSASPermissions.parse(\"r\"), // read-only\n },\n this.sharedKeyCredential\n ).toString();\n\n return `${blobClient.url}?${sasToken}`;\n }\n}\n","export function errorToString(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}\\n${error.stack ?? \"\"}`;\n }\n\n if (typeof error === \"object\") {\n try {\n return JSON.stringify(error, null, 2);\n } catch {\n return \"[Unserializable object]\";\n }\n }\n\n return String(error);\n}\n","import { errorToString } from \"../utils/errorToString.js\";\n\nexport interface LoggerOptions {\n timestamp?: boolean;\n enabled?: boolean;\n}\n\nclass Logger {\n private timestamp = true;\n private enabled = true;\n\n // Use to configure once at the root\n configure(options: LoggerOptions = {}) {\n this.timestamp = options.timestamp ?? this.timestamp;\n this.enabled = options.enabled ?? this.enabled;\n }\n\n private format(msg: string): string {\n if (!this.timestamp) return msg;\n return `[${new Date().toISOString()}] ${msg}`;\n }\n\n private output(msg: string): void {\n if (!this.enabled) return;\n console.log(this.format(msg));\n }\n\n // Log Levels\n success(msg: string): void {\n this.output(`✅ ${msg}`);\n }\n\n info(msg: string): void {\n this.output(`ℹ️ ${msg}`);\n }\n\n warning(msg: string): void {\n this.output(`⚠️ ${msg}`);\n }\n\n danger(message: string, error?: unknown): void {\n if (error) {\n this.output(`❌ ${message}\\n${errorToString(error)}`);\n } else {\n this.output(`❌ ${message}`);\n }\n }\n\n log(msg: string): void {\n this.output(`• ${msg}`);\n }\n}\n\nexport const logger = new Logger();\n","import mongoose from \"mongoose\";\nimport { logger } from \"./logger.js\";\n\nexport interface DatabaseConfig {\n uri: string;\n}\n\nexport async function connectMongoDB(config: DatabaseConfig): Promise<void> {\n try {\n mongoose.set(\"strictQuery\", true);\n\n await mongoose.connect(config.uri);\n\n logger.success(\"Database connected successfully\");\n\n process.on(\"SIGINT\", async () => {\n await mongoose.connection.close();\n logger.success(\"Database connection closed\");\n process.exit(0);\n });\n } catch (error: unknown) {\n logger.danger(\"Database connection failed\");\n\n if (error instanceof Error) {\n logger.danger(error.message);\n }\n\n process.exit(1);\n }\n}\n","import dotenv from \"dotenv\";\nimport type Joi from \"joi\";\n\nimport { logger } from \"./logger.js\";\n\ndotenv.config({ quiet: true });\n\n/**\n * Generic env loader for Elseware apps\n * App provides its own Joi schema\n */\nexport function loadEnv<T>(schema: Joi.ObjectSchema<T>): T {\n const { value, error } = schema.validate(process.env, {\n abortEarly: false,\n allowUnknown: true,\n });\n\n if (error) {\n throw new Error(`❌ Env validation error: ${error.message}`);\n }\n\n logger.success(\"Configurations passed\");\n\n return value;\n}\n","export interface AllowedOriginsOptions {\n origins?: string | string[];\n defaults?: string[];\n}\n\nexport function createAllowedOrigins(\n options: AllowedOriginsOptions = {}\n): string[] {\n const { origins, defaults = [\"http://localhost:3000\"] } = options;\n\n let allowedOrigins: string[] = [];\n\n if (typeof origins === \"string\") {\n allowedOrigins = origins\n .split(\",\")\n .map((origin) => origin.trim())\n .filter(Boolean);\n }\n\n if (Array.isArray(origins)) {\n allowedOrigins = origins.map((origin) => origin.trim()).filter(Boolean);\n }\n\n // Fallback if empty\n if (allowedOrigins.length === 0) {\n allowedOrigins = [...defaults];\n }\n\n return allowedOrigins;\n}\n","import type { CorsOptions } from \"cors\";\n\nexport function createCorsOptions(allowedOrigins: string[]): CorsOptions {\n return {\n origin(origin, callback) {\n if (!origin || allowedOrigins.includes(origin)) {\n return callback(null, true);\n }\n\n return callback(new Error(`CORS blocked: ${origin} is not allowed`));\n },\n\n credentials: true,\n\n methods: [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"],\n\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"X-Requested-With\",\n \"Accept\",\n ],\n\n exposedHeaders: [\"Set-Cookie\"],\n\n optionsSuccessStatus: 204,\n };\n}\n","/**\n * CircularArray (Ring Buffer)\n * ---------------------------\n * A fixed-capacity circular array implementation.\n *\n * Characteristics:\n * - Fixed capacity\n * - O(1) enqueue / dequeue\n * - Wrap-around indexing\n * - Bounds-safe\n * - Generic\n * - Iterable (logical order)\n *\n * Use cases:\n * - Queues\n * - Circular buffers\n * - Sliding windows\n * - Game event buffers\n */\n\nexport class CircularArray<T> implements Iterable<T> {\n private readonly capacity: number;\n private data: (T | undefined)[];\n private head: number;\n private tail: number;\n private length: number;\n\n constructor(capacity: number) {\n if (!Number.isInteger(capacity) || capacity <= 0) {\n throw new Error(\"CircularArray capacity must be a positive integer\");\n }\n\n this.capacity = capacity;\n this.data = new Array<T | undefined>(capacity);\n this.head = 0;\n this.tail = 0;\n this.length = 0;\n }\n\n // Number of elements\n size(): number {\n return this.length;\n }\n\n // Max capacity\n getCapacity(): number {\n return this.capacity;\n }\n\n // Check if empty\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n // Check if full\n isFull(): boolean {\n return this.length === this.capacity;\n }\n\n // Add element at the end\n enqueue(value: T): void {\n if (this.isFull()) {\n throw new Error(\"CircularArray is full\");\n }\n\n this.data[this.tail] = value;\n this.tail = (this.tail + 1) % this.capacity;\n this.length++;\n }\n\n // Remove element from front\n dequeue(): T | undefined {\n if (this.isEmpty()) {\n return undefined;\n }\n\n const value = this.data[this.head];\n this.data[this.head] = undefined;\n this.head = (this.head + 1) % this.capacity;\n this.length--;\n\n return value;\n }\n\n // Peek front element\n peek(): T | undefined {\n return this.isEmpty() ? undefined : this.data[this.head];\n }\n\n // Clear buffer\n clear(): void {\n this.data = new Array<T | undefined>(this.capacity);\n this.head = 0;\n this.tail = 0;\n this.length = 0;\n }\n\n // Convert to array (logical order)\n toArray(): T[] {\n const result: T[] = [];\n\n for (let i = 0; i < this.length; i++) {\n const index = (this.head + i) % this.capacity;\n result.push(this.data[index] as T);\n }\n\n return result;\n }\n\n // Iterator support\n *[Symbol.iterator](): Iterator<T> {\n for (let i = 0; i < this.length; i++) {\n const index = (this.head + i) % this.capacity;\n yield this.data[index] as T;\n }\n }\n\n // String representation\n toString(): string {\n return `CircularArray(size=${this.length}, capacity=${\n this.capacity\n }) [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * DynamicArray\n * ------------\n * A resizable array implementation similar to ArrayList / Vector.\n *\n * Characteristics:\n * - Automatically resizes when capacity is exceeded\n * - O(1) amortized append\n * - O(1) access by index\n * - Bounds-safe\n * - Generic\n * - Iterable\n *\n * Use cases:\n * - General-purpose collections\n * - Algorithm implementations\n * - Game entity lists\n * - Backend buffers\n */\n\nexport class DynamicArray<T> implements Iterable<T> {\n private data: (T | undefined)[];\n private capacity: number;\n private length: number;\n\n constructor(initialCapacity: number = 4) {\n if (!Number.isInteger(initialCapacity) || initialCapacity <= 0) {\n throw new Error(\"Initial capacity must be a positive integer\");\n }\n\n this.capacity = initialCapacity;\n this.length = 0;\n this.data = new Array<T | undefined>(this.capacity);\n }\n\n // Current number of elements\n size(): number {\n return this.length;\n }\n\n // Total allocated capacity\n getCapacity(): number {\n return this.capacity;\n }\n\n // Bounds check\n private checkBounds(index: number): void {\n if (!Number.isInteger(index)) {\n throw new Error(\"Index must be an integer\");\n }\n\n if (index < 0 || index >= this.length) {\n throw new RangeError(\n `Index ${index} out of bounds (0 - ${this.length - 1})`\n );\n }\n }\n\n // Resize internal storage\n private resize(newCapacity: number): void {\n const newData = new Array<T | undefined>(newCapacity);\n for (let i = 0; i < this.length; i++) {\n newData[i] = this.data[i];\n }\n this.data = newData;\n this.capacity = newCapacity;\n }\n\n // Get element\n get(index: number): T | undefined {\n this.checkBounds(index);\n return this.data[index];\n }\n\n // Set element\n set(index: number, value: T): void {\n this.checkBounds(index);\n this.data[index] = value;\n }\n\n // Append element\n push(value: T): void {\n if (this.length === this.capacity) {\n this.resize(this.capacity * 2);\n }\n\n this.data[this.length] = value;\n this.length++;\n }\n\n // Remove and return last element\n pop(): T | undefined {\n if (this.length === 0) {\n return undefined;\n }\n\n const value = this.data[this.length - 1];\n this.data[this.length - 1] = undefined;\n this.length--;\n\n // Optional shrink (avoid memory waste)\n if (this.length > 0 && this.length <= this.capacity / 4) {\n this.resize(Math.max(4, Math.floor(this.capacity / 2)));\n }\n\n return value;\n }\n\n // Insert at index\n insert(index: number, value: T): void {\n if (index < 0 || index > this.length) {\n throw new RangeError(`Index ${index} out of bounds`);\n }\n\n if (this.length === this.capacity) {\n this.resize(this.capacity * 2);\n }\n\n for (let i = this.length; i > index; i--) {\n this.data[i] = this.data[i - 1];\n }\n\n this.data[index] = value;\n this.length++;\n }\n\n // Remove element at index\n removeAt(index: number): T | undefined {\n this.checkBounds(index);\n\n const removed = this.data[index];\n\n for (let i = index; i < this.length - 1; i++) {\n this.data[i] = this.data[i + 1];\n }\n\n this.data[this.length - 1] = undefined;\n this.length--;\n\n return removed;\n }\n\n // Check if value exists\n contains(value: T): boolean {\n for (let i = 0; i < this.length; i++) {\n if (this.data[i] === value) {\n return true;\n }\n }\n return false;\n }\n\n // Convert to JS array\n toArray(): T[] {\n return this.data.slice(0, this.length) as T[];\n }\n\n // Clear array\n clear(): void {\n this.data = new Array<T | undefined>(this.capacity);\n this.length = 0;\n }\n\n // Iterator support\n *[Symbol.iterator](): Iterator<T> {\n for (let i = 0; i < this.length; i++) {\n yield this.data[i] as T;\n }\n }\n\n // String representation\n toString(): string {\n return `DynamicArray(size=${this.length}, capacity=${\n this.capacity\n }) [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * StaticArray\n * -----------\n * A fixed-size array implementation.\n *\n * Characteristics:\n * - Size is defined at creation time and cannot be changed\n * - O(1) access by index\n * - Bounds-safe\n * - Generic\n * - Iterable\n *\n * Use cases:\n * - Fixed buffers\n * - Memory-sensitive systems\n * - Game grids / tiles\n * - Algorithm demonstrations\n */\n\nexport class StaticArray<T> implements Iterable<T> {\n private readonly capacity: number;\n private readonly data: (T | undefined)[];\n\n /**\n * Creates a static array with a fixed size.\n * @param size Total capacity of the array\n * @param initialValue Optional default value for all indices\n */\n constructor(size: number, initialValue?: T) {\n if (!Number.isInteger(size) || size <= 0) {\n throw new Error(\"StaticArray size must be a positive integer\");\n }\n\n this.capacity = size;\n this.data = new Array<T | undefined>(size);\n\n if (initialValue !== undefined) {\n this.fill(initialValue);\n }\n }\n\n // Returns the size (capacity) of the array\n size(): number {\n return this.capacity;\n }\n\n // Checks if the index is within bounds\n private checkBounds(index: number): void {\n if (!Number.isInteger(index)) {\n throw new Error(\"Index must be an integer\");\n }\n\n if (index < 0 || index >= this.capacity) {\n throw new RangeError(\n `Index ${index} out of bounds (0 - ${this.capacity - 1})`\n );\n }\n }\n\n // Gets value at index\n get(index: number): T | undefined {\n this.checkBounds(index);\n return this.data[index];\n }\n\n // Sets value at index\n set(index: number, value: T): void {\n this.checkBounds(index);\n this.data[index] = value;\n }\n\n // Fills entire array with a value\n fill(value: T): void {\n for (let i = 0; i < this.capacity; i++) {\n this.data[i] = value;\n }\n }\n\n // Clears the array (sets all values to undefined)\n clear(): void {\n for (let i = 0; i < this.capacity; i++) {\n this.data[i] = undefined;\n }\n }\n\n // Checks whether the array contains a value\n contains(value: T): boolean {\n for (let i = 0; i < this.capacity; i++) {\n if (this.data[i] === value) {\n return true;\n }\n }\n return false;\n }\n\n // Finds the first index of a value\n indexOf(value: T): number {\n for (let i = 0; i < this.capacity; i++) {\n if (this.data[i] === value) {\n return i;\n }\n }\n return -1;\n }\n\n // Converts StaticArray to a standard JS array\n toArray(): (T | undefined)[] {\n return [...this.data];\n }\n\n // Iterator support (for...of)\n *[Symbol.iterator](): Iterator<T> {\n for (let i = 0; i < this.capacity; i++) {\n const value = this.data[i];\n if (value !== undefined) {\n yield value;\n }\n }\n }\n\n // Executes a callback for each element\n forEach(callback: (value: T | undefined, index: number) => void): void {\n for (let i = 0; i < this.capacity; i++) {\n callback(this.data[i], i);\n }\n }\n\n // Creates a shallow copy of the StaticArray\n clone(): StaticArray<T> {\n const copy = new StaticArray<T>(this.capacity);\n for (let i = 0; i < this.capacity; i++) {\n copy.data[i] = this.data[i];\n }\n return copy;\n }\n\n // String representation\n toString(): string {\n return `StaticArray(${this.capacity}) [${this.data.join(\", \")}]`;\n }\n}\n","/**\n * AdjacencyList\n * -------------\n * A generic adjacency list data structure.\n *\n * Characteristics:\n * - Stores neighbors for each vertex\n * - Supports weighted or unweighted edges\n * - No traversal or algorithms included\n *\n * Intended to be used as a building block\n * for Graph / DirectedGraph implementations.\n */\n\nexport interface AdjacentEdge<T = string> {\n to: T;\n weight?: number;\n}\n\nexport class AdjacencyList<T = string> {\n private list: Map<T, AdjacentEdge<T>[]> = new Map();\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (!this.list.has(vertex)) {\n this.list.set(vertex, []);\n }\n }\n\n removeVertex(vertex: T): void {\n this.list.delete(vertex);\n\n for (const edges of this.list.values()) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === vertex) {\n edges.splice(i, 1);\n }\n }\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.list.has(vertex);\n }\n\n getVertices(): T[] {\n return Array.from(this.list.keys());\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight?: number): void {\n this.addVertex(from);\n this.addVertex(to);\n\n this.list.get(from)!.push({ to, weight });\n }\n\n removeEdge(from: T, to: T): void {\n const edges = this.list.get(from);\n if (!edges) return;\n\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === to) {\n edges.splice(i, 1);\n }\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n return this.list.get(from)?.some((e) => e.to === to) ?? false;\n }\n\n getEdges(vertex: T): AdjacentEdge<T>[] {\n return this.list.get(vertex)?.slice() ?? [];\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n clear(): void {\n this.list.clear();\n }\n\n size(): number {\n return this.list.size;\n }\n}\n\nexport default AdjacencyList;\n","/**\n * AdjacencyMatrix\n * ---------------\n * Matrix-based graph representation.\n *\n * Characteristics:\n * - Directed or Undirected\n * - Weighted or Unweighted\n * - Dense graph friendly\n * - No traversal or algorithms included\n *\n * Internally maps vertices to indices.\n */\n\nexport class AdjacencyMatrix<T = string> {\n private readonly directed: boolean;\n private matrix: number[][];\n private vertices: T[] = [];\n private indexMap: Map<T, number> = new Map();\n\n constructor(directed: boolean = false) {\n this.directed = directed;\n this.matrix = [];\n }\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (this.indexMap.has(vertex)) return;\n\n const index = this.vertices.length;\n this.vertices.push(vertex);\n this.indexMap.set(vertex, index);\n\n // expand matrix\n for (const row of this.matrix) {\n row.push(0);\n }\n\n this.matrix.push(new Array(index + 1).fill(0));\n }\n\n removeVertex(vertex: T): void {\n const index = this.indexMap.get(vertex);\n if (index === undefined) return;\n\n // remove vertex\n this.vertices.splice(index, 1);\n this.indexMap.delete(vertex);\n\n // remove row\n this.matrix.splice(index, 1);\n\n // remove column\n for (const row of this.matrix) {\n row.splice(index, 1);\n }\n\n // reindex remaining vertices\n for (let i = index; i < this.vertices.length; i++) {\n this.indexMap.set(this.vertices[i], i);\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.indexMap.has(vertex);\n }\n\n getVertices(): T[] {\n return [...this.vertices];\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight: number = 1): void {\n this.addVertex(from);\n this.addVertex(to);\n\n const i = this.indexMap.get(from)!;\n const j = this.indexMap.get(to)!;\n\n this.matrix[i][j] = weight;\n\n if (!this.directed) {\n this.matrix[j][i] = weight;\n }\n }\n\n removeEdge(from: T, to: T): void {\n const i = this.indexMap.get(from);\n const j = this.indexMap.get(to);\n if (i === undefined || j === undefined) return;\n\n this.matrix[i][j] = 0;\n\n if (!this.directed) {\n this.matrix[j][i] = 0;\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n const i = this.indexMap.get(from);\n const j = this.indexMap.get(to);\n if (i === undefined || j === undefined) return false;\n\n return this.matrix[i][j] !== 0;\n }\n\n getWeight(from: T, to: T): number | undefined {\n const i = this.indexMap.get(from);\n const j = this.indexMap.get(to);\n if (i === undefined || j === undefined) return undefined;\n\n return this.matrix[i][j] || undefined;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n size(): number {\n return this.vertices.length;\n }\n\n clear(): void {\n this.vertices = [];\n this.indexMap.clear();\n this.matrix = [];\n }\n\n isDirected(): boolean {\n return this.directed;\n }\n\n /**\n * Returns a copy of the adjacency matrix\n */\n toMatrix(): number[][] {\n return this.matrix.map((row) => [...row]);\n }\n}\n\nexport default AdjacencyMatrix;\n","/**\n * DirectedGraph\n * -------------\n * Adjacency-list based directed graph data structure.\n *\n * Characteristics:\n * - Directed edges only\n * - Weighted or unweighted edges (stored, not processed)\n * - Includes general traversals: BFS & DFS\n *\n * Advanced algorithms should live separately.\n */\n\nexport interface DirectedEdge<T = string> {\n to: T;\n weight?: number;\n}\n\nexport class DirectedGraph<T = string> {\n private adjList: Map<T, DirectedEdge<T>[]> = new Map();\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (!this.adjList.has(vertex)) {\n this.adjList.set(vertex, []);\n }\n }\n\n removeVertex(vertex: T): void {\n this.adjList.delete(vertex);\n\n for (const edges of this.adjList.values()) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === vertex) {\n edges.splice(i, 1);\n }\n }\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.adjList.has(vertex);\n }\n\n getVertices(): T[] {\n return Array.from(this.adjList.keys());\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight?: number): void {\n this.addVertex(from);\n this.addVertex(to);\n\n this.adjList.get(from)!.push({ to, weight });\n }\n\n removeEdge(from: T, to: T): void {\n const edges = this.adjList.get(from);\n if (!edges) return;\n\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === to) {\n edges.splice(i, 1);\n }\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n return this.adjList.get(from)?.some((e) => e.to === to) ?? false;\n }\n\n getEdges(vertex: T): DirectedEdge<T>[] {\n return this.adjList.get(vertex)?.slice() ?? [];\n }\n\n /* ------------------------ Traversals ------------------------ */\n\n /**\n * Breadth-First Search (BFS)\n */\n bfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const queue: T[] = [];\n const result: T[] = [];\n\n visited.add(start);\n queue.push(start);\n\n while (queue.length > 0) {\n const vertex = queue.shift()!;\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visited.add(edge.to);\n queue.push(edge.to);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Depth-First Search (DFS)\n */\n dfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const result: T[] = [];\n\n const visit = (vertex: T): void => {\n visited.add(vertex);\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visit(edge.to);\n }\n }\n };\n\n visit(start);\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n clear(): void {\n this.adjList.clear();\n }\n\n size(): number {\n return this.adjList.size;\n }\n\n isDirected(): true {\n return true;\n }\n}\n\nexport default DirectedGraph;\n","/**\n * Graph\n * -----\n * General-purpose adjacency list graph data structure.\n *\n * Includes:\n * - Directed / Undirected graph support\n * - Weighted or unweighted edges (stored, not processed)\n * - General traversal algorithms: BFS & DFS\n *\n * Advanced algorithms (Dijkstra, MST, etc.) should live separately.\n */\n\nexport interface Edge<T = string> {\n to: T;\n weight?: number;\n}\n\nexport class Graph<T = string> {\n private readonly directed: boolean;\n private adjList: Map<T, Edge<T>[]> = new Map();\n\n constructor(directed: boolean = false) {\n this.directed = directed;\n }\n\n /* ------------------------ Vertex Operations ------------------------ */\n\n addVertex(vertex: T): void {\n if (!this.adjList.has(vertex)) {\n this.adjList.set(vertex, []);\n }\n }\n\n removeVertex(vertex: T): void {\n this.adjList.delete(vertex);\n\n for (const edges of this.adjList.values()) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === vertex) {\n edges.splice(i, 1);\n }\n }\n }\n }\n\n hasVertex(vertex: T): boolean {\n return this.adjList.has(vertex);\n }\n\n getVertices(): T[] {\n return Array.from(this.adjList.keys());\n }\n\n /* ------------------------ Edge Operations ------------------------ */\n\n addEdge(from: T, to: T, weight?: number): void {\n this.addVertex(from);\n this.addVertex(to);\n\n this.adjList.get(from)!.push({ to, weight });\n\n if (!this.directed) {\n this.adjList.get(to)!.push({ to: from, weight });\n }\n }\n\n removeEdge(from: T, to: T): void {\n const edges = this.adjList.get(from);\n if (edges) {\n for (let i = edges.length - 1; i >= 0; i--) {\n if (edges[i].to === to) {\n edges.splice(i, 1);\n }\n }\n }\n\n if (!this.directed) {\n const reverse = this.adjList.get(to);\n if (reverse) {\n for (let i = reverse.length - 1; i >= 0; i--) {\n if (reverse[i].to === from) {\n reverse.splice(i, 1);\n }\n }\n }\n }\n }\n\n hasEdge(from: T, to: T): boolean {\n return this.adjList.get(from)?.some((e) => e.to === to) ?? false;\n }\n\n getEdges(vertex: T): Edge<T>[] {\n return this.adjList.get(vertex)?.slice() ?? [];\n }\n\n /* ------------------------ Traversals ------------------------ */\n\n /**\n * Breadth-First Search (BFS)\n */\n bfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const queue: T[] = [];\n const result: T[] = [];\n\n visited.add(start);\n queue.push(start);\n\n while (queue.length > 0) {\n const vertex = queue.shift()!;\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visited.add(edge.to);\n queue.push(edge.to);\n }\n }\n }\n\n return result;\n }\n\n /**\n * Depth-First Search (DFS)\n */\n dfs(start: T): T[] {\n if (!this.adjList.has(start)) return [];\n\n const visited = new Set<T>();\n const result: T[] = [];\n\n const visit = (vertex: T): void => {\n visited.add(vertex);\n result.push(vertex);\n\n for (const edge of this.adjList.get(vertex)!) {\n if (!visited.has(edge.to)) {\n visit(edge.to);\n }\n }\n };\n\n visit(start);\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n clear(): void {\n this.adjList.clear();\n }\n\n size(): number {\n return this.adjList.size;\n }\n\n isDirected(): boolean {\n return this.directed;\n }\n}\n\nexport default Graph;\n","/**\n * ConsistentHash\n * --------------\n * Consistent hashing implementation with virtual nodes.\n *\n * Use cases:\n * - Load balancers\n * - Distributed caches\n * - Database sharding\n *\n * Characteristics:\n * - Minimal key remapping on node add/remove\n * - Supports virtual nodes (replicas)\n * - Deterministic hashing\n */\n\nexport class ConsistentHash<T extends string | number> {\n private ring = new Map<number, T>();\n private sortedKeys: number[] = [];\n private replicas: number;\n\n constructor(replicas = 100) {\n if (replicas <= 0) {\n throw new Error(\"Replicas must be greater than 0\");\n }\n this.replicas = replicas;\n }\n\n /* ------------------------ Public API ------------------------ */\n\n addNode(node: T): void {\n for (let i = 0; i < this.replicas; i++) {\n const hash = this.hash(`${node}:${i}`);\n this.ring.set(hash, node);\n this.sortedKeys.push(hash);\n }\n\n this.sortRing();\n }\n\n removeNode(node: T): void {\n for (let i = 0; i < this.replicas; i++) {\n const hash = this.hash(`${node}:${i}`);\n this.ring.delete(hash);\n const index = this.sortedKeys.indexOf(hash);\n if (index !== -1) {\n this.sortedKeys.splice(index, 1);\n }\n }\n }\n\n getNode(key: string | number): T | undefined {\n if (this.ring.size === 0) return undefined;\n\n const hash = this.hash(String(key));\n\n const index = this.findClosestIndex(hash);\n const ringKey = this.sortedKeys[index];\n\n return this.ring.get(ringKey);\n }\n\n getNodes(): T[] {\n return Array.from(new Set(this.ring.values()));\n }\n\n size(): number {\n return this.getNodes().length;\n }\n\n clear(): void {\n this.ring.clear();\n this.sortedKeys = [];\n }\n\n /* ------------------------ Internal ------------------------ */\n\n private hash(value: string): number {\n let hash = 0;\n\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) >>> 0;\n }\n\n return hash;\n }\n\n private sortRing(): void {\n this.sortedKeys.sort((a, b) => a - b);\n }\n\n private findClosestIndex(hash: number): number {\n let low = 0;\n let high = this.sortedKeys.length - 1;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (this.sortedKeys[mid] === hash) return mid;\n if (this.sortedKeys[mid] < hash) low = mid + 1;\n else high = mid - 1;\n }\n\n return low < this.sortedKeys.length ? low : 0;\n }\n}\n\nexport default ConsistentHash;\n","/**\n * HashMap\n * -------\n * A generic hash map implementation using separate chaining.\n *\n * Characteristics:\n * - Generic key-value support\n * - Handles collisions via linked lists (arrays)\n * - Automatically resizes when load factor exceeds threshold\n *\n * Time Complexity:\n * - Average: O(1)\n * - Worst: O(n)\n */\n\ntype HashEntry<K, V> = {\n key: K;\n value: V;\n};\n\nexport class HashMap<K extends string | number, V> {\n private buckets: Array<HashEntry<K, V>[]>;\n private capacity: number;\n private size: number;\n private readonly LOAD_FACTOR = 0.75;\n\n constructor(initialCapacity = 16) {\n if (initialCapacity <= 0) {\n throw new Error(\"Initial capacity must be greater than 0\");\n }\n\n this.capacity = initialCapacity;\n this.size = 0;\n this.buckets = Array.from({ length: this.capacity }, () => []);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n set(key: K, value: V): void {\n const index = this.hash(key);\n const bucket = this.buckets[index];\n\n for (const entry of bucket) {\n if (entry.key === key) {\n entry.value = value;\n return;\n }\n }\n\n bucket.push({ key, value });\n this.size++;\n\n if (this.size / this.capacity > this.LOAD_FACTOR) {\n this.resize();\n }\n }\n\n get(key: K): V | undefined {\n const index = this.hash(key);\n const bucket = this.buckets[index];\n\n for (const entry of bucket) {\n if (entry.key === key) {\n return entry.value;\n }\n }\n\n return undefined;\n }\n\n has(key: K): boolean {\n return this.get(key) !== undefined;\n }\n\n delete(key: K): boolean {\n const index = this.hash(key);\n const bucket = this.buckets[index];\n\n const entryIndex = bucket.findIndex((e) => e.key === key);\n if (entryIndex === -1) return false;\n\n bucket.splice(entryIndex, 1);\n this.size--;\n return true;\n }\n\n clear(): void {\n this.buckets = Array.from({ length: this.capacity }, () => []);\n this.size = 0;\n }\n\n keys(): K[] {\n return this.buckets.flatMap((bucket) => bucket.map((e) => e.key));\n }\n\n values(): V[] {\n return this.buckets.flatMap((bucket) => bucket.map((e) => e.value));\n }\n\n entries(): Array<[K, V]> {\n return this.buckets.flatMap((bucket) =>\n bucket.map((e) => [e.key, e.value] as [K, V])\n );\n }\n\n getSize(): number {\n return this.size;\n }\n\n getCapacity(): number {\n return this.capacity;\n }\n\n /* ------------------------ Internal ------------------------ */\n\n private hash(key: K): number {\n const strKey = String(key);\n let hash = 0;\n\n for (let i = 0; i < strKey.length; i++) {\n hash = (hash * 31 + strKey.charCodeAt(i)) % this.capacity;\n }\n\n return hash;\n }\n\n private resize(): void {\n const oldBuckets = this.buckets;\n this.capacity *= 2;\n this.size = 0;\n this.buckets = Array.from({ length: this.capacity }, () => []);\n\n for (const bucket of oldBuckets) {\n for (const entry of bucket) {\n this.set(entry.key, entry.value);\n }\n }\n }\n}\n\nexport default HashMap;\n","/**\n * HashSet\n * -------\n * A generic hash set implementation built on top of HashMap.\n *\n * Characteristics:\n * - Stores unique values only\n * - Backed by HashMap for O(1) average operations\n *\n * Time Complexity:\n * - Average: O(1)\n * - Worst: O(n)\n */\n\nimport HashMap from \"./HashMap.js\";\n\nexport class HashSet<T extends string | number> {\n private map: HashMap<T, boolean>;\n\n constructor(initialCapacity = 16) {\n this.map = new HashMap<T, boolean>(initialCapacity);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n add(value: T): void {\n this.map.set(value, true);\n }\n\n has(value: T): boolean {\n return this.map.has(value);\n }\n\n delete(value: T): boolean {\n return this.map.delete(value);\n }\n\n clear(): void {\n this.map.clear();\n }\n\n size(): number {\n return this.map.getSize();\n }\n\n values(): T[] {\n return this.map.keys();\n }\n\n /* ------------------------ Utility ------------------------ */\n\n isEmpty(): boolean {\n return this.size() === 0;\n }\n}\n\nexport default HashSet;\n","export class Node<T> {\n value: T;\n next: Node<T> | null = null;\n prev: Node<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n","import { Node } from \"./Node.js\";\n\nexport class DoublyLinkedList<T> implements Iterable<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n private length = 0;\n\n size(): number {\n return this.length;\n }\n\n add(value: T): void {\n const node = new Node(value);\n\n if (!this.head) {\n this.head = this.tail = node;\n } else {\n node.prev = this.tail;\n this.tail!.next = node;\n this.tail = node;\n }\n\n this.length++;\n }\n\n remove(value: T): boolean {\n let current = this.head;\n\n while (current) {\n if (current.value === value) {\n if (current.prev) current.prev.next = current.next;\n else this.head = current.next;\n\n if (current.next) current.next.prev = current.prev;\n else this.tail = current.prev;\n\n this.length--;\n return true;\n }\n current = current.next;\n }\n\n return false;\n }\n\n toArray(): T[] {\n return [...this];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n let current = this.head;\n while (current) {\n yield current.value;\n current = current.next;\n }\n }\n}\n","/**\n * LFUCache\n * --------\n * Least Frequently Used cache implementation.\n *\n * Eviction rules:\n * 1. Evict the lowest frequency\n * 2. If tie, evict least recently used (LRU)\n *\n * Uses:\n * - HashMap for O(1) lookup\n * - Frequency Map → DoublyLinkedList for LRU ordering\n */\n\nimport { DoublyLinkedList } from \"../linked-list/DoublyLinkedList.js\";\n\ntype CacheEntry<K, V> = {\n key: K;\n value: V;\n freq: number;\n};\n\nexport class LFUCache<K extends string | number, V> {\n private capacity: number;\n private size: number = 0;\n private minFreq: number = 0;\n\n private cache = new Map<K, CacheEntry<K, V>>();\n private freqMap = new Map<number, DoublyLinkedList<CacheEntry<K, V>>>();\n\n constructor(capacity: number) {\n if (capacity <= 0) {\n throw new Error(\"Capacity must be greater than 0\");\n }\n this.capacity = capacity;\n }\n\n /* ------------------------ Public API ------------------------ */\n\n get(key: K): V | undefined {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n this.updateFrequency(entry);\n return entry.value;\n }\n\n put(key: K, value: V): void {\n if (this.capacity === 0) return;\n\n const existing = this.cache.get(key);\n if (existing) {\n existing.value = value;\n this.updateFrequency(existing);\n return;\n }\n\n if (this.size >= this.capacity) {\n this.evictLFU();\n }\n\n const entry: CacheEntry<K, V> = {\n key,\n value,\n freq: 1,\n };\n\n this.cache.set(key, entry);\n this.getFreqList(1).add(entry);\n this.minFreq = 1;\n this.size++;\n }\n\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n sizeOf(): number {\n return this.size;\n }\n\n clear(): void {\n this.cache.clear();\n this.freqMap.clear();\n this.size = 0;\n this.minFreq = 0;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private updateFrequency(entry: CacheEntry<K, V>): void {\n const oldFreq = entry.freq;\n const oldList = this.freqMap.get(oldFreq)!;\n\n oldList.remove(entry);\n\n if (oldFreq === this.minFreq && oldList.size() === 0) {\n this.minFreq++;\n }\n\n entry.freq++;\n this.getFreqList(entry.freq).add(entry);\n }\n\n private evictLFU(): void {\n const list = this.freqMap.get(this.minFreq);\n if (!list) return;\n\n // LRU eviction → first element in DLL\n const [lruEntry] = list.toArray();\n if (!lruEntry) return;\n\n list.remove(lruEntry);\n this.cache.delete(lruEntry.key);\n this.size--;\n }\n\n private getFreqList(freq: number): DoublyLinkedList<CacheEntry<K, V>> {\n let list = this.freqMap.get(freq);\n if (!list) {\n list = new DoublyLinkedList<CacheEntry<K, V>>();\n this.freqMap.set(freq, list);\n }\n return list;\n }\n}\n\nexport default LFUCache;\n","/**\n * LRUCache\n * --------\n * Least Recently Used (LRU) Cache implementation.\n *\n * Characteristics:\n * - O(1) get and put operations\n * - Evicts least recently used item when capacity is exceeded\n *\n * Data Structures Used:\n * - HashMap for fast lookup\n * - Doubly Linked List for usage order\n */\n\ntype Node<K, V> = {\n key: K;\n value: V;\n prev: Node<K, V> | null;\n next: Node<K, V> | null;\n};\n\nexport class LRUCache<K extends string | number, V> {\n private capacity: number;\n private cache: Map<K, Node<K, V>>;\n private head: Node<K, V> | null;\n private tail: Node<K, V> | null;\n\n constructor(capacity: number) {\n if (capacity <= 0) {\n throw new Error(\"Capacity must be greater than 0\");\n }\n\n this.capacity = capacity;\n this.cache = new Map();\n this.head = null;\n this.tail = null;\n }\n\n /* ------------------------ Public API ------------------------ */\n\n get(key: K): V | undefined {\n const node = this.cache.get(key);\n if (!node) return undefined;\n\n this.moveToFront(node);\n return node.value;\n }\n\n put(key: K, value: V): void {\n const existingNode = this.cache.get(key);\n\n if (existingNode) {\n existingNode.value = value;\n this.moveToFront(existingNode);\n return;\n }\n\n const newNode: Node<K, V> = {\n key,\n value,\n prev: null,\n next: null,\n };\n\n this.cache.set(key, newNode);\n this.addToFront(newNode);\n\n if (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed();\n }\n }\n\n has(key: K): boolean {\n return this.cache.has(key);\n }\n\n size(): number {\n return this.cache.size;\n }\n\n clear(): void {\n this.cache.clear();\n this.head = null;\n this.tail = null;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private addToFront(node: Node<K, V>): void {\n node.prev = null;\n node.next = this.head;\n\n if (this.head) {\n this.head.prev = node;\n }\n\n this.head = node;\n\n if (!this.tail) {\n this.tail = node;\n }\n }\n\n private removeNode(node: Node<K, V>): void {\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n this.head = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n this.tail = node.prev;\n }\n\n node.prev = null;\n node.next = null;\n }\n\n private moveToFront(node: Node<K, V>): void {\n if (node === this.head) return;\n\n this.removeNode(node);\n this.addToFront(node);\n }\n\n private evictLeastRecentlyUsed(): void {\n if (!this.tail) return;\n\n const lruKey = this.tail.key;\n this.removeNode(this.tail);\n this.cache.delete(lruKey);\n }\n}\n\nexport default LRUCache;\n","/**\n * BinaryHeap\n * ----------\n * A generic binary heap implementation.\n *\n * By default this is a min-heap.\n * You can create a max-heap by providing a custom comparator.\n *\n * Time Complexity:\n * - Insert: O(log n)\n * - Extract: O(log n)\n * - Peek: O(1)\n */\n\nexport class BinaryHeap<T> {\n private heap: T[] = [];\n private readonly compare: (a: T, b: T) => number;\n\n constructor(comparator?: (a: T, b: T) => number, initial?: T[]) {\n this.compare =\n comparator ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n\n if (initial && initial.length > 0) {\n this.heap = [...initial];\n this.heapify();\n }\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n this.heap.push(value);\n this.siftUp(this.heap.length - 1);\n }\n\n extract(): T | undefined {\n if (this.heap.length === 0) return undefined;\n if (this.heap.length === 1) return this.heap.pop();\n\n const root = this.heap[0];\n this.heap[0] = this.heap.pop()!;\n this.siftDown(0);\n return root;\n }\n\n peek(): T | undefined {\n return this.heap[0];\n }\n\n size(): number {\n return this.heap.length;\n }\n\n isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n toArray(): T[] {\n return [...this.heap];\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private heapify(): void {\n for (let i = Math.floor(this.heap.length / 2) - 1; i >= 0; i--) {\n this.siftDown(i);\n }\n }\n\n private siftUp(index: number): void {\n let current = index;\n\n while (current > 0) {\n const parent = Math.floor((current - 1) / 2);\n if (this.compare(this.heap[current], this.heap[parent]) >= 0) {\n break;\n }\n this.swap(current, parent);\n current = parent;\n }\n }\n\n private siftDown(index: number): void {\n let current = index;\n const length = this.heap.length;\n\n while (true) {\n const left = current * 2 + 1;\n const right = current * 2 + 2;\n let smallest = current;\n\n if (\n left < length &&\n this.compare(this.heap[left], this.heap[smallest]) < 0\n ) {\n smallest = left;\n }\n\n if (\n right < length &&\n this.compare(this.heap[right], this.heap[smallest]) < 0\n ) {\n smallest = right;\n }\n\n if (smallest === current) break;\n\n this.swap(current, smallest);\n current = smallest;\n }\n }\n\n private swap(i: number, j: number): void {\n [this.heap[i], this.heap[j]] = [this.heap[j], this.heap[i]];\n }\n}\n\nexport default BinaryHeap;\n","/**\n * FibonacciHeap\n * -------------\n * Amortized-optimal heap supporting:\n * - insert: O(1)\n * - findMin: O(1)\n * - merge: O(1)\n * - decreaseKey: O(1) amortized\n * - extractMin: O(log n) amortized\n */\n\nexport class FibNode<T> {\n key: T;\n parent: FibNode<T> | null = null;\n children: FibNode<T>[] = [];\n mark = false;\n\n constructor(key: T) {\n this.key = key;\n }\n}\n\nexport class FibonacciHeap<T> {\n private roots: FibNode<T>[] = [];\n private minNode: FibNode<T> | null = null;\n private _size = 0;\n private readonly compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ---------------- Public API ---------------- */\n\n insert(key: T): FibNode<T> {\n const node = new FibNode(key);\n this.roots.push(node);\n if (!this.minNode || this.compare(key, this.minNode.key) < 0) {\n this.minNode = node;\n }\n this._size++;\n return node;\n }\n\n findMin(): T | undefined {\n return this.minNode?.key;\n }\n\n size(): number {\n return this._size;\n }\n\n isEmpty(): boolean {\n return this._size === 0;\n }\n\n merge(other: FibonacciHeap<T>): void {\n for (const r of other.roots) {\n this.roots.push(r);\n }\n\n if (\n other.minNode &&\n (!this.minNode || this.compare(other.minNode.key, this.minNode.key) < 0)\n ) {\n this.minNode = other.minNode;\n }\n\n this._size += other._size;\n other.clear();\n }\n\n extractMin(): T | undefined {\n if (!this.minNode) return undefined;\n\n const min = this.minNode;\n\n // move children to root list\n for (const child of min.children) {\n child.parent = null;\n this.roots.push(child);\n }\n\n // remove min from roots\n this.roots = this.roots.filter((r) => r !== min);\n this._size--;\n\n if (this.roots.length === 0) {\n this.minNode = null;\n return min.key;\n }\n\n this.consolidate();\n return min.key;\n }\n\n decreaseKey(node: FibNode<T>, newKey: T): void {\n if (this.compare(newKey, node.key) > 0) {\n throw new Error(\"New key is greater than current key\");\n }\n\n node.key = newKey;\n const parent = node.parent;\n\n if (parent && this.compare(node.key, parent.key) < 0) {\n this.cut(node, parent);\n this.cascadingCut(parent);\n }\n\n if (this.minNode && this.compare(node.key, this.minNode.key) < 0) {\n this.minNode = node;\n }\n }\n\n clear(): void {\n this.roots = [];\n this.minNode = null;\n this._size = 0;\n }\n\n /* ---------------- Internal Logic ---------------- */\n\n private consolidate(): void {\n const table = new Map<number, FibNode<T>>();\n\n for (const node of [...this.roots]) {\n let x = node;\n let d = x.children.length;\n\n while (table.has(d)) {\n let y = table.get(d)!;\n if (this.compare(y.key, x.key) < 0) {\n [x, y] = [y, x];\n }\n this.link(y, x);\n table.delete(d);\n d = x.children.length;\n }\n table.set(d, x);\n }\n\n this.roots = [];\n this.minNode = null;\n\n for (const n of table.values()) {\n this.roots.push(n);\n if (!this.minNode || this.compare(n.key, this.minNode.key) < 0) {\n this.minNode = n;\n }\n }\n }\n\n private link(y: FibNode<T>, x: FibNode<T>): void {\n this.roots = this.roots.filter((r) => r !== y);\n y.parent = x;\n y.mark = false;\n x.children.push(y);\n }\n\n private cut(x: FibNode<T>, y: FibNode<T>): void {\n y.children = y.children.filter((c) => c !== x);\n x.parent = null;\n x.mark = false;\n this.roots.push(x);\n }\n\n private cascadingCut(y: FibNode<T>): void {\n const z = y.parent;\n if (!z) return;\n\n if (!y.mark) {\n y.mark = true;\n } else {\n this.cut(y, z);\n this.cascadingCut(z);\n }\n }\n}\n\nexport default FibonacciHeap;\n","/**\n * MaxHeap\n * -------\n * A specialized MaxHeap implementation built on top of BinaryHeap.\n *\n * Characteristics:\n * - Always extracts the maximum element\n * - O(log n) insert & extract\n * - O(1) peek\n */\n\nimport BinaryHeap from \"./BinaryHeap.js\";\n\nexport class MaxHeap<T> extends BinaryHeap<T> {\n constructor(initial?: T[]) {\n super((a: any, b: any) => (a > b ? -1 : a < b ? 1 : 0), initial);\n }\n}\n\nexport default MaxHeap;\n","/**\n * MinHeap\n * -------\n * A specialized MinHeap implementation built on top of BinaryHeap.\n *\n * Characteristics:\n * - Always extracts the minimum element\n * - O(log n) insert & extract\n * - O(1) peek\n */\n\nimport BinaryHeap from \"./BinaryHeap.js\";\n\nexport class MinHeap<T> extends BinaryHeap<T> {\n constructor(initial?: T[]) {\n super((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0), initial);\n }\n}\n\nexport default MinHeap;\n","/**\n * PairingHeap\n * -----------\n * A self-adjusting heap with excellent practical performance.\n *\n * Time Complexity (amortized):\n * - insert: O(1)\n * - merge: O(1)\n * - findMin: O(1)\n * - extractMin: O(log n)\n * - decreaseKey: O(log n)\n *\n * Simpler and safer than Fibonacci Heap.\n */\n\nexport class PairingNode<T> {\n key: T;\n child: PairingNode<T> | null = null;\n sibling: PairingNode<T> | null = null;\n parent: PairingNode<T> | null = null;\n\n constructor(key: T) {\n this.key = key;\n }\n}\n\nexport class PairingHeap<T> {\n private root: PairingNode<T> | null = null;\n private _size = 0;\n private readonly compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(key: T): PairingNode<T> {\n const node = new PairingNode(key);\n this.root = this.mergeNodes(this.root, node);\n this._size++;\n return node;\n }\n\n findMin(): T | undefined {\n return this.root?.key;\n }\n\n size(): number {\n return this._size;\n }\n\n isEmpty(): boolean {\n return this._size === 0;\n }\n\n merge(other: PairingHeap<T>): void {\n if (!other.root) return;\n\n this.root = this.mergeNodes(this.root, other.root);\n this._size += other._size;\n\n other.clear();\n }\n\n extractMin(): T | undefined {\n if (!this.root) return undefined;\n\n const min = this.root.key;\n if (!this.root.child) {\n this.root = null;\n } else {\n this.root = this.combineSiblings(this.root.child);\n this.root.parent = null;\n }\n\n this._size--;\n return min;\n }\n\n decreaseKey(node: PairingNode<T>, newKey: T): void {\n if (this.compare(newKey, node.key) > 0) {\n throw new Error(\"New key is greater than current key\");\n }\n\n node.key = newKey;\n if (node !== this.root) {\n this.cut(node);\n this.root = this.mergeNodes(this.root, node);\n }\n }\n\n clear(): void {\n this.root = null;\n this._size = 0;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private mergeNodes(\n a: PairingNode<T> | null,\n b: PairingNode<T> | null\n ): PairingNode<T> | null {\n if (!a) return b;\n if (!b) return a;\n\n if (this.compare(a.key, b.key) <= 0) {\n // a becomes parent of b\n b.parent = a;\n b.sibling = a.child;\n a.child = b;\n return a;\n } else {\n // b becomes parent of a\n a.parent = b;\n a.sibling = b.child;\n b.child = a;\n return b;\n }\n }\n\n /**\n * Two-pass pairing: first pair siblings, then merge back\n */\n private combineSiblings(first: PairingNode<T>): PairingNode<T> {\n const siblings: PairingNode<T>[] = [];\n\n // detach siblings\n let current: PairingNode<T> | null = first;\n while (current) {\n const next = current.sibling;\n current.sibling = null;\n siblings.push(current);\n current = next;\n }\n\n // first pass: pairwise merge\n const merged: PairingNode<T>[] = [];\n for (let i = 0; i < siblings.length; i += 2) {\n if (i + 1 < siblings.length) {\n merged.push(this.mergeNodes(siblings[i], siblings[i + 1])!);\n } else {\n merged.push(siblings[i]);\n }\n }\n\n // second pass: merge from right to left\n let result = merged[merged.length - 1];\n for (let i = merged.length - 2; i >= 0; i--) {\n result = this.mergeNodes(merged[i], result)!;\n }\n\n return result;\n }\n\n private cut(node: PairingNode<T>): void {\n const parent = node.parent;\n if (!parent) return;\n\n if (parent.child === node) {\n parent.child = node.sibling;\n } else {\n let current = parent.child;\n while (current && current.sibling !== node) {\n current = current.sibling;\n }\n if (current) {\n current.sibling = node.sibling;\n }\n }\n\n node.parent = null;\n node.sibling = null;\n }\n}\n\nexport default PairingHeap;\n","import { Node } from \"./Node.js\";\n\nexport class CircularLinkedList<T> implements Iterable<T> {\n private tail: Node<T> | null = null;\n private length = 0;\n\n size(): number {\n return this.length;\n }\n\n add(value: T): void {\n const node = new Node(value);\n\n if (!this.tail) {\n node.next = node;\n this.tail = node;\n } else {\n node.next = this.tail.next;\n this.tail.next = node;\n this.tail = node;\n }\n\n this.length++;\n }\n\n remove(value: T): boolean {\n if (!this.tail) return false;\n\n let current = this.tail.next!;\n let prev = this.tail;\n\n do {\n if (current.value === value) {\n if (current === this.tail && current.next === current) {\n this.tail = null;\n } else {\n prev.next = current.next;\n if (current === this.tail) {\n this.tail = prev;\n }\n }\n this.length--;\n return true;\n }\n prev = current;\n current = current.next!;\n } while (current !== this.tail.next);\n\n return false;\n }\n\n toArray(): T[] {\n return [...this];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n if (!this.tail) return;\n\n let current = this.tail.next!;\n do {\n yield current.value;\n current = current.next!;\n } while (current !== this.tail.next);\n }\n}","import { Node } from \"./Node.js\";\n\nexport class SinglyLinkedList<T> implements Iterable<T> {\n private head: Node<T> | null = null;\n private tail: Node<T> | null = null;\n private length = 0;\n\n size(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n add(value: T): void {\n const node = new Node(value);\n\n if (!this.head) {\n this.head = this.tail = node;\n } else {\n this.tail!.next = node;\n this.tail = node;\n }\n\n this.length++;\n }\n\n remove(value: T): boolean {\n if (!this.head) return false;\n\n if (this.head.value === value) {\n this.head = this.head.next;\n if (!this.head) this.tail = null;\n this.length--;\n return true;\n }\n\n let current = this.head;\n while (current.next) {\n if (current.next.value === value) {\n if (current.next === this.tail) {\n this.tail = current;\n }\n current.next = current.next.next;\n this.length--;\n return true;\n }\n current = current.next;\n }\n\n return false;\n }\n\n contains(value: T): boolean {\n for (const v of this) {\n if (v === value) return true;\n }\n return false;\n }\n\n toArray(): T[] {\n return [...this];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n let current = this.head;\n while (current) {\n yield current.value;\n current = current.next;\n }\n }\n}\n","/**\n * BloomFilter\n * -----------\n * A probabilistic data structure for fast membership testing.\n *\n * Characteristics:\n * - No false negatives\n * - Possible false positives\n * - Space efficient\n * - Insert & lookup only\n *\n * Time Complexity:\n * - add: O(k)\n * - contains: O(k)\n */\n\nexport class BloomFilter {\n private readonly size: number;\n private readonly hashCount: number;\n private readonly bits: Uint8Array;\n\n constructor(size: number, hashCount: number) {\n if (size <= 0 || hashCount <= 0) {\n throw new Error(\"BloomFilter size and hashCount must be > 0\");\n }\n\n this.size = size;\n this.hashCount = hashCount;\n this.bits = new Uint8Array(size);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: string): void {\n const hashes = this.getHashes(value);\n for (const hash of hashes) {\n this.bits[hash] = 1;\n }\n }\n\n contains(value: string): boolean {\n const hashes = this.getHashes(value);\n for (const hash of hashes) {\n if (this.bits[hash] === 0) {\n return false;\n }\n }\n return true;\n }\n\n clear(): void {\n this.bits.fill(0);\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n private getHashes(value: string): number[] {\n const hashes: number[] = [];\n\n let hash1 = this.hash(value, 5381);\n let hash2 = this.hash(value, 52711);\n\n for (let i = 0; i < this.hashCount; i++) {\n const combined = (hash1 + i * hash2) % this.size;\n hashes.push(combined);\n }\n\n return hashes;\n }\n\n private hash(str: string, seed: number): number {\n let hash = seed;\n for (let i = 0; i < str.length; i++) {\n hash = (hash * 33) ^ str.charCodeAt(i);\n }\n return Math.abs(hash) % this.size;\n }\n}\n\nexport default BloomFilter;\n","/**\n * CountMinSketch\n * --------------\n * A probabilistic data structure for frequency estimation.\n *\n * Guarantees:\n * - Estimated count >= true count\n * - No false negatives\n *\n * Time Complexity:\n * - update: O(d)\n * - estimate: O(d)\n */\n\nexport class CountMinSketch {\n private readonly width: number;\n private readonly depth: number;\n private readonly table: number[][];\n private readonly seeds: number[];\n\n constructor(width: number, depth: number) {\n if (width <= 0 || depth <= 0) {\n throw new Error(\"Width and depth must be greater than 0\");\n }\n\n this.width = width;\n this.depth = depth;\n\n this.table = Array.from({ length: depth }, () =>\n Array<number>(width).fill(0)\n );\n\n // Different seeds for each hash function\n this.seeds = Array.from({ length: depth }, (_, i) => i * 73856093 + 17);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n /**\n * Increments the count of an item\n */\n update(value: string, count: number = 1): void {\n if (count <= 0) return;\n\n for (let i = 0; i < this.depth; i++) {\n const index = this.hash(value, this.seeds[i]);\n this.table[i][index] += count;\n }\n }\n\n /**\n * Returns the estimated frequency of an item\n */\n estimate(value: string): number {\n let min = Infinity;\n\n for (let i = 0; i < this.depth; i++) {\n const index = this.hash(value, this.seeds[i]);\n min = Math.min(min, this.table[i][index]);\n }\n\n return min === Infinity ? 0 : min;\n }\n\n clear(): void {\n for (let i = 0; i < this.depth; i++) {\n this.table[i].fill(0);\n }\n }\n\n /* ------------------------ Hashing ------------------------ */\n\n private hash(value: string, seed: number): number {\n let hash = seed;\n for (let i = 0; i < value.length; i++) {\n hash = (hash * 31 + value.charCodeAt(i)) >>> 0;\n }\n return hash % this.width;\n }\n}\n\nexport default CountMinSketch;","/**\n * HyperLogLog\n * -----------\n * Probabilistic data structure for cardinality estimation.\n *\n * Guarantees:\n * - Approximates number of distinct elements\n * - Small memory footprint\n *\n * Error rate ≈ 1.04 / sqrt(m)\n * where m = number of registers\n */\n\nexport class HyperLogLog {\n private readonly p: number;\n private readonly m: number;\n private readonly registers: Uint8Array;\n private readonly alpha: number;\n\n constructor(p: number = 10) {\n // p controls accuracy & memory\n // p=10 → 1024 registers → ~3.25% error\n if (p < 4 || p > 16) {\n throw new Error(\"p must be between 4 and 16\");\n }\n\n this.p = p;\n this.m = 1 << p;\n this.registers = new Uint8Array(this.m);\n this.alpha = this.getAlpha(this.m);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: string): void {\n const hash = this.hash(value);\n const index = hash >>> (32 - this.p);\n const remaining = (hash << this.p) | (1 << (this.p - 1));\n const rank = this.countLeadingZeros(remaining) + 1;\n\n this.registers[index] = Math.max(this.registers[index], rank);\n }\n\n count(): number {\n let sum = 0;\n let zeros = 0;\n\n for (const r of this.registers) {\n sum += Math.pow(2, -r);\n if (r === 0) zeros++;\n }\n\n let estimate = this.alpha * this.m * this.m / sum;\n\n // Small range correction (linear counting)\n if (estimate <= 2.5 * this.m && zeros > 0) {\n estimate = this.m * Math.log(this.m / zeros);\n }\n\n return Math.round(estimate);\n }\n\n clear(): void {\n this.registers.fill(0);\n }\n\n /* ------------------------ Hashing ------------------------ */\n\n private hash(value: string): number {\n // 32-bit FNV-1a\n let hash = 2166136261;\n for (let i = 0; i < value.length; i++) {\n hash ^= value.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n }\n\n private countLeadingZeros(x: number): number {\n return Math.clz32(x);\n }\n\n /* ------------------------ Constants ------------------------ */\n\n private getAlpha(m: number): number {\n switch (m) {\n case 16:\n return 0.673;\n case 32:\n return 0.697;\n case 64:\n return 0.709;\n default:\n return 0.7213 / (1 + 1.079 / m);\n }\n }\n}\n\nexport default HyperLogLog;","/**\n * CircularQueue\n * -------------\n * Fixed-size circular FIFO queue.\n *\n * Characteristics:\n * - O(1) enqueue / dequeue\n * - Fixed capacity\n *\n * Use cases:\n * - Ring buffers\n * - Real-time systems\n */\n\nexport class CircularQueue<T> {\n private data: (T | undefined)[];\n private head = 0;\n private tail = 0;\n private length = 0;\n\n constructor(private readonly capacity: number) {\n if (!Number.isInteger(capacity) || capacity <= 0) {\n throw new Error(\"Capacity must be a positive integer\");\n }\n\n this.data = new Array<T | undefined>(capacity);\n }\n\n size(): number {\n return this.length;\n }\n\n isEmpty(): boolean {\n return this.length === 0;\n }\n\n isFull(): boolean {\n return this.length === this.capacity;\n }\n\n enqueue(value: T): void {\n if (this.isFull()) {\n throw new Error(\"CircularQueue is full\");\n }\n\n this.data[this.tail] = value;\n this.tail = (this.tail + 1) % this.capacity;\n this.length++;\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.data[this.head];\n this.data[this.head] = undefined;\n this.head = (this.head + 1) % this.capacity;\n this.length--;\n\n return value;\n }\n\n peek(): T | undefined {\n return this.isEmpty() ? undefined : this.data[this.head];\n }\n\n clear(): void {\n this.data = new Array<T | undefined>(this.capacity);\n this.head = 0;\n this.tail = 0;\n this.length = 0;\n }\n\n toArray(): T[] {\n const result: T[] = [];\n for (let i = 0; i < this.length; i++) {\n result.push(this.data[(this.head + i) % this.capacity] as T);\n }\n return result;\n }\n\n toString(): string {\n return `CircularQueue [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * Deque\n * -----\n * Double-ended queue.\n *\n * Characteristics:\n * - O(1) add/remove from both ends\n *\n * Use cases:\n * - Sliding window problems\n * - Palindrome checking\n */\n\nexport class Deque<T> {\n private items: T[] = [];\n\n size(): number {\n return this.items.length;\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n pushFront(value: T): void {\n this.items.unshift(value);\n }\n\n pushBack(value: T): void {\n this.items.push(value);\n }\n\n popFront(): T | undefined {\n return this.items.shift();\n }\n\n popBack(): T | undefined {\n return this.items.pop();\n }\n\n peekFront(): T | undefined {\n return this.items[0];\n }\n\n peekBack(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n clear(): void {\n this.items.length = 0;\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toString(): string {\n return `Deque [${this.items.join(\", \")}]`;\n }\n}\n","/**\n * PriorityQueue (Min-Heap)\n * ------------------------\n * Elements with lower priority value are dequeued first.\n *\n * Characteristics:\n * - O(log n) enqueue / dequeue\n *\n * Use cases:\n * - Dijkstra / A*\n * - Task scheduling\n */\n\ntype PriorityNode<T> = {\n value: T;\n priority: number;\n};\n\nexport class PriorityQueue<T> {\n private heap: PriorityNode<T>[] = [];\n\n size(): number {\n return this.heap.length;\n }\n\n isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(value: T, priority: number): void {\n this.heap.push({ value, priority });\n this.bubbleUp();\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const root = this.heap[0];\n const last = this.heap.pop()!;\n\n if (!this.isEmpty()) {\n this.heap[0] = last;\n this.bubbleDown();\n }\n\n return root.value;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.value;\n }\n\n private bubbleUp(): void {\n let index = this.heap.length - 1;\n\n while (index > 0) {\n const parent = Math.floor((index - 1) / 2);\n if (this.heap[parent].priority <= this.heap[index].priority) break;\n\n [this.heap[parent], this.heap[index]] = [\n this.heap[index],\n this.heap[parent],\n ];\n\n index = parent;\n }\n }\n\n private bubbleDown(): void {\n let index = 0;\n\n while (true) {\n const left = index * 2 + 1;\n const right = index * 2 + 2;\n let smallest = index;\n\n if (\n left < this.heap.length &&\n this.heap[left].priority < this.heap[smallest].priority\n ) {\n smallest = left;\n }\n\n if (\n right < this.heap.length &&\n this.heap[right].priority < this.heap[smallest].priority\n ) {\n smallest = right;\n }\n\n if (smallest === index) break;\n\n [this.heap[index], this.heap[smallest]] = [\n this.heap[smallest],\n this.heap[index],\n ];\n\n index = smallest;\n }\n }\n\n toString(): string {\n return `PriorityQueue [${this.heap\n .map((n) => `${n.value}:${n.priority}`)\n .join(\", \")}]`;\n }\n}\n","/**\n * Queue\n * -----\n * FIFO (First In First Out) queue.\n *\n * Characteristics:\n * - O(1) enqueue / dequeue (amortized)\n * - Generic\n *\n * Use cases:\n * - Task scheduling\n * - Event processing\n * - BFS traversal\n */\n\nexport class Queue<T> {\n private items: T[] = [];\n private head = 0;\n\n size(): number {\n return this.items.length - this.head;\n }\n\n isEmpty(): boolean {\n return this.size() === 0;\n }\n\n enqueue(value: T): void {\n this.items.push(value);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.items[this.head];\n this.head++;\n\n // Compact memory occasionally\n if (this.head > 50 && this.head * 2 >= this.items.length) {\n this.items = this.items.slice(this.head);\n this.head = 0;\n }\n\n return value;\n }\n\n peek(): T | undefined {\n return this.isEmpty() ? undefined : this.items[this.head];\n }\n\n clear(): void {\n this.items = [];\n this.head = 0;\n }\n\n toArray(): T[] {\n return this.items.slice(this.head);\n }\n\n toString(): string {\n return `Queue [${this.toArray().join(\", \")}]`;\n }\n}\n","/**\n * Disjoint Set Union (Union-Find)\n * ------------------------------\n * Data structure that keeps track of a partition of a set into\n * disjoint (non-overlapping) subsets.\n *\n * Optimizations:\n * - Path compression\n * - Union by rank\n *\n * Time Complexity (amortized):\n * - find: O(α(n))\n * - union: O(α(n))\n * - connected: O(α(n))\n */\n\nexport class DisjointSetUnion<T = number> {\n private parent: Map<T, T> = new Map();\n private rank: Map<T, number> = new Map();\n\n /* ------------------------ Core Operations ------------------------ */\n\n /**\n * Creates a new set containing `x` if it doesn't exist.\n */\n makeSet(x: T): void {\n if (!this.parent.has(x)) {\n this.parent.set(x, x);\n this.rank.set(x, 0);\n }\n }\n\n /**\n * Finds the representative (root) of the set containing `x`.\n * Applies path compression.\n */\n find(x: T): T {\n if (!this.parent.has(x)) {\n throw new Error(\"Element not found in DisjointSetUnion\");\n }\n\n const parent = this.parent.get(x)!;\n if (parent !== x) {\n const root = this.find(parent);\n this.parent.set(x, root);\n return root;\n }\n\n return x;\n }\n\n /**\n * Unions the sets containing `x` and `y`.\n */\n union(x: T, y: T): void {\n this.makeSet(x);\n this.makeSet(y);\n\n let rootX = this.find(x);\n let rootY = this.find(y);\n\n if (rootX === rootY) return;\n\n const rankX = this.rank.get(rootX)!;\n const rankY = this.rank.get(rootY)!;\n\n if (rankX < rankY) {\n this.parent.set(rootX, rootY);\n } else if (rankX > rankY) {\n this.parent.set(rootY, rootX);\n } else {\n this.parent.set(rootY, rootX);\n this.rank.set(rootX, rankX + 1);\n }\n }\n\n /**\n * Checks whether `x` and `y` belong to the same set.\n */\n connected(x: T, y: T): boolean {\n if (!this.parent.has(x) || !this.parent.has(y)) {\n return false;\n }\n return this.find(x) === this.find(y);\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n /**\n * Returns the number of disjoint sets.\n */\n countSets(): number {\n const roots = new Set<T>();\n for (const x of this.parent.keys()) {\n roots.add(this.find(x));\n }\n return roots.size;\n }\n\n /**\n * Returns all elements.\n */\n elements(): T[] {\n return Array.from(this.parent.keys());\n }\n\n /**\n * Clears all sets.\n */\n clear(): void {\n this.parent.clear();\n this.rank.clear();\n }\n\n /**\n * Returns total number of elements.\n */\n size(): number {\n return this.parent.size;\n }\n}\n\nexport default DisjointSetUnion;\n","/**\n * MultiSet (Bag)\n * --------------\n * A set-like data structure that allows duplicate elements\n * and tracks the count of each element.\n *\n * Characteristics:\n * - Elements can appear multiple times\n * - Count-based operations\n * - No ordering guarantees\n */\n\nexport class MultiSet<T> implements Iterable<[T, number]> {\n private store: Map<T, number>;\n\n constructor(iterable?: Iterable<T>) {\n this.store = new Map();\n if (iterable) {\n for (const value of iterable) {\n this.add(value);\n }\n }\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: T, count: number = 1): void {\n if (count <= 0) return;\n this.store.set(value, (this.store.get(value) ?? 0) + count);\n }\n\n remove(value: T, count: number = 1): boolean {\n const current = this.store.get(value);\n if (current === undefined) return false;\n\n if (count >= current) {\n this.store.delete(value);\n } else {\n this.store.set(value, current - count);\n }\n return true;\n }\n\n clear(): void {\n this.store.clear();\n }\n\n /* ------------------------ Query Operations ------------------------ */\n\n has(value: T): boolean {\n return this.store.has(value);\n }\n\n count(value: T): number {\n return this.store.get(value) ?? 0;\n }\n\n size(): number {\n let total = 0;\n for (const c of this.store.values()) {\n total += c;\n }\n return total;\n }\n\n distinctSize(): number {\n return this.store.size;\n }\n\n isEmpty(): boolean {\n return this.store.size === 0;\n }\n\n values(): T[] {\n const result: T[] = [];\n for (const [value, count] of this.store) {\n for (let i = 0; i < count; i++) {\n result.push(value);\n }\n }\n return result;\n }\n\n entries(): Array<[T, number]> {\n return Array.from(this.store.entries());\n }\n\n /* ------------------------ Multiset Operations ------------------------ */\n\n /**\n * Union: max(countA, countB)\n */\n union(other: MultiSet<T>): MultiSet<T> {\n const result = new MultiSet<T>();\n\n for (const [value, count] of this.store) {\n result.add(value, count);\n }\n\n for (const [value, count] of other.store) {\n const existing = result.count(value);\n if (count > existing) {\n result.store.set(value, count);\n }\n }\n\n return result;\n }\n\n /**\n * Intersection: min(countA, countB)\n */\n intersection(other: MultiSet<T>): MultiSet<T> {\n const result = new MultiSet<T>();\n\n for (const [value, count] of this.store) {\n const minCount = Math.min(count, other.count(value));\n if (minCount > 0) {\n result.add(value, minCount);\n }\n }\n\n return result;\n }\n\n /**\n * Difference: countA - countB (floor at 0)\n */\n difference(other: MultiSet<T>): MultiSet<T> {\n const result = new MultiSet<T>();\n\n for (const [value, count] of this.store) {\n const remaining = count - other.count(value);\n if (remaining > 0) {\n result.add(value, remaining);\n }\n }\n\n return result;\n }\n\n /* ------------------------ Iteration ------------------------ */\n\n [Symbol.iterator](): Iterator<[T, number]> {\n return this.store[Symbol.iterator]();\n }\n}\n\nexport default MultiSet;\n","/**\n * OrderedSet\n * ----------\n * A set data structure that preserves insertion order.\n *\n * Characteristics:\n * - Unique elements\n * - Deterministic iteration order\n * - Supports standard set operations\n *\n * Backed by Map to guarantee order.\n */\n\nexport class OrderedSet<T> implements Iterable<T> {\n private store: Map<T, true>;\n\n constructor(iterable?: Iterable<T>) {\n this.store = new Map();\n if (iterable) {\n for (const value of iterable) {\n this.add(value);\n }\n }\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: T): void {\n this.store.set(value, true);\n }\n\n delete(value: T): boolean {\n return this.store.delete(value);\n }\n\n has(value: T): boolean {\n return this.store.has(value);\n }\n\n clear(): void {\n this.store.clear();\n }\n\n /* ------------------------ Query Operations ------------------------ */\n\n size(): number {\n return this.store.size;\n }\n\n isEmpty(): boolean {\n return this.store.size === 0;\n }\n\n values(): T[] {\n return Array.from(this.store.keys());\n }\n\n /* ------------------------ Ordered Utilities ------------------------ */\n\n first(): T | undefined {\n return this.store.keys().next().value;\n }\n\n last(): T | undefined {\n let last: T | undefined;\n for (const key of this.store.keys()) {\n last = key;\n }\n return last;\n }\n\n /* ------------------------ Set Operations ------------------------ */\n\n union(other: OrderedSet<T>): OrderedSet<T> {\n const result = new OrderedSet<T>();\n for (const v of this) result.add(v);\n for (const v of other) result.add(v);\n return result;\n }\n\n intersection(other: OrderedSet<T>): OrderedSet<T> {\n const result = new OrderedSet<T>();\n for (const v of this) {\n if (other.has(v)) {\n result.add(v);\n }\n }\n return result;\n }\n\n difference(other: OrderedSet<T>): OrderedSet<T> {\n const result = new OrderedSet<T>();\n for (const v of this) {\n if (!other.has(v)) {\n result.add(v);\n }\n }\n return result;\n }\n\n isSubsetOf(other: OrderedSet<T>): boolean {\n for (const v of this) {\n if (!other.has(v)) {\n return false;\n }\n }\n return true;\n }\n\n isSupersetOf(other: OrderedSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n /* ------------------------ Iteration ------------------------ */\n\n [Symbol.iterator](): Iterator<T> {\n return this.store.keys();\n }\n}\n\nexport default OrderedSet;\n","/**\n * Set\n * ---\n * A generic Set data structure abstraction.\n *\n * Characteristics:\n * - Stores unique elements\n * - No ordering guarantees\n * - Supports standard set operations\n *\n * Internally backed by JavaScript's Set,\n * but exposes a clean, controlled API.\n */\n\nexport class Set<T> implements Iterable<T> {\n private store: globalThis.Set<T>;\n\n constructor(iterable?: Iterable<T>) {\n this.store = new globalThis.Set(iterable);\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n add(value: T): void {\n this.store.add(value);\n }\n\n delete(value: T): boolean {\n return this.store.delete(value);\n }\n\n has(value: T): boolean {\n return this.store.has(value);\n }\n\n clear(): void {\n this.store.clear();\n }\n\n /* ------------------------ Query Operations ------------------------ */\n\n size(): number {\n return this.store.size;\n }\n\n isEmpty(): boolean {\n return this.store.size === 0;\n }\n\n values(): T[] {\n return Array.from(this.store);\n }\n\n /* ------------------------ Set Operations ------------------------ */\n\n union(other: Set<T>): Set<T> {\n const result = new Set<T>(this.store);\n for (const value of other.store) {\n result.add(value);\n }\n return result;\n }\n\n intersection(other: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const value of this.store) {\n if (other.has(value)) {\n result.add(value);\n }\n }\n return result;\n }\n\n difference(other: Set<T>): Set<T> {\n const result = new Set<T>();\n for (const value of this.store) {\n if (!other.has(value)) {\n result.add(value);\n }\n }\n return result;\n }\n\n isSubsetOf(other: Set<T>): boolean {\n for (const value of this.store) {\n if (!other.has(value)) {\n return false;\n }\n }\n return true;\n }\n\n isSupersetOf(other: Set<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n /* ------------------------ Iteration ------------------------ */\n\n [Symbol.iterator](): Iterator<T> {\n return this.store[Symbol.iterator]();\n }\n}\n\nexport default Set;\n","/**\n * KDTree (k-dimensional tree)\n * ---------------------------\n * A space-partitioning data structure for organizing points\n * in a k-dimensional space.\n *\n * Use cases:\n * - Nearest neighbor search\n * - Range queries\n * - Spatial indexing\n *\n * Characteristics:\n * - Binary tree\n * - Splits space by alternating dimensions\n *\n * Time Complexity (average):\n * - Build: O(n log n)\n * - Insert: O(log n)\n * - Search: O(log n)\n */\n\nexport type Point = number[];\n\nclass KDNode<T = any> {\n point: Point;\n value?: T;\n axis: number;\n left: KDNode<T> | null = null;\n right: KDNode<T> | null = null;\n\n constructor(point: Point, axis: number, value?: T) {\n this.point = point;\n this.axis = axis;\n this.value = value;\n }\n}\n\nexport class KDTree<T = any> {\n private root: KDNode<T> | null = null;\n private readonly k: number;\n\n constructor(\n points?: Array<{ point: Point; value?: T }>,\n dimensions?: number\n ) {\n if (points && points.length > 0) {\n this.k = points[0].point.length;\n this.root = this.build(points, 0);\n } else if (dimensions !== undefined) {\n this.k = dimensions;\n } else {\n throw new Error(\"KDTree requires points or dimension count\");\n }\n }\n\n /* ------------------------ Core Operations ------------------------ */\n\n insert(point: Point, value?: T): void {\n if (point.length !== this.k) {\n throw new Error(\"Point dimensionality mismatch\");\n }\n this.root = this.insertNode(this.root, point, value, 0);\n }\n\n contains(point: Point): boolean {\n return !!this.findNode(this.root, point, 0);\n }\n\n /* ------------------------ Nearest Neighbor ------------------------ */\n\n nearest(target: Point): { point: Point; value?: T } | null {\n if (!this.root) return null;\n if (target.length !== this.k) {\n throw new Error(\"Point dimensionality mismatch\");\n }\n\n let bestPoint: Point | null = null;\n let bestValue: T | undefined = undefined;\n let bestDist = Infinity;\n\n const search = (node: KDNode<T> | null): void => {\n if (!node) return;\n\n const dist = this.distanceSquared(target, node.point);\n if (dist < bestDist) {\n bestDist = dist;\n bestPoint = node.point;\n bestValue = node.value;\n }\n\n const axis = node.axis;\n const diff = target[axis] - node.point[axis];\n\n const near = diff < 0 ? node.left : node.right;\n const far = diff < 0 ? node.right : node.left;\n\n search(near);\n\n if (diff * diff < bestDist) {\n search(far);\n }\n };\n\n search(this.root);\n\n return bestPoint ? { point: bestPoint, value: bestValue } : null;\n }\n\n /* ------------------------ Range Query ------------------------ */\n\n rangeSearch(min: Point, max: Point): Array<{ point: Point; value?: T }> {\n if (min.length !== this.k || max.length !== this.k) {\n throw new Error(\"Point dimensionality mismatch\");\n }\n\n const result: Array<{ point: Point; value?: T }> = [];\n\n const search = (node: KDNode<T> | null): void => {\n if (!node) return;\n\n if (this.inRange(node.point, min, max)) {\n result.push({ point: node.point, value: node.value });\n }\n\n const axis = node.axis;\n\n if (min[axis] <= node.point[axis]) {\n search(node.left);\n }\n if (max[axis] >= node.point[axis]) {\n search(node.right);\n }\n };\n\n search(this.root);\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private build(\n points: Array<{ point: Point; value?: T }>,\n depth: number\n ): KDNode<T> | null {\n if (points.length === 0) return null;\n\n const axis = depth % points[0].point.length;\n points.sort((a, b) => a.point[axis] - b.point[axis]);\n\n const median = Math.floor(points.length / 2);\n const node = new KDNode(points[median].point, axis, points[median].value);\n\n node.left = this.build(points.slice(0, median), depth + 1);\n node.right = this.build(points.slice(median + 1), depth + 1);\n\n return node;\n }\n\n private insertNode(\n node: KDNode<T> | null,\n point: Point,\n value: T | undefined,\n depth: number\n ): KDNode<T> {\n if (!node) {\n return new KDNode(point, depth % this.k, value);\n }\n\n const axis = node.axis;\n if (point[axis] < node.point[axis]) {\n node.left = this.insertNode(node.left, point, value, depth + 1);\n } else {\n node.right = this.insertNode(node.right, point, value, depth + 1);\n }\n\n return node;\n }\n\n private findNode(\n node: KDNode<T> | null,\n point: Point,\n depth: number\n ): KDNode<T> | null {\n if (!node) return null;\n\n if (this.pointsEqual(node.point, point)) {\n return node;\n }\n\n const axis = node.axis;\n if (point[axis] < node.point[axis]) {\n return this.findNode(node.left, point, depth + 1);\n }\n return this.findNode(node.right, point, depth + 1);\n }\n\n private distanceSquared(a: Point, b: Point): number {\n let sum = 0;\n for (let i = 0; i < this.k; i++) {\n const d = a[i] - b[i];\n sum += d * d;\n }\n return sum;\n }\n\n private inRange(point: Point, min: Point, max: Point): boolean {\n for (let i = 0; i < this.k; i++) {\n if (point[i] < min[i] || point[i] > max[i]) {\n return false;\n }\n }\n return true;\n }\n\n private pointsEqual(a: Point, b: Point): boolean {\n for (let i = 0; i < this.k; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n}\n\nexport default KDTree;\n","/**\n * QuadTree\n * --------\n * A 2D spatial partitioning data structure that recursively subdivides\n * space into four quadrants.\n */\n\nexport type Point2D = { x: number; y: number };\n\nexport type Rect = {\n x: number; // center x\n y: number; // center y\n w: number; // half width\n h: number; // half height\n};\n\nclass QuadNode<T = any> {\n boundary: Rect;\n capacity: number;\n points: Array<{ point: Point2D; value?: T }> = [];\n divided = false;\n\n northeast: QuadNode<T> | null = null;\n northwest: QuadNode<T> | null = null;\n southeast: QuadNode<T> | null = null;\n southwest: QuadNode<T> | null = null;\n\n constructor(boundary: Rect, capacity: number) {\n this.boundary = boundary;\n this.capacity = capacity;\n }\n\n /* ------------------------ Node Operations ------------------------ */\n\n insert(point: Point2D, value?: T): boolean {\n if (!containsPoint(this.boundary, point)) {\n return false;\n }\n\n if (this.points.length < this.capacity && !this.divided) {\n this.points.push({ point, value });\n return true;\n }\n\n if (!this.divided) {\n this.subdivide();\n }\n\n return (\n this.northeast!.insert(point, value) ||\n this.northwest!.insert(point, value) ||\n this.southeast!.insert(point, value) ||\n this.southwest!.insert(point, value)\n );\n }\n\n contains(point: Point2D): boolean {\n if (!containsPoint(this.boundary, point)) {\n return false;\n }\n\n for (const p of this.points) {\n if (p.point.x === point.x && p.point.y === point.y) {\n return true;\n }\n }\n\n if (!this.divided) return false;\n\n return (\n this.northeast!.contains(point) ||\n this.northwest!.contains(point) ||\n this.southeast!.contains(point) ||\n this.southwest!.contains(point)\n );\n }\n\n query(range: Rect, found: Array<{ point: Point2D; value?: T }>): void {\n if (!intersects(this.boundary, range)) {\n return;\n }\n\n for (const p of this.points) {\n if (containsPoint(range, p.point)) {\n found.push(p);\n }\n }\n\n if (!this.divided) return;\n\n this.northeast!.query(range, found);\n this.northwest!.query(range, found);\n this.southeast!.query(range, found);\n this.southwest!.query(range, found);\n }\n\n /* ------------------------ Subdivision ------------------------ */\n\n private subdivide(): void {\n const { x, y, w, h } = this.boundary;\n const hw = w / 2;\n const hh = h / 2;\n\n this.northeast = new QuadNode(\n { x: x + hw, y: y - hh, w: hw, h: hh },\n this.capacity\n );\n this.northwest = new QuadNode(\n { x: x - hw, y: y - hh, w: hw, h: hh },\n this.capacity\n );\n this.southeast = new QuadNode(\n { x: x + hw, y: y + hh, w: hw, h: hh },\n this.capacity\n );\n this.southwest = new QuadNode(\n { x: x - hw, y: y + hh, w: hw, h: hh },\n this.capacity\n );\n\n this.divided = true;\n }\n}\n\n/* ------------------------ QuadTree ------------------------ */\n\nexport class QuadTree<T = any> {\n private root: QuadNode<T>;\n\n constructor(boundary: Rect, capacity: number = 4) {\n if (capacity <= 0) {\n throw new Error(\"QuadTree capacity must be greater than 0\");\n }\n this.root = new QuadNode(boundary, capacity);\n }\n\n insert(point: Point2D, value?: T): boolean {\n return this.root.insert(point, value);\n }\n\n contains(point: Point2D): boolean {\n return this.root.contains(point);\n }\n\n query(range: Rect): Array<{ point: Point2D; value?: T }> {\n const result: Array<{ point: Point2D; value?: T }> = [];\n this.root.query(range, result);\n return result;\n }\n\n clear(): void {\n this.root = new QuadNode(this.root.boundary, this.root.capacity);\n }\n}\n\n/* ------------------------ Geometry Helpers ------------------------ */\n\nfunction containsPoint(rect: Rect, point: Point2D): boolean {\n return (\n point.x >= rect.x - rect.w &&\n point.x <= rect.x + rect.w &&\n point.y >= rect.y - rect.h &&\n point.y <= rect.y + rect.h\n );\n}\n\nfunction intersects(a: Rect, b: Rect): boolean {\n return !(\n b.x - b.w > a.x + a.w ||\n b.x + b.w < a.x - a.w ||\n b.y - b.h > a.y + a.h ||\n b.y + b.h < a.y - a.h\n );\n}\n\nexport default QuadTree;","/**\n * MaxStack\n * --------\n * Stack with constant-time maximum lookup.\n *\n * Characteristics:\n * - O(1) push / pop / getMax\n * - Uses auxiliary stack\n *\n * Use cases:\n * - Sliding window problems\n * - Game stat tracking\n */\n\nexport class MaxStack<T> {\n private stack: T[] = [];\n private maxStack: T[] = [];\n\n size(): number {\n return this.stack.length;\n }\n\n isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n push(value: T): void {\n this.stack.push(value);\n\n if (\n this.maxStack.length === 0 ||\n value >= this.maxStack[this.maxStack.length - 1]\n ) {\n this.maxStack.push(value);\n }\n }\n\n pop(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.stack.pop() as T;\n\n if (value === this.maxStack[this.maxStack.length - 1]) {\n this.maxStack.pop();\n }\n\n return value;\n }\n\n peek(): T | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getMax(): T | undefined {\n return this.maxStack[this.maxStack.length - 1];\n }\n\n clear(): void {\n this.stack.length = 0;\n this.maxStack.length = 0;\n }\n\n toArray(): T[] {\n return [...this.stack];\n }\n\n toString(): string {\n return `MaxStack [${this.stack.join(\", \")}]`;\n }\n}\n","/**\n * MinStack\n * --------\n * Stack with constant-time minimum lookup.\n *\n * Characteristics:\n * - O(1) push / pop / getMin\n * - Uses auxiliary stack\n *\n * Use cases:\n * - Range queries\n * - Algorithm optimization\n */\n\nexport class MinStack<T> {\n private stack: T[] = [];\n private minStack: T[] = [];\n\n size(): number {\n return this.stack.length;\n }\n\n isEmpty(): boolean {\n return this.stack.length === 0;\n }\n\n push(value: T): void {\n this.stack.push(value);\n\n if (\n this.minStack.length === 0 ||\n value <= this.minStack[this.minStack.length - 1]\n ) {\n this.minStack.push(value);\n }\n }\n\n pop(): T | undefined {\n if (this.isEmpty()) return undefined;\n\n const value = this.stack.pop() as T;\n\n if (value === this.minStack[this.minStack.length - 1]) {\n this.minStack.pop();\n }\n\n return value;\n }\n\n peek(): T | undefined {\n return this.stack[this.stack.length - 1];\n }\n\n getMin(): T | undefined {\n return this.minStack[this.minStack.length - 1];\n }\n\n clear(): void {\n this.stack.length = 0;\n this.minStack.length = 0;\n }\n\n toArray(): T[] {\n return [...this.stack];\n }\n\n toString(): string {\n return `MinStack [${this.stack.join(\", \")}]`;\n }\n}\n","/**\n * Stack\n * -----\n * LIFO (Last In First Out) stack implementation.\n *\n * Characteristics:\n * - O(1) push / pop / peek\n * - Generic\n * - Iterable (top → bottom)\n *\n * Use cases:\n * - Function calls\n * - Undo/redo systems\n * - Expression evaluation\n */\n\nexport class Stack<T> implements Iterable<T> {\n protected items: T[] = [];\n\n size(): number {\n return this.items.length;\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n push(value: T): void {\n this.items.push(value);\n }\n\n pop(): T | undefined {\n return this.items.pop();\n }\n\n peek(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n clear(): void {\n this.items.length = 0;\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n *[Symbol.iterator](): Iterator<T> {\n for (let i = this.items.length - 1; i >= 0; i--) {\n yield this.items[i];\n }\n }\n\n toString(): string {\n return `Stack [${this.items.join(\", \")}]`;\n }\n}\n","/**\n * SuffixArray\n * -----------\n * Data structure that stores the sorted order of all suffixes of a string.\n *\n * Use cases:\n * - Fast substring search\n * - Pattern matching\n * - Longest repeated substring\n * - Longest common prefix (with LCP)\n *\n * Construction:\n * - O(n log n) using prefix-doubling\n */\n\nexport class SuffixArray {\n private readonly text: string;\n private readonly suffixArray: number[];\n\n constructor(text: string) {\n this.text = text;\n this.suffixArray = this.buildSuffixArray(text);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Returns the suffix array (indices of sorted suffixes)\n */\n getArray(): number[] {\n return [...this.suffixArray];\n }\n\n /**\n * Returns the original string\n */\n getText(): string {\n return this.text;\n }\n\n /**\n * Returns the suffix at a given position in the suffix array\n */\n getSuffix(i: number): string {\n if (i < 0 || i >= this.suffixArray.length) {\n throw new RangeError(\"Index out of bounds\");\n }\n return this.text.slice(this.suffixArray[i]);\n }\n\n /**\n * Number of suffixes\n */\n size(): number {\n return this.suffixArray.length;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private buildSuffixArray(s: string): number[] {\n const n = s.length;\n if (n === 0) return [];\n\n let sa = new Array<number>(n);\n let rank = new Array<number>(n);\n let temp = new Array<number>(n);\n\n // initial ranking by characters\n for (let i = 0; i < n; i++) {\n sa[i] = i;\n rank[i] = s.charCodeAt(i);\n }\n\n for (let k = 1; k < n; k <<= 1) {\n sa.sort((a, b) => {\n if (rank[a] !== rank[b]) {\n return rank[a] - rank[b];\n }\n const ra = a + k < n ? rank[a + k] : -1;\n const rb = b + k < n ? rank[b + k] : -1;\n return ra - rb;\n });\n\n temp[sa[0]] = 0;\n for (let i = 1; i < n; i++) {\n const prev = sa[i - 1];\n const curr = sa[i];\n\n const same =\n rank[prev] === rank[curr] &&\n (prev + k < n ? rank[prev + k] : -1) ===\n (curr + k < n ? rank[curr + k] : -1);\n\n temp[curr] = same ? temp[prev] : temp[prev] + 1;\n }\n\n for (let i = 0; i < n; i++) {\n rank[i] = temp[i];\n }\n\n // optimization: all ranks are unique\n if (rank[sa[n - 1]] === n - 1) break;\n }\n\n return sa;\n }\n}\n\nexport default SuffixArray;","/**\n * SuffixTree\n * ----------\n * A compressed trie of all suffixes of a string.\n *\n * Implementation:\n * - Ukkonen's algorithm (online, O(n))\n * - Uses implicit end index for leaf edges\n *\n * Use cases:\n * - Fast substring queries\n * - Longest repeated substring\n * - Pattern matching\n */\n\nclass End {\n value: number;\n constructor(value: number) {\n this.value = value;\n }\n}\n\nclass SuffixTreeNode {\n children: Map<string, SuffixTreeNode> = new Map();\n start: number;\n end: End;\n suffixLink: SuffixTreeNode | null = null;\n\n constructor(start: number, end: End) {\n this.start = start;\n this.end = end;\n }\n\n edgeLength(currentEnd: number): number {\n return Math.min(this.end.value, currentEnd + 1) - this.start;\n }\n}\n\nexport class SuffixTree {\n private readonly text: string;\n private readonly root: SuffixTreeNode;\n\n private activeNode: SuffixTreeNode;\n private activeEdge = -1;\n private activeLength = 0;\n\n private remainingSuffixCount = 0;\n private readonly leafEnd: End = new End(-1);\n\n constructor(text: string) {\n this.text = text;\n this.root = new SuffixTreeNode(-1, new End(-1));\n this.activeNode = this.root;\n\n this.build();\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Checks if a pattern exists in the text.\n * (Traversal only; no extra algorithms.)\n */\n contains(pattern: string): boolean {\n if (pattern.length === 0) return true;\n\n let node = this.root;\n let i = 0;\n\n while (i < pattern.length) {\n const edge = node.children.get(pattern[i]);\n if (!edge) return false;\n\n let k = edge.start;\n const end = Math.min(edge.end.value, this.text.length - 1);\n\n // walk along edge\n while (k <= end && i < pattern.length) {\n if (this.text[k] !== pattern[i]) return false;\n k++;\n i++;\n }\n\n // pattern finished (possibly mid-edge) → success\n if (i === pattern.length) {\n return true;\n }\n\n // edge fully consumed → move to child node\n node = edge;\n }\n\n return true;\n }\n\n /**\n * Returns the original text\n */\n getText(): string {\n return this.text;\n }\n\n /* ------------------------ Construction ------------------------ */\n\n private build(): void {\n for (let i = 0; i < this.text.length; i++) {\n this.extend(i);\n }\n }\n\n private extend(pos: number): void {\n this.leafEnd.value = pos;\n this.remainingSuffixCount++;\n\n let lastNewNode: SuffixTreeNode | null = null;\n\n while (this.remainingSuffixCount > 0) {\n if (this.activeLength === 0) {\n this.activeEdge = pos;\n }\n\n const edgeChar = this.text[this.activeEdge];\n let next = this.activeNode.children.get(edgeChar);\n\n if (!next) {\n // Rule 2 (new leaf)\n const leaf = new SuffixTreeNode(pos, this.leafEnd);\n this.activeNode.children.set(edgeChar, leaf);\n\n if (lastNewNode) {\n lastNewNode.suffixLink = this.activeNode;\n lastNewNode = null;\n }\n } else {\n if (this.walkDown(next, pos)) continue;\n\n if (this.text[next.start + this.activeLength] === this.text[pos]) {\n // Rule 3 (already exists)\n if (lastNewNode && this.activeNode !== this.root) {\n lastNewNode.suffixLink = this.activeNode;\n lastNewNode = null;\n }\n this.activeLength++;\n break;\n }\n\n // Rule 2 (split)\n const splitEnd = new End(next.start + this.activeLength);\n const split = new SuffixTreeNode(next.start, splitEnd);\n\n this.activeNode.children.set(edgeChar, split);\n\n const leaf = new SuffixTreeNode(pos, this.leafEnd);\n split.children.set(this.text[pos], leaf);\n\n next.start += this.activeLength;\n split.children.set(this.text[next.start], next);\n\n if (lastNewNode) {\n lastNewNode.suffixLink = split;\n }\n\n lastNewNode = split;\n }\n\n this.remainingSuffixCount--;\n\n if (this.activeNode === this.root && this.activeLength > 0) {\n this.activeLength--;\n this.activeEdge = pos - this.remainingSuffixCount + 1;\n } else if (this.activeNode !== this.root) {\n this.activeNode = this.activeNode.suffixLink ?? this.root;\n }\n }\n }\n\n private walkDown(node: SuffixTreeNode, pos: number): boolean {\n const length = node.edgeLength(pos);\n if (this.activeLength >= length) {\n this.activeEdge += length;\n this.activeLength -= length;\n this.activeNode = node;\n return true;\n }\n return false;\n }\n}\n\nexport default SuffixTree;\n","/**\n * SparseTable\n * -----------\n * Data structure for answering range queries on static arrays.\n *\n * Supports:\n * - Range Min Query (RMQ)\n * - Range Max Query\n * - Any idempotent operation\n *\n * Constraints:\n * - Array is immutable\n * - Operation must be associative\n * - Operation should be idempotent for O(1) queries\n *\n * Time Complexity:\n * - Build: O(n log n)\n * - Query: O(1)\n */\n\nexport class SparseTable<T> {\n private readonly n: number;\n private readonly log: number[];\n private readonly table: T[][];\n private readonly combine: (a: T, b: T) => T;\n\n constructor(arr: T[], combine: (a: T, b: T) => T) {\n if (arr.length === 0) {\n throw new Error(\"SparseTable requires a non-empty array\");\n }\n\n this.n = arr.length;\n this.combine = combine;\n\n // Precompute logs\n this.log = new Array(this.n + 1).fill(0);\n for (let i = 2; i <= this.n; i++) {\n this.log[i] = this.log[Math.floor(i / 2)] + 1;\n }\n\n const maxK = this.log[this.n];\n this.table = Array.from({ length: maxK + 1 }, () =>\n new Array<T>(this.n)\n );\n\n // Base level (k = 0)\n for (let i = 0; i < this.n; i++) {\n this.table[0][i] = arr[i];\n }\n\n // Build higher levels\n for (let k = 1; k <= maxK; k++) {\n const len = 1 << k;\n for (let i = 0; i + len <= this.n; i++) {\n this.table[k][i] = this.combine(\n this.table[k - 1][i],\n this.table[k - 1][i + (len >> 1)]\n );\n }\n }\n }\n\n /* ------------------------ Query ------------------------ */\n\n /**\n * Queries range [l, r] inclusive\n */\n query(l: number, r: number): T {\n if (l < 0 || r >= this.n || l > r) {\n throw new Error(\"Invalid query range\");\n }\n\n const length = r - l + 1;\n const k = this.log[length];\n\n return this.combine(\n this.table[k][l],\n this.table[k][r - (1 << k) + 1]\n );\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n size(): number {\n return this.n;\n }\n}\n\nexport default SparseTable;","/**\n * AVLTree\n * -------\n * Self-balancing Binary Search Tree (AVL).\n *\n * Properties:\n * - Balance factor = height(left) - height(right)\n * - Balance factor ∈ {-1, 0, 1}\n *\n * Guarantees:\n * - O(log n) insert, delete, search\n */\n\nclass AVLNode<T> {\n value: T;\n left: AVLNode<T> | null = null;\n right: AVLNode<T> | null = null;\n height: number = 0;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class AVLTree<T> {\n private root: AVLNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n this.root = this.insertNode(this.root, value);\n }\n\n remove(value: T): void {\n this.root = this.removeNode(this.root, value);\n }\n\n contains(value: T): boolean {\n return this.search(this.root, value);\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n preorder(): T[] {\n const result: T[] = [];\n this.preorderTraverse(this.root, result);\n return result;\n }\n\n postorder(): T[] {\n const result: T[] = [];\n this.postorderTraverse(this.root, result);\n return result;\n }\n\n height(): number {\n return this.nodeHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private insertNode(node: AVLNode<T> | null, value: T): AVLNode<T> {\n if (!node) return new AVLNode(value);\n\n const cmp = this.compare(value, node.value);\n if (cmp < 0) node.left = this.insertNode(node.left, value);\n else if (cmp > 0) node.right = this.insertNode(node.right, value);\n else return node; // ignore duplicates\n\n this.updateHeight(node);\n return this.rebalance(node);\n }\n\n private removeNode(node: AVLNode<T> | null, value: T): AVLNode<T> | null {\n if (!node) return null;\n\n const cmp = this.compare(value, node.value);\n\n if (cmp < 0) {\n node.left = this.removeNode(node.left, value);\n } else if (cmp > 0) {\n node.right = this.removeNode(node.right, value);\n } else {\n // node found\n if (!node.left || !node.right) {\n return node.left ?? node.right;\n }\n\n const successor = this.findMin(node.right);\n node.value = successor.value;\n node.right = this.removeNode(node.right, successor.value);\n }\n\n this.updateHeight(node);\n return this.rebalance(node);\n }\n\n private search(node: AVLNode<T> | null, value: T): boolean {\n if (!node) return false;\n const cmp = this.compare(value, node.value);\n if (cmp === 0) return true;\n if (cmp < 0) return this.search(node.left, value);\n return this.search(node.right, value);\n }\n\n /* ------------------------ Rotations ------------------------ */\n\n private rotateRight(y: AVLNode<T>): AVLNode<T> {\n const x = y.left!;\n const t2 = x.right;\n\n x.right = y;\n y.left = t2;\n\n this.updateHeight(y);\n this.updateHeight(x);\n\n return x;\n }\n\n private rotateLeft(x: AVLNode<T>): AVLNode<T> {\n const y = x.right!;\n const t2 = y.left;\n\n y.left = x;\n x.right = t2;\n\n this.updateHeight(x);\n this.updateHeight(y);\n\n return y;\n }\n\n private rebalance(node: AVLNode<T>): AVLNode<T> {\n const balance = this.getBalance(node);\n\n // Left Heavy\n if (balance > 1) {\n if (this.getBalance(node.left!) < 0) {\n node.left = this.rotateLeft(node.left!); // LR\n }\n return this.rotateRight(node); // LL\n }\n\n // Right Heavy\n if (balance < -1) {\n if (this.getBalance(node.right!) > 0) {\n node.right = this.rotateRight(node.right!); // RL\n }\n return this.rotateLeft(node); // RR\n }\n\n return node;\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private nodeHeight(node: AVLNode<T> | null): number {\n return node ? node.height : -1;\n }\n\n private updateHeight(node: AVLNode<T>): void {\n node.height =\n 1 + Math.max(this.nodeHeight(node.left), this.nodeHeight(node.right));\n }\n\n private getBalance(node: AVLNode<T>): number {\n return this.nodeHeight(node.left) - this.nodeHeight(node.right);\n }\n\n private findMin(node: AVLNode<T>): AVLNode<T> {\n while (node.left) node = node.left;\n return node;\n }\n\n private inorderTraverse(node: AVLNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private preorderTraverse(node: AVLNode<T> | null, result: T[]): void {\n if (!node) return;\n result.push(node.value);\n this.preorderTraverse(node.left, result);\n this.preorderTraverse(node.right, result);\n }\n\n private postorderTraverse(node: AVLNode<T> | null, result: T[]): void {\n if (!node) return;\n this.postorderTraverse(node.left, result);\n this.postorderTraverse(node.right, result);\n result.push(node.value);\n }\n}\n\nexport default AVLTree;\n","/**\n * RedBlackTree\n * ------------\n * Self-balancing Binary Search Tree using red-black properties.\n *\n * Properties:\n * 1. Every node is either red or black\n * 2. Root is always black\n * 3. Red nodes cannot have red children\n * 4. Every path from a node to its null leaves\n * has the same number of black nodes\n *\n * Guarantees:\n * - O(log n) insert, delete, search\n */\n\nenum Color {\n RED,\n BLACK,\n}\n\nclass RBNode<T> {\n value: T;\n color: Color = Color.RED;\n left: RBNode<T> | null = null;\n right: RBNode<T> | null = null;\n parent: RBNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class RedBlackTree<T> {\n private root: RBNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n const node = new RBNode(value);\n this.root = this.bstInsert(this.root, node);\n this.fixInsert(node);\n }\n\n remove(value: T): void {\n const node = this.findNode(this.root, value);\n if (!node) return;\n this.deleteNode(node);\n }\n\n contains(value: T): boolean {\n return !!this.findNode(this.root, value);\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ BST Insert ------------------------ */\n\n private bstInsert(root: RBNode<T> | null, node: RBNode<T>): RBNode<T> {\n if (!root) return node;\n\n const cmp = this.compare(node.value, root.value);\n if (cmp < 0) {\n root.left = this.bstInsert(root.left, node);\n root.left!.parent = root;\n } else if (cmp > 0) {\n root.right = this.bstInsert(root.right, node);\n root.right!.parent = root;\n }\n // ignore duplicates\n return root;\n }\n\n /* ------------------------ Insert Fix ------------------------ */\n\n private fixInsert(node: RBNode<T>): void {\n while (node.parent && node.parent.color === Color.RED) {\n const parent = node.parent;\n const grandparent = parent.parent!;\n if (parent === grandparent.left) {\n const uncle = grandparent.right;\n if (uncle && uncle.color === Color.RED) {\n // Case 1: recolor\n parent.color = Color.BLACK;\n uncle.color = Color.BLACK;\n grandparent.color = Color.RED;\n node = grandparent;\n } else {\n if (node === parent.right) {\n // Case 2: rotate left\n node = parent;\n this.rotateLeft(node);\n }\n // Case 3: rotate right\n parent.color = Color.BLACK;\n grandparent.color = Color.RED;\n this.rotateRight(grandparent);\n }\n } else {\n const uncle = grandparent.left;\n if (uncle && uncle.color === Color.RED) {\n parent.color = Color.BLACK;\n uncle.color = Color.BLACK;\n grandparent.color = Color.RED;\n node = grandparent;\n } else {\n if (node === parent.left) {\n node = parent;\n this.rotateRight(node);\n }\n parent.color = Color.BLACK;\n grandparent.color = Color.RED;\n this.rotateLeft(grandparent);\n }\n }\n }\n this.root!.color = Color.BLACK;\n }\n\n /* ------------------------ Deletion ------------------------ */\n\n private deleteNode(node: RBNode<T>): void {\n let y = node;\n let yOriginalColor = y.color;\n let x: RBNode<T> | null;\n\n if (!node.left) {\n x = node.right;\n this.transplant(node, node.right);\n } else if (!node.right) {\n x = node.left;\n this.transplant(node, node.left);\n } else {\n y = this.minimum(node.right);\n yOriginalColor = y.color;\n x = y.right;\n\n if (y.parent === node) {\n if (x) x.parent = y;\n } else {\n this.transplant(y, y.right);\n y.right = node.right;\n y.right!.parent = y;\n }\n\n this.transplant(node, y);\n y.left = node.left;\n y.left!.parent = y;\n y.color = node.color;\n }\n\n if (yOriginalColor === Color.BLACK) {\n this.fixDelete(x, node.parent);\n }\n }\n\n private fixDelete(node: RBNode<T> | null, parent: RBNode<T> | null): void {\n while (node !== this.root && (!node || node.color === Color.BLACK)) {\n if (node === parent?.left) {\n let sibling = parent.right;\n if (sibling?.color === Color.RED) {\n sibling.color = Color.BLACK;\n parent.color = Color.RED;\n this.rotateLeft(parent);\n sibling = parent.right;\n }\n if (\n (!sibling?.left || sibling.left.color === Color.BLACK) &&\n (!sibling?.right || sibling.right.color === Color.BLACK)\n ) {\n sibling!.color = Color.RED;\n node = parent;\n parent = node.parent;\n } else {\n if (!sibling?.right || sibling.right.color === Color.BLACK) {\n if (sibling?.left) sibling.left.color = Color.BLACK;\n sibling!.color = Color.RED;\n this.rotateRight(sibling!);\n sibling = parent.right;\n }\n sibling!.color = parent.color;\n parent.color = Color.BLACK;\n if (sibling?.right) sibling.right.color = Color.BLACK;\n this.rotateLeft(parent);\n node = this.root;\n }\n } else {\n let sibling = parent?.left;\n if (sibling?.color === Color.RED) {\n sibling.color = Color.BLACK;\n parent!.color = Color.RED;\n this.rotateRight(parent!);\n sibling = parent!.left;\n }\n if (\n (!sibling?.left || sibling.left.color === Color.BLACK) &&\n (!sibling?.right || sibling.right.color === Color.BLACK)\n ) {\n sibling!.color = Color.RED;\n node = parent!;\n parent = node.parent;\n } else {\n if (!sibling?.left || sibling.left.color === Color.BLACK) {\n if (sibling?.right) sibling.right.color = Color.BLACK;\n sibling!.color = Color.RED;\n this.rotateLeft(sibling!);\n sibling = parent!.left;\n }\n sibling!.color = parent!.color;\n parent!.color = Color.BLACK;\n if (sibling?.left) sibling.left.color = Color.BLACK;\n this.rotateRight(parent!);\n node = this.root;\n }\n }\n }\n if (node) node.color = Color.BLACK;\n }\n\n /* ------------------------ Rotations ------------------------ */\n\n private rotateLeft(x: RBNode<T>): void {\n const y = x.right!;\n x.right = y.left;\n if (y.left) y.left.parent = x;\n\n y.parent = x.parent;\n if (!x.parent) this.root = y;\n else if (x === x.parent.left) x.parent.left = y;\n else x.parent.right = y;\n\n y.left = x;\n x.parent = y;\n }\n\n private rotateRight(y: RBNode<T>): void {\n const x = y.left!;\n y.left = x.right;\n if (x.right) x.right.parent = y;\n\n x.parent = y.parent;\n if (!y.parent) this.root = x;\n else if (y === y.parent.left) y.parent.left = x;\n else y.parent.right = x;\n\n x.right = y;\n y.parent = x;\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private transplant(u: RBNode<T>, v: RBNode<T> | null): void {\n if (!u.parent) this.root = v;\n else if (u === u.parent.left) u.parent.left = v;\n else u.parent.right = v;\n if (v) v.parent = u.parent;\n }\n\n private minimum(node: RBNode<T>): RBNode<T> {\n while (node.left) node = node.left;\n return node;\n }\n\n private findNode(node: RBNode<T> | null, value: T): RBNode<T> | null {\n if (!node) return null;\n const cmp = this.compare(value, node.value);\n if (cmp === 0) return node;\n if (cmp < 0) return this.findNode(node.left, value);\n return this.findNode(node.right, value);\n }\n\n private inorderTraverse(node: RBNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private calculateHeight(node: RBNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default RedBlackTree;\n","/**\n * SplayTree\n * ---------\n * Self-adjusting Binary Search Tree.\n *\n * Properties:\n * - Recently accessed elements are moved to the root\n * - Amortized O(log n) for insert, search, delete\n *\n * Splaying operations:\n * - Zig\n * - Zig-Zig\n * - Zig-Zag\n */\n\nclass SplayNode<T> {\n value: T;\n left: SplayNode<T> | null = null;\n right: SplayNode<T> | null = null;\n parent: SplayNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class SplayTree<T> {\n private root: SplayNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n if (!this.root) {\n this.root = new SplayNode(value);\n return;\n }\n\n let current: SplayNode<T> | null = this.root;\n let parent: SplayNode<T> | null = null;\n\n while (current) {\n parent = current;\n const cmp = this.compare(value, current.value);\n if (cmp < 0) current = current.left;\n else if (cmp > 0) current = current.right;\n else {\n // Duplicate → splay existing node\n this.splay(current);\n return;\n }\n }\n\n const node = new SplayNode(value);\n node.parent = parent;\n\n if (this.compare(value, parent!.value) < 0) parent!.left = node;\n else parent!.right = node;\n\n this.splay(node);\n }\n\n contains(value: T): boolean {\n const node = this.findNode(value);\n if (node) {\n this.splay(node);\n return true;\n }\n return false;\n }\n\n remove(value: T): void {\n const node = this.findNode(value);\n if (!node) return;\n\n this.splay(node);\n\n if (!node.left) {\n this.replaceRoot(node.right);\n } else if (!node.right) {\n this.replaceRoot(node.left);\n } else {\n const maxLeft = this.subtreeMax(node.left);\n this.splay(maxLeft);\n\n maxLeft.right = node.right;\n if (node.right) node.right.parent = maxLeft;\n\n this.root = maxLeft;\n maxLeft.parent = null;\n }\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Splaying ------------------------ */\n\n private splay(node: SplayNode<T>): void {\n while (node.parent) {\n const parent = node.parent;\n const grandparent = parent.parent;\n\n // Zig\n if (!grandparent) {\n if (node === parent.left) this.rotateRight(parent);\n else this.rotateLeft(parent);\n }\n // Zig-Zig\n else if (node === parent.left && parent === grandparent.left) {\n this.rotateRight(grandparent);\n this.rotateRight(parent);\n } else if (node === parent.right && parent === grandparent.right) {\n this.rotateLeft(grandparent);\n this.rotateLeft(parent);\n }\n // Zig-Zag\n else if (node === parent.right && parent === grandparent.left) {\n this.rotateLeft(parent);\n this.rotateRight(grandparent);\n } else {\n this.rotateRight(parent);\n this.rotateLeft(grandparent);\n }\n }\n\n this.root = node;\n }\n\n /* ------------------------ Rotations ------------------------ */\n\n private rotateLeft(x: SplayNode<T>): void {\n const y = x.right!;\n x.right = y.left;\n if (y.left) y.left.parent = x;\n\n y.parent = x.parent;\n if (!x.parent) this.root = y;\n else if (x === x.parent.left) x.parent.left = y;\n else x.parent.right = y;\n\n y.left = x;\n x.parent = y;\n }\n\n private rotateRight(y: SplayNode<T>): void {\n const x = y.left!;\n y.left = x.right;\n if (x.right) x.right.parent = y;\n\n x.parent = y.parent;\n if (!y.parent) this.root = x;\n else if (y === y.parent.left) y.parent.left = x;\n else y.parent.right = x;\n\n x.right = y;\n y.parent = x;\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private findNode(value: T): SplayNode<T> | null {\n let current = this.root;\n while (current) {\n const cmp = this.compare(value, current.value);\n if (cmp === 0) return current;\n current = cmp < 0 ? current.left : current.right;\n }\n return null;\n }\n\n private replaceRoot(node: SplayNode<T> | null): void {\n this.root = node;\n if (node) node.parent = null;\n }\n\n private subtreeMax(node: SplayNode<T>): SplayNode<T> {\n while (node.right) node = node.right;\n return node;\n }\n\n private inorderTraverse(node: SplayNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private calculateHeight(node: SplayNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default SplayTree;\n","/**\n * BinarySearchTree\n * ----------------\n * A classic Binary Search Tree (BST) implementation.\n *\n * Properties:\n * - Left subtree values < node value\n * - Right subtree values > node value\n * - No duplicate values (by default)\n *\n * Time Complexity:\n * - Average: O(log n)\n * - Worst: O(n) (skewed tree)\n */\n\nclass BSTNode<T> {\n value: T;\n left: BSTNode<T> | null = null;\n right: BSTNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class BinarySearchTree<T> {\n private root: BSTNode<T> | null = null;\n private compare: (a: T, b: T) => number;\n\n constructor(compareFn?: (a: T, b: T) => number) {\n // Default comparator works for number & string\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n insert(value: T): void {\n this.root = this.insertNode(this.root, value);\n }\n\n contains(value: T): boolean {\n return this.search(this.root, value);\n }\n\n remove(value: T): void {\n this.root = this.removeNode(this.root, value);\n }\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n preorder(): T[] {\n const result: T[] = [];\n this.preorderTraverse(this.root, result);\n return result;\n }\n\n postorder(): T[] {\n const result: T[] = [];\n this.postorderTraverse(this.root, result);\n return result;\n }\n\n min(): T | undefined {\n if (!this.root) return undefined;\n return this.findMin(this.root).value;\n }\n\n max(): T | undefined {\n if (!this.root) return undefined;\n return this.findMax(this.root).value;\n }\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private insertNode(node: BSTNode<T> | null, value: T): BSTNode<T> {\n if (!node) return new BSTNode(value);\n\n const cmp = this.compare(value, node.value);\n if (cmp < 0) {\n node.left = this.insertNode(node.left, value);\n } else if (cmp > 0) {\n node.right = this.insertNode(node.right, value);\n }\n // duplicates ignored\n return node;\n }\n\n private search(node: BSTNode<T> | null, value: T): boolean {\n if (!node) return false;\n\n const cmp = this.compare(value, node.value);\n if (cmp === 0) return true;\n if (cmp < 0) return this.search(node.left, value);\n return this.search(node.right, value);\n }\n\n private removeNode(node: BSTNode<T> | null, value: T): BSTNode<T> | null {\n if (!node) return null;\n\n const cmp = this.compare(value, node.value);\n\n if (cmp < 0) {\n node.left = this.removeNode(node.left, value);\n } else if (cmp > 0) {\n node.right = this.removeNode(node.right, value);\n } else {\n // Case 1: no child\n if (!node.left && !node.right) return null;\n\n // Case 2: one child\n if (!node.left) return node.right;\n if (!node.right) return node.left;\n\n // Case 3: two children\n const successor = this.findMin(node.right);\n node.value = successor.value;\n node.right = this.removeNode(node.right, successor.value);\n }\n\n return node;\n }\n\n private inorderTraverse(node: BSTNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private preorderTraverse(node: BSTNode<T> | null, result: T[]): void {\n if (!node) return;\n result.push(node.value);\n this.preorderTraverse(node.left, result);\n this.preorderTraverse(node.right, result);\n }\n\n private postorderTraverse(node: BSTNode<T> | null, result: T[]): void {\n if (!node) return;\n this.postorderTraverse(node.left, result);\n this.postorderTraverse(node.right, result);\n result.push(node.value);\n }\n\n private findMin(node: BSTNode<T>): BSTNode<T> {\n while (node.left) node = node.left;\n return node;\n }\n\n private findMax(node: BSTNode<T>): BSTNode<T> {\n while (node.right) node = node.right;\n return node;\n }\n\n private calculateHeight(node: BSTNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default BinarySearchTree;\n","/**\n * BinaryTree\n * ----------\n * A generic binary tree implementation.\n *\n * Characteristics:\n * - Each node has at most two children\n * - No ordering constraints (not a BST)\n * - Supports DFS & BFS traversals\n */\n\nexport class TreeNode<T> {\n value: T;\n left: TreeNode<T> | null = null;\n right: TreeNode<T> | null = null;\n\n constructor(value: T) {\n this.value = value;\n }\n}\n\nexport class BinaryTree<T> {\n root: TreeNode<T> | null = null;\n\n constructor(rootValue?: T) {\n if (rootValue !== undefined) {\n this.root = new TreeNode(rootValue);\n }\n }\n\n /* ------------------------ Insert ------------------------ */\n\n /**\n * Inserts a value using level-order traversal\n * (keeps tree as balanced as possible)\n */\n insert(value: T): void {\n const newNode = new TreeNode(value);\n\n if (!this.root) {\n this.root = newNode;\n return;\n }\n\n const queue: TreeNode<T>[] = [this.root];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (!current.left) {\n current.left = newNode;\n return;\n } else {\n queue.push(current.left);\n }\n\n if (!current.right) {\n current.right = newNode;\n return;\n } else {\n queue.push(current.right);\n }\n }\n }\n\n /* ------------------------ Traversals ------------------------ */\n\n inorder(): T[] {\n const result: T[] = [];\n this.inorderTraverse(this.root, result);\n return result;\n }\n\n preorder(): T[] {\n const result: T[] = [];\n this.preorderTraverse(this.root, result);\n return result;\n }\n\n postorder(): T[] {\n const result: T[] = [];\n this.postorderTraverse(this.root, result);\n return result;\n }\n\n levelOrder(): T[] {\n const result: T[] = [];\n if (!this.root) return result;\n\n const queue: TreeNode<T>[] = [this.root];\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n result.push(node.value);\n\n if (node.left) queue.push(node.left);\n if (node.right) queue.push(node.right);\n }\n\n return result;\n }\n\n /* ------------------------ Utilities ------------------------ */\n\n height(): number {\n return this.calculateHeight(this.root);\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n clear(): void {\n this.root = null;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private inorderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (!node) return;\n this.inorderTraverse(node.left, result);\n result.push(node.value);\n this.inorderTraverse(node.right, result);\n }\n\n private preorderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (!node) return;\n result.push(node.value);\n this.preorderTraverse(node.left, result);\n this.preorderTraverse(node.right, result);\n }\n\n private postorderTraverse(node: TreeNode<T> | null, result: T[]): void {\n if (!node) return;\n this.postorderTraverse(node.left, result);\n this.postorderTraverse(node.right, result);\n result.push(node.value);\n }\n\n private calculateHeight(node: TreeNode<T> | null): number {\n if (!node) return -1;\n return (\n 1 +\n Math.max(\n this.calculateHeight(node.left),\n this.calculateHeight(node.right)\n )\n );\n }\n}\n\nexport default BinaryTree;\n","/**\n * BPlusTree\n * ---------\n * B+ Tree implementation where:\n * - All values are stored in leaf nodes\n * - Internal nodes contain only keys for routing\n * - Leaf nodes are linked for fast range queries\n *\n * Order (t):\n * - Max keys per node = 2t - 1\n * - Min keys per non-root node = t - 1\n *\n * Time Complexity:\n * - Search: O(log n)\n * - Insert: O(log n)\n * - Delete: O(log n)\n * - Range Scan: O(log n + k)\n */\n\nclass BPlusNode<T> {\n keys: T[] = [];\n children: BPlusNode<T>[] = [];\n leaf: boolean;\n next: BPlusNode<T> | null = null;\n\n constructor(leaf: boolean) {\n this.leaf = leaf;\n }\n}\n\nexport class BPlusTree<T> {\n private root: BPlusNode<T>;\n private readonly t: number;\n private compare: (a: T, b: T) => number;\n\n constructor(minDegree: number, compareFn?: (a: T, b: T) => number) {\n if (minDegree < 2) {\n throw new Error(\"BPlusTree minimum degree must be >= 2\");\n }\n\n this.t = minDegree;\n this.root = new BPlusNode<T>(true);\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n search(key: T): boolean {\n const leaf = this.findLeaf(this.root, key);\n return leaf.keys.some((k) => this.compare(k, key) === 0);\n }\n\n insert(key: T): void {\n const root = this.root;\n\n if (root.keys.length === 2 * this.t - 1) {\n const newRoot = new BPlusNode<T>(false);\n newRoot.children[0] = root;\n this.splitChild(newRoot, 0);\n this.root = newRoot;\n }\n\n this.insertNonFull(this.root, key);\n }\n\n delete(key: T): void {\n this.deleteFromNode(this.root, key);\n\n if (!this.root.leaf && this.root.keys.length === 0) {\n this.root = this.root.children[0];\n }\n }\n\n traverse(): T[] {\n const result: T[] = [];\n let node: BPlusNode<T> | null = this.root;\n\n while (node && !node.leaf) {\n node = node.children[0];\n }\n\n while (node) {\n result.push(...node.keys);\n node = node.next;\n }\n\n return result;\n }\n\n range(from: T, to: T): T[] {\n const result: T[] = [];\n let node: BPlusNode<T> | null = this.findLeaf(this.root, from);\n\n while (node) {\n for (const key of node.keys) {\n if (this.compare(key, to) > 0) return result;\n if (this.compare(key, from) >= 0) {\n result.push(key);\n }\n }\n node = node.next;\n }\n\n return result;\n }\n\n clear(): void {\n this.root = new BPlusNode<T>(true);\n }\n\n isEmpty(): boolean {\n return this.root.keys.length === 0;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private findLeaf(node: BPlusNode<T>, key: T): BPlusNode<T> {\n while (!node.leaf) {\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n node = node.children[i];\n }\n return node;\n }\n\n private insertNonFull(node: BPlusNode<T>, key: T): void {\n if (node.leaf) {\n node.keys.push(key);\n node.keys.sort(this.compare);\n return;\n }\n\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n\n if (node.children[i].keys.length === 2 * this.t - 1) {\n this.splitChild(node, i);\n if (this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n }\n\n this.insertNonFull(node.children[i], key);\n }\n\n private splitChild(parent: BPlusNode<T>, index: number): void {\n const child = parent.children[index];\n const newNode = new BPlusNode<T>(child.leaf);\n\n const mid = this.t;\n\n if (child.leaf) {\n newNode.keys = child.keys.splice(mid);\n parent.keys.splice(index, 0, newNode.keys[0]);\n\n newNode.next = child.next;\n child.next = newNode;\n } else {\n const promotedKey = child.keys[mid];\n newNode.keys = child.keys.splice(mid + 1);\n child.keys.splice(mid);\n\n newNode.children = child.children.splice(mid + 1);\n parent.keys.splice(index, 0, promotedKey);\n }\n\n parent.children.splice(index + 1, 0, newNode);\n }\n\n private deleteFromNode(node: BPlusNode<T>, key: T): void {\n if (node.leaf) {\n node.keys = node.keys.filter((k) => this.compare(k, key) !== 0);\n return;\n }\n\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) >= 0) {\n i++;\n }\n\n this.deleteFromNode(node.children[i], key);\n\n if (node.children[i].keys.length < this.t - 1) {\n this.rebalance(node, i);\n }\n }\n\n private rebalance(parent: BPlusNode<T>, index: number): void {\n const child = parent.children[index];\n\n const leftSibling = index > 0 ? parent.children[index - 1] : null;\n const rightSibling =\n index < parent.children.length - 1 ? parent.children[index + 1] : null;\n\n // Borrow from left\n if (leftSibling && leftSibling.keys.length >= this.t) {\n child.keys.unshift(leftSibling.keys.pop()!);\n parent.keys[index - 1] = child.keys[0];\n return;\n }\n\n // Borrow from right\n if (rightSibling && rightSibling.keys.length >= this.t) {\n child.keys.push(rightSibling.keys.shift()!);\n parent.keys[index] = rightSibling.keys[0];\n return;\n }\n\n // Merge\n if (leftSibling) {\n leftSibling.keys.push(...child.keys);\n leftSibling.next = child.next;\n parent.keys.splice(index - 1, 1);\n parent.children.splice(index, 1);\n } else if (rightSibling) {\n child.keys.push(...rightSibling.keys);\n child.next = rightSibling.next;\n parent.keys.splice(index, 1);\n parent.children.splice(index + 1, 1);\n }\n }\n}\n\nexport default BPlusTree;\n","/**\n * BTree\n * -----\n * A classic B-Tree implementation.\n *\n * Properties (minimum degree = t):\n * - Every node has at most 2t - 1 keys\n * - Every non-root node has at least t - 1 keys\n * - All leaves appear at the same level\n *\n * Time Complexity:\n * - Search: O(log n)\n * - Insert: O(log n)\n * - Delete: O(log n)\n */\n\nclass BTreeNode<T> {\n keys: T[] = [];\n children: BTreeNode<T>[] = [];\n leaf: boolean;\n\n constructor(leaf: boolean) {\n this.leaf = leaf;\n }\n}\n\nexport class BTree<T> {\n private root: BTreeNode<T>;\n private readonly t: number;\n private compare: (a: T, b: T) => number;\n\n constructor(minDegree: number, compareFn?: (a: T, b: T) => number) {\n if (minDegree < 2) {\n throw new Error(\"BTree minimum degree must be >= 2\");\n }\n\n this.t = minDegree;\n this.root = new BTreeNode<T>(true);\n this.compare =\n compareFn ?? ((a: any, b: any) => (a < b ? -1 : a > b ? 1 : 0));\n }\n\n /* ------------------------ Public API ------------------------ */\n\n search(key: T): boolean {\n return this.searchNode(this.root, key);\n }\n\n insert(key: T): void {\n const r = this.root;\n\n if (r.keys.length === 2 * this.t - 1) {\n const s = new BTreeNode<T>(false);\n s.children[0] = r;\n this.splitChild(s, 0);\n this.root = s;\n this.insertNonFull(s, key);\n } else {\n this.insertNonFull(r, key);\n }\n }\n\n delete(key: T): void {\n this.deleteFromNode(this.root, key);\n\n if (this.root.keys.length === 0 && !this.root.leaf) {\n this.root = this.root.children[0];\n }\n }\n\n traverse(): T[] {\n const result: T[] = [];\n this.traverseNode(this.root, result);\n return result;\n }\n\n clear(): void {\n this.root = new BTreeNode<T>(true);\n }\n\n isEmpty(): boolean {\n return this.root.keys.length === 0;\n }\n\n /* ------------------------ Search ------------------------ */\n\n private searchNode(node: BTreeNode<T>, key: T): boolean {\n let i = 0;\n while (i < node.keys.length && this.compare(key, node.keys[i]) > 0) {\n i++;\n }\n\n if (i < node.keys.length && this.compare(key, node.keys[i]) === 0) {\n return true;\n }\n\n if (node.leaf) return false;\n\n return this.searchNode(node.children[i], key);\n }\n\n /* ------------------------ Insert ------------------------ */\n\n private insertNonFull(node: BTreeNode<T>, key: T): void {\n let i = node.keys.length - 1;\n\n if (node.leaf) {\n node.keys.push(key);\n while (i >= 0 && this.compare(key, node.keys[i]) < 0) {\n node.keys[i + 1] = node.keys[i];\n i--;\n }\n node.keys[i + 1] = key;\n } else {\n while (i >= 0 && this.compare(key, node.keys[i]) < 0) {\n i--;\n }\n i++;\n\n if (node.children[i].keys.length === 2 * this.t - 1) {\n this.splitChild(node, i);\n if (this.compare(key, node.keys[i]) > 0) {\n i++;\n }\n }\n this.insertNonFull(node.children[i], key);\n }\n }\n\n private splitChild(parent: BTreeNode<T>, index: number): void {\n const t = this.t;\n const y = parent.children[index];\n const z = new BTreeNode<T>(y.leaf);\n\n z.keys = y.keys.splice(t);\n const middle = y.keys.pop()!;\n\n if (!y.leaf) {\n z.children = y.children.splice(t);\n }\n\n parent.children.splice(index + 1, 0, z);\n parent.keys.splice(index, 0, middle);\n }\n\n /* ------------------------ Delete ------------------------ */\n\n private deleteFromNode(node: BTreeNode<T>, key: T): void {\n const idx = this.findKey(node, key);\n\n if (idx < node.keys.length && this.compare(node.keys[idx], key) === 0) {\n if (node.leaf) {\n node.keys.splice(idx, 1);\n } else {\n this.deleteInternalNode(node, key, idx);\n }\n } else {\n if (node.leaf) return;\n\n let child = node.children[idx];\n\n if (child.keys.length < this.t) {\n this.fill(node, idx);\n }\n\n const nextIdx =\n idx < node.keys.length && this.compare(node.keys[idx], key) < 0\n ? idx + 1\n : idx;\n\n this.deleteFromNode(node.children[nextIdx], key);\n }\n }\n\n private deleteInternalNode(node: BTreeNode<T>, key: T, idx: number): void {\n const leftChild = node.children[idx];\n const rightChild = node.children[idx + 1];\n\n if (leftChild.keys.length >= this.t) {\n const pred = this.getPredecessor(leftChild);\n node.keys[idx] = pred;\n this.deleteFromNode(leftChild, pred);\n } else if (rightChild.keys.length >= this.t) {\n const succ = this.getSuccessor(rightChild);\n node.keys[idx] = succ;\n this.deleteFromNode(rightChild, succ);\n } else {\n this.merge(node, idx);\n this.deleteFromNode(leftChild, key);\n }\n }\n\n private fill(node: BTreeNode<T>, idx: number): void {\n if (idx > 0 && node.children[idx - 1].keys.length >= this.t) {\n this.borrowFromPrev(node, idx);\n } else if (\n idx < node.children.length - 1 &&\n node.children[idx + 1].keys.length >= this.t\n ) {\n this.borrowFromNext(node, idx);\n } else {\n if (idx < node.children.length - 1) {\n this.merge(node, idx);\n } else {\n this.merge(node, idx - 1);\n }\n }\n }\n\n private borrowFromPrev(node: BTreeNode<T>, idx: number): void {\n const child = node.children[idx];\n const sibling = node.children[idx - 1];\n\n child.keys.unshift(node.keys[idx - 1]);\n node.keys[idx - 1] = sibling.keys.pop()!;\n\n if (!sibling.leaf) {\n child.children.unshift(sibling.children.pop()!);\n }\n }\n\n private borrowFromNext(node: BTreeNode<T>, idx: number): void {\n const child = node.children[idx];\n const sibling = node.children[idx + 1];\n\n child.keys.push(node.keys[idx]);\n node.keys[idx] = sibling.keys.shift()!;\n\n if (!sibling.leaf) {\n child.children.push(sibling.children.shift()!);\n }\n }\n\n private merge(node: BTreeNode<T>, idx: number): void {\n const child = node.children[idx];\n const sibling = node.children[idx + 1];\n\n child.keys.push(node.keys[idx], ...sibling.keys);\n\n if (!child.leaf) {\n child.children.push(...sibling.children);\n }\n\n node.keys.splice(idx, 1);\n node.children.splice(idx + 1, 1);\n }\n\n /* ------------------------ Helpers ------------------------ */\n\n private findKey(node: BTreeNode<T>, key: T): number {\n let idx = 0;\n while (idx < node.keys.length && this.compare(node.keys[idx], key) < 0) {\n idx++;\n }\n return idx;\n }\n\n private getPredecessor(node: BTreeNode<T>): T {\n while (!node.leaf) {\n node = node.children[node.children.length - 1];\n }\n return node.keys[node.keys.length - 1];\n }\n\n private getSuccessor(node: BTreeNode<T>): T {\n while (!node.leaf) {\n node = node.children[0];\n }\n return node.keys[0];\n }\n\n private traverseNode(node: BTreeNode<T>, result: T[]): void {\n let i = 0;\n for (; i < node.keys.length; i++) {\n if (!node.leaf) {\n this.traverseNode(node.children[i], result);\n }\n result.push(node.keys[i]);\n }\n if (!node.leaf) {\n this.traverseNode(node.children[i], result);\n }\n }\n}\n\nexport default BTree;\n","/**\n * RadixTree (Compressed Trie / Patricia Trie)\n * -------------------------------------------\n * Optimized trie where chains of single-child nodes\n * are compressed into single edges.\n *\n * Use cases:\n * - Autocomplete\n * - Routing tables\n * - Prefix matching\n *\n * Time Complexity:\n * - Insert: O(n)\n * - Search: O(n)\n * - Delete: O(n)\n * - Prefix lookup: O(n)\n */\n\nclass RadixNode {\n children: Map<string, RadixNode> = new Map();\n isEndOfWord = false;\n}\n\nexport class RadixTree {\n private root: RadixNode = new RadixNode();\n\n /* ------------------------ Public API ------------------------ */\n\n insert(word: string): void {\n let current = this.root;\n let remaining = word;\n\n while (remaining.length > 0) {\n let matched = false;\n\n for (const [edge, child] of current.children) {\n const common = this.commonPrefix(edge, remaining);\n if (common.length === 0) continue;\n\n // Case 1: edge fully matches → descend\n if (common.length === edge.length) {\n current = child;\n remaining = remaining.slice(common.length);\n matched = true;\n break;\n }\n\n // Case 2: partial match → split edge\n const edgeSuffix = edge.slice(common.length);\n const wordSuffix = remaining.slice(common.length);\n\n const splitNode = new RadixNode();\n\n // 🔥 Preserve old word ending\n splitNode.isEndOfWord = false;\n\n // Rewire tree\n current.children.delete(edge);\n current.children.set(common, splitNode);\n\n splitNode.children.set(edgeSuffix, child);\n\n // Insert new word or mark split as terminal\n if (wordSuffix.length > 0) {\n const newNode = new RadixNode();\n newNode.isEndOfWord = true;\n splitNode.children.set(wordSuffix, newNode);\n } else {\n splitNode.isEndOfWord = true;\n }\n\n return;\n }\n\n // No matching edge → create new\n if (!matched) {\n const node = new RadixNode();\n node.isEndOfWord = true;\n current.children.set(remaining, node);\n return;\n }\n }\n\n current.isEndOfWord = true;\n }\n\n search(word: string): boolean {\n const node = this.findNode(word, true);\n return !!node && node.isEndOfWord;\n }\n\n startsWith(prefix: string): boolean {\n return !!this.findNode(prefix, false);\n }\n\n delete(word: string): void {\n this.deleteHelper(this.root, word);\n }\n\n clear(): void {\n this.root = new RadixNode();\n }\n\n isEmpty(): boolean {\n return this.root.children.size === 0;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private findNode(word: string, exact: boolean): RadixNode | null {\n let current = this.root;\n let remaining = word;\n\n while (remaining.length > 0) {\n let matched = false;\n\n for (const [edge, child] of current.children) {\n if (remaining.startsWith(edge)) {\n remaining = remaining.slice(edge.length);\n current = child;\n matched = true;\n break;\n }\n\n // ⚠️ prefix-only match allowed for startsWith\n if (!exact && edge.startsWith(remaining)) {\n return child;\n }\n }\n\n if (!matched) return null;\n }\n\n return current;\n }\n\n private deleteHelper(node: RadixNode, word: string): boolean {\n if (word.length === 0) {\n if (!node.isEndOfWord) return false;\n node.isEndOfWord = false;\n return node.children.size === 0;\n }\n\n for (const [edge, child] of node.children) {\n if (!word.startsWith(edge)) continue;\n\n const shouldDelete = this.deleteHelper(child, word.slice(edge.length));\n\n if (shouldDelete) {\n node.children.delete(edge);\n\n // Merge single-child paths\n if (node.children.size === 1 && !node.isEndOfWord) {\n const entry = node.children.entries().next().value;\n if (entry) {\n const [nextEdge, nextNode] = entry;\n node.children.clear();\n node.children.set(edge + nextEdge, nextNode);\n }\n }\n\n return node.children.size === 0 && !node.isEndOfWord;\n }\n\n return false;\n }\n\n return false;\n }\n\n private commonPrefix(a: string, b: string): string {\n let i = 0;\n while (i < a.length && i < b.length && a[i] === b[i]) {\n i++;\n }\n return a.slice(0, i);\n }\n}\n\nexport default RadixTree;\n","/**\n * TernarySearchTree (TST)\n * ----------------------\n * A space-efficient string tree where each node stores\n * a single character and has three children:\n *\n * - left → characters less than current\n * - equal → next character in word\n * - right → characters greater than current\n *\n * Time Complexity:\n * - Insert: O(n)\n * - Search: O(n)\n * - Delete: O(n)\n * - Prefix lookup: O(n)\n */\n\nclass TSTNode {\n char: string;\n isEndOfWord = false;\n\n left: TSTNode | null = null;\n equal: TSTNode | null = null;\n right: TSTNode | null = null;\n\n constructor(char: string) {\n this.char = char;\n }\n}\n\nexport class TernarySearchTree {\n private root: TSTNode | null = null;\n\n /* ------------------------ Public API ------------------------ */\n\n insert(word: string): void {\n if (word.length === 0) return;\n this.root = this.insertNode(this.root, word, 0);\n }\n\n search(word: string): boolean {\n if (word.length === 0) return false;\n const node = this.searchNode(this.root, word, 0);\n return !!node && node.isEndOfWord;\n }\n\n startsWith(prefix: string): boolean {\n if (prefix.length === 0) return true;\n return !!this.searchNode(this.root, prefix, 0);\n }\n\n delete(word: string): void {\n if (word.length === 0) return;\n this.root = this.deleteNode(this.root, word, 0);\n }\n\n clear(): void {\n this.root = null;\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private insertNode(\n node: TSTNode | null,\n word: string,\n index: number\n ): TSTNode {\n const char = word[index];\n\n if (!node) {\n node = new TSTNode(char);\n }\n\n if (char < node.char) {\n node.left = this.insertNode(node.left, word, index);\n } else if (char > node.char) {\n node.right = this.insertNode(node.right, word, index);\n } else {\n if (index + 1 === word.length) {\n node.isEndOfWord = true;\n } else {\n node.equal = this.insertNode(node.equal, word, index + 1);\n }\n }\n\n return node;\n }\n\n private searchNode(\n node: TSTNode | null,\n word: string,\n index: number\n ): TSTNode | null {\n if (!node) return null;\n\n const char = word[index];\n\n if (char < node.char) {\n return this.searchNode(node.left, word, index);\n }\n if (char > node.char) {\n return this.searchNode(node.right, word, index);\n }\n\n // char === node.char\n if (index + 1 === word.length) {\n return node;\n }\n\n return this.searchNode(node.equal, word, index + 1);\n }\n\n private deleteNode(\n node: TSTNode | null,\n word: string,\n index: number\n ): TSTNode | null {\n if (!node) return null;\n\n const char = word[index];\n\n if (char < node.char) {\n node.left = this.deleteNode(node.left, word, index);\n } else if (char > node.char) {\n node.right = this.deleteNode(node.right, word, index);\n } else {\n if (index + 1 === word.length) {\n node.isEndOfWord = false;\n } else {\n node.equal = this.deleteNode(node.equal, word, index + 1);\n }\n\n // Cleanup unused nodes\n if (!node.isEndOfWord && !node.left && !node.equal && !node.right) {\n return null;\n }\n }\n\n return node;\n }\n}\n\nexport default TernarySearchTree;\n","/**\n * Trie (Prefix Tree)\n * ------------------\n * Efficient tree-based data structure for storing strings.\n *\n * Use cases:\n * - Autocomplete\n * - Spell checking\n * - Prefix search\n *\n * Time Complexity:\n * - Insert: O(n)\n * - Search: O(n)\n * - Delete: O(n)\n * - Prefix lookup: O(n)\n */\n\nclass TrieNode {\n children: Map<string, TrieNode> = new Map();\n isEndOfWord = false;\n}\n\nexport class Trie {\n private root: TrieNode = new TrieNode();\n\n /* ------------------------ Public API ------------------------ */\n\n insert(word: string): void {\n let current = this.root;\n\n for (const char of word) {\n if (!current.children.has(char)) {\n current.children.set(char, new TrieNode());\n }\n current = current.children.get(char)!;\n }\n\n current.isEndOfWord = true;\n }\n\n search(word: string): boolean {\n const node = this.findNode(word);\n return !!node && node.isEndOfWord;\n }\n\n startsWith(prefix: string): boolean {\n return !!this.findNode(prefix);\n }\n\n delete(word: string): void {\n this.deleteHelper(this.root, word, 0);\n }\n\n clear(): void {\n this.root = new TrieNode();\n }\n\n isEmpty(): boolean {\n return this.root.children.size === 0;\n }\n\n /* ------------------------ Internal Helpers ------------------------ */\n\n private findNode(prefix: string): TrieNode | null {\n let current = this.root;\n\n for (const char of prefix) {\n const next = current.children.get(char);\n if (!next) return null;\n current = next;\n }\n\n return current;\n }\n\n private deleteHelper(\n node: TrieNode,\n word: string,\n index: number\n ): boolean {\n if (index === word.length) {\n if (!node.isEndOfWord) return false;\n\n node.isEndOfWord = false;\n return node.children.size === 0;\n }\n\n const char = word[index];\n const child = node.children.get(char);\n if (!child) return false;\n\n const shouldDeleteChild = this.deleteHelper(\n child,\n word,\n index + 1\n );\n\n if (shouldDeleteChild) {\n node.children.delete(char);\n return (\n node.children.size === 0 && !node.isEndOfWord\n );\n }\n\n return false;\n }\n}\n\nexport default Trie;","/**\n * FenwickTree (Binary Indexed Tree)\n * --------------------------------\n * Efficient data structure for prefix sums.\n *\n * Supports:\n * - Point update: O(log n)\n * - Prefix sum query: O(log n)\n * - Range sum query: O(log n)\n *\n * Internally uses 1-based indexing.\n */\n\nexport class FenwickTree {\n private readonly n: number;\n private tree: number[];\n\n constructor(sizeOrArray: number | number[]) {\n if (typeof sizeOrArray === \"number\") {\n if (sizeOrArray <= 0) {\n throw new Error(\"FenwickTree size must be > 0\");\n }\n this.n = sizeOrArray;\n this.tree = new Array(this.n + 1).fill(0);\n } else {\n if (sizeOrArray.length === 0) {\n throw new Error(\"FenwickTree array must not be empty\");\n }\n this.n = sizeOrArray.length;\n this.tree = new Array(this.n + 1).fill(0);\n for (let i = 0; i < this.n; i++) {\n this.add(i, sizeOrArray[i]);\n }\n }\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Add value to index (0-based)\n */\n add(index: number, value: number): void {\n if (index < 0 || index >= this.n) {\n throw new Error(\"Index out of bounds\");\n }\n\n let i = index + 1;\n while (i <= this.n) {\n this.tree[i] += value;\n i += i & -i;\n }\n }\n\n /**\n * Prefix sum from 0 to index (inclusive)\n */\n sum(index: number): number {\n if (index < 0 || index >= this.n) {\n throw new Error(\"Index out of bounds\");\n }\n\n let result = 0;\n let i = index + 1;\n while (i > 0) {\n result += this.tree[i];\n i -= i & -i;\n }\n return result;\n }\n\n /**\n * Range sum [left, right]\n */\n rangeSum(left: number, right: number): number {\n if (left < 0 || right >= this.n || left > right) {\n throw new Error(\"Invalid range\");\n }\n return this.sum(right) - (left > 0 ? this.sum(left - 1) : 0);\n }\n\n /**\n * Get size of tree\n */\n size(): number {\n return this.n;\n }\n\n /**\n * Reset all values\n */\n clear(): void {\n this.tree.fill(0);\n }\n}\n\nexport default FenwickTree;\n","/**\n * IntervalTree\n * ------------\n * Augmented Binary Search Tree for interval overlap queries.\n *\n * Each node stores:\n * - interval [low, high]\n * - max: maximum high endpoint in its subtree\n *\n * Time Complexity (average):\n * - Insert: O(log n)\n * - Delete: O(log n)\n * - Search overlap: O(log n)\n * - Search all overlaps: O(k + log n)\n */\n\nexport interface Interval {\n low: number;\n high: number;\n}\n\nclass IntervalNode {\n interval: Interval;\n max: number;\n left: IntervalNode | null = null;\n right: IntervalNode | null = null;\n\n constructor(interval: Interval) {\n if (interval.low > interval.high) {\n throw new Error(\"Invalid interval: low > high\");\n }\n this.interval = interval;\n this.max = interval.high;\n }\n}\n\nexport class IntervalTree {\n private root: IntervalNode | null = null;\n\n /* ------------------------ Public API ------------------------ */\n\n insert(interval: Interval): void {\n this.root = this.insertNode(this.root, interval);\n }\n\n delete(interval: Interval): void {\n this.root = this.deleteNode(this.root, interval);\n }\n\n /**\n * Returns true if any interval overlaps with the query interval\n */\n search(query: Interval): boolean {\n return this.searchAny(this.root, query) !== null;\n }\n\n /**\n * Returns all intervals that overlap with the query interval\n */\n searchAll(query: Interval): Interval[] {\n const result: Interval[] = [];\n this.searchAllFrom(this.root, query, result);\n return result;\n }\n\n /**\n * In-order traversal (sorted by low)\n */\n traverse(): Interval[] {\n const result: Interval[] = [];\n this.inOrder(this.root, result);\n return result;\n }\n\n clear(): void {\n this.root = null;\n }\n\n isEmpty(): boolean {\n return this.root === null;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private insertNode(\n node: IntervalNode | null,\n interval: Interval\n ): IntervalNode {\n if (!node) {\n return new IntervalNode(interval);\n }\n\n if (interval.low < node.interval.low) {\n node.left = this.insertNode(node.left, interval);\n } else {\n node.right = this.insertNode(node.right, interval);\n }\n\n node.max = Math.max(\n node.max,\n interval.high,\n node.left?.max ?? -Infinity,\n node.right?.max ?? -Infinity\n );\n\n return node;\n }\n\n private deleteNode(\n node: IntervalNode | null,\n interval: Interval\n ): IntervalNode | null {\n if (!node) return null;\n\n if (\n interval.low === node.interval.low &&\n interval.high === node.interval.high\n ) {\n // Node to delete found\n if (!node.left) return node.right;\n if (!node.right) return node.left;\n\n // Two children: get inorder successor\n const successor = this.minNode(node.right);\n node.interval = successor.interval;\n node.right = this.deleteNode(node.right, successor.interval);\n } else if (interval.low < node.interval.low) {\n node.left = this.deleteNode(node.left, interval);\n } else {\n node.right = this.deleteNode(node.right, interval);\n }\n\n // Recompute max\n node.max = Math.max(\n node.interval.high,\n node.left?.max ?? -Infinity,\n node.right?.max ?? -Infinity\n );\n\n return node;\n }\n\n private searchAny(\n node: IntervalNode | null,\n query: Interval\n ): IntervalNode | null {\n if (!node) return null;\n\n if (this.overlaps(node.interval, query)) {\n return node;\n }\n\n if (node.left && node.left.max >= query.low) {\n return this.searchAny(node.left, query);\n }\n\n return this.searchAny(node.right, query);\n }\n\n private searchAllFrom(\n node: IntervalNode | null,\n query: Interval,\n result: Interval[]\n ): void {\n if (!node) return;\n\n if (this.overlaps(node.interval, query)) {\n result.push(node.interval);\n }\n\n if (node.left && node.left.max >= query.low) {\n this.searchAllFrom(node.left, query, result);\n }\n\n if (node.right && node.interval.low <= query.high) {\n this.searchAllFrom(node.right, query, result);\n }\n }\n\n private overlaps(a: Interval, b: Interval): boolean {\n return a.low <= b.high && b.low <= a.high;\n }\n\n private minNode(node: IntervalNode): IntervalNode {\n while (node.left) {\n node = node.left;\n }\n return node;\n }\n\n private inOrder(node: IntervalNode | null, result: Interval[]): void {\n if (!node) return;\n this.inOrder(node.left, result);\n result.push(node.interval);\n this.inOrder(node.right, result);\n }\n}\n\nexport default IntervalTree;\n","/**\n * SegmentTree\n * -----------\n * A generic segment tree implementation for range queries.\n *\n * Supports:\n * - Range query: O(log n)\n * - Point update: O(log n)\n *\n * Requirements:\n * - Merge function must be associative\n *\n * Examples:\n * - Sum: (a, b) => a + b\n * - Min: Math.min\n * - Max: Math.max\n */\n\nexport class SegmentTree<T> {\n private tree: T[];\n private data: T[];\n private readonly n: number;\n private readonly merge: (a: T, b: T) => T;\n private readonly identity: T;\n\n constructor(arr: T[], mergeFn: (a: T, b: T) => T, identity: T) {\n if (arr.length === 0) {\n throw new Error(\"SegmentTree requires a non-empty array\");\n }\n\n this.data = [...arr];\n this.n = arr.length;\n this.merge = mergeFn;\n this.identity = identity;\n\n // Safe size: 4 * n\n this.tree = new Array<T>(4 * this.n);\n this.build(0, 0, this.n - 1);\n }\n\n /* ------------------------ Public API ------------------------ */\n\n /**\n * Query range [l, r]\n */\n query(l: number, r: number): T {\n if (l < 0 || r >= this.n || l > r) {\n throw new Error(\"Invalid query range\");\n }\n return this.queryRange(0, 0, this.n - 1, l, r);\n }\n\n /**\n * Update value at index\n */\n update(index: number, value: T): void {\n if (index < 0 || index >= this.n) {\n throw new Error(\"Index out of bounds\");\n }\n this.data[index] = value;\n this.updatePoint(0, 0, this.n - 1, index, value);\n }\n\n /**\n * Get original array\n */\n toArray(): T[] {\n return [...this.data];\n }\n\n size(): number {\n return this.n;\n }\n\n /* ------------------------ Internal Logic ------------------------ */\n\n private build(node: number, start: number, end: number): void {\n if (start === end) {\n this.tree[node] = this.data[start];\n return;\n }\n\n const mid = Math.floor((start + end) / 2);\n const left = node * 2 + 1;\n const right = node * 2 + 2;\n\n this.build(left, start, mid);\n this.build(right, mid + 1, end);\n\n this.tree[node] = this.merge(this.tree[left], this.tree[right]);\n }\n\n private queryRange(\n node: number,\n start: number,\n end: number,\n l: number,\n r: number\n ): T {\n // No overlap\n if (r < start || end < l) {\n return this.identity;\n }\n\n // Total overlap\n if (l <= start && end <= r) {\n return this.tree[node];\n }\n\n // Partial overlap\n const mid = Math.floor((start + end) / 2);\n const left = node * 2 + 1;\n const right = node * 2 + 2;\n\n const leftResult = this.queryRange(left, start, mid, l, r);\n const rightResult = this.queryRange(right, mid + 1, end, l, r);\n\n return this.merge(leftResult, rightResult);\n }\n\n private updatePoint(\n node: number,\n start: number,\n end: number,\n index: number,\n value: T\n ): void {\n if (start === end) {\n this.tree[node] = value;\n return;\n }\n\n const mid = Math.floor((start + end) / 2);\n const left = node * 2 + 1;\n const right = node * 2 + 2;\n\n if (index <= mid) {\n this.updatePoint(left, start, mid, index, value);\n } else {\n this.updatePoint(right, mid + 1, end, index, value);\n }\n\n this.tree[node] = this.merge(this.tree[left], this.tree[right]);\n }\n}\n\nexport default SegmentTree;\n","import type { Request, Response, NextFunction } from \"express\";\n\nexport const authMiddleware = (\n _req: Request,\n _res: Response,\n next: NextFunction\n): void => {\n next(); // placeholder\n};\n","import type { Request, Response, NextFunction } from \"express\";\nimport type { Error as MongooseError } from \"mongoose\";\n\nimport { AppError } from \"../errors/appError.js\";\nimport { APIResponse } from \"../api/apiResponse.js\";\nimport { logger } from \"../configs/logger.js\";\n\n/* ======================================================\n MongoDB Error Handlers\n====================================================== */\n\nconst handleCastErrorDB = (err: MongooseError.CastError): AppError =>\n new AppError(`Invalid ${err.path}: ${err.value}`, 400, {\n code: \"INVALID_ID\",\n });\n\nconst handleDuplicateFieldsDB = (err: {\n keyValue?: Record<string, unknown>;\n}): AppError => {\n const value = err.keyValue ? JSON.stringify(err.keyValue) : \"duplicate value\";\n\n return new AppError(`Duplicate field value: ${value}`, 400, {\n code: \"DUPLICATE_FIELD\",\n });\n};\n\nconst handleValidationErrorDB = (\n err: MongooseError.ValidationError\n): AppError => {\n const errors = Object.values(err.errors).map((el) => el.message);\n\n return new AppError(\"Invalid input data\", 400, {\n code: \"VALIDATION_ERROR\",\n details: errors,\n });\n};\n\n/* ======================================================\n JWT Error Handlers\n====================================================== */\n\nconst handleJWTError = (): AppError =>\n new AppError(\"Invalid token. Please log in again.\", 401);\n\nconst handleJWTExpiredError = (): AppError =>\n new AppError(\"Your token has expired. Please log in again.\", 401);\n\n/* ======================================================\n Global Error Middleware\n====================================================== */\n\nexport const GlobalErrorHandler =\n (isProd = false) =>\n (\n err: unknown,\n _req: Request,\n res: Response,\n _next: NextFunction\n ): Response => {\n let error: AppError;\n\n /* --------------------\n Normalize error\n -------------------- */\n\n if (err instanceof AppError) {\n error = err;\n } else if (err instanceof Error) {\n error = new AppError(err.message, 500);\n error.isOperational = false;\n } else {\n error = new AppError(\"Internal Server Error\", 500);\n error.isOperational = false;\n }\n\n /* --------------------\n MongoDB errors\n -------------------- */\n\n if (err && (err as MongooseError).name === \"CastError\") {\n error = handleCastErrorDB(err as MongooseError.CastError);\n }\n\n if (\n err &&\n typeof err === \"object\" &&\n (err as { code?: number }).code === 11000\n ) {\n error = handleDuplicateFieldsDB(\n err as { keyValue?: Record<string, unknown> }\n );\n }\n\n if (err && (err as MongooseError).name === \"ValidationError\") {\n error = handleValidationErrorDB(err as MongooseError.ValidationError);\n }\n\n /* --------------------\n JWT errors\n -------------------- */\n\n if ((err as Error)?.name === \"JsonWebTokenError\") {\n error = handleJWTError();\n }\n\n if ((err as Error)?.name === \"TokenExpiredError\") {\n error = handleJWTExpiredError();\n }\n\n /* --------------------\n Logging\n -------------------- */\n\n if (!error.isOperational) {\n logger.danger(\"Programming error\", err);\n } else {\n logger.danger(\"Operational error\", { message: error.message });\n }\n\n /* --------------------\n Response\n -------------------- */\n\n if (!isProd) {\n // DEV: detailed error\n return APIResponse.send(res, {\n success: false,\n statusCode: error.statusCode,\n message: error.message,\n data: {\n stack: (err as Error)?.stack,\n details: error.details,\n },\n });\n }\n\n // PROD: safe error\n return APIResponse.send(res, {\n success: false,\n statusCode: error.statusCode,\n message: error.isOperational ? error.message : \"Something went wrong\",\n });\n };\n","import type { Request, Response, NextFunction } from \"express\";\nimport type { Schema } from \"joi\";\n\nexport const validate =\n (schema: Schema) =>\n (req: Request, _res: Response, next: NextFunction): void => {\n const { error } = schema.validate(req.body);\n\n if (error) {\n return next(error);\n }\n\n next();\n };\n","import type { Model, UpdateQuery } from \"mongoose\";\nimport { AppError } from \"../errors/appError.js\";\n\n/**\n * Generic Base Service\n * Provides default CRUD operations\n */\nexport abstract class BaseService<T> {\n protected model: Model<T>;\n protected resourceName: string;\n\n constructor(model: Model<T>, resourceName: string) {\n this.model = model;\n this.resourceName = resourceName;\n }\n\n async create(data: Partial<T>): Promise<T> {\n const doc = await this.model.create(data as any);\n return doc as T;\n }\n\n async findAll(): Promise<T[]> {\n return this.model.find();\n }\n\n async findById(id: string): Promise<T> {\n const doc = await this.model.findById(id);\n\n if (!doc) {\n throw new AppError(`${this.resourceName} not found`, 404, {\n code: `${this.resourceName.toUpperCase()}_NOT_FOUND`,\n });\n }\n\n return doc;\n }\n\n async updateById(id: string, data: UpdateQuery<T>): Promise<T> {\n const doc = await this.model.findByIdAndUpdate(id, data, {\n new: true,\n runValidators: true,\n });\n\n if (!doc) {\n throw new AppError(`${this.resourceName} not found`, 404, {\n code: `${this.resourceName.toUpperCase()}_NOT_FOUND`,\n });\n }\n\n return doc;\n }\n\n async deleteById(id: string): Promise<T> {\n const doc = await this.model.findByIdAndDelete(id);\n\n if (!doc) {\n throw new AppError(`${this.resourceName} not found`, 404, {\n code: `${this.resourceName.toUpperCase()}_NOT_FOUND`,\n });\n }\n\n return doc;\n }\n}\n","export function milliseconds(value: number): number {\n return value;\n}\n\nexport function seconds(value: number): number {\n return value * 1000;\n}\n\nexport function minutes(value: number): number {\n return value * 60000;\n}\n\nexport function hours(value: number): number {\n return value * 3600000;\n}\n\nexport function days(value: number): number {\n return value * 86400000;\n}\n\nexport function toSeconds(ms: number): number {\n return ms / 1000;\n}\n\nexport function toMinutes(ms: number): number {\n return ms / 60000;\n}\n\nexport function toHours(ms: number): number {\n return ms / 3600000;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}"]}
|