@datagrok/eda 1.4.2 → 1.4.4
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/CHANGELOG.md +8 -0
- package/README.md +1 -0
- package/dist/_d4c0.js +279 -0
- package/dist/_d4c0.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_math_src_dbscan_wasm_clustering-worker_js.js +279 -0
- package/dist/node_modules_datagrok-libraries_math_src_dbscan_wasm_clustering-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_MCL_mcl-sparse-matrix-mult-worker_js.js +59 -0
- package/dist/node_modules_datagrok-libraries_ml_src_MCL_mcl-sparse-matrix-mult-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_distance-matrix-worker_js.js +284 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_distance-matrix-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_single-value-knn-worker_js.js +265 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_single-value-knn-worker_js.js.map +1 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-worker_js.js +287 -0
- package/dist/node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-worker_js.js.map +1 -0
- package/dist/package-test.js +26140 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +30337 -1
- package/dist/package.js.map +1 -1
- package/dist/src_workers_softmax-worker_ts.js +154 -0
- package/dist/src_workers_softmax-worker_ts.js.map +1 -0
- package/dist/src_workers_tsne-worker_ts.js +244 -0
- package/dist/src_workers_tsne-worker_ts.js.map +1 -0
- package/dist/src_workers_umap-worker_ts.js +252 -0
- package/dist/src_workers_umap-worker_ts.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_dbscan_wasm_dbscan_js.js +1253 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_dbscan_wasm_dbscan_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_hierarchical-clustering_wasm_clustering-worker_js.js +942 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_hierarchical-clustering_wasm_clustering-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_webGPU_sparse-matrix_webGPU-sparse-matrix_js-07693f.js +1525 -0
- package/dist/vendors-node_modules_datagrok-libraries_math_src_webGPU_sparse-matrix_webGPU-sparse-matrix_js-07693f.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_MCL_mcl-worker_js-node_modules_datagrok-librar-e4203d.js +2244 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_MCL_mcl-worker_js-node_modules_datagrok-librar-e4203d.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-threshold-worker_js.js +286 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-threshold-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-worker_js.js +280 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_knn-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-threshold-worker_js.js +282 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_sparse-matrix-threshold-worker_js.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_utils_js-node_modules_datagrok-72c7b2.js +1821 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_distance-matrix_utils_js-node_modules_datagrok-72c7b2.js.map +1 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_multi-column-dimensionality-reduction_mulit-co-3800a0.js +7776 -0
- package/dist/vendors-node_modules_datagrok-libraries_ml_src_multi-column-dimensionality-reduction_mulit-co-3800a0.js.map +1 -0
- package/dist/vendors-node_modules_keckelt_tsne_lib_index_js.js +379 -0
- package/dist/vendors-node_modules_keckelt_tsne_lib_index_js.js.map +1 -0
- package/dist/vendors-node_modules_ml-matrix_matrix_mjs.js +5946 -0
- package/dist/vendors-node_modules_ml-matrix_matrix_mjs.js.map +1 -0
- package/dist/vendors-node_modules_umap-js_dist_index_js.js +2284 -0
- package/dist/vendors-node_modules_umap-js_dist_index_js.js.map +1 -0
- package/dist/wasm_EDAForWebWorker_js-wasm_callWasmForWebWorker_js.js +779 -0
- package/dist/wasm_EDAForWebWorker_js-wasm_callWasmForWebWorker_js.js.map +1 -0
- package/dist/wasm_workers_errorWorker_js.js +267 -0
- package/dist/wasm_workers_errorWorker_js.js.map +1 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWithDataNormalizingWorker_js.js +267 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWithDataNormalizingWorker_js.js.map +1 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWorker_js.js +267 -0
- package/dist/wasm_workers_fitLinearRegressionParamsWorker_js.js.map +1 -0
- package/dist/wasm_workers_fitSoftmaxWorker_js.js +267 -0
- package/dist/wasm_workers_fitSoftmaxWorker_js.js.map +1 -0
- package/dist/wasm_workers_generateDatasetWorker_js.js +267 -0
- package/dist/wasm_workers_generateDatasetWorker_js.js.map +1 -0
- package/dist/wasm_workers_normalizeDatasetWorker_js.js +267 -0
- package/dist/wasm_workers_normalizeDatasetWorker_js.js.map +1 -0
- package/dist/wasm_workers_partialLeastSquareRegressionWorker_js.js +267 -0
- package/dist/wasm_workers_partialLeastSquareRegressionWorker_js.js.map +1 -0
- package/dist/wasm_workers_predictByLSSVMWorker_js.js +267 -0
- package/dist/wasm_workers_predictByLSSVMWorker_js.js.map +1 -0
- package/dist/wasm_workers_principalComponentAnalysisNipalsWorker_js.js +267 -0
- package/dist/wasm_workers_principalComponentAnalysisNipalsWorker_js.js.map +1 -0
- package/dist/wasm_workers_principalComponentAnalysisWorkerUpd_js.js +271 -0
- package/dist/wasm_workers_principalComponentAnalysisWorkerUpd_js.js.map +1 -0
- package/dist/wasm_workers_trainAndAnalyzeLSSVMWorker_js.js +267 -0
- package/dist/wasm_workers_trainAndAnalyzeLSSVMWorker_js.js.map +1 -0
- package/dist/wasm_workers_trainLSSVMWorker_js.js +267 -0
- package/dist/wasm_workers_trainLSSVMWorker_js.js.map +1 -0
- package/dist/wasm_workers_xgboostWorker_js.js +279 -0
- package/dist/wasm_workers_xgboostWorker_js.js.map +1 -0
- package/package.json +5 -4
- package/src/package-api.ts +259 -0
- package/src/package.g.ts +522 -0
- package/src/package.ts +907 -678
- package/test-console-output-1.log +95 -80
- package/test-record-1.mp4 +0 -0
- package/tsconfig.json +2 -2
- package/webpack.config.js +5 -0
- package/dist/111.js +0 -2
- package/dist/111.js.map +0 -1
- package/dist/128.js +0 -2
- package/dist/128.js.map +0 -1
- package/dist/153.js +0 -2
- package/dist/153.js.map +0 -1
- package/dist/23.js +0 -2
- package/dist/23.js.map +0 -1
- package/dist/234.js +0 -2
- package/dist/234.js.map +0 -1
- package/dist/242.js +0 -2
- package/dist/242.js.map +0 -1
- package/dist/260.js +0 -2
- package/dist/260.js.map +0 -1
- package/dist/33.js +0 -2
- package/dist/33.js.map +0 -1
- package/dist/348.js +0 -2
- package/dist/348.js.map +0 -1
- package/dist/377.js +0 -2
- package/dist/377.js.map +0 -1
- package/dist/412.js +0 -2
- package/dist/412.js.map +0 -1
- package/dist/415.js +0 -2
- package/dist/415.js.map +0 -1
- package/dist/501.js +0 -2
- package/dist/501.js.map +0 -1
- package/dist/531.js +0 -2
- package/dist/531.js.map +0 -1
- package/dist/583.js +0 -2
- package/dist/583.js.map +0 -1
- package/dist/589.js +0 -2
- package/dist/589.js.map +0 -1
- package/dist/603.js +0 -2
- package/dist/603.js.map +0 -1
- package/dist/656.js +0 -2
- package/dist/656.js.map +0 -1
- package/dist/682.js +0 -2
- package/dist/682.js.map +0 -1
- package/dist/705.js +0 -2
- package/dist/705.js.map +0 -1
- package/dist/727.js +0 -2
- package/dist/727.js.map +0 -1
- package/dist/731.js +0 -2
- package/dist/731.js.map +0 -1
- package/dist/738.js +0 -3
- package/dist/738.js.LICENSE.txt +0 -51
- package/dist/738.js.map +0 -1
- package/dist/763.js +0 -2
- package/dist/763.js.map +0 -1
- package/dist/778.js +0 -2
- package/dist/778.js.map +0 -1
- package/dist/783.js +0 -2
- package/dist/783.js.map +0 -1
- package/dist/793.js +0 -2
- package/dist/793.js.map +0 -1
- package/dist/801.js +0 -2
- package/dist/801.js.map +0 -1
- package/dist/810.js +0 -2
- package/dist/810.js.map +0 -1
- package/dist/860.js +0 -2
- package/dist/860.js.map +0 -1
- package/dist/907.js +0 -2
- package/dist/907.js.map +0 -1
- package/dist/950.js +0 -2
- package/dist/950.js.map +0 -1
- package/dist/980.js +0 -2
- package/dist/980.js.map +0 -1
- package/dist/990.js +0 -2
- package/dist/990.js.map +0 -1
package/dist/907.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"907.js","mappings":"wFAIA,IAAIA,EAAa,EAAQ,KACrBC,EAAU,EAAQ,MAEtB,MAAMC,EAAS,IAAIC,OAAO,GACpBC,EAAa,IAAID,OAAO,GAU9B,SAASE,EAAyBC,EAAQC,EAAU,CAAC,GACnD,MAAM,QACJC,EAAU,GAAE,WACZC,EAAa,GAAE,WACfC,EAAa,EAAC,SACdC,EAAW,QACTJ,EACJ,MAAO,GAAGD,EAAOM,YAAYC,WAC7BX,OACAE,IAOF,SAAqBE,EAAQE,EAASC,EAAYC,EAAYC,GAC5D,MAAM,KAAEG,EAAI,QAAEC,GAAYT,EACpBU,EAAOC,KAAKC,IAAIJ,EAAMN,GACtBW,EAAOF,KAAKC,IAAIH,EAASN,GACzBW,EAAS,GAEf,GAAiB,SAAbT,EAAqB,CACvBA,GAAW,EACXU,EAAM,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAMM,IAC9B,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAMI,IACxB,GAAIjB,EAAOkB,IAAIF,EAAGC,GAAK,EAAG,CACxBZ,GAAW,EACX,MAAMU,CACR,CAGN,CAEA,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAMM,IAAK,CAC7B,IAAIG,EAAO,GACX,IAAK,IAAIF,EAAI,EAAGA,EAAIJ,EAAMI,IACxBE,EAAKC,KAAKC,EAAarB,EAAOkB,IAAIF,EAAGC,GAAIb,EAAYC,IAEvDS,EAAOM,KAAK,GAAGD,EAAKG,KAAK,OAC3B,CAOA,OANIT,IAASJ,IACXK,EAAOA,EAAOS,OAAS,IAAM,QAAQd,EAAUN,kBAE7CO,IAASF,GACXM,EAAOM,KAAK,OAAOZ,EAAON,eAErBY,EAAOQ,KAAK,KAAKxB,IAC1B,CAvCe0B,CAAYxB,EAAQE,EAASC,EAAYC,EAAYC,OAClET,OACAA,UAAeI,EAAOQ,SACtBZ,aAAkBI,EAAOS,YAE3B,CAoCA,SAASY,EAAaI,EAAKrB,EAAYC,GACrC,OACEoB,GAAO,GAAKpB,EACR,IAAIqB,EAAcD,EAAKrB,EAAa,KACpCsB,EAAcD,EAAKrB,IACvBuB,OAAOvB,EACX,CAEA,SAASsB,EAAcD,EAAKG,GAE1B,IAAIC,EAAMJ,EAAIK,WACd,GAAID,EAAIN,QAAUK,EAAK,OAAOC,EAI9B,IAAIE,EAAMN,EAAIO,QAAQJ,GAItB,GAHIG,EAAIR,OAASK,IACfG,EAAMN,EAAIO,QAAQrB,KAAKsB,IAAI,EAAGL,GAAOG,EAAIR,OAASK,MAGlDG,EAAIR,QAAUK,IACbG,EAAIG,WAAW,WACfH,EAAIG,WAAW,UAEhB,OAAOH,EAIT,IAAII,EAAMV,EAAIW,cAAcR,GAI5B,OAHIO,EAAIZ,OAASK,IACfO,EAAMV,EAAIW,cAAczB,KAAKsB,IAAI,EAAGL,GAAOO,EAAIZ,OAASK,MAEnDO,EAAIE,MAAM,EACnB,CAi0BA,SAASC,EAActC,EAAQuC,EAAOC,GACpC,IAAIP,EAAMO,EAAQxC,EAAOQ,KAAOR,EAAOQ,KAAO,EAC9C,GAAI+B,EAAQ,GAAKA,EAAQN,EACvB,MAAM,IAAIQ,WAAW,yBAEzB,CASA,SAASC,EAAiB1C,EAAQuC,EAAOC,GACvC,IAAIP,EAAMO,EAAQxC,EAAOS,QAAUT,EAAOS,QAAU,EACpD,GAAI8B,EAAQ,GAAKA,EAAQN,EACvB,MAAM,IAAIQ,WAAW,4BAEzB,CAUA,SAASE,EAAe3C,EAAQ4C,GAI9B,GAHIA,EAAOC,YACTD,EAASA,EAAOC,aAEdD,EAAOrB,SAAWvB,EAAOS,QAC3B,MAAM,IAAIgC,WACR,yDAGJ,OAAOG,CACT,CAUA,SAASE,EAAkB9C,EAAQ4C,GAIjC,GAHIA,EAAOC,YACTD,EAASA,EAAOC,aAEdD,EAAOrB,SAAWvB,EAAOQ,KAC3B,MAAM,IAAIiC,WAAW,sDAEvB,OAAOG,CACT,CAEA,SAASG,EAAgB/C,EAAQgD,GAC/B,IAAKtD,EAAWA,WAAWsD,GACzB,MAAM,IAAIC,UAAU,gCAGtB,IAAK,IAAIjC,EAAI,EAAGA,EAAIgC,EAAWzB,OAAQP,IACrC,GAAIgC,EAAWhC,GAAK,GAAKgC,EAAWhC,IAAMhB,EAAOQ,KAC/C,MAAM,IAAIiC,WAAW,+BAG3B,CAEA,SAASS,EAAmBlD,EAAQmD,GAClC,IAAKzD,EAAWA,WAAWyD,GACzB,MAAM,IAAIF,UAAU,mCAGtB,IAAK,IAAIjC,EAAI,EAAGA,EAAImC,EAAc5B,OAAQP,IACxC,GAAImC,EAAcnC,GAAK,GAAKmC,EAAcnC,IAAMhB,EAAOS,QACrD,MAAM,IAAIgC,WAAW,kCAG3B,CAEA,SAASW,EAAWpD,EAAQqD,EAAUC,EAAQC,EAAaC,GACzD,GAAyB,IAArBC,UAAUlC,OACZ,MAAM,IAAIkB,WAAW,wBAMvB,GAJAiB,EAAY,WAAYL,GACxBK,EAAY,SAAUJ,GACtBI,EAAY,cAAeH,GAC3BG,EAAY,YAAaF,GAEvBH,EAAWC,GACXC,EAAcC,GACdH,EAAW,GACXA,GAAYrD,EAAOQ,MACnB8C,EAAS,GACTA,GAAUtD,EAAOQ,MACjB+C,EAAc,GACdA,GAAevD,EAAOS,SACtB+C,EAAY,GACZA,GAAaxD,EAAOS,QAEpB,MAAM,IAAIgC,WAAW,qCAEzB,CAEA,SAASkB,EAASpC,EAAQqC,EAAQ,GAChC,IAAIC,EAAQ,GACZ,IAAK,IAAI7C,EAAI,EAAGA,EAAIO,EAAQP,IAC1B6C,EAAMzC,KAAKwC,GAEb,OAAOC,CACT,CAEA,SAASH,EAAYnD,EAAMqD,GACzB,GAAqB,iBAAVA,EACT,MAAM,IAAIX,UAAU,GAAG1C,qBAE3B,CAEA,SAASuD,EAAc9D,GACrB,GAAIA,EAAO+D,UACT,MAAM,IAAIC,MAAM,wCAEpB,CAqNA,MAAMC,EACJ,kBAAOC,CAAYC,EAASC,EAAYC,GAEtC,GADaF,EAAUC,IACRC,EAAQ9C,OACrB,MAAM,IAAIkB,WAAW,+CAEvB,IAAI6B,EAAY,IAAIC,EAAOJ,EAASC,GACpC,IAAK,IAAII,EAAM,EAAGA,EAAML,EAASK,IAC/B,IAAK,IAAIC,EAAS,EAAGA,EAASL,EAAYK,IACxCH,EAAUI,IAAIF,EAAKC,EAAQJ,EAAQG,EAAMJ,EAAaK,IAG1D,OAAOH,CACT,CAEA,gBAAOK,CAAUN,GACf,IAAIzB,EAAS,IAAI2B,EAAO,EAAGF,EAAQ9C,QACnC,IAAK,IAAIP,EAAI,EAAGA,EAAIqD,EAAQ9C,OAAQP,IAClC4B,EAAO8B,IAAI,EAAG1D,EAAGqD,EAAQrD,IAE3B,OAAO4B,CACT,CAEA,mBAAOgC,CAAaP,GAClB,IAAIzB,EAAS,IAAI2B,EAAOF,EAAQ9C,OAAQ,GACxC,IAAK,IAAIP,EAAI,EAAGA,EAAIqD,EAAQ9C,OAAQP,IAClC4B,EAAO8B,IAAI1D,EAAG,EAAGqD,EAAQrD,IAE3B,OAAO4B,CACT,CAEA,YAAOiC,CAAMrE,EAAMC,GACjB,OAAO,IAAI8D,EAAO/D,EAAMC,EAC1B,CAEA,WAAOqE,CAAKtE,EAAMC,GAChB,OAAO,IAAI8D,EAAO/D,EAAMC,GAASsE,KAAK,EACxC,CAEA,WAAOC,CAAKxE,EAAMC,EAASR,EAAU,CAAC,GACpC,GAAuB,iBAAZA,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,OAAEgC,EAAStE,KAAKsE,QAAWhF,EACjC,IAAID,EAAS,IAAIuE,EAAO/D,EAAMC,GAC9B,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IAC3BjB,EAAO0E,IAAI1D,EAAGC,EAAGgE,KAGrB,OAAOjF,CACT,CAEA,cAAOkF,CAAQ1E,EAAMC,EAASR,EAAU,CAAC,GACvC,GAAuB,iBAAZA,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,IAAErC,EAAM,EAAC,IAAEqB,EAAM,IAAI,OAAEgD,EAAStE,KAAKsE,QAAWhF,EACtD,IAAKkF,OAAOC,UAAUxE,GAAM,MAAM,IAAIqC,UAAU,0BAChD,IAAKkC,OAAOC,UAAUnD,GAAM,MAAM,IAAIgB,UAAU,0BAChD,GAAIrC,GAAOqB,EAAK,MAAM,IAAIQ,WAAW,gCACrC,IAAI4C,EAAWpD,EAAMrB,EACjBZ,EAAS,IAAIuE,EAAO/D,EAAMC,GAC9B,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IAAK,CAChC,IAAI2C,EAAQhD,EAAMD,KAAK2E,MAAML,IAAWI,GACxCrF,EAAO0E,IAAI1D,EAAGC,EAAG2C,EACnB,CAEF,OAAO5D,CACT,CAEA,UAAOuF,CAAI/E,EAAMC,EAASmD,QACR4B,IAAZ/E,IAAuBA,EAAUD,QACvBgF,IAAV5B,IAAqBA,EAAQ,GACjC,IAAIhD,EAAMD,KAAKC,IAAIJ,EAAMC,GACrBT,EAASyF,KAAKZ,MAAMrE,EAAMC,GAC9B,IAAK,IAAIO,EAAI,EAAGA,EAAIJ,EAAKI,IACvBhB,EAAO0E,IAAI1D,EAAGA,EAAG4C,GAEnB,OAAO5D,CACT,CAEA,WAAO0F,CAAKC,EAAMnF,EAAMC,GACtB,IAAImF,EAAID,EAAKpE,YACAiE,IAAThF,IAAoBA,EAAOoF,QACfJ,IAAZ/E,IAAuBA,EAAUD,GACrC,IAAII,EAAMD,KAAKC,IAAIgF,EAAGpF,EAAMC,GACxBT,EAASyF,KAAKZ,MAAMrE,EAAMC,GAC9B,IAAK,IAAIO,EAAI,EAAGA,EAAIJ,EAAKI,IACvBhB,EAAO0E,IAAI1D,EAAGA,EAAG2E,EAAK3E,IAExB,OAAOhB,CACT,CAEA,UAAOY,CAAIiF,EAASC,GAClBD,EAAUJ,KAAKM,YAAYF,GAC3BC,EAAUL,KAAKM,YAAYD,GAC3B,IAAItF,EAAOqF,EAAQrF,KACfC,EAAUoF,EAAQpF,QAClBK,EAAS,IAAIyD,EAAO/D,EAAMC,GAC9B,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IAC3BH,EAAO4D,IAAI1D,EAAGC,EAAGN,KAAKC,IAAIiF,EAAQ3E,IAAIF,EAAGC,GAAI6E,EAAQ5E,IAAIF,EAAGC,KAGhE,OAAOH,CACT,CAEA,UAAOmB,CAAI4D,EAASC,GAClBD,EAAUJ,KAAKM,YAAYF,GAC3BC,EAAUL,KAAKM,YAAYD,GAC3B,IAAItF,EAAOqF,EAAQrF,KACfC,EAAUoF,EAAQpF,QAClBK,EAAS,IAAI2E,KAAKjF,EAAMC,GAC5B,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IAC3BH,EAAO4D,IAAI1D,EAAGC,EAAGN,KAAKsB,IAAI4D,EAAQ3E,IAAIF,EAAGC,GAAI6E,EAAQ5E,IAAIF,EAAGC,KAGhE,OAAOH,CACT,CAEA,kBAAOiF,CAAYnC,GACjB,OAAOK,EAAe+B,SAASpC,GAASA,EAAQ,IAAIW,EAAOX,EAC7D,CAEA,eAAOoC,CAASpC,GACd,OAAgB,MAATA,GAAiC,WAAhBA,EAAMqC,KAChC,CAEA,QAAIC,GACF,OAAOT,KAAKjF,KAAOiF,KAAKhF,OAC1B,CAEA,KAAA0F,CAAMC,GACJ,GAAwB,mBAAbA,EACT,MAAM,IAAInD,UAAU,+BAEtB,IAAK,IAAIjC,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCmF,EAASC,KAAKZ,KAAMzE,EAAGC,GAG3B,OAAOwE,IACT,CAEA,SAAA5C,GACE,IAAIgB,EAAQ,GACZ,IAAK,IAAI7C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChC4C,EAAMzC,KAAKqE,KAAKvE,IAAIF,EAAGC,IAG3B,OAAO4C,CACT,CAEA,SAAAyC,GACE,IAAIC,EAAO,GACX,IAAK,IAAIvF,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAAK,CAClCuF,EAAKnF,KAAK,IACV,IAAK,IAAIH,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCsF,EAAKvF,GAAGI,KAAKqE,KAAKvE,IAAIF,EAAGC,GAE7B,CACA,OAAOsF,CACT,CAEA,MAAAC,GACE,OAAOf,KAAKa,WACd,CAEA,WAAAG,GACE,OAAqB,IAAdhB,KAAKjF,IACd,CAEA,cAAAkG,GACE,OAAwB,IAAjBjB,KAAKhF,OACd,CAEA,QAAAkG,GACE,OAAqB,IAAdlB,KAAKjF,MAA+B,IAAjBiF,KAAKhF,OACjC,CAEA,QAAAmG,GACE,OAAOnB,KAAKjF,OAASiF,KAAKhF,OAC5B,CAEA,OAAAsD,GACE,OAAqB,IAAd0B,KAAKjF,MAA+B,IAAjBiF,KAAKhF,OACjC,CAEA,WAAAoG,GACE,GAAIpB,KAAKmB,WAAY,CACnB,IAAK,IAAI5F,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,GAAKD,EAAGC,IACtB,GAAIwE,KAAKvE,IAAIF,EAAGC,KAAOwE,KAAKvE,IAAID,EAAGD,GACjC,OAAO,EAIb,OAAO,CACT,CACA,OAAO,CACT,CAEA,UAAA8F,GACE,IAAKrB,KAAKoB,cAAe,OAAO,EAEhC,IAAK,IAAI7F,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,GAAuB,IAAnByE,KAAKvE,IAAIF,EAAGA,GAAU,OAAO,EAGnC,OAAO,CACT,CAEA,aAAA+F,GACE,IAAI/F,EAAI,EACJC,EAAI,EACJ+F,GAAkB,EAClBD,GAAgB,EAChBE,GAAU,EACd,KAAOjG,EAAIyE,KAAKjF,MAAQuG,GAAe,CAGrC,IAFA9F,EAAI,EACJgG,GAAU,EACHhG,EAAIwE,KAAKhF,UAAuB,IAAZwG,GACF,IAAnBxB,KAAKvE,IAAIF,EAAGC,GACdA,IAC4B,IAAnBwE,KAAKvE,IAAIF,EAAGC,IAAYA,EAAI+F,GACrCC,GAAU,EACVD,EAAiB/F,IAEjB8F,GAAgB,EAChBE,GAAU,GAGdjG,GACF,CACA,OAAO+F,CACT,CAEA,oBAAAG,GACE,IAAIlG,EAAI,EACJC,EAAI,EACJ+F,GAAkB,EAClBE,GAAuB,EACvBD,GAAU,EACd,KAAOjG,EAAIyE,KAAKjF,MAAQ0G,GAAsB,CAG5C,IAFAjG,EAAI,EACJgG,GAAU,EACHhG,EAAIwE,KAAKhF,UAAuB,IAAZwG,GACF,IAAnBxB,KAAKvE,IAAIF,EAAGC,GACdA,IAC4B,IAAnBwE,KAAKvE,IAAIF,EAAGC,IAAYA,EAAI+F,GACrCC,GAAU,EACVD,EAAiB/F,IAEjBiG,GAAuB,EACvBD,GAAU,GAGd,IAAK,IAAIE,EAAIlG,EAAI,EAAGkG,EAAI1B,KAAKjF,KAAM2G,IACV,IAAnB1B,KAAKvE,IAAIF,EAAGmG,KACdD,GAAuB,GAG3BlG,GACF,CACA,OAAOkG,CACT,CAEA,WAAAE,GACE,IAAItG,EAAS2E,KAAK4B,QACdC,EAAI,EACJH,EAAI,EACR,KAAOG,EAAIxG,EAAON,MAAQ2G,EAAIrG,EAAOL,SAAS,CAC5C,IAAI8G,EAAOD,EACX,IAAK,IAAItG,EAAIsG,EAAGtG,EAAIF,EAAON,KAAMQ,IAC3BF,EAAOI,IAAIF,EAAGmG,GAAKrG,EAAOI,IAAIqG,EAAMJ,KACtCI,EAAOvG,GAGX,GAA4B,IAAxBF,EAAOI,IAAIqG,EAAMJ,GACnBA,QACK,CACLrG,EAAO0G,SAASF,EAAGC,GACnB,IAAIE,EAAM3G,EAAOI,IAAIoG,EAAGH,GACxB,IAAK,IAAIlG,EAAIkG,EAAGlG,EAAIH,EAAOL,QAASQ,IAClCH,EAAO4D,IAAI4C,EAAGrG,EAAGH,EAAOI,IAAIoG,EAAGrG,GAAKwG,GAEtC,IAAK,IAAIzG,EAAIsG,EAAI,EAAGtG,EAAIF,EAAON,KAAMQ,IAAK,CACxC,IAAI0G,EAAS5G,EAAOI,IAAIF,EAAGmG,GAAKrG,EAAOI,IAAIoG,EAAGH,GAC9CrG,EAAO4D,IAAI1D,EAAGmG,EAAG,GACjB,IAAK,IAAIlG,EAAIkG,EAAI,EAAGlG,EAAIH,EAAOL,QAASQ,IACtCH,EAAO4D,IAAI1D,EAAGC,EAAGH,EAAOI,IAAIF,EAAGC,GAAKH,EAAOI,IAAIoG,EAAGrG,GAAKyG,EAE3D,CACAJ,IACAH,GACF,CACF,CACA,OAAOrG,CACT,CAEA,kBAAA6G,GACE,IAAI7G,EAAS2E,KAAK2B,cACdQ,EAAI9G,EAAOL,QACXoH,EAAI/G,EAAON,KACX8G,EAAIO,EAAI,EACZ,KAAOP,GAAK,GACV,GAAyB,IAArBxG,EAAOgH,OAAOR,GAChBA,QACK,CACL,IAAIS,EAAI,EACJC,GAAQ,EACZ,KAAOD,EAAIF,IAAe,IAAVG,GACW,IAArBlH,EAAOI,IAAIoG,EAAGS,GAChBC,GAAQ,EAERD,IAGJ,IAAK,IAAI/G,EAAI,EAAGA,EAAIsG,EAAGtG,IAAK,CAC1B,IAAI0G,EAAS5G,EAAOI,IAAIF,EAAG+G,GAC3B,IAAK,IAAI9G,EAAI8G,EAAG9G,EAAI2G,EAAG3G,IAAK,CAC1B,IAAIwG,EAAM3G,EAAOI,IAAIF,EAAGC,GAAKyG,EAAS5G,EAAOI,IAAIoG,EAAGrG,GACpDH,EAAO4D,IAAI1D,EAAGC,EAAGwG,EACnB,CACF,CACAH,GACF,CAEF,OAAOxG,CACT,CAEA,GAAA4D,GACE,MAAM,IAAIV,MAAM,8BAClB,CAEA,GAAA9C,GACE,MAAM,IAAI8C,MAAM,8BAClB,CAEA,MAAAnE,CAAOI,EAAU,CAAC,GAChB,GAAuB,iBAAZA,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,KAAEzC,EAAO,EAAC,QAAEC,EAAU,GAAMR,EAClC,IAAKkF,OAAOC,UAAU5E,IAASA,GAAQ,EACrC,MAAM,IAAIyC,UAAU,mCAEtB,IAAKkC,OAAOC,UAAU3E,IAAYA,GAAW,EAC3C,MAAM,IAAIwC,UAAU,sCAEtB,IAAIjD,EAAS,IAAIuE,EAAOkB,KAAKjF,KAAOA,EAAMiF,KAAKhF,QAAUA,GACzD,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IAC3BjB,EAAOiI,aAAaxC,KAAMA,KAAKjF,KAAOQ,EAAGyE,KAAKhF,QAAUQ,GAG5D,OAAOjB,CACT,CAEA,IAAA+E,CAAKnB,GACH,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAG2C,GAGnB,OAAO6B,IACT,CAEA,GAAAyC,GACE,OAAOzC,KAAK0C,MAAM,EACpB,CAEA,MAAAC,CAAO7F,GACLD,EAAcmD,KAAMlD,GACpB,IAAIiC,EAAM,GACV,IAAK,IAAIxD,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAChCwD,EAAIpD,KAAKqE,KAAKvE,IAAIqB,EAAOvB,IAE3B,OAAOwD,CACT,CAEA,YAAA6D,CAAa9F,GACX,OAAOgC,EAAOI,UAAUc,KAAK2C,OAAO7F,GACtC,CAEA,MAAA+F,CAAO/F,EAAOsB,GACZvB,EAAcmD,KAAMlD,GACpBsB,EAAQlB,EAAe8C,KAAM5B,GAC7B,IAAK,IAAI7C,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAChCyE,KAAKf,IAAInC,EAAOvB,EAAG6C,EAAM7C,IAE3B,OAAOyE,IACT,CAEA,QAAA+B,CAASe,EAAMC,GACblG,EAAcmD,KAAM8C,GACpBjG,EAAcmD,KAAM+C,GACpB,IAAK,IAAIxH,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAAK,CACrC,IAAIyH,EAAOhD,KAAKvE,IAAIqH,EAAMvH,GAC1ByE,KAAKf,IAAI6D,EAAMvH,EAAGyE,KAAKvE,IAAIsH,EAAMxH,IACjCyE,KAAKf,IAAI8D,EAAMxH,EAAGyH,EACpB,CACA,OAAOhD,IACT,CAEA,SAAAiD,CAAUnG,GACRG,EAAiB+C,KAAMlD,GACvB,IAAIkC,EAAS,GACb,IAAK,IAAIzD,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7ByD,EAAOrD,KAAKqE,KAAKvE,IAAIF,EAAGuB,IAE1B,OAAOkC,CACT,CAEA,eAAAkE,CAAgBpG,GACd,OAAOgC,EAAOK,aAAaa,KAAKiD,UAAUnG,GAC5C,CAEA,SAAAqG,CAAUrG,EAAOsB,GACfnB,EAAiB+C,KAAMlD,GACvBsB,EAAQf,EAAkB2C,KAAM5B,GAChC,IAAK,IAAI7C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7ByE,KAAKf,IAAI1D,EAAGuB,EAAOsB,EAAM7C,IAE3B,OAAOyE,IACT,CAEA,WAAAoD,CAAYC,EAASC,GACnBrG,EAAiB+C,KAAMqD,GACvBpG,EAAiB+C,KAAMsD,GACvB,IAAK,IAAI/H,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAAK,CAClC,IAAIyH,EAAOhD,KAAKvE,IAAIF,EAAG8H,GACvBrD,KAAKf,IAAI1D,EAAG8H,EAASrD,KAAKvE,IAAIF,EAAG+H,IACjCtD,KAAKf,IAAI1D,EAAG+H,EAASN,EACvB,CACA,OAAOhD,IACT,CAEA,YAAAuD,CAAapG,GACXA,EAASD,EAAe8C,KAAM7C,GAC9B,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO3B,IAG3C,OAAOwE,IACT,CAEA,YAAAwD,CAAarG,GACXA,EAASD,EAAe8C,KAAM7C,GAC9B,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO3B,IAG3C,OAAOwE,IACT,CAEA,YAAAyD,CAAatG,GACXA,EAASD,EAAe8C,KAAM7C,GAC9B,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO3B,IAG3C,OAAOwE,IACT,CAEA,YAAA0D,CAAavG,GACXA,EAASD,EAAe8C,KAAM7C,GAC9B,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO3B,IAG3C,OAAOwE,IACT,CAEA,eAAA2D,CAAgBxG,GACdA,EAASE,EAAkB2C,KAAM7C,GACjC,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO5B,IAG3C,OAAOyE,IACT,CAEA,eAAA4D,CAAgBzG,GACdA,EAASE,EAAkB2C,KAAM7C,GACjC,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO5B,IAG3C,OAAOyE,IACT,CAEA,eAAA6D,CAAgB1G,GACdA,EAASE,EAAkB2C,KAAM7C,GACjC,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO5B,IAG3C,OAAOyE,IACT,CAEA,eAAA8D,CAAgB3G,GACdA,EAASE,EAAkB2C,KAAM7C,GACjC,IAAK,IAAI5B,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2B,EAAO5B,IAG3C,OAAOyE,IACT,CAEA,MAAA+D,CAAOjH,EAAOqB,GACZtB,EAAcmD,KAAMlD,GACpB,IAAK,IAAIvB,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAChCyE,KAAKf,IAAInC,EAAOvB,EAAGyE,KAAKvE,IAAIqB,EAAOvB,GAAK4C,GAE1C,OAAO6B,IACT,CAEA,SAAAgE,CAAUlH,EAAOqB,GACflB,EAAiB+C,KAAMlD,GACvB,IAAK,IAAIvB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7ByE,KAAKf,IAAI1D,EAAGuB,EAAOkD,KAAKvE,IAAIF,EAAGuB,GAASqB,GAE1C,OAAO6B,IACT,CAEA,GAAAxD,CAAIyH,GACF,GAAIjE,KAAK1B,UACP,OAAO4F,IAET,OAAQD,GACN,IAAK,MAAO,CACV,MAAMzH,EAAM,IAAI2H,MAAMnE,KAAKjF,MAAMuE,KAAKI,OAAO0E,mBAC7C,IAAK,IAAIrF,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIC,EAAS,EAAGA,EAASgB,KAAKhF,QAASgE,IACtCgB,KAAKvE,IAAIsD,EAAKC,GAAUxC,EAAIuC,KAC9BvC,EAAIuC,GAAOiB,KAAKvE,IAAIsD,EAAKC,IAI/B,OAAOxC,CACT,CACA,IAAK,SAAU,CACb,MAAMA,EAAM,IAAI2H,MAAMnE,KAAKhF,SAASsE,KAAKI,OAAO0E,mBAChD,IAAK,IAAIrF,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIC,EAAS,EAAGA,EAASgB,KAAKhF,QAASgE,IACtCgB,KAAKvE,IAAIsD,EAAKC,GAAUxC,EAAIwC,KAC9BxC,EAAIwC,GAAUgB,KAAKvE,IAAIsD,EAAKC,IAIlC,OAAOxC,CACT,CACA,UAAKuD,EAAW,CACd,IAAIvD,EAAMwD,KAAKvE,IAAI,EAAG,GACtB,IAAK,IAAIsD,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIC,EAAS,EAAGA,EAASgB,KAAKhF,QAASgE,IACtCgB,KAAKvE,IAAIsD,EAAKC,GAAUxC,IAC1BA,EAAMwD,KAAKvE,IAAIsD,EAAKC,IAI1B,OAAOxC,CACT,CACA,QACE,MAAM,IAAI+B,MAAM,mBAAmB0F,KAEzC,CAEA,QAAAI,GACEhG,EAAc2B,MACd,IAAIsE,EAAItE,KAAKvE,IAAI,EAAG,GAChB8I,EAAM,CAAC,EAAG,GACd,IAAK,IAAIhJ,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAC5BwE,KAAKvE,IAAIF,EAAGC,GAAK8I,IACnBA,EAAItE,KAAKvE,IAAIF,EAAGC,GAChB+I,EAAI,GAAKhJ,EACTgJ,EAAI,GAAK/I,GAIf,OAAO+I,CACT,CAEA,GAAApJ,CAAI8I,GACF,GAAIjE,KAAK1B,UACP,OAAO4F,IAGT,OAAQD,GACN,IAAK,MAAO,CACV,MAAM9I,EAAM,IAAIgJ,MAAMnE,KAAKjF,MAAMuE,KAAKI,OAAO8E,mBAC7C,IAAK,IAAIzF,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIC,EAAS,EAAGA,EAASgB,KAAKhF,QAASgE,IACtCgB,KAAKvE,IAAIsD,EAAKC,GAAU7D,EAAI4D,KAC9B5D,EAAI4D,GAAOiB,KAAKvE,IAAIsD,EAAKC,IAI/B,OAAO7D,CACT,CACA,IAAK,SAAU,CACb,MAAMA,EAAM,IAAIgJ,MAAMnE,KAAKhF,SAASsE,KAAKI,OAAO8E,mBAChD,IAAK,IAAIzF,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIC,EAAS,EAAGA,EAASgB,KAAKhF,QAASgE,IACtCgB,KAAKvE,IAAIsD,EAAKC,GAAU7D,EAAI6D,KAC9B7D,EAAI6D,GAAUgB,KAAKvE,IAAIsD,EAAKC,IAIlC,OAAO7D,CACT,CACA,UAAK4E,EAAW,CACd,IAAI5E,EAAM6E,KAAKvE,IAAI,EAAG,GACtB,IAAK,IAAIsD,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIC,EAAS,EAAGA,EAASgB,KAAKhF,QAASgE,IACtCgB,KAAKvE,IAAIsD,EAAKC,GAAU7D,IAC1BA,EAAM6E,KAAKvE,IAAIsD,EAAKC,IAI1B,OAAO7D,CACT,CACA,QACE,MAAM,IAAIoD,MAAM,mBAAmB0F,KAEzC,CAEA,QAAAQ,GACEpG,EAAc2B,MACd,IAAIsE,EAAItE,KAAKvE,IAAI,EAAG,GAChB8I,EAAM,CAAC,EAAG,GACd,IAAK,IAAIhJ,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAC5BwE,KAAKvE,IAAIF,EAAGC,GAAK8I,IACnBA,EAAItE,KAAKvE,IAAIF,EAAGC,GAChB+I,EAAI,GAAKhJ,EACTgJ,EAAI,GAAK/I,GAIf,OAAO+I,CACT,CAEA,MAAAlC,CAAOtD,GAEL,GADAlC,EAAcmD,KAAMjB,GAChBiB,KAAK1B,UACP,OAAO4F,IAET,IAAII,EAAItE,KAAKvE,IAAIsD,EAAK,GACtB,IAAK,IAAIxD,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAC5ByE,KAAKvE,IAAIsD,EAAKxD,GAAK+I,IACrBA,EAAItE,KAAKvE,IAAIsD,EAAKxD,IAGtB,OAAO+I,CACT,CAEA,WAAAI,CAAY3F,GACVlC,EAAcmD,KAAMjB,GACpBV,EAAc2B,MACd,IAAIsE,EAAItE,KAAKvE,IAAIsD,EAAK,GAClBwF,EAAM,CAACxF,EAAK,GAChB,IAAK,IAAIxD,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAC5ByE,KAAKvE,IAAIsD,EAAKxD,GAAK+I,IACrBA,EAAItE,KAAKvE,IAAIsD,EAAKxD,GAClBgJ,EAAI,GAAKhJ,GAGb,OAAOgJ,CACT,CAEA,MAAAI,CAAO5F,GAEL,GADAlC,EAAcmD,KAAMjB,GAChBiB,KAAK1B,UACP,OAAO4F,IAET,IAAII,EAAItE,KAAKvE,IAAIsD,EAAK,GACtB,IAAK,IAAIxD,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAC5ByE,KAAKvE,IAAIsD,EAAKxD,GAAK+I,IACrBA,EAAItE,KAAKvE,IAAIsD,EAAKxD,IAGtB,OAAO+I,CACT,CAEA,WAAAM,CAAY7F,GACVlC,EAAcmD,KAAMjB,GACpBV,EAAc2B,MACd,IAAIsE,EAAItE,KAAKvE,IAAIsD,EAAK,GAClBwF,EAAM,CAACxF,EAAK,GAChB,IAAK,IAAIxD,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAC5ByE,KAAKvE,IAAIsD,EAAKxD,GAAK+I,IACrBA,EAAItE,KAAKvE,IAAIsD,EAAKxD,GAClBgJ,EAAI,GAAKhJ,GAGb,OAAOgJ,CACT,CAEA,SAAAM,CAAU7F,GAER,GADA/B,EAAiB+C,KAAMhB,GACnBgB,KAAK1B,UACP,OAAO4F,IAET,IAAII,EAAItE,KAAKvE,IAAI,EAAGuD,GACpB,IAAK,IAAIzD,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IACzByE,KAAKvE,IAAIF,EAAGyD,GAAUsF,IACxBA,EAAItE,KAAKvE,IAAIF,EAAGyD,IAGpB,OAAOsF,CACT,CAEA,cAAAQ,CAAe9F,GACb/B,EAAiB+C,KAAMhB,GACvBX,EAAc2B,MACd,IAAIsE,EAAItE,KAAKvE,IAAI,EAAGuD,GAChBuF,EAAM,CAAC,EAAGvF,GACd,IAAK,IAAIzD,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IACzByE,KAAKvE,IAAIF,EAAGyD,GAAUsF,IACxBA,EAAItE,KAAKvE,IAAIF,EAAGyD,GAChBuF,EAAI,GAAKhJ,GAGb,OAAOgJ,CACT,CAEA,SAAAQ,CAAU/F,GAER,GADA/B,EAAiB+C,KAAMhB,GACnBgB,KAAK1B,UACP,OAAO4F,IAET,IAAII,EAAItE,KAAKvE,IAAI,EAAGuD,GACpB,IAAK,IAAIzD,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IACzByE,KAAKvE,IAAIF,EAAGyD,GAAUsF,IACxBA,EAAItE,KAAKvE,IAAIF,EAAGyD,IAGpB,OAAOsF,CACT,CAEA,cAAAU,CAAehG,GACb/B,EAAiB+C,KAAMhB,GACvBX,EAAc2B,MACd,IAAIsE,EAAItE,KAAKvE,IAAI,EAAGuD,GAChBuF,EAAM,CAAC,EAAGvF,GACd,IAAK,IAAIzD,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IACzByE,KAAKvE,IAAIF,EAAGyD,GAAUsF,IACxBA,EAAItE,KAAKvE,IAAIF,EAAGyD,GAChBuF,EAAI,GAAKhJ,GAGb,OAAOgJ,CACT,CAEA,IAAAtE,GACE,IAAI9E,EAAMD,KAAKC,IAAI6E,KAAKjF,KAAMiF,KAAKhF,SAC/BiF,EAAO,GACX,IAAK,IAAI1E,EAAI,EAAGA,EAAIJ,EAAKI,IACvB0E,EAAKtE,KAAKqE,KAAKvE,IAAIF,EAAGA,IAExB,OAAO0E,CACT,CAEA,IAAAgF,CAAKC,EAAO,aACV,OAAQA,GACN,IAAK,MACH,OAAOlF,KAAKxD,MACd,IAAK,YACH,OAAOtB,KAAKiK,KAAKnF,KAAKoF,IAAIpF,OAC5B,QACE,MAAM,IAAIhD,WAAW,sBAAsBkI,KAEjD,CAEA,aAAAG,GACE,IAAIC,EAAM,EACV,IAAK,IAAI/J,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChC8J,GAAOtF,KAAKvE,IAAIF,EAAGC,GACnBwE,KAAKf,IAAI1D,EAAGC,EAAG8J,GAGnB,OAAOtF,IACT,CAEA,GAAAoF,CAAIG,GACE/G,EAAe+B,SAASgF,KAAUA,EAAUA,EAAQnI,aACxD,IAAIoI,EAAUxF,KAAK5C,YACnB,GAAIoI,EAAQ1J,SAAWyJ,EAAQzJ,OAC7B,MAAM,IAAIkB,WAAW,qCAEvB,IAAIoI,EAAM,EACV,IAAK,IAAI7J,EAAI,EAAGA,EAAIiK,EAAQ1J,OAAQP,IAClC6J,GAAOI,EAAQjK,GAAKgK,EAAQhK,GAE9B,OAAO6J,CACT,CAEA,IAAAK,CAAKC,GACHA,EAAQ5G,EAAOwB,YAAYoF,GAE3B,IAAIvD,EAAInC,KAAKjF,KACTqH,EAAIpC,KAAKhF,QACTsH,EAAIoD,EAAM1K,QAEVK,EAAS,IAAIyD,EAAOqD,EAAGG,GAEvBqD,EAAQ,IAAIC,aAAaxD,GAC7B,IAAK,IAAI5G,EAAI,EAAGA,EAAI8G,EAAG9G,IAAK,CAC1B,IAAK,IAAIkG,EAAI,EAAGA,EAAIU,EAAGV,IACrBiE,EAAMjE,GAAKgE,EAAMjK,IAAIiG,EAAGlG,GAG1B,IAAK,IAAID,EAAI,EAAGA,EAAI4G,EAAG5G,IAAK,CAC1B,IAAIsK,EAAI,EACR,IAAK,IAAInE,EAAI,EAAGA,EAAIU,EAAGV,IACrBmE,GAAK7F,KAAKvE,IAAIF,EAAGmG,GAAKiE,EAAMjE,GAG9BrG,EAAO4D,IAAI1D,EAAGC,EAAGqK,EACnB,CACF,CACA,OAAOxK,CACT,CAEA,IAAAyK,CAAKC,GACH,IAAK/F,KAAKmB,WACR,MAAM,IAAInE,WAAW,yBAEvB,IAAK0C,OAAOC,UAAUoG,IAAWA,EAAS,EACxC,MAAM,IAAI/I,WAAW,2CAGvB,IAAI3B,EAASyD,EAAOgB,IAAIE,KAAKjF,MACzBiL,EAAKhG,KAET,IAAK,IAAIiG,EAAIF,EAAQE,GAAK,EAAGA,GAAK,EACvB,EAAJA,IACH5K,EAASA,EAAOoK,KAAKO,IAEvBA,EAAKA,EAAGP,KAAKO,GAEf,OAAO3K,CACT,CAEA,WAAA6K,CAAYR,GACVA,EAAQ5G,EAAOwB,YAAYoF,GAC3B,IAAIrK,EAAS,IAAIyD,EAAO,EAAG,GAC3B,MAAMqH,EAAMnG,KAAKvE,IAAI,EAAG,GAClB2K,EAAMV,EAAMjK,IAAI,EAAG,GACnB4K,EAAMrG,KAAKvE,IAAI,EAAG,GAClB6K,EAAMZ,EAAMjK,IAAI,EAAG,GACnB8K,EAAMvG,KAAKvE,IAAI,EAAG,GAClB+K,EAAMd,EAAMjK,IAAI,EAAG,GACnBgL,EAAMzG,KAAKvE,IAAI,EAAG,GAClBiL,EAAMhB,EAAMjK,IAAI,EAAG,GAGnBkL,GAAMR,EAAMM,IAAQL,EAAMM,GAC1BE,GAAML,EAAME,GAAOL,EACnBS,EAAKV,GAAOG,EAAMI,GAClBI,EAAKL,GAAOD,EAAMJ,GAClBW,GAAMZ,EAAME,GAAOK,EAKnBM,EAAML,EAAKG,EAAKC,GAHVV,EAAMI,IAAQD,EAAME,GAI1BO,EAAMJ,EAAKE,EACXG,EAAMN,EAAKE,EACXK,EAAMR,EAAKC,EAAKC,GAPVN,EAAMJ,IAAQC,EAAME,GAahC,OAJAjL,EAAO4D,IAAI,EAAG,EAAG+H,GACjB3L,EAAO4D,IAAI,EAAG,EAAGgI,GACjB5L,EAAO4D,IAAI,EAAG,EAAGiI,GACjB7L,EAAO4D,IAAI,EAAG,EAAGkI,GACV9L,CACT,CAEA,WAAA+L,CAAY1B,GACVA,EAAQ5G,EAAOwB,YAAYoF,GAC3B,IAAIrK,EAAS,IAAIyD,EAAO,EAAG,GAE3B,MAAMuI,EAAMrH,KAAKvE,IAAI,EAAG,GAClB6L,EAAMtH,KAAKvE,IAAI,EAAG,GAClB8L,EAAMvH,KAAKvE,IAAI,EAAG,GAClB+L,EAAMxH,KAAKvE,IAAI,EAAG,GAClB0K,EAAMnG,KAAKvE,IAAI,EAAG,GAClB4K,EAAMrG,KAAKvE,IAAI,EAAG,GAClBgM,EAAMzH,KAAKvE,IAAI,EAAG,GAClB8K,EAAMvG,KAAKvE,IAAI,EAAG,GAClBgL,EAAMzG,KAAKvE,IAAI,EAAG,GAElBiM,EAAMhC,EAAMjK,IAAI,EAAG,GACnBkM,EAAMjC,EAAMjK,IAAI,EAAG,GACnBmM,EAAMlC,EAAMjK,IAAI,EAAG,GACnBoM,EAAMnC,EAAMjK,IAAI,EAAG,GACnB2K,EAAMV,EAAMjK,IAAI,EAAG,GACnB6K,EAAMZ,EAAMjK,IAAI,EAAG,GACnBqM,EAAMpC,EAAMjK,IAAI,EAAG,GACnB+K,EAAMd,EAAMjK,IAAI,EAAG,GACnBiL,EAAMhB,EAAMjK,IAAI,EAAG,GAGnBmL,GAAMS,EAAMG,KAASG,EAAMvB,GAE3BU,IAAOO,EAAMG,EAAMrB,IAAQuB,EAAMC,EAAMvB,GACvCW,GAAMS,EAAMrB,KAASuB,EAAMC,GAC3BI,EAAKV,EAAMK,EACXM,IAAOX,EAAMI,EAAMlB,IAAQmB,EAAME,EAAMtB,GACvC2B,IAAOZ,EAAMI,IAAQG,EAAMtB,GAC3B4B,GAAMT,EAAMlB,KAASmB,EAAME,GAG3BO,IAAQZ,EAAMhB,EAAME,IAAQL,EAAM0B,EAAMtB,GACxC4B,GAAOb,EAAMd,IAAQL,EAAMI,GAC3B6B,EAAMd,EAAMO,EACZQ,GAAO/B,EAAME,KAASqB,EAAMtB,GAC5B+B,IAAQhB,EAAMpB,EAAME,IAAQC,EAAMwB,EAAMpB,GACxC8B,GAAOjB,EAAMlB,IAAQC,EAAMI,GAC3B+B,GAAOtC,EAAME,KAASyB,EAAMpB,GAO5BM,EAAMe,EAAKM,EANLf,EAAMO,EAOZZ,GAzBMI,EAAMC,EAAMC,EAAMC,EAAMrB,EAAMI,EAAME,GAAOL,EAyBtCU,EAAKC,EAAKgB,EAAKI,EAAME,EAAMC,EACtCI,EAAMX,EAAKC,EAAKE,GAjBTb,EAAMC,EAAMC,EAAMpB,EAAME,EAAMoB,EAAMlB,GAAOD,EAiBvB+B,EAAME,EAAME,EACvCvB,EAAMN,EAzBDT,IAAQuB,EAAMC,EAAME,EAAMzB,EAAME,EAAMwB,EAAMpB,GAyBjCI,EAAKiB,EAAKM,EAAME,EAAMC,EACtCrB,EAAMP,EAAKE,EAAKC,EAAKgB,EATf1B,EAAMG,EAUZmC,EAAMN,EAAME,EAAMC,EAAMC,EATlBjB,EAAMI,EAUZgB,EAAMb,EAAKC,EAAKC,EApBV1B,IAAQmB,EAAME,EAAMC,EAAMzB,EAAME,EAAMwB,EAAMtB,GAoBvB2B,EAAMC,EAAMC,EACvCQ,EAAMV,EAAMC,EAAMC,EAAMC,EAVlBb,EAAME,EAWZmB,EAAMf,EAAKC,EAAKC,EAAKC,EAVfzB,EAAMC,EAqBlB,OATArL,EAAO4D,IAAI,EAAG,EAAG+H,GACjB3L,EAAO4D,IAAI,EAAG,EAAGgI,GACjB5L,EAAO4D,IAAI,EAAG,EAAGyJ,GACjBrN,EAAO4D,IAAI,EAAG,EAAGiI,GACjB7L,EAAO4D,IAAI,EAAG,EAAGkI,GACjB9L,EAAO4D,IAAI,EAAG,EAAG0J,GACjBtN,EAAO4D,IAAI,EAAG,EAAG2J,GACjBvN,EAAO4D,IAAI,EAAG,EAAG4J,GACjBxN,EAAO4D,IAAI,EAAG,EAAG6J,GACVzN,CACT,CAEA,YAAA0N,CAAaC,GACXA,EAAIlK,EAAOwB,YAAY0I,GACvB,IAAIC,EAAIjJ,KAAK4B,QACTsH,EAAKD,EAAElO,KACPoO,EAAKF,EAAEjO,QACPoO,EAAKJ,EAAEjO,KACPsO,EAAKL,EAAEhO,QAUX,SAASsO,EAAMC,EAAKxO,EAAMyO,GACxB,IAAIC,EAAIF,EAAIxO,KACR2O,EAAIH,EAAIvO,QACZ,GAAIyO,IAAM1O,GAAQ2O,IAAMF,EACtB,OAAOD,EACF,CACL,IAAII,EAAWnL,EAAeY,MAAMrE,EAAMyO,GAE1C,OADAG,EAAWA,EAASnH,aAAa+G,EAAK,EAAG,GAClCI,CACT,CACF,CAnBIR,IAAOC,GAETQ,QAAQC,KACN,eAAeX,OAAQC,SAAUC,OAAQC,sCAsB7C,IAAII,EAAIvO,KAAKsB,IAAI0M,EAAIE,GACjBM,EAAIxO,KAAKsB,IAAI2M,EAAIE,GAiFrB,OAhFAJ,EAAIK,EAAML,EAAGQ,EAAGC,GAIhB,SAASI,EAAUC,EAAGC,EAAGjP,EAAMyO,GAE7B,GAAIzO,GAAQ,KAAOyO,GAAQ,IACzB,OAAOO,EAAEtE,KAAKuE,GAIZjP,EAAO,GAAM,GAAKyO,EAAO,GAAM,GACjCO,EAAIT,EAAMS,EAAGhP,EAAO,EAAGyO,EAAO,GAC9BQ,EAAIV,EAAMU,EAAGjP,EAAO,EAAGyO,EAAO,IACrBzO,EAAO,GAAM,GACtBgP,EAAIT,EAAMS,EAAGhP,EAAO,EAAGyO,GACvBQ,EAAIV,EAAMU,EAAGjP,EAAO,EAAGyO,IACdA,EAAO,GAAM,IACtBO,EAAIT,EAAMS,EAAGhP,EAAMyO,EAAO,GAC1BQ,EAAIV,EAAMU,EAAGjP,EAAMyO,EAAO,IAG5B,IAAIS,EAAWC,SAASH,EAAEhP,KAAO,EAAG,IAChCoP,EAAWD,SAASH,EAAE/O,QAAU,EAAG,IAEnCmL,EAAM4D,EAAEK,UAAU,EAAGH,EAAW,EAAG,EAAGE,EAAW,GACjD/D,EAAM4D,EAAEI,UAAU,EAAGH,EAAW,EAAG,EAAGE,EAAW,GAEjD9D,EAAM0D,EAAEK,UAAU,EAAGH,EAAW,EAAGE,EAAUJ,EAAE/O,QAAU,GACzDsL,EAAM0D,EAAEI,UAAU,EAAGH,EAAW,EAAGE,EAAUH,EAAEhP,QAAU,GAEzDuL,EAAMwD,EAAEK,UAAUH,EAAUF,EAAEhP,KAAO,EAAG,EAAGoP,EAAW,GACtD3D,EAAMwD,EAAEI,UAAUH,EAAUD,EAAEjP,KAAO,EAAG,EAAGoP,EAAW,GAEtD1D,EAAMsD,EAAEK,UAAUH,EAAUF,EAAEhP,KAAO,EAAGoP,EAAUJ,EAAE/O,QAAU,GAC9D0L,EAAMsD,EAAEI,UAAUH,EAAUD,EAAEjP,KAAO,EAAGoP,EAAUH,EAAEhP,QAAU,GAG9D2L,EAAKmD,EACPtL,EAAe6L,IAAIlE,EAAKM,GACxBjI,EAAe6L,IAAIjE,EAAKM,GACxBuD,EACAE,GAEEvD,EAAKkD,EAAUtL,EAAe6L,IAAI9D,EAAKE,GAAML,EAAK6D,EAAUE,GAC5DtD,EAAKiD,EAAU3D,EAAK3H,EAAe8L,IAAIhE,EAAKI,GAAMuD,EAAUE,GAC5DrD,EAAKgD,EAAUrD,EAAKjI,EAAe8L,IAAI9D,EAAKJ,GAAM6D,EAAUE,GAC5DpD,EAAK+C,EAAUtL,EAAe6L,IAAIlE,EAAKE,GAAMK,EAAKuD,EAAUE,GAC5DpC,EAAK+B,EACPtL,EAAe8L,IAAI/D,EAAKJ,GACxB3H,EAAe6L,IAAIjE,EAAKE,GACxB2D,EACAE,GAEEnC,EAAK8B,EACPtL,EAAe8L,IAAIjE,EAAKI,GACxBjI,EAAe6L,IAAI7D,EAAKE,GACxBuD,EACAE,GAIEhD,EAAM3I,EAAe6L,IAAI1D,EAAIG,GACjCK,EAAImD,IAAIvD,GACRI,EAAIkD,IAAIrC,GACR,IAAIW,EAAMnK,EAAe6L,IAAIxD,EAAIE,GAC7B8B,EAAMrK,EAAe6L,IAAIzD,EAAIE,GAC7BgC,EAAMtK,EAAe8L,IAAI3D,EAAIC,GACjCkC,EAAIuB,IAAIxD,GACRiC,EAAIuB,IAAItC,GAGR,IAAI1M,EAASmD,EAAeY,MAAM,EAAI+H,EAAIpM,KAAM,EAAIoM,EAAInM,SAKxD,OAJAK,EAASA,EAAOmH,aAAa2E,EAAK,EAAG,GACrC9L,EAASA,EAAOmH,aAAamG,EAAKxB,EAAIpM,KAAM,GAC5CM,EAASA,EAAOmH,aAAaqG,EAAK,EAAG1B,EAAInM,SACzCK,EAASA,EAAOmH,aAAasG,EAAK3B,EAAIpM,KAAMoM,EAAInM,SACzCK,EAAO+O,UAAU,EAAGrP,EAAO,EAAG,EAAGyO,EAAO,EACjD,CAEOM,CAAUb,EA/EjBD,EAAIM,EAAMN,EAAGS,EAAGC,GA+EOD,EAAGC,EAC5B,CAEA,SAAAa,CAAU/P,EAAU,CAAC,GACnB,GAAuB,iBAAZA,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,IAAErC,EAAM,EAAC,IAAEqB,EAAM,GAAMhC,EAC7B,IAAKkF,OAAO8K,SAASrP,GAAM,MAAM,IAAIqC,UAAU,wBAC/C,IAAKkC,OAAO8K,SAAShO,GAAM,MAAM,IAAIgB,UAAU,wBAC/C,GAAIrC,GAAOqB,EAAK,MAAM,IAAIQ,WAAW,gCACrC,IAAI6B,EAAY,IAAIC,EAAOkB,KAAKjF,KAAMiF,KAAKhF,SAC3C,IAAK,IAAIO,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAAK,CAClC,MAAMwD,EAAMiB,KAAK2C,OAAOpH,GACpBwD,EAAIjD,OAAS,GACf5B,EAAQ6E,EAAK,CAAE5D,MAAKqB,MAAKiO,OAAQ1L,IAEnCF,EAAUgE,OAAOtH,EAAGwD,EACtB,CACA,OAAOF,CACT,CAEA,YAAA6L,CAAalQ,EAAU,CAAC,GACtB,GAAuB,iBAAZA,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,IAAErC,EAAM,EAAC,IAAEqB,EAAM,GAAMhC,EAC7B,IAAKkF,OAAO8K,SAASrP,GAAM,MAAM,IAAIqC,UAAU,wBAC/C,IAAKkC,OAAO8K,SAAShO,GAAM,MAAM,IAAIgB,UAAU,wBAC/C,GAAIrC,GAAOqB,EAAK,MAAM,IAAIQ,WAAW,gCACrC,IAAI6B,EAAY,IAAIC,EAAOkB,KAAKjF,KAAMiF,KAAKhF,SAC3C,IAAK,IAAIO,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAAK,CACrC,MAAMyD,EAASgB,KAAKiD,UAAU1H,GAC1ByD,EAAOlD,QACT5B,EAAQ8E,EAAQ,CACd7D,MACAqB,MACAiO,OAAQzL,IAGZH,EAAUsE,UAAU5H,EAAGyD,EACzB,CACA,OAAOH,CACT,CAEA,QAAA8L,GACE,MAAMC,EAAS1P,KAAK2P,KAAK7K,KAAKhF,QAAU,GACxC,IAAK,IAAIO,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIoP,EAAQpP,IAAK,CAC/B,IAAIsP,EAAQ9K,KAAKvE,IAAIF,EAAGC,GACpBuP,EAAO/K,KAAKvE,IAAIF,EAAGyE,KAAKhF,QAAU,EAAIQ,GAC1CwE,KAAKf,IAAI1D,EAAGC,EAAGuP,GACf/K,KAAKf,IAAI1D,EAAGyE,KAAKhF,QAAU,EAAIQ,EAAGsP,EACpC,CAEF,OAAO9K,IACT,CAEA,WAAAgL,GACE,MAAMJ,EAAS1P,KAAK2P,KAAK7K,KAAKjF,KAAO,GACrC,IAAK,IAAIS,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChC,IAAK,IAAID,EAAI,EAAGA,EAAIqP,EAAQrP,IAAK,CAC/B,IAAIuP,EAAQ9K,KAAKvE,IAAIF,EAAGC,GACpBuP,EAAO/K,KAAKvE,IAAIuE,KAAKjF,KAAO,EAAIQ,EAAGC,GACvCwE,KAAKf,IAAI1D,EAAGC,EAAGuP,GACf/K,KAAKf,IAAIe,KAAKjF,KAAO,EAAIQ,EAAGC,EAAGsP,EACjC,CAEF,OAAO9K,IACT,CAEA,gBAAAiL,CAAiBvF,GACfA,EAAQ5G,EAAOwB,YAAYoF,GAE3B,IAAIvD,EAAInC,KAAKjF,KACTqH,EAAIpC,KAAKhF,QACTsH,EAAIoD,EAAM3K,KACVmQ,EAAIxF,EAAM1K,QAEVK,EAAS,IAAIyD,EAAOqD,EAAIG,EAAGF,EAAI8I,GACnC,IAAK,IAAI3P,EAAI,EAAGA,EAAI4G,EAAG5G,IACrB,IAAK,IAAIC,EAAI,EAAGA,EAAI4G,EAAG5G,IACrB,IAAK,IAAIkG,EAAI,EAAGA,EAAIY,EAAGZ,IACrB,IAAK,IAAIvB,EAAI,EAAGA,EAAI+K,EAAG/K,IACrB9E,EAAO4D,IAAIqD,EAAI/G,EAAImG,EAAGwJ,EAAI1P,EAAI2E,EAAGH,KAAKvE,IAAIF,EAAGC,GAAKkK,EAAMjK,IAAIiG,EAAGvB,IAKvE,OAAO9E,CACT,CAEA,YAAA8P,CAAazF,GAEX,GADAA,EAAQ5G,EAAOwB,YAAYoF,IACtB1F,KAAKmB,aAAeuE,EAAMvE,WAC7B,MAAM,IAAI5C,MAAM,2CAElB,IAAI4D,EAAInC,KAAKjF,KACTqH,EAAIsD,EAAM3K,KACVqQ,EAAMpL,KAAKiL,iBAAiBnM,EAAOgB,IAAIsC,EAAGA,IAC1CiJ,EAAMvM,EAAOgB,IAAIqC,EAAGA,GAAG8I,iBAAiBvF,GAC5C,OAAO0F,EAAIf,IAAIgB,EACjB,CAEA,SAAAC,GACE,IAAIjQ,EAAS,IAAIyD,EAAOkB,KAAKhF,QAASgF,KAAKjF,MAC3C,IAAK,IAAIQ,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCH,EAAO4D,IAAIzD,EAAGD,EAAGyE,KAAKvE,IAAIF,EAAGC,IAGjC,OAAOH,CACT,CAEA,QAAAkQ,CAASC,EAAkBC,GACzB,IAAK,IAAIlQ,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7ByE,KAAK6C,OAAOtH,EAAGyE,KAAK2C,OAAOpH,GAAGmQ,KAAKF,IAErC,OAAOxL,IACT,CAEA,WAAA2L,CAAYH,EAAkBC,GAC5B,IAAK,IAAIlQ,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAChCyE,KAAKmD,UAAU5H,EAAGyE,KAAKiD,UAAU1H,GAAGmQ,KAAKF,IAE3C,OAAOxL,IACT,CAEA,SAAAoK,CAAUxM,EAAUC,EAAQC,EAAaC,GACvCJ,EAAWqC,KAAMpC,EAAUC,EAAQC,EAAaC,GAChD,IAAIc,EAAY,IAAIC,EAClBjB,EAASD,EAAW,EACpBG,EAAYD,EAAc,GAE5B,IAAK,IAAIvC,EAAIqC,EAAUrC,GAAKsC,EAAQtC,IAClC,IAAK,IAAIC,EAAIsC,EAAatC,GAAKuC,EAAWvC,IACxCqD,EAAUI,IAAI1D,EAAIqC,EAAUpC,EAAIsC,EAAakC,KAAKvE,IAAIF,EAAGC,IAG7D,OAAOqD,CACT,CAEA,YAAA+M,CAAaC,EAAS/N,EAAaC,GAGjC,QAFoBgC,IAAhBjC,IAA2BA,EAAc,QAC3BiC,IAAdhC,IAAyBA,EAAYiC,KAAKhF,QAAU,GAEtD8C,EAAcC,GACdD,EAAc,GACdA,GAAekC,KAAKhF,SACpB+C,EAAY,GACZA,GAAaiC,KAAKhF,QAElB,MAAM,IAAIgC,WAAW,yBAGvB,IAAI6B,EAAY,IAAIC,EAAO+M,EAAQ/P,OAAQiC,EAAYD,EAAc,GACrE,IAAK,IAAIvC,EAAI,EAAGA,EAAIsQ,EAAQ/P,OAAQP,IAClC,IAAK,IAAIC,EAAIsC,EAAatC,GAAKuC,EAAWvC,IAAK,CAC7C,GAAIqQ,EAAQtQ,GAAK,GAAKsQ,EAAQtQ,IAAMyE,KAAKjF,KACvC,MAAM,IAAIiC,WAAW,2BAA2B6O,EAAQtQ,MAE1DsD,EAAUI,IAAI1D,EAAGC,EAAIsC,EAAakC,KAAKvE,IAAIoQ,EAAQtQ,GAAIC,GACzD,CAEF,OAAOqD,CACT,CAEA,eAAAiN,CAAgBD,EAASjO,EAAUC,GAGjC,QAFiBkC,IAAbnC,IAAwBA,EAAW,QACxBmC,IAAXlC,IAAsBA,EAASmC,KAAKjF,KAAO,GAE7C6C,EAAWC,GACXD,EAAW,GACXA,GAAYoC,KAAKjF,MACjB8C,EAAS,GACTA,GAAUmC,KAAKjF,KAEf,MAAM,IAAIiC,WAAW,yBAGvB,IAAI6B,EAAY,IAAIC,EAAOjB,EAASD,EAAW,EAAGiO,EAAQ/P,QAC1D,IAAK,IAAIP,EAAI,EAAGA,EAAIsQ,EAAQ/P,OAAQP,IAClC,IAAK,IAAIC,EAAIoC,EAAUpC,GAAKqC,EAAQrC,IAAK,CACvC,GAAIqQ,EAAQtQ,GAAK,GAAKsQ,EAAQtQ,IAAMyE,KAAKhF,QACvC,MAAM,IAAIgC,WAAW,8BAA8B6O,EAAQtQ,MAE7DsD,EAAUI,IAAIzD,EAAIoC,EAAUrC,EAAGyE,KAAKvE,IAAID,EAAGqQ,EAAQtQ,IACrD,CAEF,OAAOsD,CACT,CAEA,YAAA2D,CAAajI,EAAQqD,EAAUE,GAE7B,IADAvD,EAASuE,EAAOwB,YAAY/F,IACjB+D,UACT,OAAO0B,KAITrC,EAAWqC,KAAMpC,EAFJA,EAAWrD,EAAOQ,KAAO,EAEH+C,EADnBA,EAAcvD,EAAOS,QAAU,GAE/C,IAAK,IAAIO,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCwE,KAAKf,IAAIrB,EAAWrC,EAAGuC,EAActC,EAAGjB,EAAOkB,IAAIF,EAAGC,IAG1D,OAAOwE,IACT,CAEA,SAAA+L,CAAUxO,EAAYG,GACpBJ,EAAgB0C,KAAMzC,GACtBE,EAAmBuC,KAAMtC,GACzB,IAAImB,EAAY,IAAIC,EAAOvB,EAAWzB,OAAQ4B,EAAc5B,QAC5D,IAAK,IAAIP,EAAI,EAAGA,EAAIgC,EAAWzB,OAAQP,IAAK,CAC1C,IAAIyQ,EAAWzO,EAAWhC,GAC1B,IAAK,IAAIC,EAAI,EAAGA,EAAIkC,EAAc5B,OAAQN,IAAK,CAC7C,IAAIyQ,EAAcvO,EAAclC,GAChCqD,EAAUI,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIuQ,EAAUC,GACzC,CACF,CACA,OAAOpN,CACT,CAEA,KAAAqN,GACE,IAAI/Q,EAAMD,KAAKC,IAAI6E,KAAKjF,KAAMiF,KAAKhF,SAC/BkR,EAAQ,EACZ,IAAK,IAAI3Q,EAAI,EAAGA,EAAIJ,EAAKI,IACvB2Q,GAASlM,KAAKvE,IAAIF,EAAGA,GAEvB,OAAO2Q,CACT,CAEA,KAAAtK,GACE,OAAO5B,KAAKnF,YAAYiG,KAAKd,KAAM,IAAIlB,EAAOkB,KAAKjF,KAAMiF,KAAKhF,SAChE,CAQA,WAAO8F,CAAKqL,EAAMC,GAChB,IAAK,MAAOrN,EAAKC,EAAQb,KAAUgO,EAAKE,UACtCD,EAAGnN,IAAIF,EAAKC,EAAQb,GAGtB,OAAOiO,CACT,CAEA,GAAA9G,CAAIrB,GACF,OAAQA,GACN,IAAK,MACH,OArgDR,SAAkB1J,GAChB,IAAI+K,EAAMpH,EAAS3D,EAAOQ,MAC1B,IAAK,IAAIQ,EAAI,EAAGA,EAAIhB,EAAOQ,OAAQQ,EACjC,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,UAAWQ,EACpC8J,EAAI/J,IAAMhB,EAAOkB,IAAIF,EAAGC,GAG5B,OAAO8J,CACT,CA6/CegH,CAAStM,MAClB,IAAK,SACH,OA7/CR,SAAqBzF,GACnB,IAAI+K,EAAMpH,EAAS3D,EAAOS,SAC1B,IAAK,IAAIO,EAAI,EAAGA,EAAIhB,EAAOQ,OAAQQ,EACjC,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,UAAWQ,EACpC8J,EAAI9J,IAAMjB,EAAOkB,IAAIF,EAAGC,GAG5B,OAAO8J,CACT,CAq/CeiH,CAAYvM,MACrB,UAAKD,EACH,OAr/CR,SAAgBxF,GACd,IAAI+J,EAAI,EACR,IAAK,IAAI/I,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClC8I,GAAK/J,EAAOkB,IAAIF,EAAGC,GAGvB,OAAO8I,CACT,CA6+CekI,CAAOxM,MAChB,QACE,MAAM,IAAIzB,MAAM,mBAAmB0F,KAEzC,CAEA,OAAAwI,CAAQxI,GACN,OAAQA,GACN,IAAK,MACH,OAp/CR,SAAsB1J,GACpB,IAAI+K,EAAMpH,EAAS3D,EAAOQ,KAAM,GAChC,IAAK,IAAIQ,EAAI,EAAGA,EAAIhB,EAAOQ,OAAQQ,EACjC,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,UAAWQ,EACpC8J,EAAI/J,IAAMhB,EAAOkB,IAAIF,EAAGC,GAG5B,OAAO8J,CACT,CA4+CeoH,CAAa1M,MACtB,IAAK,SACH,OA5+CR,SAAyBzF,GACvB,IAAI+K,EAAMpH,EAAS3D,EAAOS,QAAS,GACnC,IAAK,IAAIO,EAAI,EAAGA,EAAIhB,EAAOQ,OAAQQ,EACjC,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,UAAWQ,EACpC8J,EAAI9J,IAAMjB,EAAOkB,IAAIF,EAAGC,GAG5B,OAAO8J,CACT,CAo+CeqH,CAAgB3M,MACzB,UAAKD,EACH,OAp+CR,SAAoBxF,GAClB,IAAI+J,EAAI,EACR,IAAK,IAAI/I,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClC8I,GAAK/J,EAAOkB,IAAIF,EAAGC,GAGvB,OAAO8I,CACT,CA49CesI,CAAW5M,MACpB,QACE,MAAM,IAAIzB,MAAM,mBAAmB0F,KAEzC,CAEA,IAAA4I,CAAK5I,GACH,MAAMqB,EAAMtF,KAAKsF,IAAIrB,GACrB,OAAQA,GACN,IAAK,MACH,IAAK,IAAI1I,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B+J,EAAI/J,IAAMyE,KAAKhF,QAEjB,OAAOsK,EAET,IAAK,SACH,IAAK,IAAI/J,EAAI,EAAGA,EAAIyE,KAAKhF,QAASO,IAChC+J,EAAI/J,IAAMyE,KAAKjF,KAEjB,OAAOuK,EAET,UAAKvF,EACH,OAAOuF,EAAMtF,KAAKS,KACpB,QACE,MAAM,IAAIlC,MAAM,mBAAmB0F,KAEzC,CAEA,QAAA6I,CAAS7I,EAAIzJ,EAAU,CAAC,GAKtB,GAJkB,iBAAPyJ,IACTzJ,EAAUyJ,EACVA,OAAKlE,GAEgB,iBAAZvF,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,SAAEuP,GAAW,EAAI,KAAEF,EAAO7M,KAAK6M,KAAK5I,IAAQzJ,EAClD,GAAwB,kBAAbuS,EACT,MAAM,IAAIvP,UAAU,8BAEtB,OAAQyG,GACN,IAAK,MACH,IAAKhK,EAAWA,WAAW4S,GACzB,MAAM,IAAIrP,UAAU,yBAEtB,OAvgDR,SAAuBjD,EAAQwS,EAAUF,GACvC,MAAM9R,EAAOR,EAAOQ,KACdyO,EAAOjP,EAAOS,QACd8R,EAAW,GAEjB,IAAK,IAAIvR,EAAI,EAAGA,EAAIR,EAAMQ,IAAK,CAC7B,IAAIyR,EAAO,EACPC,EAAO,EACPhE,EAAI,EACR,IAAK,IAAIzN,EAAI,EAAGA,EAAIgO,EAAMhO,IACxByN,EAAI1O,EAAOkB,IAAIF,EAAGC,GAAKqR,EAAKtR,GAC5ByR,GAAQ/D,EACRgE,GAAQhE,EAAIA,EAEV8D,EACFD,EAASnR,MAAMsR,EAAQD,EAAOA,EAAQxD,IAASA,EAAO,IAEtDsD,EAASnR,MAAMsR,EAAQD,EAAOA,EAAQxD,GAAQA,EAElD,CACA,OAAOsD,CACT,CAk/CeI,CAAclN,KAAM+M,EAAUF,GAEvC,IAAK,SACH,IAAK5S,EAAWA,WAAW4S,GACzB,MAAM,IAAIrP,UAAU,yBAEtB,OAt/CR,SAA0BjD,EAAQwS,EAAUF,GAC1C,MAAM9R,EAAOR,EAAOQ,KACdyO,EAAOjP,EAAOS,QACd8R,EAAW,GAEjB,IAAK,IAAItR,EAAI,EAAGA,EAAIgO,EAAMhO,IAAK,CAC7B,IAAIwR,EAAO,EACPC,EAAO,EACPhE,EAAI,EACR,IAAK,IAAI1N,EAAI,EAAGA,EAAIR,EAAMQ,IACxB0N,EAAI1O,EAAOkB,IAAIF,EAAGC,GAAKqR,EAAKrR,GAC5BwR,GAAQ/D,EACRgE,GAAQhE,EAAIA,EAEV8D,EACFD,EAASnR,MAAMsR,EAAQD,EAAOA,EAAQjS,IAASA,EAAO,IAEtD+R,EAASnR,MAAMsR,EAAQD,EAAOA,EAAQjS,GAAQA,EAElD,CACA,OAAO+R,CACT,CAi+CeK,CAAiBnN,KAAM+M,EAAUF,GAE1C,UAAK9M,EACH,GAAoB,iBAAT8M,EACT,MAAM,IAAIrP,UAAU,yBAEtB,OAr+CR,SAAqBjD,EAAQwS,EAAUF,GACrC,MAAM9R,EAAOR,EAAOQ,KACdyO,EAAOjP,EAAOS,QACdyF,EAAO1F,EAAOyO,EAEpB,IAAIwD,EAAO,EACPC,EAAO,EACPhE,EAAI,EACR,IAAK,IAAI1N,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIgO,EAAMhO,IACxByN,EAAI1O,EAAOkB,IAAIF,EAAGC,GAAKqR,EACvBG,GAAQ/D,EACRgE,GAAQhE,EAAIA,EAGhB,OAAI8D,GACME,EAAQD,EAAOA,EAAQvM,IAASA,EAAO,IAEvCwM,EAAQD,EAAOA,EAAQvM,GAAQA,CAE3C,CAi9Ce2M,CAAYpN,KAAM+M,EAAUF,GAErC,QACE,MAAM,IAAItO,MAAM,mBAAmB0F,KAEzC,CAEA,iBAAAoJ,CAAkBpJ,EAAIzJ,GACF,iBAAPyJ,IACTzJ,EAAUyJ,EACVA,OAAKlE,GAEP,MAAM+M,EAAW9M,KAAK8M,SAAS7I,EAAIzJ,GACnC,QAAWuF,IAAPkE,EACF,OAAO/I,KAAKiK,KAAK2H,GAEjB,IAAK,IAAIvR,EAAI,EAAGA,EAAIuR,EAAShR,OAAQP,IACnCuR,EAASvR,GAAKL,KAAKiK,KAAK2H,EAASvR,IAEnC,OAAOuR,CAEX,CAEA,MAAAQ,CAAOrJ,EAAIzJ,EAAU,CAAC,GAKpB,GAJkB,iBAAPyJ,IACTzJ,EAAUyJ,EACVA,OAAKlE,GAEgB,iBAAZvF,EACT,MAAM,IAAIgD,UAAU,6BAEtB,MAAM,OAAE8P,EAAStN,KAAK6M,KAAK5I,IAAQzJ,EACnC,OAAQyJ,GACN,IAAK,MACH,IAAKhK,EAAWA,WAAWqT,GACzB,MAAM,IAAI9P,UAAU,2BAGtB,OAr/CR,SAAqBjD,EAAQsS,GAC3B,IAAK,IAAItR,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCjB,EAAO0E,IAAI1D,EAAGC,EAAGjB,EAAOkB,IAAIF,EAAGC,GAAKqR,EAAKtR,GAG/C,CA8+CQgS,CAAYvN,KAAMsN,GACXtN,KAET,IAAK,SACH,IAAK/F,EAAWA,WAAWqT,GACzB,MAAM,IAAI9P,UAAU,2BAGtB,OAp/CR,SAAwBjD,EAAQsS,GAC9B,IAAK,IAAItR,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCjB,EAAO0E,IAAI1D,EAAGC,EAAGjB,EAAOkB,IAAIF,EAAGC,GAAKqR,EAAKrR,GAG/C,CA6+CQgS,CAAexN,KAAMsN,GACdtN,KAET,UAAKD,EACH,GAAsB,iBAAXuN,EACT,MAAM,IAAI9P,UAAU,2BAGtB,OAn/CR,SAAmBjD,EAAQsS,GACzB,IAAK,IAAItR,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCjB,EAAO0E,IAAI1D,EAAGC,EAAGjB,EAAOkB,IAAIF,EAAGC,GAAKqR,EAG1C,CA4+CQY,CAAUzN,KAAMsN,GACTtN,KAET,QACE,MAAM,IAAIzB,MAAM,mBAAmB0F,KAEzC,CAEA,KAAAyJ,CAAMzJ,EAAIzJ,EAAU,CAAC,GAKnB,GAJkB,iBAAPyJ,IACTzJ,EAAUyJ,EACVA,OAAKlE,GAEgB,iBAAZvF,EACT,MAAM,IAAIgD,UAAU,6BAEtB,IAAIkQ,EAAQlT,EAAQkT,MACpB,OAAQzJ,GACN,IAAK,MACH,QAAclE,IAAV2N,EACFA,EA9/CV,SAAuBnT,GACrB,MAAMmT,EAAQ,GACd,IAAK,IAAInS,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAAK,CACpC,IAAI+J,EAAM,EACV,IAAK,IAAI9J,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClC8J,GAAO/K,EAAOkB,IAAIF,EAAGC,IAAM,GAAKjB,EAAOS,QAAU,GAEnD0S,EAAM/R,KAAKT,KAAKiK,KAAKG,GACvB,CACA,OAAOoI,CACT,CAo/CkBC,CAAc3N,WACjB,IAAK/F,EAAWA,WAAWyT,GAChC,MAAM,IAAIlQ,UAAU,0BAGtB,OAv/CR,SAAoBjD,EAAQmT,GAC1B,IAAK,IAAInS,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCjB,EAAO0E,IAAI1D,EAAGC,EAAGjB,EAAOkB,IAAIF,EAAGC,GAAKkS,EAAMnS,GAGhD,CAg/CQqS,CAAW5N,KAAM0N,GACV1N,KAET,IAAK,SACH,QAAcD,IAAV2N,EACFA,EAn/CV,SAA0BnT,GACxB,MAAMmT,EAAQ,GACd,IAAK,IAAIlS,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAAK,CACvC,IAAI8J,EAAM,EACV,IAAK,IAAI/J,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B+J,GAAO/K,EAAOkB,IAAIF,EAAGC,IAAM,GAAKjB,EAAOQ,KAAO,GAEhD2S,EAAM/R,KAAKT,KAAKiK,KAAKG,GACvB,CACA,OAAOoI,CACT,CAy+CkBG,CAAiB7N,WACpB,IAAK/F,EAAWA,WAAWyT,GAChC,MAAM,IAAIlQ,UAAU,0BAGtB,OA5+CR,SAAuBjD,EAAQmT,GAC7B,IAAK,IAAInS,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCjB,EAAO0E,IAAI1D,EAAGC,EAAGjB,EAAOkB,IAAIF,EAAGC,GAAKkS,EAAMlS,GAGhD,CAq+CQsS,CAAc9N,KAAM0N,GACb1N,KAET,UAAKD,EACH,QAAcA,IAAV2N,EACFA,EAx+CV,SAAqBnT,GACnB,MAAMwT,EAAUxT,EAAOkG,KAAO,EAC9B,IAAI6E,EAAM,EACV,IAAK,IAAI9J,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClC,IAAK,IAAID,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B+J,GAAO/K,EAAOkB,IAAIF,EAAGC,IAAM,EAAIuS,EAGnC,OAAO7S,KAAKiK,KAAKG,EACnB,CA+9CkB0I,CAAYhO,WACf,GAAqB,iBAAV0N,EAChB,MAAM,IAAIlQ,UAAU,0BAGtB,OAl+CR,SAAkBjD,EAAQmT,GACxB,IAAK,IAAInS,EAAI,EAAGA,EAAIhB,EAAOQ,KAAMQ,IAC/B,IAAK,IAAIC,EAAI,EAAGA,EAAIjB,EAAOS,QAASQ,IAClCjB,EAAO0E,IAAI1D,EAAGC,EAAGjB,EAAOkB,IAAIF,EAAGC,GAAKkS,EAG1C,CA29CQO,CAASjO,KAAM0N,GACR1N,KAET,QACE,MAAM,IAAIzB,MAAM,mBAAmB0F,KAEzC,CAEA,QAAA5H,CAAS7B,GACP,OAAOF,EAAyB0F,KAAMxF,EACxC,CAEA,CAAC0T,OAAOC,YACN,OAAOnO,KAAKqM,SACd,CAOA,QAACA,GACC,IAAK,IAAItN,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIqP,EAAM,EAAGA,EAAMpO,KAAKhF,QAASoT,SAC9B,CAACrP,EAAKqP,EAAKpO,KAAKvE,IAAIsD,EAAKqP,GAGrC,CAOA,OAACC,GACC,IAAK,IAAItP,EAAM,EAAGA,EAAMiB,KAAKjF,KAAMgE,IACjC,IAAK,IAAIqP,EAAM,EAAGA,EAAMpO,KAAKhF,QAASoT,UAC9BpO,KAAKvE,IAAIsD,EAAKqP,EAG1B,EASF,SAAS3C,EAAe1B,EAAGC,GACzB,OAAOD,EAAIC,CACb,CARAxL,EAAe8P,UAAU9N,MAAQ,SACX,oBAAX0N,SACT1P,EAAe8P,UAAUJ,OAAOK,IAAI,+BAhvFtC,WACE,OAAOjU,EAAyB0F,KAClC,GA6vFAxB,EAAegB,OAAShB,EAAee,KACvCf,EAAegQ,UAAYhQ,EAAeiB,QAC1CjB,EAAeiQ,SAAWjQ,EAAeyB,KACzCzB,EAAe8P,UAAUG,SAAWjQ,EAAe8P,UAAUrO,KAC7DzB,EAAekQ,SAAWlQ,EAAesB,IACzCtB,EAAe8P,UAAUK,OAASnQ,EAAe8P,UAAU7L,IAC3DjE,EAAe8P,UAAUM,cACvBpQ,EAAe8P,UAAUrD,iBAE3B,MAAMnM,UAAeN,EAInB0B,KAOA,GAAU2O,EAAOC,GAGf,GAFA9O,KAAKE,KAAO,KAERR,OAAOC,UAAUmP,IAAaA,GAAY,GAK5C,MAAM,IAAItR,UAAU,uCAJpB,IAAK,IAAIjC,EAAI,EAAGA,EAAIsT,EAAOtT,IACzByE,KAAKE,KAAKvE,KAAK,IAAIiK,aAAakJ,IAMpC9O,KAAKjF,KAAO8T,EACZ7O,KAAKhF,QAAU8T,CACjB,CAEA,WAAAjU,CAAYgU,EAAOC,GAEjB,GADAC,QACIjQ,EAAOyB,SAASsO,GAClB7O,MAAK,EAAU6O,EAAM9T,KAAM8T,EAAM7T,SACjC8D,EAAOgC,KAAK+N,EAAO7O,WACd,GAAIN,OAAOC,UAAUkP,IAAUA,GAAS,EAC7C7O,MAAK,EAAU6O,EAAOC,OACjB,KAAI7U,EAAWA,WAAW4U,GAyB/B,MAAM,IAAIrR,UACR,wDA1BqC,CAEvC,MAAMwR,EAAYH,EAGlB,GAAwB,iBADxBC,GADAD,EAAQG,EAAUlT,QACCkT,EAAU,GAAGlT,OAAS,GAEvC,MAAM,IAAI0B,UACR,qDAGJwC,KAAKE,KAAO,GAEZ,IAAK,IAAI3E,EAAI,EAAGA,EAAIsT,EAAOtT,IAAK,CAC9B,GAAIyT,EAAUzT,GAAGO,SAAWgT,EAC1B,MAAM,IAAI9R,WAAW,iCAEvB,IAAsBgS,EAAUzT,GAhEzB0T,OAAOC,GACQ,iBAAZA,IAgER,MAAM,IAAI1R,UAAU,0CAEtBwC,KAAKE,KAAKvE,KAAKiK,aAAauG,KAAK6C,EAAUzT,IAC7C,CAEAyE,KAAKjF,KAAO8T,EACZ7O,KAAKhF,QAAU8T,CACjB,CAIA,CACF,CAEA,GAAA7P,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKE,KAAK8L,GAAUC,GAAe9N,EAC5B6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKE,KAAK8L,GAAUC,EAC7B,CAEA,SAAAkD,CAAUrS,GAIR,OAHAD,EAAcmD,KAAMlD,GACpBkD,KAAKE,KAAKkP,OAAOtS,EAAO,GACxBkD,KAAKjF,MAAQ,EACNiF,IACT,CAEA,MAAAqP,CAAOvS,EAAOsB,GASZ,YARc2B,IAAV3B,IACFA,EAAQtB,EACRA,EAAQkD,KAAKjF,MAEf8B,EAAcmD,KAAMlD,GAAO,GAC3BsB,EAAQwH,aAAauG,KAAKjP,EAAe8C,KAAM5B,IAC/C4B,KAAKE,KAAKkP,OAAOtS,EAAO,EAAGsB,GAC3B4B,KAAKjF,MAAQ,EACNiF,IACT,CAEA,YAAAsP,CAAaxS,GACXG,EAAiB+C,KAAMlD,GACvB,IAAK,IAAIvB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAAK,CAClC,MAAMgU,EAAS,IAAI3J,aAAa5F,KAAKhF,QAAU,GAC/C,IAAK,IAAIQ,EAAI,EAAGA,EAAIsB,EAAOtB,IACzB+T,EAAO/T,GAAKwE,KAAKE,KAAK3E,GAAGC,GAE3B,IAAK,IAAIA,EAAIsB,EAAQ,EAAGtB,EAAIwE,KAAKhF,QAASQ,IACxC+T,EAAO/T,EAAI,GAAKwE,KAAKE,KAAK3E,GAAGC,GAE/BwE,KAAKE,KAAK3E,GAAKgU,CACjB,CAEA,OADAvP,KAAKhF,SAAW,EACTgF,IACT,CAEA,SAAAwP,CAAU1S,EAAOsB,QACM,IAAVA,IACTA,EAAQtB,EACRA,EAAQkD,KAAKhF,SAEfiC,EAAiB+C,KAAMlD,GAAO,GAC9BsB,EAAQf,EAAkB2C,KAAM5B,GAChC,IAAK,IAAI7C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAAK,CAClC,MAAMgU,EAAS,IAAI3J,aAAa5F,KAAKhF,QAAU,GAC/C,IAAIQ,EAAI,EACR,KAAOA,EAAIsB,EAAOtB,IAChB+T,EAAO/T,GAAKwE,KAAKE,KAAK3E,GAAGC,GAG3B,IADA+T,EAAO/T,KAAO4C,EAAM7C,GACbC,EAAIwE,KAAKhF,QAAU,EAAGQ,IAC3B+T,EAAO/T,GAAKwE,KAAKE,KAAK3E,GAAGC,EAAI,GAE/BwE,KAAKE,KAAK3E,GAAKgU,CACjB,CAEA,OADAvP,KAAKhF,SAAW,EACTgF,IACT,GAhzFF,SAA+BxB,EAAgBM,GAC7CN,EAAe8P,UAAUjE,IAAM,SAAalM,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAKyP,KAAKtR,GACzC6B,KAAK0P,KAAKvR,EACnB,EAEAK,EAAe8P,UAAUmB,KAAO,SAActR,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUoB,KAAO,SAAcnV,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAe6L,IAAM,SAAa9P,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZ8P,IAAIlM,EACvB,EAEAK,EAAe8P,UAAUhE,IAAM,SAAanM,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAK2P,KAAKxR,GACzC6B,KAAK4P,KAAKzR,EACnB,EAEAK,EAAe8P,UAAUqB,KAAO,SAAcxR,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUsB,KAAO,SAAcrV,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAe8L,IAAM,SAAa/P,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZ+P,IAAInM,EACvB,EACAK,EAAe8P,UAAUuB,SAAWrR,EAAe8P,UAAUhE,IAC7D9L,EAAe8P,UAAUwB,UAAYtR,EAAe8P,UAAUqB,KAC9DnR,EAAe8P,UAAUyB,UAAYvR,EAAe8P,UAAUsB,KAC9DpR,EAAeqR,SAAWrR,EAAe8L,IAEzC9L,EAAe8P,UAAU0B,IAAM,SAAa7R,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAK0C,KAAKvE,GACzC6B,KAAKiQ,KAAK9R,EACnB,EAEAK,EAAe8P,UAAU5L,KAAO,SAAcvE,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAU2B,KAAO,SAAc1V,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAewR,IAAM,SAAazV,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZyV,IAAI7R,EACvB,EACAK,EAAe8P,UAAU4B,SAAW1R,EAAe8P,UAAU0B,IAC7DxR,EAAe8P,UAAU6B,UAAY3R,EAAe8P,UAAU5L,KAC9DlE,EAAe8P,UAAU8B,UAAY5R,EAAe8P,UAAU2B,KAC9DzR,EAAe0R,SAAW1R,EAAewR,IAEzCxR,EAAe8P,UAAU+B,IAAM,SAAalS,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAKsQ,KAAKnS,GACzC6B,KAAKuQ,KAAKpS,EACnB,EAEAK,EAAe8P,UAAUgC,KAAO,SAAcnS,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUiC,KAAO,SAAchW,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAe6R,IAAM,SAAa9V,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZ8V,IAAIlS,EACvB,EACAK,EAAe8P,UAAUkC,OAAShS,EAAe8P,UAAU+B,IAC3D7R,EAAe8P,UAAUmC,QAAUjS,EAAe8P,UAAUgC,KAC5D9R,EAAe8P,UAAUoC,QAAUlS,EAAe8P,UAAUiC,KAC5D/R,EAAegS,OAAShS,EAAe6R,IAEvC7R,EAAe8P,UAAUqC,IAAM,SAAaxS,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAK4Q,KAAKzS,GACzC6B,KAAK6Q,KAAK1S,EACnB,EAEAK,EAAe8P,UAAUsC,KAAO,SAAczS,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUuC,KAAO,SAActW,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAemS,IAAM,SAAapW,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZoW,IAAIxS,EACvB,EACAK,EAAe8P,UAAUwC,QAAUtS,EAAe8P,UAAUqC,IAC5DnS,EAAe8P,UAAUyC,SAAWvS,EAAe8P,UAAUsC,KAC7DpS,EAAe8P,UAAU0C,SAAWxS,EAAe8P,UAAUuC,KAC7DrS,EAAesS,QAAUtS,EAAemS,IAExCnS,EAAe8P,UAAU2C,IAAM,SAAa9S,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAKkR,KAAK/S,GACzC6B,KAAKmR,KAAKhT,EACnB,EAEAK,EAAe8P,UAAU4C,KAAO,SAAc/S,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAU6C,KAAO,SAAc5W,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAeyS,IAAM,SAAa1W,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZ0W,IAAI9S,EACvB,EAEAK,EAAe8P,UAAU8C,GAAK,SAAYjT,GACxC,MAAqB,iBAAVA,EAA2B6B,KAAKqR,IAAIlT,GACxC6B,KAAKsR,IAAInT,EAClB,EAEAK,EAAe8P,UAAU+C,IAAM,SAAalT,GAC1C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUgD,IAAM,SAAa/W,GAE1C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAe4S,GAAK,SAAY7W,EAAQ4D,GAEtC,OADkB,IAAIW,EAAOvE,GACZ6W,GAAGjT,EACtB,EAEAK,EAAe8P,UAAUiD,IAAM,SAAapT,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAKwR,KAAKrT,GACzC6B,KAAKyR,KAAKtT,EACnB,EAEAK,EAAe8P,UAAUkD,KAAO,SAAcrT,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAK2C,GAGpC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUmD,KAAO,SAAclX,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,GAAKjB,EAAOkB,IAAIF,EAAGC,IAGlD,OAAOwE,IACT,EAEAxB,EAAe+S,IAAM,SAAahX,EAAQ4D,GAExC,OADkB,IAAIW,EAAOvE,GACZgX,IAAIpT,EACvB,EAEAK,EAAe8P,UAAUoD,UAAY,SAAmBvT,GACtD,MAAqB,iBAAVA,EAA2B6B,KAAK2R,WAAWxT,GAC/C6B,KAAK4R,WAAWzT,EACzB,EAEAK,EAAe8P,UAAUqD,WAAa,SAAoBxT,GACxD,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,IAAM2C,GAGrC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUsD,WAAa,SAAoBrX,GAExD,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,IAAMjB,EAAOkB,IAAIF,EAAGC,IAGnD,OAAOwE,IACT,EAEAxB,EAAekT,UAAY,SAAmBnX,EAAQ4D,GAEpD,OADkB,IAAIW,EAAOvE,GACZmX,UAAUvT,EAC7B,EAEAK,EAAe8P,UAAUuD,0BAA4B,SAAmC1T,GACtF,MAAqB,iBAAVA,EAA2B6B,KAAK8R,2BAA2B3T,GAC/D6B,KAAK+R,2BAA2B5T,EACzC,EAEAK,EAAe8P,UAAUwD,2BAA6B,SAAoC3T,GACxF,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,IAAM2C,GAGrC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAUyD,2BAA6B,SAAoCxX,GAExF,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,IAAMjB,EAAOkB,IAAIF,EAAGC,IAGnD,OAAOwE,IACT,EAEAxB,EAAeqT,0BAA4B,SAAmCtX,EAAQ4D,GAEpF,OADkB,IAAIW,EAAOvE,GACZsX,0BAA0B1T,EAC7C,EAEAK,EAAe8P,UAAU0D,WAAa,SAAoB7T,GACxD,MAAqB,iBAAVA,EAA2B6B,KAAKiS,YAAY9T,GAChD6B,KAAKkS,YAAY/T,EAC1B,EAEAK,EAAe8P,UAAU2D,YAAc,SAAqB9T,GAC1D,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,KAAO2C,GAGtC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAU4D,YAAc,SAAqB3X,GAE1D,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,KAAOjB,EAAOkB,IAAIF,EAAGC,IAGpD,OAAOwE,IACT,EAEAxB,EAAewT,WAAa,SAAoBzX,EAAQ4D,GAEtD,OADkB,IAAIW,EAAOvE,GACZyX,WAAW7T,EAC9B,EACAK,EAAe8P,UAAU6D,mBAAqB3T,EAAe8P,UAAU0D,WACvExT,EAAe8P,UAAU8D,oBAAsB5T,EAAe8P,UAAU2D,YACxEzT,EAAe8P,UAAU+D,oBAAsB7T,EAAe8P,UAAU4D,YACxE1T,EAAe2T,mBAAqB3T,EAAewT,WAEnDxT,EAAe8P,UAAUgE,IAAM,WAC7B,IAAK,IAAI/W,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,GAAKwE,KAAKvE,IAAIF,EAAGC,IAGjC,OAAOwE,IACT,EAEAxB,EAAe8T,IAAM,SAAa/X,GAEhC,OADkB,IAAIuE,EAAOvE,GACZ+X,KACnB,EAEA9T,EAAe8P,UAAUiE,IAAM,WAC7B,IAAK,IAAIhX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKqX,IAAIvS,KAAKvE,IAAIF,EAAGC,KAGxC,OAAOwE,IACT,EAEAxB,EAAe+T,IAAM,SAAahY,GAEhC,OADkB,IAAIuE,EAAOvE,GACZgY,KACnB,EAEA/T,EAAe8P,UAAUkE,KAAO,WAC9B,IAAK,IAAIjX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKsX,KAAKxS,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAegU,KAAO,SAAcjY,GAElC,OADkB,IAAIuE,EAAOvE,GACZiY,MACnB,EAEAhU,EAAe8P,UAAUmE,MAAQ,WAC/B,IAAK,IAAIlX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKuX,MAAMzS,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAeiU,MAAQ,SAAelY,GAEpC,OADkB,IAAIuE,EAAOvE,GACZkY,OACnB,EAEAjU,EAAe8P,UAAUoE,KAAO,WAC9B,IAAK,IAAInX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKwX,KAAK1S,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAekU,KAAO,SAAcnY,GAElC,OADkB,IAAIuE,EAAOvE,GACZmY,MACnB,EAEAlU,EAAe8P,UAAUqE,MAAQ,WAC/B,IAAK,IAAIpX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKyX,MAAM3S,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAemU,MAAQ,SAAepY,GAEpC,OADkB,IAAIuE,EAAOvE,GACZoY,OACnB,EAEAnU,EAAe8P,UAAUsE,KAAO,WAC9B,IAAK,IAAIrX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK0X,KAAK5S,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAeoU,KAAO,SAAcrY,GAElC,OADkB,IAAIuE,EAAOvE,GACZqY,MACnB,EAEApU,EAAe8P,UAAUuE,MAAQ,WAC/B,IAAK,IAAItX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK2X,MAAM7S,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAeqU,MAAQ,SAAetY,GAEpC,OADkB,IAAIuE,EAAOvE,GACZsY,OACnB,EAEArU,EAAe8P,UAAUwE,KAAO,WAC9B,IAAK,IAAIvX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK4X,KAAK9S,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAesU,KAAO,SAAcvY,GAElC,OADkB,IAAIuE,EAAOvE,GACZuY,MACnB,EAEAtU,EAAe8P,UAAUzD,KAAO,WAC9B,IAAK,IAAItP,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK2P,KAAK7K,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAeqM,KAAO,SAActQ,GAElC,OADkB,IAAIuE,EAAOvE,GACZsQ,MACnB,EAEArM,EAAe8P,UAAUyE,MAAQ,WAC/B,IAAK,IAAIxX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK6X,MAAM/S,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAeuU,MAAQ,SAAexY,GAEpC,OADkB,IAAIuE,EAAOvE,GACZwY,OACnB,EAEAvU,EAAe8P,UAAU0E,IAAM,WAC7B,IAAK,IAAIzX,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK8X,IAAIhT,KAAKvE,IAAIF,EAAGC,KAGxC,OAAOwE,IACT,EAEAxB,EAAewU,IAAM,SAAazY,GAEhC,OADkB,IAAIuE,EAAOvE,GACZyY,KACnB,EAEAxU,EAAe8P,UAAU2E,KAAO,WAC9B,IAAK,IAAI1X,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK+X,KAAKjT,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAeyU,KAAO,SAAc1Y,GAElC,OADkB,IAAIuE,EAAOvE,GACZ0Y,MACnB,EAEAzU,EAAe8P,UAAU5R,IAAM,WAC7B,IAAK,IAAInB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKwB,IAAIsD,KAAKvE,IAAIF,EAAGC,KAGxC,OAAOwE,IACT,EAEAxB,EAAe9B,IAAM,SAAanC,GAEhC,OADkB,IAAIuE,EAAOvE,GACZmC,KACnB,EAEA8B,EAAe8P,UAAU4E,MAAQ,WAC/B,IAAK,IAAI3X,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKgY,MAAMlT,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAe0U,MAAQ,SAAe3Y,GAEpC,OADkB,IAAIuE,EAAOvE,GACZ2Y,OACnB,EAEA1U,EAAe8P,UAAU6E,MAAQ,WAC/B,IAAK,IAAI5X,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKiY,MAAMnT,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAe2U,MAAQ,SAAe5Y,GAEpC,OADkB,IAAIuE,EAAOvE,GACZ4Y,OACnB,EAEA3U,EAAe8P,UAAU8E,OAAS,WAChC,IAAK,IAAI7X,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKkY,OAAOpT,KAAKvE,IAAIF,EAAGC,KAG3C,OAAOwE,IACT,EAEAxB,EAAe4U,OAAS,SAAgB7Y,GAEtC,OADkB,IAAIuE,EAAOvE,GACZ6Y,QACnB,EAEA5U,EAAe8P,UAAU+E,IAAM,WAC7B,IAAK,IAAI9X,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKmY,IAAIrT,KAAKvE,IAAIF,EAAGC,KAGxC,OAAOwE,IACT,EAEAxB,EAAe6U,IAAM,SAAa9Y,GAEhC,OADkB,IAAIuE,EAAOvE,GACZ8Y,KACnB,EAEA7U,EAAe8P,UAAUgF,MAAQ,WAC/B,IAAK,IAAI/X,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKoY,MAAMtT,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAe8U,MAAQ,SAAe/Y,GAEpC,OADkB,IAAIuE,EAAOvE,GACZ+Y,OACnB,EAEA9U,EAAe8P,UAAUiF,MAAQ,WAC/B,IAAK,IAAIhY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKqY,MAAMvT,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAe+U,MAAQ,SAAehZ,GAEpC,OADkB,IAAIuE,EAAOvE,GACZgZ,OACnB,EAEA/U,EAAe8P,UAAUkF,KAAO,WAC9B,IAAK,IAAIjY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKsY,KAAKxT,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAegV,KAAO,SAAcjZ,GAElC,OADkB,IAAIuE,EAAOvE,GACZiZ,MACnB,EAEAhV,EAAe8P,UAAUzO,MAAQ,WAC/B,IAAK,IAAItE,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK2E,MAAMG,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAeqB,MAAQ,SAAetF,GAEpC,OADkB,IAAIuE,EAAOvE,GACZsF,OACnB,EAEArB,EAAe8P,UAAUmF,KAAO,WAC9B,IAAK,IAAIlY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKuY,KAAKzT,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAeiV,KAAO,SAAclZ,GAElC,OADkB,IAAIuE,EAAOvE,GACZkZ,MACnB,EAEAjV,EAAe8P,UAAUoF,IAAM,WAC7B,IAAK,IAAInY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKwY,IAAI1T,KAAKvE,IAAIF,EAAGC,KAGxC,OAAOwE,IACT,EAEAxB,EAAekV,IAAM,SAAanZ,GAEhC,OADkB,IAAIuE,EAAOvE,GACZmZ,KACnB,EAEAlV,EAAe8P,UAAUqF,KAAO,WAC9B,IAAK,IAAIpY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKyY,KAAK3T,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAemV,KAAO,SAAcpZ,GAElC,OADkB,IAAIuE,EAAOvE,GACZoZ,MACnB,EAEAnV,EAAe8P,UAAUnJ,KAAO,WAC9B,IAAK,IAAI5J,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAKiK,KAAKnF,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAe2G,KAAO,SAAc5K,GAElC,OADkB,IAAIuE,EAAOvE,GACZ4K,MACnB,EAEA3G,EAAe8P,UAAUsF,IAAM,WAC7B,IAAK,IAAIrY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK0Y,IAAI5T,KAAKvE,IAAIF,EAAGC,KAGxC,OAAOwE,IACT,EAEAxB,EAAeoV,IAAM,SAAarZ,GAEhC,OADkB,IAAIuE,EAAOvE,GACZqZ,KACnB,EAEApV,EAAe8P,UAAUuF,KAAO,WAC9B,IAAK,IAAItY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK2Y,KAAK7T,KAAKvE,IAAIF,EAAGC,KAGzC,OAAOwE,IACT,EAEAxB,EAAeqV,KAAO,SAActZ,GAElC,OADkB,IAAIuE,EAAOvE,GACZsZ,MACnB,EAEArV,EAAe8P,UAAUwF,MAAQ,WAC/B,IAAK,IAAIvY,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGN,KAAK4Y,MAAM9T,KAAKvE,IAAIF,EAAGC,KAG1C,OAAOwE,IACT,EAEAxB,EAAesV,MAAQ,SAAevZ,GAEpC,OADkB,IAAIuE,EAAOvE,GACZuZ,OACnB,EAEAtV,EAAeuV,IAAM,SAAaxZ,EAAQyZ,GAExC,OADkB,IAAIlV,EAAOvE,GACZwZ,IAAIC,EACvB,EAEAxV,EAAe8P,UAAUyF,IAAM,SAAa5V,GAC1C,MAAqB,iBAAVA,EAA2B6B,KAAKiU,KAAK9V,GACzC6B,KAAKkU,KAAK/V,EACnB,EAEAK,EAAe8P,UAAU2F,KAAO,SAAc9V,GAC5C,IAAK,IAAI5C,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,IAAM2C,GAGrC,OAAO6B,IACT,EAEAxB,EAAe8P,UAAU4F,KAAO,SAAc3Z,GAE5C,GADAA,EAASuE,EAAOwB,YAAY/F,GACxByF,KAAKjF,OAASR,EAAOQ,MACvBiF,KAAKhF,UAAYT,EAAOS,QACxB,MAAM,IAAIgC,WAAW,qCAEvB,IAAK,IAAIzB,EAAI,EAAGA,EAAIyE,KAAKjF,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAIwE,KAAKhF,QAASQ,IAChCwE,KAAKf,IAAI1D,EAAGC,EAAGwE,KAAKvE,IAAIF,EAAGC,IAAMjB,EAAOkB,IAAIF,EAAGC,IAGnD,OAAOwE,IACT,CACF,CA6/DAmU,CAAsB3V,EAAgBM,GAMtC,MAAMsV,UAAwB5V,EAE5B,GAEA,QAAIiC,GACF,OAAOT,MAAK,EAAQS,IACtB,CAEA,QAAI1F,GACF,OAAOiF,MAAK,EAAQjF,IACtB,CAEA,WAAIC,GACF,OAAOgF,MAAK,EAAQhF,OACtB,CAEA,gBAAIqZ,GACF,OAAOrU,KAAKjF,IACd,CASA,wBAAOuZ,CAAkBnW,GACvB,OAAOW,EAAOyB,SAASpC,IAA8B,oBAApBA,EAAMoW,SACzC,CAMA,YAAOnV,CAAMiV,GACX,OAAO,IAAIrU,KAAKqU,EAClB,CAMA,WAAOhV,CAAKgV,GACV,OAAO,IAAIrU,KAAKqU,GAAc/U,KAAK,EACrC,CAMA,WAAAzE,CAAYwZ,GAGV,GAFAtF,QAEIjQ,EAAOyB,SAAS8T,GAAe,CACjC,IAAKA,EAAajT,cAChB,MAAM,IAAI5D,UAAU,sBAGtBwC,MAAK,EAAUlB,EAAOgC,KACpBuT,EACA,IAAIvV,EAAOuV,EAAatZ,KAAMsZ,EAAatZ,MAE/C,MAAO,GAAI2E,OAAOC,UAAU0U,IAAiBA,GAAgB,EAC3DrU,MAAK,EAAU,IAAIlB,EAAOuV,EAAcA,QAIxC,GAFArU,MAAK,EAAU,IAAIlB,EAAOuV,IAErBrU,KAAKoB,cACR,MAAM,IAAI5D,UAAU,qBAG1B,CAEA,KAAAoE,GACE,MAAMrH,EAAS,IAAI6Z,EAAgBpU,KAAKqU,cAExC,IAAK,MAAOtV,EAAKqP,EAAKjQ,KAAU6B,KAAKwU,oBACnCja,EAAO0E,IAAIF,EAAKqP,EAAKjQ,GAGvB,OAAO5D,CACT,CAEA,QAAAka,GACE,OAAO,IAAI3V,EAAOkB,KACpB,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,MAAK,EAAQvE,IAAIuQ,EAAUC,EACpC,CACA,GAAAhN,CAAI+M,EAAUC,EAAa9N,GAKzB,OAHA6B,MAAK,EAAQf,IAAI+M,EAAUC,EAAa9N,GACxC6B,MAAK,EAAQf,IAAIgN,EAAaD,EAAU7N,GAEjC6B,IACT,CAEA,WAAA0U,CAAY5X,GAKV,OAHAkD,MAAK,EAAQmP,UAAUrS,GACvBkD,MAAK,EAAQsP,aAAaxS,GAEnBkD,IACT,CAEA,QAAA2U,CAAS7X,EAAOsB,QACA2B,IAAV3B,IACFA,EAAQtB,EACRA,EAAQkD,KAAKqU,cAGf,MAAMtV,EAAMX,EAAMxB,QAMlB,OALAmC,EAAIqQ,OAAOtS,EAAO,GAElBkD,MAAK,EAAQqP,OAAOvS,EAAOiC,GAC3BiB,MAAK,EAAQwP,UAAU1S,EAAOsB,GAEvB4B,IACT,CAKA,SAAA4U,CAAUC,GACR,GAAIA,EAAK/Y,SAAWkE,KAAKqU,aACvB,MAAM,IAAIrX,WAAW,2CAKvB,MAAM8X,EAAgB,GACtB,IAAK,MAAOhY,EAAOiY,KAAiBF,EAAKxI,UACnC0I,GACJD,EAAcnZ,KAAKmB,GAGrBgY,EAAcE,UAGd,IAAK,MAAMC,KAAaH,EACtB9U,KAAK0U,YAAYO,GAGnB,OAAOjV,IACT,CAoBA,SAAAkV,GACE,MAAM,aAAEb,GAAiBrU,KAGnBmV,EAAU,IAAIhR,MAAOkQ,GAAgBA,EAAe,GAAM,GAChE,IAAK,IAAIjG,EAAM,EAAGrP,EAAM,EAAGjC,EAAQ,EAAGA,EAAQqY,EAAQrZ,OAAQgB,IAC5DqY,EAAQrY,GAASkD,KAAKvE,IAAIsD,EAAKqP,KAEzBA,GAAOiG,IAAcjG,IAAQrP,GAGrC,OAAOoW,CACT,CAMA,kBAAOC,CAAYD,GACjB,MAAME,EAAcF,EAAQrZ,OAItBuY,GAAgBnZ,KAAKiK,KAAK,EAAIkQ,EAAc,GAAK,GAAK,EAE5D,IAAK3V,OAAOC,UAAU0U,GACpB,MAAM,IAAI7W,UACR,qEAAqE8X,KAAKC,UACxEJ,MAKN,MAAM5a,EAAS,IAAI6Z,EAAgBC,GACnC,IAAK,IAAIjG,EAAM,EAAGrP,EAAM,EAAGjC,EAAQ,EAAGA,EAAQuY,EAAavY,IACzDvC,EAAO0E,IAAImP,EAAKrP,EAAKoW,EAAQrY,MACvBsR,GAAOiG,IAAcjG,IAAQrP,GAGrC,OAAOxE,CACT,CAQA,kBAACia,GACC,IAAK,IAAIzV,EAAM,EAAGqP,EAAM,EAAGrP,EAAMiB,KAAKqU,kBAAc,EAAQ,CAC1D,MAAMlW,EAAQ6B,KAAKvE,IAAIsD,EAAKqP,QAEtB,CAACrP,EAAKqP,EAAKjQ,KAGXiQ,GAAOpO,KAAKqU,eAAcjG,IAAQrP,EAC1C,CACF,CAQA,iBAACyW,GACC,IAAK,IAAIzW,EAAM,EAAGqP,EAAM,EAAGrP,EAAMiB,KAAKqU,kBAAc,EAAQ,CAC1D,MAAMlW,EAAQ6B,KAAKvE,IAAIsD,EAAKqP,SAEtBjQ,IAGAiQ,GAAOpO,KAAKqU,eAAcjG,IAAQrP,EAC1C,CACF,EAEFqV,EAAgB9F,UAAUiG,UAAY,kBAEtC,MAAMkB,UAAuBrB,EAQ3B,uBAAOsB,CAAiBvX,GACtB,OACEiW,EAAgBE,kBAAkBnW,IACX,mBAAvBA,EAAMwX,YAEV,CAEA,WAAA9a,CAAY+a,GAGV,GAFA7G,MAAM6G,IAED5V,KAAKqB,aACR,MAAM,IAAI7D,UAAU,qDAExB,CAEA,GAAAyB,CAAI+M,EAAUC,EAAa9N,GAIzB,OAFI6N,IAAaC,IAAa9N,EAAQ,GAE/B4Q,MAAM9P,IAAI+M,EAAUC,EAAa9N,EAC1C,CAEA,QAAAwW,CAAS7X,EAAOsB,GAUd,YATc2B,IAAV3B,IACFA,EAAQtB,EACRA,EAAQkD,KAAKqU,eAIfjW,EAAQA,EAAMxB,SACRE,GAAS,EAERiS,MAAM4F,SAAS7X,EAAOsB,EAC/B,CAEA,iBAAAyX,GACE,OAAO,IAAIzB,EAAgBpU,KAC7B,CAEA,KAAA4B,GACE,MAAMrH,EAAS,IAAIkb,EAAezV,KAAKqU,cAEvC,IAAK,MAAOtV,EAAKqP,EAAKjQ,KAAU6B,KAAKwU,oBAC/BzV,IAAQqP,GACZ7T,EAAO0E,IAAIF,EAAKqP,EAAKjQ,GAGvB,OAAO5D,CACT,CAqBA,SAAA2a,GACE,MAAM,aAAEb,GAAiBrU,KAInBmV,EAAU,IAAIhR,OAHIkQ,EAAe,GAAKA,EAAgB,GAI5D,IAAK,IAAIjG,EAAM,EAAGrP,EAAM,EAAGjC,EAAQ,EAAGA,EAAQqY,EAAQrZ,OAAQgB,IAC5DqY,EAAQrY,GAASkD,KAAKvE,IAAIsD,EAAKqP,KAEzBA,GAAOiG,IAAcjG,EAAc,KAANrP,GAGrC,OAAOoW,CACT,CAKA,kBAAOC,CAAYD,GACjB,MAAME,EAAcF,EAAQrZ,OAE5B,GAAoB,IAAhBuZ,EACF,OAAO,IAAIrV,KAAK,GAMlB,MAAMqU,GAAgBnZ,KAAKiK,KAAK,EAAIkQ,EAAc,GAAK,GAAK,EAE5D,IAAK3V,OAAOC,UAAU0U,GACpB,MAAM,IAAI7W,UACR,mEAAmE8X,KAAKC,UACtEJ,MAKN,MAAM5a,EAAS,IAAIyF,KAAKqU,GACxB,IAAK,IAAIjG,EAAM,EAAGrP,EAAM,EAAGjC,EAAQ,EAAGA,EAAQuY,EAAavY,IACzDvC,EAAO0E,IAAImP,EAAKrP,EAAKoW,EAAQrY,MACvBsR,GAAOiG,IAAcjG,EAAc,KAANrP,GAGrC,OAAOxE,CACT,EAEFkb,EAAenH,UAAUqH,aAAe,iBAExC,MAAMG,UAAiBtX,EACrB,WAAA3D,CAAYN,EAAQQ,EAAMC,GACxB+T,QACA/O,KAAKzF,OAASA,EACdyF,KAAKjF,KAAOA,EACZiF,KAAKhF,QAAUA,CACjB,EAqGF,MAAM+a,UAA4BD,EAChC,WAAAjb,CAAYN,EAAQgD,EAAYG,GAC9BJ,EAAgB/C,EAAQgD,GACxBE,EAAmBlD,EAAQmD,GAC3BqR,MAAMxU,EAAQgD,EAAWzB,OAAQ4B,EAAc5B,QAC/CkE,KAAKzC,WAAaA,EAClByC,KAAKtC,cAAgBA,CACvB,CAEA,GAAAuB,CAAI+M,EAAUC,EAAa9N,GAMzB,OALA6B,KAAKzF,OAAO0E,IACVe,KAAKzC,WAAWyO,GAChBhM,KAAKtC,cAAcuO,GACnB9N,GAEK6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IACjBuE,KAAKzC,WAAWyO,GAChBhM,KAAKtC,cAAcuO,GAEvB,EA2CF,MAAM+J,UAAwBxX,EAC5B,WAAA3D,CAAYqF,EAAM1F,EAAU,CAAC,GAC3B,MAAM,KAAEO,EAAO,GAAMP,EAErB,GAAI0F,EAAKpE,OAASf,GAAS,EACzB,MAAM,IAAIwD,MAAM,0DAElBwQ,QACA/O,KAAKjF,KAAOA,EACZiF,KAAKhF,QAAUkF,EAAKpE,OAASf,EAC7BiF,KAAKE,KAAOA,CACd,CAEA,GAAAjB,CAAI+M,EAAUC,EAAa9N,GACzB,IAAIrB,EAAQkD,KAAKiW,gBAAgBjK,EAAUC,GAE3C,OADAjM,KAAKE,KAAKpD,GAASqB,EACZ6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,IAAInP,EAAQkD,KAAKiW,gBAAgBjK,EAAUC,GAC3C,OAAOjM,KAAKE,KAAKpD,EACnB,CAEA,eAAAmZ,CAAgBlX,EAAKC,GACnB,OAAOD,EAAMiB,KAAKhF,QAAUgE,CAC9B,EAGF,MAAMkX,UAAwB1X,EAC5B,WAAA3D,CAAYqF,GACV6O,QACA/O,KAAKE,KAAOA,EACZF,KAAKjF,KAAOmF,EAAKpE,OACjBkE,KAAKhF,QAAUkF,EAAK,GAAGpE,MACzB,CAEA,GAAAmD,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKE,KAAK8L,GAAUC,GAAe9N,EAC5B6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKE,KAAK8L,GAAUC,EAC7B,EAeF,MAAMkK,EACJ,WAAAtb,CAAYN,GAGV,IAKIgB,EAAGC,EAAGkG,EAAGY,EAAGuD,EAAGuQ,EAAG9R,EAClB+R,EAAQC,EANRC,GAFJhc,EAAS2b,EAAgB5V,YAAY/F,IAErBqH,QACZ7G,EAAOwb,EAAGxb,KACVC,EAAUub,EAAGvb,QACbwb,EAAc,IAAI5Q,aAAa7K,GAC/B0b,EAAY,EAIhB,IAAKlb,EAAI,EAAGA,EAAIR,EAAMQ,IACpBib,EAAYjb,GAAKA,EAKnB,IAFA8a,EAAS,IAAIzQ,aAAa7K,GAErBS,EAAI,EAAGA,EAAIR,EAASQ,IAAK,CAC5B,IAAKD,EAAI,EAAGA,EAAIR,EAAMQ,IACpB8a,EAAO9a,GAAKgb,EAAG9a,IAAIF,EAAGC,GAGxB,IAAKD,EAAI,EAAGA,EAAIR,EAAMQ,IAAK,CAGzB,IAFA+a,EAAOpb,KAAKC,IAAII,EAAGC,GACnBqK,EAAI,EACCnE,EAAI,EAAGA,EAAI4U,EAAM5U,IACpBmE,GAAK0Q,EAAG9a,IAAIF,EAAGmG,GAAK2U,EAAO3U,GAE7B2U,EAAO9a,IAAMsK,EACb0Q,EAAGtX,IAAI1D,EAAGC,EAAG6a,EAAO9a,GACtB,CAGA,IADA+G,EAAI9G,EACCD,EAAIC,EAAI,EAAGD,EAAIR,EAAMQ,IACpBL,KAAKqX,IAAI8D,EAAO9a,IAAML,KAAKqX,IAAI8D,EAAO/T,MACxCA,EAAI/G,GAIR,GAAI+G,IAAM9G,EAAG,CACX,IAAKkG,EAAI,EAAGA,EAAI1G,EAAS0G,IACvB0U,EAAIG,EAAG9a,IAAI6G,EAAGZ,GACd6U,EAAGtX,IAAIqD,EAAGZ,EAAG6U,EAAG9a,IAAID,EAAGkG,IACvB6U,EAAGtX,IAAIzD,EAAGkG,EAAG0U,GAGf9R,EAAIkS,EAAYlU,GAChBkU,EAAYlU,GAAKkU,EAAYhb,GAC7Bgb,EAAYhb,GAAK8I,EAEjBmS,GAAaA,CACf,CAEA,GAAIjb,EAAIT,GAAyB,IAAjBwb,EAAG9a,IAAID,EAAGA,GACxB,IAAKD,EAAIC,EAAI,EAAGD,EAAIR,EAAMQ,IACxBgb,EAAGtX,IAAI1D,EAAGC,EAAG+a,EAAG9a,IAAIF,EAAGC,GAAK+a,EAAG9a,IAAID,EAAGA,GAG5C,CAEAwE,KAAK0W,GAAKH,EACVvW,KAAKwW,YAAcA,EACnBxW,KAAKyW,UAAYA,CACnB,CAEA,UAAAE,GACE,IAAIzW,EAAOF,KAAK0W,GACZtI,EAAMlO,EAAKlF,QACf,IAAK,IAAIQ,EAAI,EAAGA,EAAI4S,EAAK5S,IACvB,GAAuB,IAAnB0E,EAAKzE,IAAID,EAAGA,GACd,OAAO,EAGX,OAAO,CACT,CAEA,KAAAob,CAAMzY,GACJA,EAAQW,EAAOwB,YAAYnC,GAE3B,IAAIoY,EAAKvW,KAAK0W,GAGd,GAFWH,EAAGxb,OAEDoD,EAAMpD,KACjB,MAAM,IAAIwD,MAAM,6BAElB,GAAIyB,KAAK2W,aACP,MAAM,IAAIpY,MAAM,yBAGlB,IAGIhD,EAAGC,EAAGkG,EAHNmV,EAAQ1Y,EAAMnD,QACd8b,EAAI3Y,EAAMyN,aAAa5L,KAAKwW,YAAa,EAAGK,EAAQ,GACpD7b,EAAUub,EAAGvb,QAGjB,IAAK0G,EAAI,EAAGA,EAAI1G,EAAS0G,IACvB,IAAKnG,EAAImG,EAAI,EAAGnG,EAAIP,EAASO,IAC3B,IAAKC,EAAI,EAAGA,EAAIqb,EAAOrb,IACrBsb,EAAE7X,IAAI1D,EAAGC,EAAGsb,EAAErb,IAAIF,EAAGC,GAAKsb,EAAErb,IAAIiG,EAAGlG,GAAK+a,EAAG9a,IAAIF,EAAGmG,IAIxD,IAAKA,EAAI1G,EAAU,EAAG0G,GAAK,EAAGA,IAAK,CACjC,IAAKlG,EAAI,EAAGA,EAAIqb,EAAOrb,IACrBsb,EAAE7X,IAAIyC,EAAGlG,EAAGsb,EAAErb,IAAIiG,EAAGlG,GAAK+a,EAAG9a,IAAIiG,EAAGA,IAEtC,IAAKnG,EAAI,EAAGA,EAAImG,EAAGnG,IACjB,IAAKC,EAAI,EAAGA,EAAIqb,EAAOrb,IACrBsb,EAAE7X,IAAI1D,EAAGC,EAAGsb,EAAErb,IAAIF,EAAGC,GAAKsb,EAAErb,IAAIiG,EAAGlG,GAAK+a,EAAG9a,IAAIF,EAAGmG,GAGxD,CACA,OAAOoV,CACT,CAEA,eAAIC,GACF,IAAI7W,EAAOF,KAAK0W,GAChB,IAAKxW,EAAKiB,WACR,MAAM,IAAI5C,MAAM,yBAElB,IAAIwY,EAAc/W,KAAKyW,UACnBrI,EAAMlO,EAAKlF,QACf,IAAK,IAAIQ,EAAI,EAAGA,EAAI4S,EAAK5S,IACvBub,GAAe7W,EAAKzE,IAAID,EAAGA,GAE7B,OAAOub,CACT,CAEA,yBAAIC,GACF,IAAI9W,EAAOF,KAAK0W,GACZ3b,EAAOmF,EAAKnF,KACZC,EAAUkF,EAAKlF,QACf8b,EAAI,IAAIhY,EAAO/D,EAAMC,GACzB,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IACvBD,EAAIC,EACNsb,EAAE7X,IAAI1D,EAAGC,EAAG0E,EAAKzE,IAAIF,EAAGC,IACfD,IAAMC,EACfsb,EAAE7X,IAAI1D,EAAGC,EAAG,GAEZsb,EAAE7X,IAAI1D,EAAGC,EAAG,GAIlB,OAAOsb,CACT,CAEA,yBAAIG,GACF,IAAI/W,EAAOF,KAAK0W,GACZ3b,EAAOmF,EAAKnF,KACZC,EAAUkF,EAAKlF,QACf8b,EAAI,IAAIhY,EAAO/D,EAAMC,GACzB,IAAK,IAAIO,EAAI,EAAGA,EAAIR,EAAMQ,IACxB,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAASQ,IACvBD,GAAKC,EACPsb,EAAE7X,IAAI1D,EAAGC,EAAG0E,EAAKzE,IAAIF,EAAGC,IAExBsb,EAAE7X,IAAI1D,EAAGC,EAAG,GAIlB,OAAOsb,CACT,CAEA,0BAAII,GACF,OAAO/S,MAAMgI,KAAKnM,KAAKwW,YACzB,EAGF,SAASW,EAAWpN,EAAGC,GACrB,IAAIP,EAAI,EACR,OAAIvO,KAAKqX,IAAIxI,GAAK7O,KAAKqX,IAAIvI,IACzBP,EAAIO,EAAID,EACD7O,KAAKqX,IAAIxI,GAAK7O,KAAKiK,KAAK,EAAIsE,EAAIA,IAE/B,IAANO,GACFP,EAAIM,EAAIC,EACD9O,KAAKqX,IAAIvI,GAAK9O,KAAKiK,KAAK,EAAIsE,EAAIA,IAElC,CACT,CAEA,MAAM2N,EACJ,WAAAvc,CAAYsD,GAGV,IAII5C,EAAGC,EAAGkG,EAAGmE,EAJTwR,GAFJlZ,EAAQ+X,EAAgB5V,YAAYnC,IAErByD,QACXO,EAAIhE,EAAMpD,KACVqH,EAAIjE,EAAMnD,QACVsc,EAAQ,IAAI1R,aAAaxD,GAG7B,IAAKV,EAAI,EAAGA,EAAIU,EAAGV,IAAK,CACtB,IAAI6V,EAAM,EACV,IAAKhc,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACjBgc,EAAMJ,EAAWI,EAAKF,EAAG5b,IAAIF,EAAGmG,IAElC,GAAY,IAAR6V,EAAW,CAIb,IAHIF,EAAG5b,IAAIiG,EAAGA,GAAK,IACjB6V,GAAOA,GAEJhc,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACjB8b,EAAGpY,IAAI1D,EAAGmG,EAAG2V,EAAG5b,IAAIF,EAAGmG,GAAK6V,GAG9B,IADAF,EAAGpY,IAAIyC,EAAGA,EAAG2V,EAAG5b,IAAIiG,EAAGA,GAAK,GACvBlG,EAAIkG,EAAI,EAAGlG,EAAI4G,EAAG5G,IAAK,CAE1B,IADAqK,EAAI,EACCtK,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACjBsK,GAAKwR,EAAG5b,IAAIF,EAAGmG,GAAK2V,EAAG5b,IAAIF,EAAGC,GAGhC,IADAqK,GAAKA,EAAIwR,EAAG5b,IAAIiG,EAAGA,GACdnG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACjB8b,EAAGpY,IAAI1D,EAAGC,EAAG6b,EAAG5b,IAAIF,EAAGC,GAAKqK,EAAIwR,EAAG5b,IAAIF,EAAGmG,GAE9C,CACF,CACA4V,EAAM5V,IAAM6V,CACd,CAEAvX,KAAKwX,GAAKH,EACVrX,KAAKyX,MAAQH,CACf,CAEA,KAAAV,CAAMzY,GACJA,EAAQW,EAAOwB,YAAYnC,GAE3B,IAAIkZ,EAAKrX,KAAKwX,GACVrV,EAAIkV,EAAGtc,KAEX,GAAIoD,EAAMpD,OAASoH,EACjB,MAAM,IAAI5D,MAAM,oCAElB,IAAKyB,KAAK0X,aACR,MAAM,IAAInZ,MAAM,4BAGlB,IAGIhD,EAAGC,EAAGkG,EAAGmE,EAHTgR,EAAQ1Y,EAAMnD,QACd8b,EAAI3Y,EAAMyD,QACVQ,EAAIiV,EAAGrc,QAGX,IAAK0G,EAAI,EAAGA,EAAIU,EAAGV,IACjB,IAAKlG,EAAI,EAAGA,EAAIqb,EAAOrb,IAAK,CAE1B,IADAqK,EAAI,EACCtK,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACjBsK,GAAKwR,EAAG5b,IAAIF,EAAGmG,GAAKoV,EAAErb,IAAIF,EAAGC,GAG/B,IADAqK,GAAKA,EAAIwR,EAAG5b,IAAIiG,EAAGA,GACdnG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACjBub,EAAE7X,IAAI1D,EAAGC,EAAGsb,EAAErb,IAAIF,EAAGC,GAAKqK,EAAIwR,EAAG5b,IAAIF,EAAGmG,GAE5C,CAEF,IAAKA,EAAIU,EAAI,EAAGV,GAAK,EAAGA,IAAK,CAC3B,IAAKlG,EAAI,EAAGA,EAAIqb,EAAOrb,IACrBsb,EAAE7X,IAAIyC,EAAGlG,EAAGsb,EAAErb,IAAIiG,EAAGlG,GAAKwE,KAAKyX,MAAM/V,IAEvC,IAAKnG,EAAI,EAAGA,EAAImG,EAAGnG,IACjB,IAAKC,EAAI,EAAGA,EAAIqb,EAAOrb,IACrBsb,EAAE7X,IAAI1D,EAAGC,EAAGsb,EAAErb,IAAIF,EAAGC,GAAKsb,EAAErb,IAAIiG,EAAGlG,GAAK6b,EAAG5b,IAAIF,EAAGmG,GAGxD,CAEA,OAAOoV,EAAE1M,UAAU,EAAGhI,EAAI,EAAG,EAAGyU,EAAQ,EAC1C,CAEA,UAAAa,GACE,IAAI1c,EAAUgF,KAAKwX,GAAGxc,QACtB,IAAK,IAAIO,EAAI,EAAGA,EAAIP,EAASO,IAC3B,GAAsB,IAAlByE,KAAKyX,MAAMlc,GACb,OAAO,EAGX,OAAO,CACT,CAEA,yBAAI0b,GACF,IAGI1b,EAAGC,EAHH6b,EAAKrX,KAAKwX,GACVpV,EAAIiV,EAAGrc,QACP8b,EAAI,IAAIhY,EAAOsD,EAAGA,GAEtB,IAAK7G,EAAI,EAAGA,EAAI6G,EAAG7G,IACjB,IAAKC,EAAI,EAAGA,EAAI4G,EAAG5G,IACbD,EAAIC,EACNsb,EAAE7X,IAAI1D,EAAGC,EAAG6b,EAAG5b,IAAIF,EAAGC,IACbD,IAAMC,EACfsb,EAAE7X,IAAI1D,EAAGC,EAAGwE,KAAKyX,MAAMlc,IAEvBub,EAAE7X,IAAI1D,EAAGC,EAAG,GAIlB,OAAOsb,CACT,CAEA,oBAAIa,GACF,IAIIpc,EAAGC,EAAGkG,EAAGmE,EAJTwR,EAAKrX,KAAKwX,GACVzc,EAAOsc,EAAGtc,KACVC,EAAUqc,EAAGrc,QACb8b,EAAI,IAAIhY,EAAO/D,EAAMC,GAGzB,IAAK0G,EAAI1G,EAAU,EAAG0G,GAAK,EAAGA,IAAK,CACjC,IAAKnG,EAAI,EAAGA,EAAIR,EAAMQ,IACpBub,EAAE7X,IAAI1D,EAAGmG,EAAG,GAGd,IADAoV,EAAE7X,IAAIyC,EAAGA,EAAG,GACPlG,EAAIkG,EAAGlG,EAAIR,EAASQ,IACvB,GAAqB,IAAjB6b,EAAG5b,IAAIiG,EAAGA,GAAU,CAEtB,IADAmE,EAAI,EACCtK,EAAImG,EAAGnG,EAAIR,EAAMQ,IACpBsK,GAAKwR,EAAG5b,IAAIF,EAAGmG,GAAKoV,EAAErb,IAAIF,EAAGC,GAK/B,IAFAqK,GAAKA,EAAIwR,EAAG5b,IAAIiG,EAAGA,GAEdnG,EAAImG,EAAGnG,EAAIR,EAAMQ,IACpBub,EAAE7X,IAAI1D,EAAGC,EAAGsb,EAAErb,IAAIF,EAAGC,GAAKqK,EAAIwR,EAAG5b,IAAIF,EAAGmG,GAE5C,CAEJ,CACA,OAAOoV,CACT,EAGF,MAAMc,EACJ,WAAA/c,CAAYsD,EAAO3D,EAAU,CAAC,GAG5B,IAFA2D,EAAQ+X,EAAgB5V,YAAYnC,IAE1BG,UACR,MAAM,IAAIC,MAAM,4BAGlB,IAAI4D,EAAIhE,EAAMpD,KACVqH,EAAIjE,EAAMnD,QAEd,MAAM,2BACJ6c,GAA6B,EAAI,4BACjCC,GAA8B,EAAI,cAClCC,GAAgB,GACdvd,EAEJ,IAIIuP,EAJAiO,EAAQC,QAAQJ,GAChBK,EAAQD,QAAQH,GAEhBK,GAAU,EAEd,GAAIhW,EAAIC,EACN,GAAK2V,EAME,CACLhO,EAAI5L,EAAMmN,YACVnJ,EAAI4H,EAAEhP,KACNqH,EAAI2H,EAAE/O,QACNmd,GAAU,EACV,IAAIC,EAAMJ,EACVA,EAAQE,EACRA,EAAQE,CACV,MAbErO,EAAI5L,EAAMyD,QAEVgI,QAAQC,KACN,+FAYJE,EAAI5L,EAAMyD,QAGZ,IAAIyW,EAAKnd,KAAKC,IAAIgH,EAAGC,GACjBkW,EAAKpd,KAAKC,IAAIgH,EAAI,EAAGC,GACrByD,EAAI,IAAID,aAAa0S,GACrBC,EAAI,IAAIzZ,EAAOqD,EAAGkW,GAClBG,EAAI,IAAI1Z,EAAOsD,EAAGA,GAElB6D,EAAI,IAAIL,aAAaxD,GACrBqW,EAAO,IAAI7S,aAAazD,GAExBuW,EAAK,IAAI9S,aAAa0S,GAC1B,IAAK,IAAI/c,EAAI,EAAGA,EAAI+c,EAAI/c,IAAKmd,EAAGnd,GAAKA,EAErC,IAAIod,EAAMzd,KAAKC,IAAIgH,EAAI,EAAGC,GACtBwW,EAAM1d,KAAKsB,IAAI,EAAGtB,KAAKC,IAAIiH,EAAI,EAAGD,IAClC0W,EAAM3d,KAAKsB,IAAImc,EAAKC,GAExB,IAAK,IAAIlX,EAAI,EAAGA,EAAImX,EAAKnX,IAAK,CAC5B,GAAIA,EAAIiX,EAAK,CACX9S,EAAEnE,GAAK,EACP,IAAK,IAAInG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrBsK,EAAEnE,GAAKyV,EAAWtR,EAAEnE,GAAIqI,EAAEtO,IAAIF,EAAGmG,IAEnC,GAAa,IAATmE,EAAEnE,GAAU,CACVqI,EAAEtO,IAAIiG,EAAGA,GAAK,IAChBmE,EAAEnE,IAAMmE,EAAEnE,IAEZ,IAAK,IAAInG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrBwO,EAAE9K,IAAI1D,EAAGmG,EAAGqI,EAAEtO,IAAIF,EAAGmG,GAAKmE,EAAEnE,IAE9BqI,EAAE9K,IAAIyC,EAAGA,EAAGqI,EAAEtO,IAAIiG,EAAGA,GAAK,EAC5B,CACAmE,EAAEnE,IAAMmE,EAAEnE,EACZ,CAEA,IAAK,IAAIlG,EAAIkG,EAAI,EAAGlG,EAAI4G,EAAG5G,IAAK,CAC9B,GAAIkG,EAAIiX,GAAgB,IAAT9S,EAAEnE,GAAU,CACzB,IAAI0U,EAAI,EACR,IAAK,IAAI7a,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrB6a,GAAKrM,EAAEtO,IAAIF,EAAGmG,GAAKqI,EAAEtO,IAAIF,EAAGC,GAE9B4a,GAAKA,EAAIrM,EAAEtO,IAAIiG,EAAGA,GAClB,IAAK,IAAInG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrBwO,EAAE9K,IAAI1D,EAAGC,EAAGuO,EAAEtO,IAAIF,EAAGC,GAAK4a,EAAIrM,EAAEtO,IAAIF,EAAGmG,GAE3C,CACAuE,EAAEzK,GAAKuO,EAAEtO,IAAIiG,EAAGlG,EAClB,CAEA,GAAIwc,GAAStW,EAAIiX,EACf,IAAK,IAAIpd,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrBgd,EAAEtZ,IAAI1D,EAAGmG,EAAGqI,EAAEtO,IAAIF,EAAGmG,IAIzB,GAAIA,EAAIkX,EAAK,CACX3S,EAAEvE,GAAK,EACP,IAAK,IAAInG,EAAImG,EAAI,EAAGnG,EAAI6G,EAAG7G,IACzB0K,EAAEvE,GAAKyV,EAAWlR,EAAEvE,GAAIuE,EAAE1K,IAE5B,GAAa,IAAT0K,EAAEvE,GAAU,CACVuE,EAAEvE,EAAI,GAAK,IACbuE,EAAEvE,GAAK,EAAIuE,EAAEvE,IAEf,IAAK,IAAInG,EAAImG,EAAI,EAAGnG,EAAI6G,EAAG7G,IACzB0K,EAAE1K,IAAM0K,EAAEvE,GAEZuE,EAAEvE,EAAI,IAAM,CACd,CAEA,GADAuE,EAAEvE,IAAMuE,EAAEvE,GACNA,EAAI,EAAIS,GAAc,IAAT8D,EAAEvE,GAAU,CAC3B,IAAK,IAAInG,EAAImG,EAAI,EAAGnG,EAAI4G,EAAG5G,IACzBkd,EAAKld,GAAK,EAEZ,IAAK,IAAIA,EAAImG,EAAI,EAAGnG,EAAI4G,EAAG5G,IACzB,IAAK,IAAIC,EAAIkG,EAAI,EAAGlG,EAAI4G,EAAG5G,IACzBid,EAAKld,IAAM0K,EAAEzK,GAAKuO,EAAEtO,IAAIF,EAAGC,GAG/B,IAAK,IAAIA,EAAIkG,EAAI,EAAGlG,EAAI4G,EAAG5G,IAAK,CAC9B,IAAI4a,GAAKnQ,EAAEzK,GAAKyK,EAAEvE,EAAI,GACtB,IAAK,IAAInG,EAAImG,EAAI,EAAGnG,EAAI4G,EAAG5G,IACzBwO,EAAE9K,IAAI1D,EAAGC,EAAGuO,EAAEtO,IAAIF,EAAGC,GAAK4a,EAAIqC,EAAKld,GAEvC,CACF,CACA,GAAI2c,EACF,IAAK,IAAI3c,EAAImG,EAAI,EAAGnG,EAAI6G,EAAG7G,IACzBid,EAAEvZ,IAAI1D,EAAGmG,EAAGuE,EAAE1K,GAGpB,CACF,CAEA,IAAI+G,EAAIpH,KAAKC,IAAIiH,EAAGD,EAAI,GAYxB,GAXIwW,EAAMvW,IACRyD,EAAE8S,GAAO5O,EAAEtO,IAAIkd,EAAKA,IAElBxW,EAAIG,IACNuD,EAAEvD,EAAI,GAAK,GAETsW,EAAM,EAAItW,IACZ2D,EAAE2S,GAAO7O,EAAEtO,IAAImd,EAAKtW,EAAI,IAE1B2D,EAAE3D,EAAI,GAAK,EAEP0V,EAAO,CACT,IAAK,IAAIxc,EAAImd,EAAKnd,EAAI6c,EAAI7c,IAAK,CAC7B,IAAK,IAAID,EAAI,EAAGA,EAAI4G,EAAG5G,IACrBgd,EAAEtZ,IAAI1D,EAAGC,EAAG,GAEd+c,EAAEtZ,IAAIzD,EAAGA,EAAG,EACd,CACA,IAAK,IAAIkG,EAAIiX,EAAM,EAAGjX,GAAK,EAAGA,IAC5B,GAAa,IAATmE,EAAEnE,GAAU,CACd,IAAK,IAAIlG,EAAIkG,EAAI,EAAGlG,EAAI6c,EAAI7c,IAAK,CAC/B,IAAI4a,EAAI,EACR,IAAK,IAAI7a,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrB6a,GAAKmC,EAAE9c,IAAIF,EAAGmG,GAAK6W,EAAE9c,IAAIF,EAAGC,GAE9B4a,GAAKA,EAAImC,EAAE9c,IAAIiG,EAAGA,GAClB,IAAK,IAAInG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrBgd,EAAEtZ,IAAI1D,EAAGC,EAAG+c,EAAE9c,IAAIF,EAAGC,GAAK4a,EAAImC,EAAE9c,IAAIF,EAAGmG,GAE3C,CACA,IAAK,IAAInG,EAAImG,EAAGnG,EAAI4G,EAAG5G,IACrBgd,EAAEtZ,IAAI1D,EAAGmG,GAAI6W,EAAE9c,IAAIF,EAAGmG,IAExB6W,EAAEtZ,IAAIyC,EAAGA,EAAG,EAAI6W,EAAE9c,IAAIiG,EAAGA,IACzB,IAAK,IAAInG,EAAI,EAAGA,EAAImG,EAAI,EAAGnG,IACzBgd,EAAEtZ,IAAI1D,EAAGmG,EAAG,EAEhB,KAAO,CACL,IAAK,IAAInG,EAAI,EAAGA,EAAI4G,EAAG5G,IACrBgd,EAAEtZ,IAAI1D,EAAGmG,EAAG,GAEd6W,EAAEtZ,IAAIyC,EAAGA,EAAG,EACd,CAEJ,CAEA,GAAIwW,EACF,IAAK,IAAIxW,EAAIU,EAAI,EAAGV,GAAK,EAAGA,IAAK,CAC/B,GAAIA,EAAIkX,GAAgB,IAAT3S,EAAEvE,GACf,IAAK,IAAIlG,EAAIkG,EAAI,EAAGlG,EAAI4G,EAAG5G,IAAK,CAC9B,IAAI4a,EAAI,EACR,IAAK,IAAI7a,EAAImG,EAAI,EAAGnG,EAAI6G,EAAG7G,IACzB6a,GAAKoC,EAAE/c,IAAIF,EAAGmG,GAAK8W,EAAE/c,IAAIF,EAAGC,GAE9B4a,GAAKA,EAAIoC,EAAE/c,IAAIiG,EAAI,EAAGA,GACtB,IAAK,IAAInG,EAAImG,EAAI,EAAGnG,EAAI6G,EAAG7G,IACzBid,EAAEvZ,IAAI1D,EAAGC,EAAGgd,EAAE/c,IAAIF,EAAGC,GAAK4a,EAAIoC,EAAE/c,IAAIF,EAAGmG,GAE3C,CAEF,IAAK,IAAInG,EAAI,EAAGA,EAAI6G,EAAG7G,IACrBid,EAAEvZ,IAAI1D,EAAGmG,EAAG,GAEd8W,EAAEvZ,IAAIyC,EAAGA,EAAG,EACd,CAGF,IAAIoX,EAAKxW,EAAI,EACTyW,EAAMrZ,OAAOsZ,QACjB,KAAO1W,EAAI,GAAG,CACZ,IAAIZ,EAAGuX,EACP,IAAKvX,EAAIY,EAAI,EAAGZ,IAAM,IACT,IAAPA,EADmBA,IAAK,CAI5B,MAAMwX,EACJxZ,OAAOyZ,UAAYJ,EAAM7d,KAAKqX,IAAI1M,EAAEnE,GAAKxG,KAAKqX,IAAI1M,EAAEnE,EAAI,KAC1D,GAAIxG,KAAKqX,IAAItM,EAAEvE,KAAOwX,GAASxZ,OAAO0Z,MAAMnT,EAAEvE,IAAK,CACjDuE,EAAEvE,GAAK,EACP,KACF,CACF,CACA,GAAIA,IAAMY,EAAI,EACZ2W,EAAO,MACF,CACL,IAAII,EACJ,IAAKA,EAAK/W,EAAI,EAAG+W,GAAM3X,GACjB2X,IAAO3X,EADa2X,IAAM,CAI9B,IAAIjD,GACDiD,IAAO/W,EAAIpH,KAAKqX,IAAItM,EAAEoT,IAAO,IAC7BA,IAAO3X,EAAI,EAAIxG,KAAKqX,IAAItM,EAAEoT,EAAK,IAAM,GACxC,GAAIne,KAAKqX,IAAI1M,EAAEwT,KAAQN,EAAM3C,EAAG,CAC9BvQ,EAAEwT,GAAM,EACR,KACF,CACF,CACIA,IAAO3X,EACTuX,EAAO,EACEI,IAAO/W,EAAI,EACpB2W,EAAO,GAEPA,EAAO,EACPvX,EAAI2X,EAER,CAIA,OAFA3X,IAEQuX,GACN,KAAK,EAAG,CACN,IAAIK,EAAIrT,EAAE3D,EAAI,GACd2D,EAAE3D,EAAI,GAAK,EACX,IAAK,IAAI9G,EAAI8G,EAAI,EAAG9G,GAAKkG,EAAGlG,IAAK,CAC/B,IAAI4a,EAAIe,EAAWtR,EAAErK,GAAI8d,GACrBC,EAAK1T,EAAErK,GAAK4a,EACZoD,EAAKF,EAAIlD,EAMb,GALAvQ,EAAErK,GAAK4a,EACH5a,IAAMkG,IACR4X,GAAKE,EAAKvT,EAAEzK,EAAI,GAChByK,EAAEzK,EAAI,GAAK+d,EAAKtT,EAAEzK,EAAI,IAEpB0c,EACF,IAAK,IAAI3c,EAAI,EAAGA,EAAI6G,EAAG7G,IACrB6a,EAAImD,EAAKf,EAAE/c,IAAIF,EAAGC,GAAKge,EAAKhB,EAAE/c,IAAIF,EAAG+G,EAAI,GACzCkW,EAAEvZ,IAAI1D,EAAG+G,EAAI,GAAIkX,EAAKhB,EAAE/c,IAAIF,EAAGC,GAAK+d,EAAKf,EAAE/c,IAAIF,EAAG+G,EAAI,IACtDkW,EAAEvZ,IAAI1D,EAAGC,EAAG4a,EAGlB,CACA,KACF,CACA,KAAK,EAAG,CACN,IAAIkD,EAAIrT,EAAEvE,EAAI,GACduE,EAAEvE,EAAI,GAAK,EACX,IAAK,IAAIlG,EAAIkG,EAAGlG,EAAI8G,EAAG9G,IAAK,CAC1B,IAAI4a,EAAIe,EAAWtR,EAAErK,GAAI8d,GACrBC,EAAK1T,EAAErK,GAAK4a,EACZoD,EAAKF,EAAIlD,EAIb,GAHAvQ,EAAErK,GAAK4a,EACPkD,GAAKE,EAAKvT,EAAEzK,GACZyK,EAAEzK,GAAK+d,EAAKtT,EAAEzK,GACVwc,EACF,IAAK,IAAIzc,EAAI,EAAGA,EAAI4G,EAAG5G,IACrB6a,EAAImD,EAAKhB,EAAE9c,IAAIF,EAAGC,GAAKge,EAAKjB,EAAE9c,IAAIF,EAAGmG,EAAI,GACzC6W,EAAEtZ,IAAI1D,EAAGmG,EAAI,GAAI8X,EAAKjB,EAAE9c,IAAIF,EAAGC,GAAK+d,EAAKhB,EAAE9c,IAAIF,EAAGmG,EAAI,IACtD6W,EAAEtZ,IAAI1D,EAAGC,EAAG4a,EAGlB,CACA,KACF,CACA,KAAK,EAAG,CACN,MAAM1I,EAAQxS,KAAKsB,IACjBtB,KAAKqX,IAAI1M,EAAEvD,EAAI,IACfpH,KAAKqX,IAAI1M,EAAEvD,EAAI,IACfpH,KAAKqX,IAAItM,EAAE3D,EAAI,IACfpH,KAAKqX,IAAI1M,EAAEnE,IACXxG,KAAKqX,IAAItM,EAAEvE,KAEP+X,EAAK5T,EAAEvD,EAAI,GAAKoL,EAChBgM,EAAO7T,EAAEvD,EAAI,GAAKoL,EAClBiM,EAAO1T,EAAE3D,EAAI,GAAKoL,EAClBkM,EAAK/T,EAAEnE,GAAKgM,EACZmM,EAAK5T,EAAEvE,GAAKgM,EACZ1D,IAAM0P,EAAOD,IAAOC,EAAOD,GAAME,EAAOA,GAAQ,EAChDjQ,EAAI+P,EAAKE,GAAQF,EAAKE,GAC5B,IAAIG,EAAQ,EACF,IAAN9P,GAAiB,IAANN,IAEXoQ,EADE9P,EAAI,EACE,EAAI9O,KAAKiK,KAAK6E,EAAIA,EAAIN,GAEtBxO,KAAKiK,KAAK6E,EAAIA,EAAIN,GAE5BoQ,EAAQpQ,GAAKM,EAAI8P,IAEnB,IAAIR,GAAKM,EAAKH,IAAOG,EAAKH,GAAMK,EAC5BC,EAAIH,EAAKC,EACb,IAAK,IAAIre,EAAIkG,EAAGlG,EAAI8G,EAAI,EAAG9G,IAAK,CAC9B,IAAI4a,EAAIe,EAAWmC,EAAGS,GACZ,IAAN3D,IAASA,EAAI1W,OAAOyZ,WACxB,IAAII,EAAKD,EAAIlD,EACToD,EAAKO,EAAI3D,EAQb,GAPI5a,IAAMkG,IACRuE,EAAEzK,EAAI,GAAK4a,GAEbkD,EAAIC,EAAK1T,EAAErK,GAAKge,EAAKvT,EAAEzK,GACvByK,EAAEzK,GAAK+d,EAAKtT,EAAEzK,GAAKge,EAAK3T,EAAErK,GAC1Bue,EAAIP,EAAK3T,EAAErK,EAAI,GACfqK,EAAErK,EAAI,GAAK+d,EAAK1T,EAAErK,EAAI,GAClB0c,EACF,IAAK,IAAI3c,EAAI,EAAGA,EAAI6G,EAAG7G,IACrB6a,EAAImD,EAAKf,EAAE/c,IAAIF,EAAGC,GAAKge,EAAKhB,EAAE/c,IAAIF,EAAGC,EAAI,GACzCgd,EAAEvZ,IAAI1D,EAAGC,EAAI,GAAIge,EAAKhB,EAAE/c,IAAIF,EAAGC,GAAK+d,EAAKf,EAAE/c,IAAIF,EAAGC,EAAI,IACtDgd,EAAEvZ,IAAI1D,EAAGC,EAAG4a,GAYhB,GATAA,EAAIe,EAAWmC,EAAGS,GACR,IAAN3D,IAASA,EAAI1W,OAAOyZ,WACxBI,EAAKD,EAAIlD,EACToD,EAAKO,EAAI3D,EACTvQ,EAAErK,GAAK4a,EACPkD,EAAIC,EAAKtT,EAAEzK,GAAKge,EAAK3T,EAAErK,EAAI,GAC3BqK,EAAErK,EAAI,IAAMge,EAAKvT,EAAEzK,GAAK+d,EAAK1T,EAAErK,EAAI,GACnCue,EAAIP,EAAKvT,EAAEzK,EAAI,GACfyK,EAAEzK,EAAI,GAAK+d,EAAKtT,EAAEzK,EAAI,GAClBwc,GAASxc,EAAI2G,EAAI,EACnB,IAAK,IAAI5G,EAAI,EAAGA,EAAI4G,EAAG5G,IACrB6a,EAAImD,EAAKhB,EAAE9c,IAAIF,EAAGC,GAAKge,EAAKjB,EAAE9c,IAAIF,EAAGC,EAAI,GACzC+c,EAAEtZ,IAAI1D,EAAGC,EAAI,GAAIge,EAAKjB,EAAE9c,IAAIF,EAAGC,GAAK+d,EAAKhB,EAAE9c,IAAIF,EAAGC,EAAI,IACtD+c,EAAEtZ,IAAI1D,EAAGC,EAAG4a,EAGlB,CACAnQ,EAAE3D,EAAI,GAAKgX,EACX,KACF,CACA,KAAK,EACH,GAAIzT,EAAEnE,IAAM,IACVmE,EAAEnE,GAAKmE,EAAEnE,GAAK,GAAKmE,EAAEnE,GAAK,EACtBwW,GACF,IAAK,IAAI3c,EAAI,EAAGA,GAAKud,EAAIvd,IACvBid,EAAEvZ,IAAI1D,EAAGmG,GAAI8W,EAAE/c,IAAIF,EAAGmG,IAI5B,KAAOA,EAAIoX,KACLjT,EAAEnE,IAAMmE,EAAEnE,EAAI,KADL,CAIb,IAAI0U,EAAIvQ,EAAEnE,GAGV,GAFAmE,EAAEnE,GAAKmE,EAAEnE,EAAI,GACbmE,EAAEnE,EAAI,GAAK0U,EACP8B,GAASxW,EAAIU,EAAI,EACnB,IAAK,IAAI7G,EAAI,EAAGA,EAAI6G,EAAG7G,IACrB6a,EAAIoC,EAAE/c,IAAIF,EAAGmG,EAAI,GACjB8W,EAAEvZ,IAAI1D,EAAGmG,EAAI,EAAG8W,EAAE/c,IAAIF,EAAGmG,IACzB8W,EAAEvZ,IAAI1D,EAAGmG,EAAG0U,GAGhB,GAAI4B,GAAStW,EAAIS,EAAI,EACnB,IAAK,IAAI5G,EAAI,EAAGA,EAAI4G,EAAG5G,IACrB6a,EAAImC,EAAE9c,IAAIF,EAAGmG,EAAI,GACjB6W,EAAEtZ,IAAI1D,EAAGmG,EAAI,EAAG6W,EAAE9c,IAAIF,EAAGmG,IACzB6W,EAAEtZ,IAAI1D,EAAGmG,EAAG0U,GAGhB1U,GACF,CACAY,IAKN,CAEA,GAAI6V,EAAS,CACX,IAAInW,EAAMwW,EACVA,EAAID,EACJA,EAAIvW,CACN,CAEAhC,KAAKmC,EAAIA,EACTnC,KAAKoC,EAAIA,EACTpC,KAAK6F,EAAIA,EACT7F,KAAKuY,EAAIA,EACTvY,KAAKwY,EAAIA,CACX,CAEA,KAAA5B,CAAMzY,GACJ,IAAI6b,EAAI7b,EACJ8H,EAAIjG,KAAKia,UACTC,EAAQla,KAAK6F,EAAE/J,OACfqe,EAAKrb,EAAOM,MAAM8a,EAAOA,GAE7B,IAAK,IAAI3e,EAAI,EAAGA,EAAI2e,EAAO3e,IACrBL,KAAKqX,IAAIvS,KAAK6F,EAAEtK,KAAO0K,EACzBkU,EAAGlb,IAAI1D,EAAGA,EAAG,GAEb4e,EAAGlb,IAAI1D,EAAGA,EAAG,EAAIyE,KAAK6F,EAAEtK,IAI5B,IAAIgd,EAAIvY,KAAKuY,EACTC,EAAIxY,KAAKoa,qBAETC,EAAK7B,EAAE/S,KAAK0U,GACZG,EAAQ9B,EAAEzd,KACVwf,EAAQhC,EAAExd,KACVyf,EAAM1b,EAAOM,MAAMkb,EAAOC,GAE9B,IAAK,IAAIhf,EAAI,EAAGA,EAAI+e,EAAO/e,IACzB,IAAK,IAAIC,EAAI,EAAGA,EAAI+e,EAAO/e,IAAK,CAC9B,IAAI8J,EAAM,EACV,IAAK,IAAI5D,EAAI,EAAGA,EAAIwY,EAAOxY,IACzB4D,GAAO+U,EAAG5e,IAAIF,EAAGmG,GAAK6W,EAAE9c,IAAID,EAAGkG,GAEjC8Y,EAAIvb,IAAI1D,EAAGC,EAAG8J,EAChB,CAGF,OAAOkV,EAAI/U,KAAKuU,EAClB,CAEA,gBAAAS,CAAiBtc,GACf,OAAO6B,KAAK4W,MAAM9X,EAAOmB,KAAK9B,GAChC,CAEA,OAAAuc,GACE,IAAIlC,EAAIxY,KAAKwY,EACTvS,EAAIjG,KAAKia,UACTK,EAAQ9B,EAAEzd,KACV4f,EAAQnC,EAAExd,QACV8b,EAAI,IAAIhY,EAAOwb,EAAOta,KAAK6F,EAAE/J,QAEjC,IAAK,IAAIP,EAAI,EAAGA,EAAI+e,EAAO/e,IACzB,IAAK,IAAIC,EAAI,EAAGA,EAAImf,EAAOnf,IACrBN,KAAKqX,IAAIvS,KAAK6F,EAAErK,IAAMyK,GACxB6Q,EAAE7X,IAAI1D,EAAGC,EAAGgd,EAAE/c,IAAIF,EAAGC,GAAKwE,KAAK6F,EAAErK,IAKvC,IAAI+c,EAAIvY,KAAKuY,EAETgC,EAAQhC,EAAExd,KACV6f,EAAQrC,EAAEvd,QACVgf,EAAI,IAAIlb,EAAOwb,EAAOC,GAE1B,IAAK,IAAIhf,EAAI,EAAGA,EAAI+e,EAAO/e,IACzB,IAAK,IAAIC,EAAI,EAAGA,EAAI+e,EAAO/e,IAAK,CAC9B,IAAI8J,EAAM,EACV,IAAK,IAAI5D,EAAI,EAAGA,EAAIkZ,EAAOlZ,IACzB4D,GAAOwR,EAAErb,IAAIF,EAAGmG,GAAK6W,EAAE9c,IAAID,EAAGkG,GAEhCsY,EAAE/a,IAAI1D,EAAGC,EAAG8J,EACd,CAGF,OAAO0U,CACT,CAEA,aAAIa,GACF,OAAO7a,KAAK6F,EAAE,GAAK7F,KAAK6F,EAAE3K,KAAKC,IAAI6E,KAAKmC,EAAGnC,KAAKoC,GAAK,EACvD,CAEA,SAAI0Y,GACF,OAAO9a,KAAK6F,EAAE,EAChB,CAEA,QAAIkV,GACF,IAAIC,EAAM9f,KAAKsB,IAAIwD,KAAKmC,EAAGnC,KAAKoC,GAAKpC,KAAK6F,EAAE,GAAKnG,OAAOsZ,QACpDvP,EAAI,EACJ5D,EAAI7F,KAAK6F,EACb,IAAK,IAAItK,EAAI,EAAG0f,EAAKpV,EAAE/J,OAAQP,EAAI0f,EAAI1f,IACjCsK,EAAEtK,GAAKyf,GACTvR,IAGJ,OAAOA,CACT,CAEA,YAAIgF,GACF,OAAOtK,MAAMgI,KAAKnM,KAAK6F,EACzB,CAEA,aAAIoU,GACF,OAAQva,OAAOsZ,QAAU,EAAK9d,KAAKsB,IAAIwD,KAAKmC,EAAGnC,KAAKoC,GAAKpC,KAAK6F,EAAE,EAClE,CAEA,uBAAIqV,GACF,OAAOlb,KAAKuY,CACd,CAEA,wBAAI6B,GACF,OAAOpa,KAAKwY,CACd,CAEA,kBAAI2C,GACF,OAAOrc,EAAOmB,KAAKD,KAAK6F,EAC1B,EAYF,SAAS+Q,EAAMwE,EAAcC,EAAeC,GAAS,GAGnD,OAFAF,EAAelF,EAAgB5V,YAAY8a,GAC3CC,EAAgBnF,EAAgB5V,YAAY+a,GACxCC,EACK,IAAI1D,EAA2BwD,GAAcxE,MAAMyE,GAEnDD,EAAaja,WAChB,IAAIgV,EAAgBiF,GAAcxE,MAAMyE,GACxC,IAAIjE,EAAgBgE,GAAcxE,MAAMyE,EAEhD,CA0CA,SAASE,EAAOnZ,EAAGoZ,GACjB,IAAIC,EAAQ,GACZ,IAAK,IAAIlgB,EAAI,EAAGA,EAAI6G,EAAG7G,IACjBA,IAAMigB,GACRC,EAAM9f,KAAKJ,GAGf,OAAOkgB,CACT,CAEA,SAASC,EACPC,EACAphB,EACAuC,EACA8e,EAAiB,KACjBC,EAAiB,MAEjB,GAAIF,EAAQE,EACV,OAAO,IAAI1X,MAAM5J,EAAOQ,KAAO,GAAGuE,KAAK,GAClC,CACL,IAAIwc,EAAcvhB,EAAO8U,OAAOvS,EAAO,CAAC,IACxC,IAAK,IAAIvB,EAAI,EAAGA,EAAIugB,EAAY/gB,KAAMQ,IAChCL,KAAKqX,IAAIuJ,EAAYrgB,IAAIF,EAAG,IAAMqgB,GACpCE,EAAY7c,IAAI1D,EAAG,EAAG,GAG1B,OAAOugB,EAAY1e,WACrB,CACF,CAmIA,MAAM2e,EACJ,WAAAlhB,CAAYN,EAAQC,EAAU,CAAC,GAC7B,MAAM,gBAAEwhB,GAAkB,GAAUxhB,EAGpC,KADAD,EAAS2b,EAAgB5V,YAAY/F,IACzB4G,WACV,MAAM,IAAI5C,MAAM,iCAGlB,GAAIhE,EAAO+D,UACT,MAAM,IAAIC,MAAM,4BAGlB,IAKIhD,EAAGC,EALH4G,EAAI7H,EAAOS,QACXwd,EAAI,IAAI1Z,EAAOsD,EAAGA,GAClB6Z,EAAI,IAAIrW,aAAaxD,GACrB6D,EAAI,IAAIL,aAAaxD,GACrBjE,EAAQ5D,EAGR6G,GAAc,EAOlB,GALEA,IADE4a,GAGYzhB,EAAO6G,cAGnBA,EAAa,CACf,IAAK7F,EAAI,EAAGA,EAAI6G,EAAG7G,IACjB,IAAKC,EAAI,EAAGA,EAAI4G,EAAG5G,IACjBgd,EAAEvZ,IAAI1D,EAAGC,EAAG2C,EAAM1C,IAAIF,EAAGC,KAwDnC,SAAe4G,EAAG6D,EAAGgW,EAAGzD,GACtB,IAAIc,EAAGS,EAAGlY,EAAGtG,EAAGC,EAAGkG,EAAGwa,EAAIxO,EAE1B,IAAKlS,EAAI,EAAGA,EAAI4G,EAAG5G,IACjBygB,EAAEzgB,GAAKgd,EAAE/c,IAAI2G,EAAI,EAAG5G,GAGtB,IAAKD,EAAI6G,EAAI,EAAG7G,EAAI,EAAGA,IAAK,CAG1B,IAFAmS,EAAQ,EACR7L,EAAI,EACCH,EAAI,EAAGA,EAAInG,EAAGmG,IACjBgM,GAAgBxS,KAAKqX,IAAI0J,EAAEva,IAG7B,GAAc,IAAVgM,EAEF,IADAzH,EAAE1K,GAAK0gB,EAAE1gB,EAAI,GACRC,EAAI,EAAGA,EAAID,EAAGC,IACjBygB,EAAEzgB,GAAKgd,EAAE/c,IAAIF,EAAI,EAAGC,GACpBgd,EAAEvZ,IAAI1D,EAAGC,EAAG,GACZgd,EAAEvZ,IAAIzD,EAAGD,EAAG,OAET,CACL,IAAKmG,EAAI,EAAGA,EAAInG,EAAGmG,IACjBua,EAAEva,IAAMgM,EACR7L,GAAKoa,EAAEva,GAAKua,EAAEva,GAYhB,IATA4X,EAAI2C,EAAE1gB,EAAI,GACVwe,EAAI7e,KAAKiK,KAAKtD,GACVyX,EAAI,IACNS,GAAKA,GAGP9T,EAAE1K,GAAKmS,EAAQqM,EACflY,GAAQyX,EAAIS,EACZkC,EAAE1gB,EAAI,GAAK+d,EAAIS,EACVve,EAAI,EAAGA,EAAID,EAAGC,IACjByK,EAAEzK,GAAK,EAGT,IAAKA,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAItB,IAHA8d,EAAI2C,EAAEzgB,GACNgd,EAAEvZ,IAAIzD,EAAGD,EAAG+d,GACZS,EAAI9T,EAAEzK,GAAKgd,EAAE/c,IAAID,EAAGA,GAAK8d,EACpB5X,EAAIlG,EAAI,EAAGkG,GAAKnG,EAAI,EAAGmG,IAC1BqY,GAAKvB,EAAE/c,IAAIiG,EAAGlG,GAAKygB,EAAEva,GACrBuE,EAAEvE,IAAM8W,EAAE/c,IAAIiG,EAAGlG,GAAK8d,EAExBrT,EAAEzK,GAAKue,CACT,CAGA,IADAT,EAAI,EACC9d,EAAI,EAAGA,EAAID,EAAGC,IACjByK,EAAEzK,IAAMqG,EACRyX,GAAKrT,EAAEzK,GAAKygB,EAAEzgB,GAIhB,IADA0gB,EAAK5C,GAAKzX,EAAIA,GACTrG,EAAI,EAAGA,EAAID,EAAGC,IACjByK,EAAEzK,IAAM0gB,EAAKD,EAAEzgB,GAGjB,IAAKA,EAAI,EAAGA,EAAID,EAAGC,IAAK,CAGtB,IAFA8d,EAAI2C,EAAEzgB,GACNue,EAAI9T,EAAEzK,GACDkG,EAAIlG,EAAGkG,GAAKnG,EAAI,EAAGmG,IACtB8W,EAAEvZ,IAAIyC,EAAGlG,EAAGgd,EAAE/c,IAAIiG,EAAGlG,IAAM8d,EAAIrT,EAAEvE,GAAKqY,EAAIkC,EAAEva,KAE9Cua,EAAEzgB,GAAKgd,EAAE/c,IAAIF,EAAI,EAAGC,GACpBgd,EAAEvZ,IAAI1D,EAAGC,EAAG,EACd,CACF,CACAygB,EAAE1gB,GAAKsG,CACT,CAEA,IAAKtG,EAAI,EAAGA,EAAI6G,EAAI,EAAG7G,IAAK,CAI1B,GAHAid,EAAEvZ,IAAImD,EAAI,EAAG7G,EAAGid,EAAE/c,IAAIF,EAAGA,IACzBid,EAAEvZ,IAAI1D,EAAGA,EAAG,GACZsG,EAAIoa,EAAE1gB,EAAI,GACA,IAANsG,EAAS,CACX,IAAKH,EAAI,EAAGA,GAAKnG,EAAGmG,IAClBua,EAAEva,GAAK8W,EAAE/c,IAAIiG,EAAGnG,EAAI,GAAKsG,EAG3B,IAAKrG,EAAI,EAAGA,GAAKD,EAAGC,IAAK,CAEvB,IADAue,EAAI,EACCrY,EAAI,EAAGA,GAAKnG,EAAGmG,IAClBqY,GAAKvB,EAAE/c,IAAIiG,EAAGnG,EAAI,GAAKid,EAAE/c,IAAIiG,EAAGlG,GAElC,IAAKkG,EAAI,EAAGA,GAAKnG,EAAGmG,IAClB8W,EAAEvZ,IAAIyC,EAAGlG,EAAGgd,EAAE/c,IAAIiG,EAAGlG,GAAKue,EAAIkC,EAAEva,GAEpC,CACF,CAEA,IAAKA,EAAI,EAAGA,GAAKnG,EAAGmG,IAClB8W,EAAEvZ,IAAIyC,EAAGnG,EAAI,EAAG,EAEpB,CAEA,IAAKC,EAAI,EAAGA,EAAI4G,EAAG5G,IACjBygB,EAAEzgB,GAAKgd,EAAE/c,IAAI2G,EAAI,EAAG5G,GACpBgd,EAAEvZ,IAAImD,EAAI,EAAG5G,EAAG,GAGlBgd,EAAEvZ,IAAImD,EAAI,EAAGA,EAAI,EAAG,GACpB6D,EAAE,GAAK,CACT,CAhKMkW,CAAM/Z,EAAG6D,EAAGgW,EAAGzD,GAkKrB,SAAcpW,EAAG6D,EAAGgW,EAAGzD,GACrB,IAAIuB,EAAGlY,EAAGtG,EAAGC,EAAGkG,EAAGvB,EAAGgC,EAAGG,EAAGmH,EAAG2S,EAAK1S,EAAGL,EAAIgT,EAAIC,EAAKzW,EAAG0W,EAEvD,IAAKhhB,EAAI,EAAGA,EAAI6G,EAAG7G,IACjB0K,EAAE1K,EAAI,GAAK0K,EAAE1K,GAGf0K,EAAE7D,EAAI,GAAK,EAEX,IAAIkX,EAAI,EACJkD,EAAO,EACPzD,EAAMrZ,OAAOsZ,QAEjB,IAAK7Y,EAAI,EAAGA,EAAIiC,EAAGjC,IAAK,CAGtB,IAFAqc,EAAOthB,KAAKsB,IAAIggB,EAAMthB,KAAKqX,IAAI0J,EAAE9b,IAAMjF,KAAKqX,IAAItM,EAAE9F,KAClDgC,EAAIhC,EACGgC,EAAIC,KACLlH,KAAKqX,IAAItM,EAAE9D,KAAO4W,EAAMyD,IAG5Bra,IAGF,GAAIA,EAAIhC,EACN,EAAG,CAaD,IAXA4Z,EAAIkC,EAAE9b,GACNmC,GAAK2Z,EAAE9b,EAAI,GAAK4Z,IAAM,EAAI9T,EAAE9F,IAC5BsJ,EAAI0N,EAAW7U,EAAG,GACdA,EAAI,IACNmH,GAAKA,GAGPwS,EAAE9b,GAAK8F,EAAE9F,IAAMmC,EAAImH,GACnBwS,EAAE9b,EAAI,GAAK8F,EAAE9F,IAAMmC,EAAImH,GACvB2S,EAAMH,EAAE9b,EAAI,GACZ0B,EAAIkY,EAAIkC,EAAE9b,GACL5E,EAAI4E,EAAI,EAAG5E,EAAI6G,EAAG7G,IACrB0gB,EAAE1gB,IAAMsG,EAYV,IATAyX,GAAQzX,EAERS,EAAI2Z,EAAE9Z,GACNuH,EAAI,EACJL,EAAKK,EACL2S,EAAK3S,EACL4S,EAAMrW,EAAE9F,EAAI,GACZ0F,EAAI,EACJ0W,EAAK,EACAhhB,EAAI4G,EAAI,EAAG5G,GAAK4E,EAAG5E,IAatB,IAZA8gB,EAAKhT,EACLA,EAAKK,EACL6S,EAAK1W,EACLkU,EAAIrQ,EAAIzD,EAAE1K,GACVsG,EAAI6H,EAAIpH,EACRmH,EAAI0N,EAAW7U,EAAG2D,EAAE1K,IACpB0K,EAAE1K,EAAI,GAAKsK,EAAI4D,EACf5D,EAAII,EAAE1K,GAAKkO,EACXC,EAAIpH,EAAImH,EACRnH,EAAIoH,EAAIuS,EAAE1gB,GAAKsK,EAAIkU,EACnBkC,EAAE1gB,EAAI,GAAKsG,EAAIgE,GAAK6D,EAAIqQ,EAAIlU,EAAIoW,EAAE1gB,IAE7BmG,EAAI,EAAGA,EAAIU,EAAGV,IACjBG,EAAI2W,EAAE/c,IAAIiG,EAAGnG,EAAI,GACjBid,EAAEvZ,IAAIyC,EAAGnG,EAAI,EAAGsK,EAAI2S,EAAE/c,IAAIiG,EAAGnG,GAAKmO,EAAI7H,GACtC2W,EAAEvZ,IAAIyC,EAAGnG,EAAGmO,EAAI8O,EAAE/c,IAAIiG,EAAGnG,GAAKsK,EAAIhE,GAItCS,GAAMuD,EAAI0W,EAAKF,EAAKC,EAAMrW,EAAE9F,GAAMic,EAClCnW,EAAE9F,GAAK0F,EAAIvD,EACX2Z,EAAE9b,GAAKuJ,EAAIpH,CACb,OAASpH,KAAKqX,IAAItM,EAAE9F,IAAM4Y,EAAMyD,GAElCP,EAAE9b,GAAK8b,EAAE9b,GAAKmZ,EACdrT,EAAE9F,GAAK,CACT,CAEA,IAAK5E,EAAI,EAAGA,EAAI6G,EAAI,EAAG7G,IAAK,CAG1B,IAFAmG,EAAInG,EACJ+G,EAAI2Z,EAAE1gB,GACDC,EAAID,EAAI,EAAGC,EAAI4G,EAAG5G,IACjBygB,EAAEzgB,GAAK8G,IACTZ,EAAIlG,EACJ8G,EAAI2Z,EAAEzgB,IAIV,GAAIkG,IAAMnG,EAGR,IAFA0gB,EAAEva,GAAKua,EAAE1gB,GACT0gB,EAAE1gB,GAAK+G,EACF9G,EAAI,EAAGA,EAAI4G,EAAG5G,IACjB8G,EAAIkW,EAAE/c,IAAID,EAAGD,GACbid,EAAEvZ,IAAIzD,EAAGD,EAAGid,EAAE/c,IAAID,EAAGkG,IACrB8W,EAAEvZ,IAAIzD,EAAGkG,EAAGY,EAGlB,CACF,CApQMma,CAAKra,EAAG6D,EAAGgW,EAAGzD,EAChB,KAAO,CACL,IAAIkE,EAAI,IAAI5d,EAAOsD,EAAGA,GAClBua,EAAM,IAAI/W,aAAaxD,GAC3B,IAAK5G,EAAI,EAAGA,EAAI4G,EAAG5G,IACjB,IAAKD,EAAI,EAAGA,EAAI6G,EAAG7G,IACjBmhB,EAAEzd,IAAI1D,EAAGC,EAAG2C,EAAM1C,IAAIF,EAAGC,KAgQnC,SAAgB4G,EAAGsa,EAAGC,EAAKnE,GACzB,IAEIc,EAAGS,EAAGlY,EAAGtG,EAAGC,EAAG2G,EACfuL,EAFAkP,EAAOxa,EAAI,EAIf,IAAKD,EAAI0a,EAAS1a,GAAKya,EAAO,EAAGza,IAAK,CAEpC,IADAuL,EAAQ,EACHnS,EAAI4G,EAAG5G,GAAKqhB,EAAMrhB,IACrBmS,GAAgBxS,KAAKqX,IAAImK,EAAEjhB,IAAIF,EAAG4G,EAAI,IAGxC,GAAc,IAAVuL,EAAa,CAEf,IADA7L,EAAI,EACCtG,EAAIqhB,EAAMrhB,GAAK4G,EAAG5G,IACrBohB,EAAIphB,GAAKmhB,EAAEjhB,IAAIF,EAAG4G,EAAI,GAAKuL,EAC3B7L,GAAK8a,EAAIphB,GAAKohB,EAAIphB,GAWpB,IARAwe,EAAI7e,KAAKiK,KAAKtD,GACV8a,EAAIxa,GAAK,IACX4X,GAAKA,GAGPlY,GAAQ8a,EAAIxa,GAAK4X,EACjB4C,EAAIxa,GAAKwa,EAAIxa,GAAK4X,EAEbve,EAAI2G,EAAG3G,EAAI4G,EAAG5G,IAAK,CAEtB,IADA8d,EAAI,EACC/d,EAAIqhB,EAAMrhB,GAAK4G,EAAG5G,IACrB+d,GAAKqD,EAAIphB,GAAKmhB,EAAEjhB,IAAIF,EAAGC,GAIzB,IADA8d,GAAQzX,EACHtG,EAAI4G,EAAG5G,GAAKqhB,EAAMrhB,IACrBmhB,EAAEzd,IAAI1D,EAAGC,EAAGkhB,EAAEjhB,IAAIF,EAAGC,GAAK8d,EAAIqD,EAAIphB,GAEtC,CAEA,IAAKA,EAAI,EAAGA,GAAKqhB,EAAMrhB,IAAK,CAE1B,IADA+d,EAAI,EACC9d,EAAIohB,EAAMphB,GAAK2G,EAAG3G,IACrB8d,GAAKqD,EAAInhB,GAAKkhB,EAAEjhB,IAAIF,EAAGC,GAIzB,IADA8d,GAAQzX,EACHrG,EAAI2G,EAAG3G,GAAKohB,EAAMphB,IACrBkhB,EAAEzd,IAAI1D,EAAGC,EAAGkhB,EAAEjhB,IAAIF,EAAGC,GAAK8d,EAAIqD,EAAInhB,GAEtC,CAEAmhB,EAAIxa,GAAKuL,EAAQiP,EAAIxa,GACrBua,EAAEzd,IAAIkD,EAAGA,EAAI,EAAGuL,EAAQqM,EAC1B,CACF,CAEA,IAAKxe,EAAI,EAAGA,EAAI6G,EAAG7G,IACjB,IAAKC,EAAI,EAAGA,EAAI4G,EAAG5G,IACjBgd,EAAEvZ,IAAI1D,EAAGC,EAAGD,IAAMC,EAAI,EAAI,GAI9B,IAAK2G,EAAIya,EAAO,EAAGza,GAAK0a,EAAS1a,IAC/B,GAAwB,IAApBua,EAAEjhB,IAAI0G,EAAGA,EAAI,GAAU,CACzB,IAAK5G,EAAI4G,EAAI,EAAG5G,GAAKqhB,EAAMrhB,IACzBohB,EAAIphB,GAAKmhB,EAAEjhB,IAAIF,EAAG4G,EAAI,GAGxB,IAAK3G,EAAI2G,EAAG3G,GAAKohB,EAAMphB,IAAK,CAE1B,IADAue,EAAI,EACCxe,EAAI4G,EAAG5G,GAAKqhB,EAAMrhB,IACrBwe,GAAK4C,EAAIphB,GAAKid,EAAE/c,IAAIF,EAAGC,GAIzB,IADAue,EAAIA,EAAI4C,EAAIxa,GAAKua,EAAEjhB,IAAI0G,EAAGA,EAAI,GACzB5G,EAAI4G,EAAG5G,GAAKqhB,EAAMrhB,IACrBid,EAAEvZ,IAAI1D,EAAGC,EAAGgd,EAAE/c,IAAIF,EAAGC,GAAKue,EAAI4C,EAAIphB,GAEtC,CACF,CAEJ,CA9UMuhB,CAAO1a,EAAGsa,EAAGC,EAAKnE,GAgVxB,SAAcuE,EAAI9W,EAAGgW,EAAGzD,EAAGkE,GACzB,IAYInhB,EAAGC,EAAGkG,EAAGvB,EAAGgC,EAAGiU,EAAG4G,EAAG/T,EAAGD,EACxBiU,EAAIC,EAAIC,EAAIC,EACZC,EAASC,EAdTlb,EAAI2a,EAAK,EAETH,EAAOG,EAAK,EACZhE,EAAMrZ,OAAOsZ,QACbuE,EAAU,EACVtY,EAAO,EACP3C,EAAI,EACJ4I,EAAI,EACJzB,EAAI,EACJ5D,EAAI,EACJ2X,EAAI,EACJC,EAAO,EAKX,IAAKliB,EAAI,EAAGA,EAAIwhB,EAAIxhB,IAMlB,KALIA,EAhBI,GAgBOA,EAAIqhB,KACjBX,EAAE1gB,GAAKmhB,EAAEjhB,IAAIF,EAAGA,GAChB0K,EAAE1K,GAAK,GAGJC,EAAIN,KAAKsB,IAAIjB,EAAI,EAAG,GAAIC,EAAIuhB,EAAIvhB,IACnCyJ,GAAc/J,KAAKqX,IAAImK,EAAEjhB,IAAIF,EAAGC,IAIpC,KAAO4G,GA1BG,GA0BO,CAEf,IADAjC,EAAIiC,EACGjC,EA5BC,IA6BN0F,EAAI3K,KAAKqX,IAAImK,EAAEjhB,IAAI0E,EAAI,EAAGA,EAAI,IAAMjF,KAAKqX,IAAImK,EAAEjhB,IAAI0E,EAAGA,IAC5C,IAAN0F,IACFA,EAAIZ,KAEF/J,KAAKqX,IAAImK,EAAEjhB,IAAI0E,EAAGA,EAAI,IAAM4Y,EAAMlT,KAGtC1F,IAGF,GAAIA,IAAMiC,EACRsa,EAAEzd,IAAImD,EAAGA,EAAGsa,EAAEjhB,IAAI2G,EAAGA,GAAKmb,GAC1BtB,EAAE7Z,GAAKsa,EAAEjhB,IAAI2G,EAAGA,GAChB6D,EAAE7D,GAAK,EACPA,IACAqb,EAAO,OACF,GAAItd,IAAMiC,EAAI,EAAG,CAStB,GARA4a,EAAIN,EAAEjhB,IAAI2G,EAAGA,EAAI,GAAKsa,EAAEjhB,IAAI2G,EAAI,EAAGA,GACnCE,GAAKoa,EAAEjhB,IAAI2G,EAAI,EAAGA,EAAI,GAAKsa,EAAEjhB,IAAI2G,EAAGA,IAAM,EAC1C8I,EAAI5I,EAAIA,EAAI0a,EACZQ,EAAItiB,KAAKiK,KAAKjK,KAAKqX,IAAIrH,IACvBwR,EAAEzd,IAAImD,EAAGA,EAAGsa,EAAEjhB,IAAI2G,EAAGA,GAAKmb,GAC1Bb,EAAEzd,IAAImD,EAAI,EAAGA,EAAI,EAAGsa,EAAEjhB,IAAI2G,EAAI,EAAGA,EAAI,GAAKmb,GAC1CtU,EAAIyT,EAAEjhB,IAAI2G,EAAGA,GAET8I,GAAK,EAAG,CAiBV,IAhBAsS,EAAIlb,GAAK,EAAIA,EAAIkb,EAAIlb,EAAIkb,EACzBvB,EAAE7Z,EAAI,GAAK6G,EAAIuU,EACfvB,EAAE7Z,GAAK6Z,EAAE7Z,EAAI,GACH,IAANob,IACFvB,EAAE7Z,GAAK6G,EAAI+T,EAAIQ,GAEjBvX,EAAE7D,EAAI,GAAK,EACX6D,EAAE7D,GAAK,EACP6G,EAAIyT,EAAEjhB,IAAI2G,EAAGA,EAAI,GACjByD,EAAI3K,KAAKqX,IAAItJ,GAAK/N,KAAKqX,IAAIiL,GAC3Blb,EAAI2G,EAAIpD,EACRqF,EAAIsS,EAAI3X,EACR4D,EAAIvO,KAAKiK,KAAK7C,EAAIA,EAAI4I,EAAIA,GAC1B5I,GAAQmH,EACRyB,GAAQzB,EAEHjO,EAAI4G,EAAI,EAAG5G,EAAIuhB,EAAIvhB,IACtBgiB,EAAId,EAAEjhB,IAAI2G,EAAI,EAAG5G,GACjBkhB,EAAEzd,IAAImD,EAAI,EAAG5G,EAAG0P,EAAIsS,EAAIlb,EAAIoa,EAAEjhB,IAAI2G,EAAG5G,IACrCkhB,EAAEzd,IAAImD,EAAG5G,EAAG0P,EAAIwR,EAAEjhB,IAAI2G,EAAG5G,GAAK8G,EAAIkb,GAGpC,IAAKjiB,EAAI,EAAGA,GAAK6G,EAAG7G,IAClBiiB,EAAId,EAAEjhB,IAAIF,EAAG6G,EAAI,GACjBsa,EAAEzd,IAAI1D,EAAG6G,EAAI,EAAG8I,EAAIsS,EAAIlb,EAAIoa,EAAEjhB,IAAIF,EAAG6G,IACrCsa,EAAEzd,IAAI1D,EAAG6G,EAAG8I,EAAIwR,EAAEjhB,IAAIF,EAAG6G,GAAKE,EAAIkb,GAGpC,IAAKjiB,EAnFD,EAmFUA,GAAKqhB,EAAMrhB,IACvBiiB,EAAIhF,EAAE/c,IAAIF,EAAG6G,EAAI,GACjBoW,EAAEvZ,IAAI1D,EAAG6G,EAAI,EAAG8I,EAAIsS,EAAIlb,EAAIkW,EAAE/c,IAAIF,EAAG6G,IACrCoW,EAAEvZ,IAAI1D,EAAG6G,EAAG8I,EAAIsN,EAAE/c,IAAIF,EAAG6G,GAAKE,EAAIkb,EAEtC,MACEvB,EAAE7Z,EAAI,GAAK6G,EAAI3G,EACf2Z,EAAE7Z,GAAK6G,EAAI3G,EACX2D,EAAE7D,EAAI,GAAKob,EACXvX,EAAE7D,IAAMob,EAGVpb,GAAQ,EACRqb,EAAO,CACT,KAAO,CASL,GARAxU,EAAIyT,EAAEjhB,IAAI2G,EAAGA,GACb4G,EAAI,EACJgU,EAAI,EACA7c,EAAIiC,IACN4G,EAAI0T,EAAEjhB,IAAI2G,EAAI,EAAGA,EAAI,GACrB4a,EAAIN,EAAEjhB,IAAI2G,EAAGA,EAAI,GAAKsa,EAAEjhB,IAAI2G,EAAI,EAAGA,IAGxB,KAATqb,EAAa,CAEf,IADAF,GAAWtU,EACN1N,EA5GD,EA4GUA,GAAK6G,EAAG7G,IACpBmhB,EAAEzd,IAAI1D,EAAGA,EAAGmhB,EAAEjhB,IAAIF,EAAGA,GAAK0N,GAE5BpD,EAAI3K,KAAKqX,IAAImK,EAAEjhB,IAAI2G,EAAGA,EAAI,IAAMlH,KAAKqX,IAAImK,EAAEjhB,IAAI2G,EAAI,EAAGA,EAAI,IAE1D6G,EAAID,EAAI,IAAOnD,EACfmX,GAAK,MAASnX,EAAIA,CACpB,CAEA,GAAa,KAAT4X,IACF5X,GAAKmD,EAAIC,GAAK,EACdpD,EAAIA,EAAIA,EAAImX,EACRnX,EAAI,GAAG,CAMT,IALAA,EAAI3K,KAAKiK,KAAKU,GACVmD,EAAIC,IACNpD,GAAKA,GAEPA,EAAIoD,EAAI+T,IAAMhU,EAAIC,GAAK,EAAIpD,GACtBtK,EA9HH,EA8HYA,GAAK6G,EAAG7G,IACpBmhB,EAAEzd,IAAI1D,EAAGA,EAAGmhB,EAAEjhB,IAAIF,EAAGA,GAAKsK,GAE5B0X,GAAW1X,EAEXoD,EAAID,EAAIgU,EAAI,IACd,CAMF,IAHAS,GAAc,EAEdtb,EAAIC,EAAI,EACDD,GAAKhC,IACVqd,EAAId,EAAEjhB,IAAI0G,EAAGA,GACbsH,EAAIR,EAAIuU,EACR3X,EAAImD,EAAIwU,EACRlb,GAAKmH,EAAI5D,EAAImX,GAAKN,EAAEjhB,IAAI0G,EAAI,EAAGA,GAAKua,EAAEjhB,IAAI0G,EAAGA,EAAI,GACjD+I,EAAIwR,EAAEjhB,IAAI0G,EAAI,EAAGA,EAAI,GAAKqb,EAAI/T,EAAI5D,EAClC4D,EAAIiT,EAAEjhB,IAAI0G,EAAI,EAAGA,EAAI,GACrB0D,EAAI3K,KAAKqX,IAAIjQ,GAAKpH,KAAKqX,IAAIrH,GAAKhQ,KAAKqX,IAAI9I,GACzCnH,GAAQuD,EACRqF,GAAQrF,EACR4D,GAAQ5D,EACJ1D,IAAMhC,MAIRjF,KAAKqX,IAAImK,EAAEjhB,IAAI0G,EAAGA,EAAI,KAAOjH,KAAKqX,IAAIrH,GAAKhQ,KAAKqX,IAAI9I,IACpDsP,GACG7d,KAAKqX,IAAIjQ,IACPpH,KAAKqX,IAAImK,EAAEjhB,IAAI0G,EAAI,EAAGA,EAAI,IACzBjH,KAAKqX,IAAIiL,GACTtiB,KAAKqX,IAAImK,EAAEjhB,IAAI0G,EAAI,EAAGA,EAAI,QAIlCA,IAGF,IAAK5G,EAAI4G,EAAI,EAAG5G,GAAK6G,EAAG7G,IACtBmhB,EAAEzd,IAAI1D,EAAGA,EAAI,EAAG,GACZA,EAAI4G,EAAI,GACVua,EAAEzd,IAAI1D,EAAGA,EAAI,EAAG,GAIpB,IAAKmG,EAAIS,EAAGT,GAAKU,EAAI,IACnBib,EAAU3b,IAAMU,EAAI,EAChBV,IAAMS,IACRG,EAAIoa,EAAEjhB,IAAIiG,EAAGA,EAAI,GACjBwJ,EAAIwR,EAAEjhB,IAAIiG,EAAI,EAAGA,EAAI,GACrB+H,EAAI4T,EAAUX,EAAEjhB,IAAIiG,EAAI,EAAGA,EAAI,GAAK,EACpCuH,EAAI/N,KAAKqX,IAAIjQ,GAAKpH,KAAKqX,IAAIrH,GAAKhQ,KAAKqX,IAAI9I,GAC/B,IAANR,IACF3G,GAAQ2G,EACRiC,GAAQjC,EACRQ,GAAQR,IAIF,IAANA,GAdkBvH,IAuBtB,GALAmE,EAAI3K,KAAKiK,KAAK7C,EAAIA,EAAI4I,EAAIA,EAAIzB,EAAIA,GAC9BnH,EAAI,IACNuD,GAAKA,GAGG,IAANA,EAAS,CAcX,IAbInE,IAAMS,EACRua,EAAEzd,IAAIyC,EAAGA,EAAI,GAAImE,EAAIoD,GACZ9I,IAAMgC,GACfua,EAAEzd,IAAIyC,EAAGA,EAAI,GAAIgb,EAAEjhB,IAAIiG,EAAGA,EAAI,IAGhCY,GAAQuD,EACRoD,EAAI3G,EAAIuD,EACRmD,EAAIkC,EAAIrF,EACR2X,EAAI/T,EAAI5D,EACRqF,GAAQ5I,EACRmH,GAAQnH,EAEH9G,EAAIkG,EAAGlG,EAAIuhB,EAAIvhB,IAClB8G,EAAIoa,EAAEjhB,IAAIiG,EAAGlG,GAAK0P,EAAIwR,EAAEjhB,IAAIiG,EAAI,EAAGlG,GAC/B6hB,IACF/a,GAAQmH,EAAIiT,EAAEjhB,IAAIiG,EAAI,EAAGlG,GACzBkhB,EAAEzd,IAAIyC,EAAI,EAAGlG,EAAGkhB,EAAEjhB,IAAIiG,EAAI,EAAGlG,GAAK8G,EAAIkb,IAGxCd,EAAEzd,IAAIyC,EAAGlG,EAAGkhB,EAAEjhB,IAAIiG,EAAGlG,GAAK8G,EAAI2G,GAC9ByT,EAAEzd,IAAIyC,EAAI,EAAGlG,EAAGkhB,EAAEjhB,IAAIiG,EAAI,EAAGlG,GAAK8G,EAAI0G,GAGxC,IAAKzN,EAAI,EAAGA,GAAKL,KAAKC,IAAIiH,EAAGV,EAAI,GAAInG,IACnC+G,EAAI2G,EAAIyT,EAAEjhB,IAAIF,EAAGmG,GAAKsH,EAAI0T,EAAEjhB,IAAIF,EAAGmG,EAAI,GACnC2b,IACF/a,GAAQkb,EAAId,EAAEjhB,IAAIF,EAAGmG,EAAI,GACzBgb,EAAEzd,IAAI1D,EAAGmG,EAAI,EAAGgb,EAAEjhB,IAAIF,EAAGmG,EAAI,GAAKY,EAAImH,IAGxCiT,EAAEzd,IAAI1D,EAAGmG,EAAGgb,EAAEjhB,IAAIF,EAAGmG,GAAKY,GAC1Boa,EAAEzd,IAAI1D,EAAGmG,EAAI,EAAGgb,EAAEjhB,IAAIF,EAAGmG,EAAI,GAAKY,EAAI4I,GAGxC,IAAK3P,EAvOH,EAuOYA,GAAKqhB,EAAMrhB,IACvB+G,EAAI2G,EAAIuP,EAAE/c,IAAIF,EAAGmG,GAAKsH,EAAIwP,EAAE/c,IAAIF,EAAGmG,EAAI,GACnC2b,IACF/a,GAAQkb,EAAIhF,EAAE/c,IAAIF,EAAGmG,EAAI,GACzB8W,EAAEvZ,IAAI1D,EAAGmG,EAAI,EAAG8W,EAAE/c,IAAIF,EAAGmG,EAAI,GAAKY,EAAImH,IAGxC+O,EAAEvZ,IAAI1D,EAAGmG,EAAG8W,EAAE/c,IAAIF,EAAGmG,GAAKY,GAC1BkW,EAAEvZ,IAAI1D,EAAGmG,EAAI,EAAG8W,EAAE/c,IAAIF,EAAGmG,EAAI,GAAKY,EAAI4I,EAE1C,CAEJ,CACF,CAEA,GAAa,IAATjG,EAAJ,CAIA,IAAK7C,EAAI2a,EAAK,EAAG3a,GAAK,EAAGA,IAIvB,GAHAE,EAAI2Z,EAAE7Z,GACN8I,EAAIjF,EAAE7D,GAEI,IAAN8I,EAGF,IAFA/K,EAAIiC,EACJsa,EAAEzd,IAAImD,EAAGA,EAAG,GACP7G,EAAI6G,EAAI,EAAG7G,GAAK,EAAGA,IAAK,CAG3B,IAFAyhB,EAAIN,EAAEjhB,IAAIF,EAAGA,GAAK+G,EAClBmH,EAAI,EACCjO,EAAI2E,EAAG3E,GAAK4G,EAAG5G,IAClBiO,GAAQiT,EAAEjhB,IAAIF,EAAGC,GAAKkhB,EAAEjhB,IAAID,EAAG4G,GAGjC,GAAI6D,EAAE1K,GAAK,EACTiiB,EAAIR,EACJnX,EAAI4D,OAmBJ,GAjBAtJ,EAAI5E,EACS,IAAT0K,EAAE1K,GACJmhB,EAAEzd,IAAI1D,EAAG6G,EAAS,IAAN4a,GAAWvT,EAAIuT,GAAKvT,GAAKsP,EAAM9T,KAE3CgE,EAAIyT,EAAEjhB,IAAIF,EAAGA,EAAI,GACjByN,EAAI0T,EAAEjhB,IAAIF,EAAI,EAAGA,GACjB2P,GAAK+Q,EAAE1gB,GAAK+G,IAAM2Z,EAAE1gB,GAAK+G,GAAK2D,EAAE1K,GAAK0K,EAAE1K,GACvC6a,GAAKnN,EAAIpD,EAAI2X,EAAI/T,GAAKyB,EACtBwR,EAAEzd,IAAI1D,EAAG6G,EAAGgU,GACZsG,EAAEzd,IACA1D,EAAI,EACJ6G,EACAlH,KAAKqX,IAAItJ,GAAK/N,KAAKqX,IAAIiL,KAAO/T,EAAIuT,EAAI5G,GAAKnN,IAAMpD,EAAImD,EAAIoN,GAAKoH,IAIlEpH,EAAIlb,KAAKqX,IAAImK,EAAEjhB,IAAIF,EAAG6G,IAClB2W,EAAM3C,EAAIA,EAAI,EAChB,IAAK5a,EAAID,EAAGC,GAAK4G,EAAG5G,IAClBkhB,EAAEzd,IAAIzD,EAAG4G,EAAGsa,EAAEjhB,IAAID,EAAG4G,GAAKgU,EAIlC,MACK,GAAIlL,EAAI,EAcb,IAbA/K,EAAIiC,EAAI,EAEJlH,KAAKqX,IAAImK,EAAEjhB,IAAI2G,EAAGA,EAAI,IAAMlH,KAAKqX,IAAImK,EAAEjhB,IAAI2G,EAAI,EAAGA,KACpDsa,EAAEzd,IAAImD,EAAI,EAAGA,EAAI,EAAG8I,EAAIwR,EAAEjhB,IAAI2G,EAAGA,EAAI,IACrCsa,EAAEzd,IAAImD,EAAI,EAAGA,IAAKsa,EAAEjhB,IAAI2G,EAAGA,GAAKE,GAAKoa,EAAEjhB,IAAI2G,EAAGA,EAAI,MAElDkb,EAAUI,EAAK,GAAIhB,EAAEjhB,IAAI2G,EAAI,EAAGA,GAAIsa,EAAEjhB,IAAI2G,EAAI,EAAGA,EAAI,GAAKE,EAAG4I,GAC7DwR,EAAEzd,IAAImD,EAAI,EAAGA,EAAI,EAAGkb,EAAQ,IAC5BZ,EAAEzd,IAAImD,EAAI,EAAGA,EAAGkb,EAAQ,KAG1BZ,EAAEzd,IAAImD,EAAGA,EAAI,EAAG,GAChBsa,EAAEzd,IAAImD,EAAGA,EAAG,GACP7G,EAAI6G,EAAI,EAAG7G,GAAK,EAAGA,IAAK,CAG3B,IAFA0hB,EAAK,EACLC,EAAK,EACA1hB,EAAI2E,EAAG3E,GAAK4G,EAAG5G,IAClByhB,GAAUP,EAAEjhB,IAAIF,EAAGC,GAAKkhB,EAAEjhB,IAAID,EAAG4G,EAAI,GACrC8a,GAAUR,EAAEjhB,IAAIF,EAAGC,GAAKkhB,EAAEjhB,IAAID,EAAG4G,GAKnC,GAFA4a,EAAIN,EAAEjhB,IAAIF,EAAGA,GAAK+G,EAEd2D,EAAE1K,GAAK,EACTiiB,EAAIR,EACJvT,EAAIwT,EACJpX,EAAIqX,OAsDJ,GApDA/c,EAAI5E,EACS,IAAT0K,EAAE1K,IACJ+hB,EAAUI,GAAMT,GAAKC,EAAIF,EAAG9R,GAC5BwR,EAAEzd,IAAI1D,EAAG6G,EAAI,EAAGkb,EAAQ,IACxBZ,EAAEzd,IAAI1D,EAAG6G,EAAGkb,EAAQ,MAEpBrU,EAAIyT,EAAEjhB,IAAIF,EAAGA,EAAI,GACjByN,EAAI0T,EAAEjhB,IAAIF,EAAI,EAAGA,GACjB4hB,GAAMlB,EAAE1gB,GAAK+G,IAAM2Z,EAAE1gB,GAAK+G,GAAK2D,EAAE1K,GAAK0K,EAAE1K,GAAK2P,EAAIA,EACjDkS,EAAkB,GAAZnB,EAAE1gB,GAAK+G,GAAS4I,EACX,IAAPiS,GAAmB,IAAPC,IACdD,EACEpE,EACA9T,GACC/J,KAAKqX,IAAIyK,GACR9hB,KAAKqX,IAAIrH,GACThQ,KAAKqX,IAAItJ,GACT/N,KAAKqX,IAAIvJ,GACT9N,KAAKqX,IAAIiL,KAEfF,EAAUI,EACRzU,EAAIQ,EAAI+T,EAAIP,EAAK/R,EAAIgS,EACrBjU,EAAIpD,EAAI2X,EAAIN,EAAKhS,EAAI+R,EACrBE,EACAC,GAEFV,EAAEzd,IAAI1D,EAAG6G,EAAI,EAAGkb,EAAQ,IACxBZ,EAAEzd,IAAI1D,EAAG6G,EAAGkb,EAAQ,IAChBpiB,KAAKqX,IAAItJ,GAAK/N,KAAKqX,IAAIiL,GAAKtiB,KAAKqX,IAAIrH,IACvCwR,EAAEzd,IACA1D,EAAI,EACJ6G,EAAI,IACF6a,EAAKD,EAAIN,EAAEjhB,IAAIF,EAAG6G,EAAI,GAAK8I,EAAIwR,EAAEjhB,IAAIF,EAAG6G,IAAM6G,GAElDyT,EAAEzd,IACA1D,EAAI,EACJ6G,IACE8a,EAAKF,EAAIN,EAAEjhB,IAAIF,EAAG6G,GAAK8I,EAAIwR,EAAEjhB,IAAIF,EAAG6G,EAAI,IAAM6G,KAGlDqU,EAAUI,GACPjU,EAAIT,EAAI0T,EAAEjhB,IAAIF,EAAG6G,EAAI,IACrByD,EAAImD,EAAI0T,EAAEjhB,IAAIF,EAAG6G,GAClBob,EACAtS,GAEFwR,EAAEzd,IAAI1D,EAAI,EAAG6G,EAAI,EAAGkb,EAAQ,IAC5BZ,EAAEzd,IAAI1D,EAAI,EAAG6G,EAAGkb,EAAQ,MAI5BlH,EAAIlb,KAAKsB,IAAItB,KAAKqX,IAAImK,EAAEjhB,IAAIF,EAAG6G,EAAI,IAAKlH,KAAKqX,IAAImK,EAAEjhB,IAAIF,EAAG6G,KACtD2W,EAAM3C,EAAIA,EAAI,EAChB,IAAK5a,EAAID,EAAGC,GAAK4G,EAAG5G,IAClBkhB,EAAEzd,IAAIzD,EAAG4G,EAAI,EAAGsa,EAAEjhB,IAAID,EAAG4G,EAAI,GAAKgU,GAClCsG,EAAEzd,IAAIzD,EAAG4G,EAAGsa,EAAEjhB,IAAID,EAAG4G,GAAKgU,EAIlC,CAIJ,IAAK7a,EAAI,EAAGA,EAAIwhB,EAAIxhB,IAClB,GAAIA,EAjYI,GAiYOA,EAAIqhB,EACjB,IAAKphB,EAAID,EAAGC,EAAIuhB,EAAIvhB,IAClBgd,EAAEvZ,IAAI1D,EAAGC,EAAGkhB,EAAEjhB,IAAIF,EAAGC,IAK3B,IAAKA,EAAIuhB,EAAK,EAAGvhB,GAxYP,EAwYiBA,IACzB,IAAKD,EAzYG,EAyYMA,GAAKqhB,EAAMrhB,IAAK,CAE5B,IADAiiB,EAAI,EACC9b,EA3YC,EA2YQA,GAAKxG,KAAKC,IAAIK,EAAGohB,GAAOlb,IACpC8b,GAAQhF,EAAE/c,IAAIF,EAAGmG,GAAKgb,EAAEjhB,IAAIiG,EAAGlG,GAEjCgd,EAAEvZ,IAAI1D,EAAGC,EAAGgiB,EACd,CAvJF,CAyJF,CAluBMG,CAAKvb,EAAG6D,EAAGgW,EAAGzD,EAAGkE,EACnB,CAEA1c,KAAKoC,EAAIA,EACTpC,KAAKiG,EAAIA,EACTjG,KAAKic,EAAIA,EACTjc,KAAKwY,EAAIA,CACX,CAEA,mBAAIoF,GACF,OAAOzZ,MAAMgI,KAAKnM,KAAKic,EACzB,CAEA,wBAAI4B,GACF,OAAO1Z,MAAMgI,KAAKnM,KAAKiG,EACzB,CAEA,qBAAI6X,GACF,OAAO9d,KAAKwY,CACd,CAEA,kBAAI2C,GACF,IAII5f,EAAGC,EAJH4G,EAAIpC,KAAKoC,EACT6D,EAAIjG,KAAKiG,EACTgW,EAAIjc,KAAKic,EACTnF,EAAI,IAAIhY,EAAOsD,EAAGA,GAEtB,IAAK7G,EAAI,EAAGA,EAAI6G,EAAG7G,IAAK,CACtB,IAAKC,EAAI,EAAGA,EAAI4G,EAAG5G,IACjBsb,EAAE7X,IAAI1D,EAAGC,EAAG,GAEdsb,EAAE7X,IAAI1D,EAAGA,EAAG0gB,EAAE1gB,IACV0K,EAAE1K,GAAK,EACTub,EAAE7X,IAAI1D,EAAGA,EAAI,EAAG0K,EAAE1K,IACT0K,EAAE1K,GAAK,GAChBub,EAAE7X,IAAI1D,EAAGA,EAAI,EAAG0K,EAAE1K,GAEtB,CACA,OAAOub,CACT,EA6rBF,SAAS4G,EAAKK,EAAIC,EAAIC,EAAIC,GACxB,IAAIzU,EAAGwS,EACP,OAAI/gB,KAAKqX,IAAI0L,GAAM/iB,KAAKqX,IAAI2L,IAC1BzU,EAAIyU,EAAKD,EACThC,EAAIgC,EAAKxU,EAAIyU,EACN,EAAEH,EAAKtU,EAAIuU,GAAM/B,GAAI+B,EAAKvU,EAAIsU,GAAM9B,KAE3CxS,EAAIwU,EAAKC,EACTjC,EAAIiC,EAAKzU,EAAIwU,EACN,EAAExU,EAAIsU,EAAKC,GAAM/B,GAAIxS,EAAIuU,EAAKD,GAAM9B,GAE/C,CAEA,MAAMkC,EACJ,WAAAtjB,CAAYsD,GAEV,KADAA,EAAQ+X,EAAgB5V,YAAYnC,IACzBiD,cACT,MAAM,IAAI7C,MAAM,2BAGlB,IAIIhD,EAAGC,EAAGkG,EAJNqI,EAAI5L,EACJigB,EAAYrU,EAAEhP,KACdoF,EAAI,IAAIrB,EAAOsf,EAAWA,GAC1BC,GAAmB,EAGvB,IAAK7iB,EAAI,EAAGA,EAAI4iB,EAAW5iB,IAAK,CAC9B,IAAIygB,EAAI,EACR,IAAKva,EAAI,EAAGA,EAAIlG,EAAGkG,IAAK,CACtB,IAAImE,EAAI,EACR,IAAKtK,EAAI,EAAGA,EAAImG,EAAGnG,IACjBsK,GAAK1F,EAAE1E,IAAIiG,EAAGnG,GAAK4E,EAAE1E,IAAID,EAAGD,GAE9BsK,GAAKkE,EAAEtO,IAAID,EAAGkG,GAAKmE,GAAK1F,EAAE1E,IAAIiG,EAAGA,GACjCvB,EAAElB,IAAIzD,EAAGkG,EAAGmE,GACZoW,GAAQpW,EAAIA,CACd,CAMA,IAJAoW,EAAIlS,EAAEtO,IAAID,EAAGA,GAAKygB,EAElBoC,IAAqBpC,EAAI,EACzB9b,EAAElB,IAAIzD,EAAGA,EAAGN,KAAKiK,KAAKjK,KAAKsB,IAAIyf,EAAG,KAC7Bva,EAAIlG,EAAI,EAAGkG,EAAI0c,EAAW1c,IAC7BvB,EAAElB,IAAIzD,EAAGkG,EAAG,EAEhB,CAEA1B,KAAKse,EAAIne,EACTH,KAAKqe,iBAAmBA,CAC1B,CAEA,kBAAAE,GACE,OAAOve,KAAKqe,gBACd,CAEA,KAAAzH,CAAMzY,GACJA,EAAQ+X,EAAgB5V,YAAYnC,GAEpC,IAAIgC,EAAIH,KAAKse,EACTF,EAAYje,EAAEpF,KAElB,GAAIoD,EAAMpD,OAASqjB,EACjB,MAAM,IAAI7f,MAAM,kCAElB,IAAkC,IAA9ByB,KAAKue,qBACP,MAAM,IAAIhgB,MAAM,mCAGlB,IAEIhD,EAAGC,EAAGkG,EAFNmV,EAAQ1Y,EAAMnD,QACdwjB,EAAIrgB,EAAMyD,QAGd,IAAKF,EAAI,EAAGA,EAAI0c,EAAW1c,IACzB,IAAKlG,EAAI,EAAGA,EAAIqb,EAAOrb,IAAK,CAC1B,IAAKD,EAAI,EAAGA,EAAImG,EAAGnG,IACjBijB,EAAEvf,IAAIyC,EAAGlG,EAAGgjB,EAAE/iB,IAAIiG,EAAGlG,GAAKgjB,EAAE/iB,IAAIF,EAAGC,GAAK2E,EAAE1E,IAAIiG,EAAGnG,IAEnDijB,EAAEvf,IAAIyC,EAAGlG,EAAGgjB,EAAE/iB,IAAIiG,EAAGlG,GAAK2E,EAAE1E,IAAIiG,EAAGA,GACrC,CAGF,IAAKA,EAAI0c,EAAY,EAAG1c,GAAK,EAAGA,IAC9B,IAAKlG,EAAI,EAAGA,EAAIqb,EAAOrb,IAAK,CAC1B,IAAKD,EAAImG,EAAI,EAAGnG,EAAI6iB,EAAW7iB,IAC7BijB,EAAEvf,IAAIyC,EAAGlG,EAAGgjB,EAAE/iB,IAAIiG,EAAGlG,GAAKgjB,EAAE/iB,IAAIF,EAAGC,GAAK2E,EAAE1E,IAAIF,EAAGmG,IAEnD8c,EAAEvf,IAAIyC,EAAGlG,EAAGgjB,EAAE/iB,IAAIiG,EAAGlG,GAAK2E,EAAE1E,IAAIiG,EAAGA,GACrC,CAGF,OAAO8c,CACT,CAEA,yBAAIxH,GACF,OAAOhX,KAAKse,CACd,EAGF,MAAMG,EACJ,WAAA5jB,CAAYic,EAAGtc,EAAU,CAAC,GACxBsc,EAAIZ,EAAgB5V,YAAYwW,GAChC,IAAI,EAAEkD,GAAMxf,EACZ,MAAM,YACJkkB,GAAc,EAAK,cACnBC,EAAgB,IAAI,oBACpBC,EAAsB,OACpBpkB,EAEJ,IAAIqkB,EACJ,GAAI7E,EAAG,CAML,GAJEA,EADE/f,EAAWA,WAAW+f,IAAsB,iBAATA,EAAE,GACnClb,EAAOK,aAAa6a,GAEpB9D,EAAgB5V,YAAY0Z,GAE9BA,EAAEjf,OAAS+b,EAAE/b,KACf,MAAM,IAAIwD,MAAM,8CAElBsgB,EAAI7E,EAAE9W,gBAAgB,EACxB,MACE2b,EAAI/H,EAAE5T,gBAAgB,GAGxB,IACIkT,EAAGlL,EAAG8R,EAAG8B,EADTC,EAAO,EAGX,IACE,IAAIC,EAAU,EACdA,EAAUL,GAAiBI,EAAOH,EAClCI,IAEAhC,EAAIlG,EAAExL,YAAY7F,KAAKoZ,GAAGxO,IAAIwO,EAAEvT,YAAY7F,KAAKoZ,GAAGpjB,IAAI,EAAG,IAC3DuhB,EAAIA,EAAE3M,IAAI2M,EAAE/X,QAEZmR,EAAIU,EAAErR,KAAKuX,GAAG3M,IAAI2M,EAAE1R,YAAY7F,KAAKuX,GAAGvhB,IAAI,EAAG,IAE3CujB,EAAU,IACZD,EAAO3I,EAAExU,QAAQ0I,IAAIwU,GAAM/K,IAAI,GAAGzO,OAEpCwZ,EAAO1I,EAAExU,QAELoY,GACF9O,EAAI8O,EAAE1O,YAAY7F,KAAK2Q,GAAG/F,IAAI+F,EAAE9K,YAAY7F,KAAK2Q,GAAG3a,IAAI,EAAG,IAC3DyP,EAAIA,EAAEmF,IAAInF,EAAEjG,QAEZ4Z,EAAI7E,EAAEvU,KAAKyF,GAAGmF,IAAInF,EAAEI,YAAY7F,KAAKyF,GAAGzP,IAAI,EAAG,KAE/CojB,EAAIzI,EAIR,GAAI4D,EAAG,CACL,IAAI1X,EAAIwU,EAAExL,YAAY7F,KAAK2Q,GAAG/F,IAAI+F,EAAE9K,YAAY7F,KAAK2Q,GAAG3a,IAAI,EAAG,IAC/D6G,EAAIA,EAAE+N,IAAI/N,EAAE2C,QACZ,IAAIga,EAAYnI,EAAElV,QAAQ0I,IAAI8L,EAAExU,QAAQ6D,KAAKnD,EAAEgJ,cAC3C4T,EAAWL,EAAEvT,YAAY7F,KAAK2Q,GAAG/F,IAAI+F,EAAE9K,YAAY7F,KAAK2Q,GAAG3a,IAAI,EAAG,IAClE0jB,EAAYnF,EAAEpY,QAAQ0I,IACxB8L,EAAExU,QAAQc,KAAKwc,EAASzjB,IAAI,EAAG,IAAIgK,KAAKyF,EAAEI,cAG5CtL,KAAKoW,EAAIA,EACTpW,KAAKsC,EAAIA,EAAEgJ,YACXtL,KAAKgd,EAAIA,EAAE1R,YACXtL,KAAKkL,EAAIA,EACTlL,KAAK6e,EAAIA,EACT7e,KAAK6F,EAAIuQ,EAAE9K,YAAY7F,KAAK2Q,GAC5BpW,KAAKif,UAAYA,EACjBjf,KAAKmf,UAAYA,EACjBnf,KAAKof,MAAQF,CACf,MACElf,KAAKgd,EAAIA,EAAE1R,YACXtL,KAAK6F,EAAIuQ,EAAE9K,YAAY7F,KAAK2Q,GAAGjR,OAE7BnF,KAAKoW,EADHsI,EACOtI,EAAExU,QAAQyO,IAAIrQ,KAAK6F,EAAEpK,IAAI,EAAG,IAE5B2a,EAEXpW,KAAKif,UAAYnI,EAAExM,IAAI8L,EAAE3Q,KAAKuX,EAAE1R,aAEpC,EAGF+T,EAAQ,GAAiB7gB,EACzB6gB,EAAQ,GAAMlB,EACdkB,EAAQ,GAAwBlB,EAChCkB,EAAQ,GAAiB5J,EACzB4J,EAAQ,GAAMtD,EACdsD,EAAQ,GAA0BtD,EAClCsD,EAAQ3I,GAAKP,EACbkJ,EAAQ,GAAkBlJ,EAC1BkJ,EAAQ,GAASvgB,EACjBugB,EAAQ,GAxsER,cAAwCvJ,EACtC,WAAAjb,CAAYN,EAAQmD,GAClBD,EAAmBlD,EAAQmD,GAC3BqR,MAAMxU,EAAQA,EAAOQ,KAAM2C,EAAc5B,QACzCkE,KAAKtC,cAAgBA,CACvB,CAEA,GAAAuB,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAI+M,EAAUhM,KAAKtC,cAAcuO,GAAc9N,GACpD6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IAAIuQ,EAAUhM,KAAKtC,cAAcuO,GACtD,GA2rEFoT,EAAQ,GA1tER,cAA+BvJ,EAC7B,WAAAjb,CAAYN,EAAQyE,GAClB/B,EAAiB1C,EAAQyE,GACzB+P,MAAMxU,EAAQA,EAAOQ,KAAM,GAC3BiF,KAAKhB,OAASA,CAChB,CAEA,GAAAC,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAI+M,EAAUhM,KAAKhB,OAAQb,GAChC6B,IACT,CAEA,GAAAvE,CAAIuQ,GACF,OAAOhM,KAAKzF,OAAOkB,IAAIuQ,EAAUhM,KAAKhB,OACxC,GA6sEFqgB,EAAQ,GAzrER,cAAmCvJ,EACjC,WAAAjb,CAAYN,GACVwU,MAAMxU,EAAQA,EAAOQ,KAAMR,EAAOS,QACpC,CAEA,GAAAiE,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAI+M,EAAUhM,KAAKhF,QAAUiR,EAAc,EAAG9N,GACnD6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IAAIuQ,EAAUhM,KAAKhF,QAAUiR,EAAc,EAChE,GA8qEFoT,EAAQ,GA3qER,cAAgCvJ,EAC9B,WAAAjb,CAAYN,GACVwU,MAAMxU,EAAQA,EAAOQ,KAAMR,EAAOS,QACpC,CAEA,GAAAiE,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAIe,KAAKjF,KAAOiR,EAAW,EAAGC,EAAa9N,GAChD6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IAAIuE,KAAKjF,KAAOiR,EAAW,EAAGC,EACnD,GAgqEFoT,EAAQ,GA5oER,cAAqCvJ,EACnC,WAAAjb,CAAYN,EAAQgD,GAClBD,EAAgB/C,EAAQgD,GACxBwR,MAAMxU,EAAQgD,EAAWzB,OAAQvB,EAAOS,SACxCgF,KAAKzC,WAAaA,CACpB,CAEA,GAAA0B,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAIe,KAAKzC,WAAWyO,GAAWC,EAAa9N,GACjD6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IAAIuE,KAAKzC,WAAWyO,GAAWC,EACpD,GA+nEFoT,EAAQ,GA9pER,cAA4BvJ,EAC1B,WAAAjb,CAAYN,EAAQwE,GAClBlC,EAActC,EAAQwE,GACtBgQ,MAAMxU,EAAQ,EAAGA,EAAOS,SACxBgF,KAAKjB,IAAMA,CACb,CAEA,GAAAE,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAIe,KAAKjB,IAAKkN,EAAa9N,GAChC6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IAAIuE,KAAKjB,IAAKkN,EACnC,GAipEFoT,EAAQ,GAAsBtJ,EAC9BsJ,EAAQ,GApmER,cAA4BvJ,EAC1B,WAAAjb,CAAYN,EAAQqD,EAAUC,EAAQC,EAAaC,GACjDJ,EAAWpD,EAAQqD,EAAUC,EAAQC,EAAaC,GAClDgR,MAAMxU,EAAQsD,EAASD,EAAW,EAAGG,EAAYD,EAAc,GAC/DkC,KAAKpC,SAAWA,EAChBoC,KAAKlC,YAAcA,CACrB,CAEA,GAAAmB,CAAI+M,EAAUC,EAAa9N,GAMzB,OALA6B,KAAKzF,OAAO0E,IACVe,KAAKpC,SAAWoO,EAChBhM,KAAKlC,YAAcmO,EACnB9N,GAEK6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IACjBuE,KAAKpC,SAAWoO,EAChBhM,KAAKlC,YAAcmO,EAEvB,GA+kEFoT,EAAQ,GA5kER,cAAkCvJ,EAChC,WAAAjb,CAAYN,GACVwU,MAAMxU,EAAQA,EAAOS,QAAST,EAAOQ,KACvC,CAEA,GAAAkE,CAAI+M,EAAUC,EAAa9N,GAEzB,OADA6B,KAAKzF,OAAO0E,IAAIgN,EAAaD,EAAU7N,GAChC6B,IACT,CAEA,GAAAvE,CAAIuQ,EAAUC,GACZ,OAAOjM,KAAKzF,OAAOkB,IAAIwQ,EAAaD,EACtC,GAikEFqT,EAAQ,GAASZ,EACjBY,EAAQ,GAASZ,EACjBY,EAAQ7H,GAAKJ,EACbiI,EAAQ,GAAkBjI,EAC1BiI,EAAQ,GAAMzH,EACdyH,EAAQ,GAA6BzH,EACrCyH,EAAQ,EAAkBjL,EAC1BiL,EAAQ,GAAkBrJ,EAC1BqJ,EAAQ,GAAkBnJ,EAC1BmJ,EAAQ,GAnhCR,SAAqBC,EAASC,EAAUD,EAAS9kB,EAAU,CAAC,GAC1D8kB,EAAU,IAAIxgB,EAAOwgB,GACrB,IAAIE,GAAU,EAYd,GAVqB,iBAAZD,GACNzgB,EAAOyB,SAASgf,IAChBtlB,EAAWA,WAAWslB,GAMvBA,EAAU,IAAIzgB,EAAOygB,IAJrB/kB,EAAU+kB,EACVA,EAAUD,EACVE,GAAU,GAIRF,EAAQvkB,OAASwkB,EAAQxkB,KAC3B,MAAM,IAAIyC,UAAU,mDAGtB,MAAM,OAAE8P,GAAS,EAAI,MAAEI,GAAQ,GAASlT,EACpC8S,IACFgS,EAAQhS,OAAO,UACVkS,GACHD,EAAQjS,OAAO,WAGfI,IACF4R,EAAQ5R,MAAM,UACT8R,GACHD,EAAQ7R,MAAM,WAIlB,MAAM+R,EAAMH,EAAQjS,kBAAkB,SAAU,CAAEN,UAAU,IACtD2S,EAAMF,EACRC,EACAF,EAAQlS,kBAAkB,SAAU,CAAEN,UAAU,IAE9C4S,EAAOL,EAAQhU,YAAY7F,KAAK8Z,GACtC,IAAK,IAAIhkB,EAAI,EAAGA,EAAIokB,EAAK5kB,KAAMQ,IAC7B,IAAK,IAAIC,EAAI,EAAGA,EAAImkB,EAAK3kB,QAASQ,IAChCmkB,EAAK1gB,IACH1D,EACAC,EACAmkB,EAAKlkB,IAAIF,EAAGC,IAAM,GAAKikB,EAAIlkB,GAAKmkB,EAAIlkB,MAAQ,GAAK8jB,EAAQvkB,KAAO,KAItE,OAAO4kB,CACT,EAo+BAN,EAAQ,GArjCR,SAAoBC,EAASC,EAAUD,EAAS9kB,EAAU,CAAC,GACzD8kB,EAAU,IAAIxgB,EAAOwgB,GACrB,IAAIE,GAAU,EAYd,GAVqB,iBAAZD,GACNzgB,EAAOyB,SAASgf,IAChBtlB,EAAWA,WAAWslB,GAMvBA,EAAU,IAAIzgB,EAAOygB,IAJrB/kB,EAAU+kB,EACVA,EAAUD,EACVE,GAAU,GAIRF,EAAQvkB,OAASwkB,EAAQxkB,KAC3B,MAAM,IAAIyC,UAAU,mDAEtB,MAAM,OAAE8P,GAAS,GAAS9S,EACtB8S,IACFgS,EAAUA,EAAQhS,OAAO,UACpBkS,IACHD,EAAUA,EAAQjS,OAAO,YAG7B,MAAMsS,EAAMN,EAAQhU,YAAY7F,KAAK8Z,GACrC,IAAK,IAAIhkB,EAAI,EAAGA,EAAIqkB,EAAI7kB,KAAMQ,IAC5B,IAAK,IAAIC,EAAI,EAAGA,EAAIokB,EAAI5kB,QAASQ,IAC/BokB,EAAI3gB,IAAI1D,EAAGC,EAAGokB,EAAInkB,IAAIF,EAAGC,IAAM,GAAK8jB,EAAQvkB,KAAO,KAGvD,OAAO6kB,CACT,EAwhCAP,EAAQ,GA3qCR,SAAStI,EAAYxc,GAEnB,IADAA,EAASuE,EAAOwB,YAAY/F,IACjB4G,WAAY,CACrB,GAAuB,IAAnB5G,EAAOS,QACT,OAAO,EAGT,IAAI+O,EAAGC,EAAGN,EAAGuS,EACb,GAAuB,IAAnB1hB,EAAOS,QAOT,OALA+O,EAAIxP,EAAOkB,IAAI,EAAG,GAClBuO,EAAIzP,EAAOkB,IAAI,EAAG,GAClBiO,EAAInP,EAAOkB,IAAI,EAAG,GAClBwgB,EAAI1hB,EAAOkB,IAAI,EAAG,GAEXsO,EAAIkS,EAAIjS,EAAIN,EACd,GAAuB,IAAnBnP,EAAOS,QAAe,CAE/B,IAAI6kB,EAAYC,EAAYC,EAQ5B,OAPAF,EAAa,IAAI9J,EAAoBxb,EAAQ,CAAC,EAAG,GAAI,CAAC,EAAG,IACzDulB,EAAa,IAAI/J,EAAoBxb,EAAQ,CAAC,EAAG,GAAI,CAAC,EAAG,IACzDwlB,EAAa,IAAIhK,EAAoBxb,EAAQ,CAAC,EAAG,GAAI,CAAC,EAAG,IACzDwP,EAAIxP,EAAOkB,IAAI,EAAG,GAClBuO,EAAIzP,EAAOkB,IAAI,EAAG,GAClBiO,EAAInP,EAAOkB,IAAI,EAAG,GAGhBsO,EAAIgN,EAAY8I,GAChB7V,EAAI+M,EAAY+I,GAChBpW,EAAIqN,EAAYgJ,EAEpB,CAEE,OAAO,IAAI5J,EAAgB5b,GAAQwc,WAEvC,CACE,MAAMxY,MAAM,yDAEhB,EAsoCA8gB,EAAQ,GAjsCR,SAAiB9kB,EAAQ+gB,GAAS,GAEhC,OADA/gB,EAAS2b,EAAgB5V,YAAY/F,GACjC+gB,EACK,IAAI1D,EAA2Brd,GAAQmgB,UAEvC9D,EAAMrc,EAAQuE,EAAOgB,IAAIvF,EAAOQ,MAE3C,EA2rCAskB,EAAQ,GAvmCR,SAA4B9kB,EAAQC,EAAU,CAAC,GAC7C,MAAM,eAAEohB,EAAiB,KAAM,eAAEC,EAAiB,MAAWrhB,EAG7D,IAAI4H,GAFJ7H,EAASuE,EAAOwB,YAAY/F,IAEbQ,KACXilB,EAAU,IAAIlhB,EAAOsD,EAAGA,GAE5B,IAAK,IAAI7G,EAAI,EAAGA,EAAI6G,EAAG7G,IAAK,CAC1B,IAAIyO,EAAIlL,EAAOK,aAAa5E,EAAOoI,OAAOpH,IACtC0kB,EAAO1lB,EAAOqR,aAAa2P,EAAOnZ,EAAG7G,IAAI+P,YAEzCrC,EADM,IAAI2O,EAA2BqI,GAC7BrJ,MAAM5M,GACd2R,EAAQ7c,EAAOwL,IAAIN,EAAGiW,EAAKxa,KAAKwD,IAAIsJ,MAAM/V,MAC9CwjB,EAAQnd,OACNtH,EACAmgB,EAAmBC,EAAO1S,EAAG1N,EAAGqgB,EAAgBC,GAEpD,CACA,OAAOmE,CACT,EAqlCAX,EAAQ,GAnlCR,SAAuB9kB,EAAQ0f,EAAYva,OAAOsZ,SAEhD,IADAze,EAASuE,EAAOwB,YAAY/F,IACjB+D,UAIT,OAAO/D,EAAO+Q,YAEhB,IAAI4U,EAAc,IAAItI,EAA2Brd,EAAQ,CAAEwd,eAAe,IAEtEQ,EAAI2H,EAAYhF,oBAChB1C,EAAI0H,EAAY9F,qBAChBvU,EAAIqa,EAAYzR,SAEpB,IAAK,IAAIlT,EAAI,EAAGA,EAAIsK,EAAE/J,OAAQP,IACxBL,KAAKqX,IAAI1M,EAAEtK,IAAM0e,EACnBpU,EAAEtK,GAAK,EAAMsK,EAAEtK,GAEfsK,EAAEtK,GAAK,EAIX,OAAOid,EAAE/S,KAAK3G,EAAOmB,KAAK4F,GAAGJ,KAAK8S,EAAEjN,aACtC,EA6jCA+T,EAAQ,GAAQzI,EAChByI,EAAQ,GAhiER,SAAcjhB,EAAO5D,GACnB,GAAIP,EAAWA,WAAWmE,GACxB,OAAIA,EAAM,IAAMnE,EAAWA,WAAWmE,EAAM,IACnC,IAAI8X,EAAgB9X,GAEpB,IAAI4X,EAAgB5X,EAAO5D,GAGpC,MAAM,IAAI+D,MAAM,+BAEpB,C,iDCv/GA,MAAMlC,EAAW8jB,OAAO7R,UAAUjS,SAO3B,SAASpC,EAAWkE,GACvB,MAAMiiB,EAAM/jB,EAASuE,KAAKzC,GAC1B,OAAOiiB,EAAIC,SAAS,YAAcD,EAAIE,SAAS,MACnD,C,4DCPA,SAASpmB,EAAQqmB,GACf,IAQI9V,EARAjQ,EAAUwD,UAAUlC,OAAS,QAAsBiE,IAAjB/B,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,KAAK,IAAA/D,YAAWsmB,GACd,MAAM,IAAI/iB,UAAU,0BACf,GAAqB,IAAjB+iB,EAAMzkB,OACf,MAAM,IAAI0B,UAAU,2BAKtB,QAAuBuC,IAAnBvF,EAAQiQ,OAAsB,CAChC,KAAK,IAAAxQ,YAAWO,EAAQiQ,QACtB,MAAM,IAAIjN,UAAU,+CAGtBiN,EAASjQ,EAAQiQ,MACnB,MACEA,EAAS,IAAItG,MAAMoc,EAAMzkB,QAG3B,IAAI0kB,ECvBN,SAAaD,GACX,IAAI/lB,EAAUwD,UAAUlC,OAAS,QAAsBiE,IAAjB/B,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,KAAK,IAAA/D,YAAWsmB,GACd,MAAM,IAAI/iB,UAAU,0BAGtB,GAAqB,IAAjB+iB,EAAMzkB,OACR,MAAM,IAAI0B,UAAU,2BAGtB,IAAIijB,EAAqBjmB,EAAQkmB,UAC7BA,OAAmC,IAAvBD,EAAgC,EAAIA,EAChDE,EAAmBnmB,EAAQomB,QAC3BA,OAA+B,IAArBD,EAA8BJ,EAAMzkB,OAAS6kB,EAE3D,GAAID,EAAY,GAAKA,GAAaH,EAAMzkB,SAAW4D,OAAOC,UAAU+gB,GAClE,MAAM,IAAIniB,MAAM,4DAGlB,GAAIqiB,GAAWF,GAAaE,EAAUL,EAAMzkB,SAAW4D,OAAOC,UAAUihB,GACtE,MAAM,IAAIriB,MAAM,iFAKlB,IAFA,IAAIsiB,EAAWN,EAAMG,GAEZnlB,EAAImlB,EAAY,EAAGnlB,EAAIqlB,EAASrlB,IACnCglB,EAAMhlB,GAAKslB,IAAUA,EAAWN,EAAMhlB,IAG5C,OAAOslB,CACT,CDRmB1lB,CAAIolB,GACjBO,EExBN,SAAaP,GACX,IAAI/lB,EAAUwD,UAAUlC,OAAS,QAAsBiE,IAAjB/B,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAEnF,KAAK,IAAA/D,YAAWsmB,GACd,MAAM,IAAI/iB,UAAU,0BAGtB,GAAqB,IAAjB+iB,EAAMzkB,OACR,MAAM,IAAI0B,UAAU,2BAGtB,IAAIijB,EAAqBjmB,EAAQkmB,UAC7BA,OAAmC,IAAvBD,EAAgC,EAAIA,EAChDE,EAAmBnmB,EAAQomB,QAC3BA,OAA+B,IAArBD,EAA8BJ,EAAMzkB,OAAS6kB,EAE3D,GAAID,EAAY,GAAKA,GAAaH,EAAMzkB,SAAW4D,OAAOC,UAAU+gB,GAClE,MAAM,IAAIniB,MAAM,4DAGlB,GAAIqiB,GAAWF,GAAaE,EAAUL,EAAMzkB,SAAW4D,OAAOC,UAAUihB,GACtE,MAAM,IAAIriB,MAAM,iFAKlB,IAFA,IAAIwiB,EAAWR,EAAMG,GAEZnlB,EAAImlB,EAAY,EAAGnlB,EAAIqlB,EAASrlB,IACnCglB,EAAMhlB,GAAKwlB,IAAUA,EAAWR,EAAMhlB,IAG5C,OAAOwlB,CACT,CFPmBvkB,CAAI+jB,GAErB,GAAIC,IAAeM,EACjB,MAAM,IAAI9jB,WAAW,+EAGvB,IAAIgkB,EAAexmB,EAAQW,IACvB0lB,OAA4B,IAAjBG,EAA0BxmB,EAAQymB,WAAaT,EAAa,EAAIQ,EAC3EE,EAAe1mB,EAAQgC,IACvBukB,OAA4B,IAAjBG,EAA0B1mB,EAAQymB,WAAaH,EAAa,EAAII,EAE/E,GAAIL,GAAYE,EACd,MAAM,IAAI/jB,WAAW,8CAKvB,IAFA,IAAIiF,GAAU8e,EAAWF,IAAaC,EAAaN,GAE1CjlB,EAAI,EAAGA,EAAIglB,EAAMzkB,OAAQP,IAChCkP,EAAOlP,IAAMglB,EAAMhlB,GAAKilB,GAAcve,EAAS4e,EAGjD,OAAOpW,CACT,C,yDG9C8B,KACX,KACkB,KACP,KACX,KACoB,KACrB,KACa,KAPxB,MAQM3L,EAAS,KACmB,KACT,KACI,KACH,KACK,KACT,KACM,KACN,KACM,KACb,KACA,KACJ,KACa,KACZ,KACuB,KACX,IACA,KACA,KACJ,KACD,KACX,KAAwB,KACZ,KAApB,MACM4b,EAAU,KACW,KACL,KACR,KACD,I","sources":["webpack://eda/./node_modules/ml-matrix/matrix.js","webpack://eda/./node_modules/is-any-array/lib-esm/index.js","webpack://eda/./node_modules/ml-array-rescale/lib-es6/index.js","webpack://eda/./node_modules/ml-array-min/lib-es6/index.js","webpack://eda/./node_modules/ml-array-max/lib-es6/index.js","webpack://eda/./node_modules/ml-matrix/matrix.mjs"],"sourcesContent":["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar isAnyArray = require('is-any-array');\nvar rescale = require('ml-array-rescale');\n\nconst indent = ' '.repeat(2);\nconst indentData = ' '.repeat(4);\n\n/**\n * @this {Matrix}\n * @returns {string}\n */\nfunction inspectMatrix() {\n return inspectMatrixWithOptions(this);\n}\n\nfunction inspectMatrixWithOptions(matrix, options = {}) {\n const {\n maxRows = 15,\n maxColumns = 10,\n maxNumSize = 8,\n padMinus = 'auto',\n } = options;\n return `${matrix.constructor.name} {\n${indent}[\n${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus)}\n${indent}]\n${indent}rows: ${matrix.rows}\n${indent}columns: ${matrix.columns}\n}`;\n}\n\nfunction inspectData(matrix, maxRows, maxColumns, maxNumSize, padMinus) {\n const { rows, columns } = matrix;\n const maxI = Math.min(rows, maxRows);\n const maxJ = Math.min(columns, maxColumns);\n const result = [];\n\n if (padMinus === 'auto') {\n padMinus = false;\n loop: for (let i = 0; i < maxI; i++) {\n for (let j = 0; j < maxJ; j++) {\n if (matrix.get(i, j) < 0) {\n padMinus = true;\n break loop;\n }\n }\n }\n }\n\n for (let i = 0; i < maxI; i++) {\n let line = [];\n for (let j = 0; j < maxJ; j++) {\n line.push(formatNumber(matrix.get(i, j), maxNumSize, padMinus));\n }\n result.push(`${line.join(' ')}`);\n }\n if (maxJ !== columns) {\n result[result.length - 1] += ` ... ${columns - maxColumns} more columns`;\n }\n if (maxI !== rows) {\n result.push(`... ${rows - maxRows} more rows`);\n }\n return result.join(`\\n${indentData}`);\n}\n\nfunction formatNumber(num, maxNumSize, padMinus) {\n return (\n num >= 0 && padMinus\n ? ` ${formatNumber2(num, maxNumSize - 1)}`\n : formatNumber2(num, maxNumSize)\n ).padEnd(maxNumSize);\n}\n\nfunction formatNumber2(num, len) {\n // small.length numbers should be as is\n let str = num.toString();\n if (str.length <= len) return str;\n\n // (7)'0.00123' is better then (7)'1.23e-2'\n // (8)'0.000123' is worse then (7)'1.23e-3',\n let fix = num.toFixed(len);\n if (fix.length > len) {\n fix = num.toFixed(Math.max(0, len - (fix.length - len)));\n }\n if (\n fix.length <= len &&\n !fix.startsWith('0.000') &&\n !fix.startsWith('-0.000')\n ) {\n return fix;\n }\n\n // well, if it's still too long the user should've used longer numbers\n let exp = num.toExponential(len);\n if (exp.length > len) {\n exp = num.toExponential(Math.max(0, len - (exp.length - len)));\n }\n return exp.slice(0);\n}\n\nfunction installMathOperations(AbstractMatrix, Matrix) {\n AbstractMatrix.prototype.add = function add(value) {\n if (typeof value === 'number') return this.addS(value);\n return this.addM(value);\n };\n\n AbstractMatrix.prototype.addS = function addS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.addM = function addM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.add = function add(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.add(value);\n };\n\n AbstractMatrix.prototype.sub = function sub(value) {\n if (typeof value === 'number') return this.subS(value);\n return this.subM(value);\n };\n\n AbstractMatrix.prototype.subS = function subS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.subM = function subM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.sub = function sub(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sub(value);\n };\n AbstractMatrix.prototype.subtract = AbstractMatrix.prototype.sub;\n AbstractMatrix.prototype.subtractS = AbstractMatrix.prototype.subS;\n AbstractMatrix.prototype.subtractM = AbstractMatrix.prototype.subM;\n AbstractMatrix.subtract = AbstractMatrix.sub;\n\n AbstractMatrix.prototype.mul = function mul(value) {\n if (typeof value === 'number') return this.mulS(value);\n return this.mulM(value);\n };\n\n AbstractMatrix.prototype.mulS = function mulS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.mulM = function mulM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mul = function mul(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mul(value);\n };\n AbstractMatrix.prototype.multiply = AbstractMatrix.prototype.mul;\n AbstractMatrix.prototype.multiplyS = AbstractMatrix.prototype.mulS;\n AbstractMatrix.prototype.multiplyM = AbstractMatrix.prototype.mulM;\n AbstractMatrix.multiply = AbstractMatrix.mul;\n\n AbstractMatrix.prototype.div = function div(value) {\n if (typeof value === 'number') return this.divS(value);\n return this.divM(value);\n };\n\n AbstractMatrix.prototype.divS = function divS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.divM = function divM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.div = function div(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.div(value);\n };\n AbstractMatrix.prototype.divide = AbstractMatrix.prototype.div;\n AbstractMatrix.prototype.divideS = AbstractMatrix.prototype.divS;\n AbstractMatrix.prototype.divideM = AbstractMatrix.prototype.divM;\n AbstractMatrix.divide = AbstractMatrix.div;\n\n AbstractMatrix.prototype.mod = function mod(value) {\n if (typeof value === 'number') return this.modS(value);\n return this.modM(value);\n };\n\n AbstractMatrix.prototype.modS = function modS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.modM = function modM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) % matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.mod = function mod(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.mod(value);\n };\n AbstractMatrix.prototype.modulus = AbstractMatrix.prototype.mod;\n AbstractMatrix.prototype.modulusS = AbstractMatrix.prototype.modS;\n AbstractMatrix.prototype.modulusM = AbstractMatrix.prototype.modM;\n AbstractMatrix.modulus = AbstractMatrix.mod;\n\n AbstractMatrix.prototype.and = function and(value) {\n if (typeof value === 'number') return this.andS(value);\n return this.andM(value);\n };\n\n AbstractMatrix.prototype.andS = function andS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.andM = function andM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) & matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.and = function and(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.and(value);\n };\n\n AbstractMatrix.prototype.or = function or(value) {\n if (typeof value === 'number') return this.orS(value);\n return this.orM(value);\n };\n\n AbstractMatrix.prototype.orS = function orS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.orM = function orM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) | matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.or = function or(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.or(value);\n };\n\n AbstractMatrix.prototype.xor = function xor(value) {\n if (typeof value === 'number') return this.xorS(value);\n return this.xorM(value);\n };\n\n AbstractMatrix.prototype.xorS = function xorS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.xorM = function xorM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ^ matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.xor = function xor(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.xor(value);\n };\n\n AbstractMatrix.prototype.leftShift = function leftShift(value) {\n if (typeof value === 'number') return this.leftShiftS(value);\n return this.leftShiftM(value);\n };\n\n AbstractMatrix.prototype.leftShiftS = function leftShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.leftShiftM = function leftShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) << matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.leftShift = function leftShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.leftShift(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShift = function signPropagatingRightShift(value) {\n if (typeof value === 'number') return this.signPropagatingRightShiftS(value);\n return this.signPropagatingRightShiftM(value);\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.signPropagatingRightShift = function signPropagatingRightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.signPropagatingRightShift(value);\n };\n\n AbstractMatrix.prototype.rightShift = function rightShift(value) {\n if (typeof value === 'number') return this.rightShiftS(value);\n return this.rightShiftM(value);\n };\n\n AbstractMatrix.prototype.rightShiftS = function rightShiftS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.rightShiftM = function rightShiftM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) >>> matrix.get(i, j));\n }\n }\n return this;\n };\n\n AbstractMatrix.rightShift = function rightShift(matrix, value) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.rightShift(value);\n };\n AbstractMatrix.prototype.zeroFillRightShift = AbstractMatrix.prototype.rightShift;\n AbstractMatrix.prototype.zeroFillRightShiftS = AbstractMatrix.prototype.rightShiftS;\n AbstractMatrix.prototype.zeroFillRightShiftM = AbstractMatrix.prototype.rightShiftM;\n AbstractMatrix.zeroFillRightShift = AbstractMatrix.rightShift;\n\n AbstractMatrix.prototype.not = function not() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, ~(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.not = function not(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.not();\n };\n\n AbstractMatrix.prototype.abs = function abs() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.abs(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.abs = function abs(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.abs();\n };\n\n AbstractMatrix.prototype.acos = function acos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acos = function acos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acos();\n };\n\n AbstractMatrix.prototype.acosh = function acosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.acosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.acosh = function acosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.acosh();\n };\n\n AbstractMatrix.prototype.asin = function asin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asin = function asin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asin();\n };\n\n AbstractMatrix.prototype.asinh = function asinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.asinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.asinh = function asinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.asinh();\n };\n\n AbstractMatrix.prototype.atan = function atan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atan = function atan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atan();\n };\n\n AbstractMatrix.prototype.atanh = function atanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.atanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.atanh = function atanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.atanh();\n };\n\n AbstractMatrix.prototype.cbrt = function cbrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cbrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cbrt = function cbrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cbrt();\n };\n\n AbstractMatrix.prototype.ceil = function ceil() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.ceil(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.ceil = function ceil(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.ceil();\n };\n\n AbstractMatrix.prototype.clz32 = function clz32() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.clz32(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.clz32 = function clz32(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.clz32();\n };\n\n AbstractMatrix.prototype.cos = function cos() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cos(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cos = function cos(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cos();\n };\n\n AbstractMatrix.prototype.cosh = function cosh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.cosh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.cosh = function cosh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.cosh();\n };\n\n AbstractMatrix.prototype.exp = function exp() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.exp(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.exp = function exp(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.exp();\n };\n\n AbstractMatrix.prototype.expm1 = function expm1() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.expm1(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.expm1 = function expm1(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.expm1();\n };\n\n AbstractMatrix.prototype.floor = function floor() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.floor(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.floor = function floor(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.floor();\n };\n\n AbstractMatrix.prototype.fround = function fround() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.fround(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.fround = function fround(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.fround();\n };\n\n AbstractMatrix.prototype.log = function log() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log = function log(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log();\n };\n\n AbstractMatrix.prototype.log1p = function log1p() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log1p(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log1p = function log1p(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log1p();\n };\n\n AbstractMatrix.prototype.log10 = function log10() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log10(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log10 = function log10(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log10();\n };\n\n AbstractMatrix.prototype.log2 = function log2() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.log2(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.log2 = function log2(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.log2();\n };\n\n AbstractMatrix.prototype.round = function round() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.round(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.round = function round(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.round();\n };\n\n AbstractMatrix.prototype.sign = function sign() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sign(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sign = function sign(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sign();\n };\n\n AbstractMatrix.prototype.sin = function sin() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sin(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sin = function sin(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sin();\n };\n\n AbstractMatrix.prototype.sinh = function sinh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sinh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sinh = function sinh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sinh();\n };\n\n AbstractMatrix.prototype.sqrt = function sqrt() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.sqrt(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.sqrt = function sqrt(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.sqrt();\n };\n\n AbstractMatrix.prototype.tan = function tan() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tan(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tan = function tan(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tan();\n };\n\n AbstractMatrix.prototype.tanh = function tanh() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.tanh(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.tanh = function tanh(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.tanh();\n };\n\n AbstractMatrix.prototype.trunc = function trunc() {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, Math.trunc(this.get(i, j)));\n }\n }\n return this;\n };\n\n AbstractMatrix.trunc = function trunc(matrix) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.trunc();\n };\n\n AbstractMatrix.pow = function pow(matrix, arg0) {\n const newMatrix = new Matrix(matrix);\n return newMatrix.pow(arg0);\n };\n\n AbstractMatrix.prototype.pow = function pow(value) {\n if (typeof value === 'number') return this.powS(value);\n return this.powM(value);\n };\n\n AbstractMatrix.prototype.powS = function powS(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ** value);\n }\n }\n return this;\n };\n\n AbstractMatrix.prototype.powM = function powM(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (this.rows !== matrix.rows ||\n this.columns !== matrix.columns) {\n throw new RangeError('Matrices dimensions must be equal');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) ** matrix.get(i, j));\n }\n }\n return this;\n };\n}\n\n/**\n * @private\n * Check that a row index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkRowIndex(matrix, index, outer) {\n let max = outer ? matrix.rows : matrix.rows - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Row index out of range');\n }\n}\n\n/**\n * @private\n * Check that a column index is not out of bounds\n * @param {Matrix} matrix\n * @param {number} index\n * @param {boolean} [outer]\n */\nfunction checkColumnIndex(matrix, index, outer) {\n let max = outer ? matrix.columns : matrix.columns - 1;\n if (index < 0 || index > max) {\n throw new RangeError('Column index out of range');\n }\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkRowVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.columns) {\n throw new RangeError(\n 'vector size must be the same as the number of columns',\n );\n }\n return vector;\n}\n\n/**\n * @private\n * Check that the provided vector is an array with the right length\n * @param {Matrix} matrix\n * @param {Array|Matrix} vector\n * @return {Array}\n * @throws {RangeError}\n */\nfunction checkColumnVector(matrix, vector) {\n if (vector.to1DArray) {\n vector = vector.to1DArray();\n }\n if (vector.length !== matrix.rows) {\n throw new RangeError('vector size must be the same as the number of rows');\n }\n return vector;\n}\n\nfunction checkRowIndices(matrix, rowIndices) {\n if (!isAnyArray.isAnyArray(rowIndices)) {\n throw new TypeError('row indices must be an array');\n }\n\n for (let i = 0; i < rowIndices.length; i++) {\n if (rowIndices[i] < 0 || rowIndices[i] >= matrix.rows) {\n throw new RangeError('row indices are out of range');\n }\n }\n}\n\nfunction checkColumnIndices(matrix, columnIndices) {\n if (!isAnyArray.isAnyArray(columnIndices)) {\n throw new TypeError('column indices must be an array');\n }\n\n for (let i = 0; i < columnIndices.length; i++) {\n if (columnIndices[i] < 0 || columnIndices[i] >= matrix.columns) {\n throw new RangeError('column indices are out of range');\n }\n }\n}\n\nfunction checkRange(matrix, startRow, endRow, startColumn, endColumn) {\n if (arguments.length !== 5) {\n throw new RangeError('expected 4 arguments');\n }\n checkNumber('startRow', startRow);\n checkNumber('endRow', endRow);\n checkNumber('startColumn', startColumn);\n checkNumber('endColumn', endColumn);\n if (\n startRow > endRow ||\n startColumn > endColumn ||\n startRow < 0 ||\n startRow >= matrix.rows ||\n endRow < 0 ||\n endRow >= matrix.rows ||\n startColumn < 0 ||\n startColumn >= matrix.columns ||\n endColumn < 0 ||\n endColumn >= matrix.columns\n ) {\n throw new RangeError('Submatrix indices are out of range');\n }\n}\n\nfunction newArray(length, value = 0) {\n let array = [];\n for (let i = 0; i < length; i++) {\n array.push(value);\n }\n return array;\n}\n\nfunction checkNumber(name, value) {\n if (typeof value !== 'number') {\n throw new TypeError(`${name} must be a number`);\n }\n}\n\nfunction checkNonEmpty(matrix) {\n if (matrix.isEmpty()) {\n throw new Error('Empty matrix has no elements to index');\n }\n}\n\nfunction sumByRow(matrix) {\n let sum = newArray(matrix.rows);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction sumByColumn(matrix) {\n let sum = newArray(matrix.columns);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] += matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction sumAll(matrix) {\n let v = 0;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v += matrix.get(i, j);\n }\n }\n return v;\n}\n\nfunction productByRow(matrix) {\n let sum = newArray(matrix.rows, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[i] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction productByColumn(matrix) {\n let sum = newArray(matrix.columns, 1);\n for (let i = 0; i < matrix.rows; ++i) {\n for (let j = 0; j < matrix.columns; ++j) {\n sum[j] *= matrix.get(i, j);\n }\n }\n return sum;\n}\n\nfunction productAll(matrix) {\n let v = 1;\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n v *= matrix.get(i, j);\n }\n }\n return v;\n}\n\nfunction varianceByRow(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let i = 0; i < rows; i++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean[i];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / cols) / (cols - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / cols) / cols);\n }\n }\n return variance;\n}\n\nfunction varianceByColumn(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const variance = [];\n\n for (let j = 0; j < cols; j++) {\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n x = matrix.get(i, j) - mean[j];\n sum1 += x;\n sum2 += x * x;\n }\n if (unbiased) {\n variance.push((sum2 - (sum1 * sum1) / rows) / (rows - 1));\n } else {\n variance.push((sum2 - (sum1 * sum1) / rows) / rows);\n }\n }\n return variance;\n}\n\nfunction varianceAll(matrix, unbiased, mean) {\n const rows = matrix.rows;\n const cols = matrix.columns;\n const size = rows * cols;\n\n let sum1 = 0;\n let sum2 = 0;\n let x = 0;\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n x = matrix.get(i, j) - mean;\n sum1 += x;\n sum2 += x * x;\n }\n }\n if (unbiased) {\n return (sum2 - (sum1 * sum1) / size) / (size - 1);\n } else {\n return (sum2 - (sum1 * sum1) / size) / size;\n }\n}\n\nfunction centerByRow(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[i]);\n }\n }\n}\n\nfunction centerByColumn(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean[j]);\n }\n }\n}\n\nfunction centerAll(matrix, mean) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) - mean);\n }\n }\n}\n\nfunction getScaleByRow(matrix) {\n const scale = [];\n for (let i = 0; i < matrix.rows; i++) {\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n sum += matrix.get(i, j) ** 2 / (matrix.columns - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nfunction scaleByRow(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[i]);\n }\n }\n}\n\nfunction getScaleByColumn(matrix) {\n const scale = [];\n for (let j = 0; j < matrix.columns; j++) {\n let sum = 0;\n for (let i = 0; i < matrix.rows; i++) {\n sum += matrix.get(i, j) ** 2 / (matrix.rows - 1);\n }\n scale.push(Math.sqrt(sum));\n }\n return scale;\n}\n\nfunction scaleByColumn(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale[j]);\n }\n }\n}\n\nfunction getScaleAll(matrix) {\n const divider = matrix.size - 1;\n let sum = 0;\n for (let j = 0; j < matrix.columns; j++) {\n for (let i = 0; i < matrix.rows; i++) {\n sum += matrix.get(i, j) ** 2 / divider;\n }\n }\n return Math.sqrt(sum);\n}\n\nfunction scaleAll(matrix, scale) {\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n matrix.set(i, j, matrix.get(i, j) / scale);\n }\n }\n}\n\nclass AbstractMatrix {\n static from1DArray(newRows, newColumns, newData) {\n let length = newRows * newColumns;\n if (length !== newData.length) {\n throw new RangeError('data length does not match given dimensions');\n }\n let newMatrix = new Matrix(newRows, newColumns);\n for (let row = 0; row < newRows; row++) {\n for (let column = 0; column < newColumns; column++) {\n newMatrix.set(row, column, newData[row * newColumns + column]);\n }\n }\n return newMatrix;\n }\n\n static rowVector(newData) {\n let vector = new Matrix(1, newData.length);\n for (let i = 0; i < newData.length; i++) {\n vector.set(0, i, newData[i]);\n }\n return vector;\n }\n\n static columnVector(newData) {\n let vector = new Matrix(newData.length, 1);\n for (let i = 0; i < newData.length; i++) {\n vector.set(i, 0, newData[i]);\n }\n return vector;\n }\n\n static zeros(rows, columns) {\n return new Matrix(rows, columns);\n }\n\n static ones(rows, columns) {\n return new Matrix(rows, columns).fill(1);\n }\n\n static rand(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { random = Math.random } = options;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.set(i, j, random());\n }\n }\n return matrix;\n }\n\n static randInt(rows, columns, options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1000, random = Math.random } = options;\n if (!Number.isInteger(min)) throw new TypeError('min must be an integer');\n if (!Number.isInteger(max)) throw new TypeError('max must be an integer');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let interval = max - min;\n let matrix = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n let value = min + Math.round(random() * interval);\n matrix.set(i, j, value);\n }\n }\n return matrix;\n }\n\n static eye(rows, columns, value) {\n if (columns === undefined) columns = rows;\n if (value === undefined) value = 1;\n let min = Math.min(rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, value);\n }\n return matrix;\n }\n\n static diag(data, rows, columns) {\n let l = data.length;\n if (rows === undefined) rows = l;\n if (columns === undefined) columns = rows;\n let min = Math.min(l, rows, columns);\n let matrix = this.zeros(rows, columns);\n for (let i = 0; i < min; i++) {\n matrix.set(i, i, data[i]);\n }\n return matrix;\n }\n\n static min(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.min(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static max(matrix1, matrix2) {\n matrix1 = this.checkMatrix(matrix1);\n matrix2 = this.checkMatrix(matrix2);\n let rows = matrix1.rows;\n let columns = matrix1.columns;\n let result = new this(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n result.set(i, j, Math.max(matrix1.get(i, j), matrix2.get(i, j)));\n }\n }\n return result;\n }\n\n static checkMatrix(value) {\n return AbstractMatrix.isMatrix(value) ? value : new Matrix(value);\n }\n\n static isMatrix(value) {\n return value != null && value.klass === 'Matrix';\n }\n\n get size() {\n return this.rows * this.columns;\n }\n\n apply(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError('callback must be a function');\n }\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n callback.call(this, i, j);\n }\n }\n return this;\n }\n\n to1DArray() {\n let array = [];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n array.push(this.get(i, j));\n }\n }\n return array;\n }\n\n to2DArray() {\n let copy = [];\n for (let i = 0; i < this.rows; i++) {\n copy.push([]);\n for (let j = 0; j < this.columns; j++) {\n copy[i].push(this.get(i, j));\n }\n }\n return copy;\n }\n\n toJSON() {\n return this.to2DArray();\n }\n\n isRowVector() {\n return this.rows === 1;\n }\n\n isColumnVector() {\n return this.columns === 1;\n }\n\n isVector() {\n return this.rows === 1 || this.columns === 1;\n }\n\n isSquare() {\n return this.rows === this.columns;\n }\n\n isEmpty() {\n return this.rows === 0 || this.columns === 0;\n }\n\n isSymmetric() {\n if (this.isSquare()) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j <= i; j++) {\n if (this.get(i, j) !== this.get(j, i)) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n isDistance() {\n if (!this.isSymmetric()) return false;\n\n for (let i = 0; i < this.rows; i++) {\n if (this.get(i, i) !== 0) return false;\n }\n\n return true;\n }\n\n isEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isEchelonForm = true;\n let checked = false;\n while (i < this.rows && isEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isEchelonForm = false;\n checked = true;\n }\n }\n i++;\n }\n return isEchelonForm;\n }\n\n isReducedEchelonForm() {\n let i = 0;\n let j = 0;\n let previousColumn = -1;\n let isReducedEchelonForm = true;\n let checked = false;\n while (i < this.rows && isReducedEchelonForm) {\n j = 0;\n checked = false;\n while (j < this.columns && checked === false) {\n if (this.get(i, j) === 0) {\n j++;\n } else if (this.get(i, j) === 1 && j > previousColumn) {\n checked = true;\n previousColumn = j;\n } else {\n isReducedEchelonForm = false;\n checked = true;\n }\n }\n for (let k = j + 1; k < this.rows; k++) {\n if (this.get(i, k) !== 0) {\n isReducedEchelonForm = false;\n }\n }\n i++;\n }\n return isReducedEchelonForm;\n }\n\n echelonForm() {\n let result = this.clone();\n let h = 0;\n let k = 0;\n while (h < result.rows && k < result.columns) {\n let iMax = h;\n for (let i = h; i < result.rows; i++) {\n if (result.get(i, k) > result.get(iMax, k)) {\n iMax = i;\n }\n }\n if (result.get(iMax, k) === 0) {\n k++;\n } else {\n result.swapRows(h, iMax);\n let tmp = result.get(h, k);\n for (let j = k; j < result.columns; j++) {\n result.set(h, j, result.get(h, j) / tmp);\n }\n for (let i = h + 1; i < result.rows; i++) {\n let factor = result.get(i, k) / result.get(h, k);\n result.set(i, k, 0);\n for (let j = k + 1; j < result.columns; j++) {\n result.set(i, j, result.get(i, j) - result.get(h, j) * factor);\n }\n }\n h++;\n k++;\n }\n }\n return result;\n }\n\n reducedEchelonForm() {\n let result = this.echelonForm();\n let m = result.columns;\n let n = result.rows;\n let h = n - 1;\n while (h >= 0) {\n if (result.maxRow(h) === 0) {\n h--;\n } else {\n let p = 0;\n let pivot = false;\n while (p < n && pivot === false) {\n if (result.get(h, p) === 1) {\n pivot = true;\n } else {\n p++;\n }\n }\n for (let i = 0; i < h; i++) {\n let factor = result.get(i, p);\n for (let j = p; j < m; j++) {\n let tmp = result.get(i, j) - factor * result.get(h, j);\n result.set(i, j, tmp);\n }\n }\n h--;\n }\n }\n return result;\n }\n\n set() {\n throw new Error('set method is unimplemented');\n }\n\n get() {\n throw new Error('get method is unimplemented');\n }\n\n repeat(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { rows = 1, columns = 1 } = options;\n if (!Number.isInteger(rows) || rows <= 0) {\n throw new TypeError('rows must be a positive integer');\n }\n if (!Number.isInteger(columns) || columns <= 0) {\n throw new TypeError('columns must be a positive integer');\n }\n let matrix = new Matrix(this.rows * rows, this.columns * columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n matrix.setSubMatrix(this, this.rows * i, this.columns * j);\n }\n }\n return matrix;\n }\n\n fill(value) {\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, value);\n }\n }\n return this;\n }\n\n neg() {\n return this.mulS(-1);\n }\n\n getRow(index) {\n checkRowIndex(this, index);\n let row = [];\n for (let i = 0; i < this.columns; i++) {\n row.push(this.get(index, i));\n }\n return row;\n }\n\n getRowVector(index) {\n return Matrix.rowVector(this.getRow(index));\n }\n\n setRow(index, array) {\n checkRowIndex(this, index);\n array = checkRowVector(this, array);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, array[i]);\n }\n return this;\n }\n\n swapRows(row1, row2) {\n checkRowIndex(this, row1);\n checkRowIndex(this, row2);\n for (let i = 0; i < this.columns; i++) {\n let temp = this.get(row1, i);\n this.set(row1, i, this.get(row2, i));\n this.set(row2, i, temp);\n }\n return this;\n }\n\n getColumn(index) {\n checkColumnIndex(this, index);\n let column = [];\n for (let i = 0; i < this.rows; i++) {\n column.push(this.get(i, index));\n }\n return column;\n }\n\n getColumnVector(index) {\n return Matrix.columnVector(this.getColumn(index));\n }\n\n setColumn(index, array) {\n checkColumnIndex(this, index);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, array[i]);\n }\n return this;\n }\n\n swapColumns(column1, column2) {\n checkColumnIndex(this, column1);\n checkColumnIndex(this, column2);\n for (let i = 0; i < this.rows; i++) {\n let temp = this.get(i, column1);\n this.set(i, column1, this.get(i, column2));\n this.set(i, column2, temp);\n }\n return this;\n }\n\n addRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[j]);\n }\n }\n return this;\n }\n\n subRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[j]);\n }\n }\n return this;\n }\n\n mulRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[j]);\n }\n }\n return this;\n }\n\n divRowVector(vector) {\n vector = checkRowVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[j]);\n }\n }\n return this;\n }\n\n addColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) + vector[i]);\n }\n }\n return this;\n }\n\n subColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) - vector[i]);\n }\n }\n return this;\n }\n\n mulColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) * vector[i]);\n }\n }\n return this;\n }\n\n divColumnVector(vector) {\n vector = checkColumnVector(this, vector);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n this.set(i, j, this.get(i, j) / vector[i]);\n }\n }\n return this;\n }\n\n mulRow(index, value) {\n checkRowIndex(this, index);\n for (let i = 0; i < this.columns; i++) {\n this.set(index, i, this.get(index, i) * value);\n }\n return this;\n }\n\n mulColumn(index, value) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n this.set(i, index, this.get(i, index) * value);\n }\n return this;\n }\n\n max(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n switch (by) {\n case 'row': {\n const max = new Array(this.rows).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[row]) {\n max[row] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case 'column': {\n const max = new Array(this.columns).fill(Number.NEGATIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max[column]) {\n max[column] = this.get(row, column);\n }\n }\n }\n return max;\n }\n case undefined: {\n let max = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) > max) {\n max = this.get(row, column);\n }\n }\n }\n return max;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n maxIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) > v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n min(by) {\n if (this.isEmpty()) {\n return NaN;\n }\n\n switch (by) {\n case 'row': {\n const min = new Array(this.rows).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[row]) {\n min[row] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case 'column': {\n const min = new Array(this.columns).fill(Number.POSITIVE_INFINITY);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min[column]) {\n min[column] = this.get(row, column);\n }\n }\n }\n return min;\n }\n case undefined: {\n let min = this.get(0, 0);\n for (let row = 0; row < this.rows; row++) {\n for (let column = 0; column < this.columns; column++) {\n if (this.get(row, column) < min) {\n min = this.get(row, column);\n }\n }\n }\n return min;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n minIndex() {\n checkNonEmpty(this);\n let v = this.get(0, 0);\n let idx = [0, 0];\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n if (this.get(i, j) < v) {\n v = this.get(i, j);\n idx[0] = i;\n idx[1] = j;\n }\n }\n }\n return idx;\n }\n\n maxRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n maxRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) > v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n minRow(row) {\n checkRowIndex(this, row);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(row, 0);\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n }\n }\n return v;\n }\n\n minRowIndex(row) {\n checkRowIndex(this, row);\n checkNonEmpty(this);\n let v = this.get(row, 0);\n let idx = [row, 0];\n for (let i = 1; i < this.columns; i++) {\n if (this.get(row, i) < v) {\n v = this.get(row, i);\n idx[1] = i;\n }\n }\n return idx;\n }\n\n maxColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n maxColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) > v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n minColumn(column) {\n checkColumnIndex(this, column);\n if (this.isEmpty()) {\n return NaN;\n }\n let v = this.get(0, column);\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n }\n }\n return v;\n }\n\n minColumnIndex(column) {\n checkColumnIndex(this, column);\n checkNonEmpty(this);\n let v = this.get(0, column);\n let idx = [0, column];\n for (let i = 1; i < this.rows; i++) {\n if (this.get(i, column) < v) {\n v = this.get(i, column);\n idx[0] = i;\n }\n }\n return idx;\n }\n\n diag() {\n let min = Math.min(this.rows, this.columns);\n let diag = [];\n for (let i = 0; i < min; i++) {\n diag.push(this.get(i, i));\n }\n return diag;\n }\n\n norm(type = 'frobenius') {\n switch (type) {\n case 'max':\n return this.max();\n case 'frobenius':\n return Math.sqrt(this.dot(this));\n default:\n throw new RangeError(`unknown norm type: ${type}`);\n }\n }\n\n cumulativeSum() {\n let sum = 0;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n sum += this.get(i, j);\n this.set(i, j, sum);\n }\n }\n return this;\n }\n\n dot(vector2) {\n if (AbstractMatrix.isMatrix(vector2)) vector2 = vector2.to1DArray();\n let vector1 = this.to1DArray();\n if (vector1.length !== vector2.length) {\n throw new RangeError('vectors do not have the same size');\n }\n let dot = 0;\n for (let i = 0; i < vector1.length; i++) {\n dot += vector1[i] * vector2[i];\n }\n return dot;\n }\n\n mmul(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.columns;\n\n let result = new Matrix(m, p);\n\n let Bcolj = new Float64Array(n);\n for (let j = 0; j < p; j++) {\n for (let k = 0; k < n; k++) {\n Bcolj[k] = other.get(k, j);\n }\n\n for (let i = 0; i < m; i++) {\n let s = 0;\n for (let k = 0; k < n; k++) {\n s += this.get(i, k) * Bcolj[k];\n }\n\n result.set(i, j, s);\n }\n }\n return result;\n }\n\n mpow(scalar) {\n if (!this.isSquare()) {\n throw new RangeError('Matrix must be square');\n }\n if (!Number.isInteger(scalar) || scalar < 0) {\n throw new RangeError('Exponent must be a non-negative integer');\n }\n // Russian Peasant exponentiation, i.e. exponentiation by squaring\n let result = Matrix.eye(this.rows);\n let bb = this;\n // Note: Don't bit shift. In JS, that would truncate at 32 bits\n for (let e = scalar; e >= 1; e /= 2) {\n if ((e & 1) !== 0) {\n result = result.mmul(bb);\n }\n bb = bb.mmul(bb);\n }\n return result;\n }\n\n strassen2x2(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(2, 2);\n const a11 = this.get(0, 0);\n const b11 = other.get(0, 0);\n const a12 = this.get(0, 1);\n const b12 = other.get(0, 1);\n const a21 = this.get(1, 0);\n const b21 = other.get(1, 0);\n const a22 = this.get(1, 1);\n const b22 = other.get(1, 1);\n\n // Compute intermediate values.\n const m1 = (a11 + a22) * (b11 + b22);\n const m2 = (a21 + a22) * b11;\n const m3 = a11 * (b12 - b22);\n const m4 = a22 * (b21 - b11);\n const m5 = (a11 + a12) * b22;\n const m6 = (a21 - a11) * (b11 + b12);\n const m7 = (a12 - a22) * (b21 + b22);\n\n // Combine intermediate values into the output.\n const c00 = m1 + m4 - m5 + m7;\n const c01 = m3 + m5;\n const c10 = m2 + m4;\n const c11 = m1 - m2 + m3 + m6;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n return result;\n }\n\n strassen3x3(other) {\n other = Matrix.checkMatrix(other);\n let result = new Matrix(3, 3);\n\n const a00 = this.get(0, 0);\n const a01 = this.get(0, 1);\n const a02 = this.get(0, 2);\n const a10 = this.get(1, 0);\n const a11 = this.get(1, 1);\n const a12 = this.get(1, 2);\n const a20 = this.get(2, 0);\n const a21 = this.get(2, 1);\n const a22 = this.get(2, 2);\n\n const b00 = other.get(0, 0);\n const b01 = other.get(0, 1);\n const b02 = other.get(0, 2);\n const b10 = other.get(1, 0);\n const b11 = other.get(1, 1);\n const b12 = other.get(1, 2);\n const b20 = other.get(2, 0);\n const b21 = other.get(2, 1);\n const b22 = other.get(2, 2);\n\n const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11;\n const m2 = (a00 - a10) * (-b01 + b11);\n const m3 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b22);\n const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11);\n const m5 = (a10 + a11) * (-b00 + b01);\n const m6 = a00 * b00;\n const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12);\n const m8 = (-a00 + a20) * (b02 - b12);\n const m9 = (a20 + a21) * (-b00 + b02);\n const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12;\n const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21);\n const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21);\n const m13 = (a02 - a22) * (b11 - b21);\n const m14 = a02 * b20;\n const m15 = (a21 + a22) * (-b20 + b21);\n const m16 = (-a02 + a11 + a12) * (b12 + b20 - b22);\n const m17 = (a02 - a12) * (b12 - b22);\n const m18 = (a11 + a12) * (-b20 + b22);\n const m19 = a01 * b10;\n const m20 = a12 * b21;\n const m21 = a10 * b02;\n const m22 = a20 * b01;\n const m23 = a22 * b22;\n\n const c00 = m6 + m14 + m19;\n const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15;\n const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18;\n const c10 = m2 + m3 + m4 + m6 + m14 + m16 + m17;\n const c11 = m2 + m4 + m5 + m6 + m20;\n const c12 = m14 + m16 + m17 + m18 + m21;\n const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14;\n const c21 = m12 + m13 + m14 + m15 + m22;\n const c22 = m6 + m7 + m8 + m9 + m23;\n\n result.set(0, 0, c00);\n result.set(0, 1, c01);\n result.set(0, 2, c02);\n result.set(1, 0, c10);\n result.set(1, 1, c11);\n result.set(1, 2, c12);\n result.set(2, 0, c20);\n result.set(2, 1, c21);\n result.set(2, 2, c22);\n return result;\n }\n\n mmulStrassen(y) {\n y = Matrix.checkMatrix(y);\n let x = this.clone();\n let r1 = x.rows;\n let c1 = x.columns;\n let r2 = y.rows;\n let c2 = y.columns;\n if (c1 !== r2) {\n // eslint-disable-next-line no-console\n console.warn(\n `Multiplying ${r1} x ${c1} and ${r2} x ${c2} matrix: dimensions do not match.`,\n );\n }\n\n // Put a matrix into the top left of a matrix of zeros.\n // `rows` and `cols` are the dimensions of the output matrix.\n function embed(mat, rows, cols) {\n let r = mat.rows;\n let c = mat.columns;\n if (r === rows && c === cols) {\n return mat;\n } else {\n let resultat = AbstractMatrix.zeros(rows, cols);\n resultat = resultat.setSubMatrix(mat, 0, 0);\n return resultat;\n }\n }\n\n // Make sure both matrices are the same size.\n // This is exclusively for simplicity:\n // this algorithm can be implemented with matrices of different sizes.\n\n let r = Math.max(r1, r2);\n let c = Math.max(c1, c2);\n x = embed(x, r, c);\n y = embed(y, r, c);\n\n // Our recursive multiplication function.\n function blockMult(a, b, rows, cols) {\n // For small matrices, resort to naive multiplication.\n if (rows <= 512 || cols <= 512) {\n return a.mmul(b); // a is equivalent to this\n }\n\n // Apply dynamic padding.\n if (rows % 2 === 1 && cols % 2 === 1) {\n a = embed(a, rows + 1, cols + 1);\n b = embed(b, rows + 1, cols + 1);\n } else if (rows % 2 === 1) {\n a = embed(a, rows + 1, cols);\n b = embed(b, rows + 1, cols);\n } else if (cols % 2 === 1) {\n a = embed(a, rows, cols + 1);\n b = embed(b, rows, cols + 1);\n }\n\n let halfRows = parseInt(a.rows / 2, 10);\n let halfCols = parseInt(a.columns / 2, 10);\n // Subdivide input matrices.\n let a11 = a.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n let b11 = b.subMatrix(0, halfRows - 1, 0, halfCols - 1);\n\n let a12 = a.subMatrix(0, halfRows - 1, halfCols, a.columns - 1);\n let b12 = b.subMatrix(0, halfRows - 1, halfCols, b.columns - 1);\n\n let a21 = a.subMatrix(halfRows, a.rows - 1, 0, halfCols - 1);\n let b21 = b.subMatrix(halfRows, b.rows - 1, 0, halfCols - 1);\n\n let a22 = a.subMatrix(halfRows, a.rows - 1, halfCols, a.columns - 1);\n let b22 = b.subMatrix(halfRows, b.rows - 1, halfCols, b.columns - 1);\n\n // Compute intermediate values.\n let m1 = blockMult(\n AbstractMatrix.add(a11, a22),\n AbstractMatrix.add(b11, b22),\n halfRows,\n halfCols,\n );\n let m2 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols);\n let m3 = blockMult(a11, AbstractMatrix.sub(b12, b22), halfRows, halfCols);\n let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols);\n let m5 = blockMult(AbstractMatrix.add(a11, a12), b22, halfRows, halfCols);\n let m6 = blockMult(\n AbstractMatrix.sub(a21, a11),\n AbstractMatrix.add(b11, b12),\n halfRows,\n halfCols,\n );\n let m7 = blockMult(\n AbstractMatrix.sub(a12, a22),\n AbstractMatrix.add(b21, b22),\n halfRows,\n halfCols,\n );\n\n // Combine intermediate values into the output.\n let c11 = AbstractMatrix.add(m1, m4);\n c11.sub(m5);\n c11.add(m7);\n let c12 = AbstractMatrix.add(m3, m5);\n let c21 = AbstractMatrix.add(m2, m4);\n let c22 = AbstractMatrix.sub(m1, m2);\n c22.add(m3);\n c22.add(m6);\n\n // Crop output to the desired size (undo dynamic padding).\n let result = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns);\n result = result.setSubMatrix(c11, 0, 0);\n result = result.setSubMatrix(c12, c11.rows, 0);\n result = result.setSubMatrix(c21, 0, c11.columns);\n result = result.setSubMatrix(c22, c11.rows, c11.columns);\n return result.subMatrix(0, rows - 1, 0, cols - 1);\n }\n\n return blockMult(x, y, r, c);\n }\n\n scaleRows(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.rows; i++) {\n const row = this.getRow(i);\n if (row.length > 0) {\n rescale(row, { min, max, output: row });\n }\n newMatrix.setRow(i, row);\n }\n return newMatrix;\n }\n\n scaleColumns(options = {}) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { min = 0, max = 1 } = options;\n if (!Number.isFinite(min)) throw new TypeError('min must be a number');\n if (!Number.isFinite(max)) throw new TypeError('max must be a number');\n if (min >= max) throw new RangeError('min must be smaller than max');\n let newMatrix = new Matrix(this.rows, this.columns);\n for (let i = 0; i < this.columns; i++) {\n const column = this.getColumn(i);\n if (column.length) {\n rescale(column, {\n min,\n max,\n output: column,\n });\n }\n newMatrix.setColumn(i, column);\n }\n return newMatrix;\n }\n\n flipRows() {\n const middle = Math.ceil(this.columns / 2);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < middle; j++) {\n let first = this.get(i, j);\n let last = this.get(i, this.columns - 1 - j);\n this.set(i, j, last);\n this.set(i, this.columns - 1 - j, first);\n }\n }\n return this;\n }\n\n flipColumns() {\n const middle = Math.ceil(this.rows / 2);\n for (let j = 0; j < this.columns; j++) {\n for (let i = 0; i < middle; i++) {\n let first = this.get(i, j);\n let last = this.get(this.rows - 1 - i, j);\n this.set(i, j, last);\n this.set(this.rows - 1 - i, j, first);\n }\n }\n return this;\n }\n\n kroneckerProduct(other) {\n other = Matrix.checkMatrix(other);\n\n let m = this.rows;\n let n = this.columns;\n let p = other.rows;\n let q = other.columns;\n\n let result = new Matrix(m * p, n * q);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n for (let k = 0; k < p; k++) {\n for (let l = 0; l < q; l++) {\n result.set(p * i + k, q * j + l, this.get(i, j) * other.get(k, l));\n }\n }\n }\n }\n return result;\n }\n\n kroneckerSum(other) {\n other = Matrix.checkMatrix(other);\n if (!this.isSquare() || !other.isSquare()) {\n throw new Error('Kronecker Sum needs two Square Matrices');\n }\n let m = this.rows;\n let n = other.rows;\n let AxI = this.kroneckerProduct(Matrix.eye(n, n));\n let IxB = Matrix.eye(m, m).kroneckerProduct(other);\n return AxI.add(IxB);\n }\n\n transpose() {\n let result = new Matrix(this.columns, this.rows);\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.columns; j++) {\n result.set(j, i, this.get(i, j));\n }\n }\n return result;\n }\n\n sortRows(compareFunction = compareNumbers) {\n for (let i = 0; i < this.rows; i++) {\n this.setRow(i, this.getRow(i).sort(compareFunction));\n }\n return this;\n }\n\n sortColumns(compareFunction = compareNumbers) {\n for (let i = 0; i < this.columns; i++) {\n this.setColumn(i, this.getColumn(i).sort(compareFunction));\n }\n return this;\n }\n\n subMatrix(startRow, endRow, startColumn, endColumn) {\n checkRange(this, startRow, endRow, startColumn, endColumn);\n let newMatrix = new Matrix(\n endRow - startRow + 1,\n endColumn - startColumn + 1,\n );\n for (let i = startRow; i <= endRow; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n newMatrix.set(i - startRow, j - startColumn, this.get(i, j));\n }\n }\n return newMatrix;\n }\n\n subMatrixRow(indices, startColumn, endColumn) {\n if (startColumn === undefined) startColumn = 0;\n if (endColumn === undefined) endColumn = this.columns - 1;\n if (\n startColumn > endColumn ||\n startColumn < 0 ||\n startColumn >= this.columns ||\n endColumn < 0 ||\n endColumn >= this.columns\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(indices.length, endColumn - startColumn + 1);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startColumn; j <= endColumn; j++) {\n if (indices[i] < 0 || indices[i] >= this.rows) {\n throw new RangeError(`Row index out of range: ${indices[i]}`);\n }\n newMatrix.set(i, j - startColumn, this.get(indices[i], j));\n }\n }\n return newMatrix;\n }\n\n subMatrixColumn(indices, startRow, endRow) {\n if (startRow === undefined) startRow = 0;\n if (endRow === undefined) endRow = this.rows - 1;\n if (\n startRow > endRow ||\n startRow < 0 ||\n startRow >= this.rows ||\n endRow < 0 ||\n endRow >= this.rows\n ) {\n throw new RangeError('Argument out of range');\n }\n\n let newMatrix = new Matrix(endRow - startRow + 1, indices.length);\n for (let i = 0; i < indices.length; i++) {\n for (let j = startRow; j <= endRow; j++) {\n if (indices[i] < 0 || indices[i] >= this.columns) {\n throw new RangeError(`Column index out of range: ${indices[i]}`);\n }\n newMatrix.set(j - startRow, i, this.get(j, indices[i]));\n }\n }\n return newMatrix;\n }\n\n setSubMatrix(matrix, startRow, startColumn) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n return this;\n }\n let endRow = startRow + matrix.rows - 1;\n let endColumn = startColumn + matrix.columns - 1;\n checkRange(this, startRow, endRow, startColumn, endColumn);\n for (let i = 0; i < matrix.rows; i++) {\n for (let j = 0; j < matrix.columns; j++) {\n this.set(startRow + i, startColumn + j, matrix.get(i, j));\n }\n }\n return this;\n }\n\n selection(rowIndices, columnIndices) {\n checkRowIndices(this, rowIndices);\n checkColumnIndices(this, columnIndices);\n let newMatrix = new Matrix(rowIndices.length, columnIndices.length);\n for (let i = 0; i < rowIndices.length; i++) {\n let rowIndex = rowIndices[i];\n for (let j = 0; j < columnIndices.length; j++) {\n let columnIndex = columnIndices[j];\n newMatrix.set(i, j, this.get(rowIndex, columnIndex));\n }\n }\n return newMatrix;\n }\n\n trace() {\n let min = Math.min(this.rows, this.columns);\n let trace = 0;\n for (let i = 0; i < min; i++) {\n trace += this.get(i, i);\n }\n return trace;\n }\n\n clone() {\n return this.constructor.copy(this, new Matrix(this.rows, this.columns));\n }\n\n /**\n * @template {AbstractMatrix} M\n * @param {AbstractMatrix} from\n * @param {M} to\n * @return {M}\n */\n static copy(from, to) {\n for (const [row, column, value] of from.entries()) {\n to.set(row, column, value);\n }\n\n return to;\n }\n\n sum(by) {\n switch (by) {\n case 'row':\n return sumByRow(this);\n case 'column':\n return sumByColumn(this);\n case undefined:\n return sumAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n product(by) {\n switch (by) {\n case 'row':\n return productByRow(this);\n case 'column':\n return productByColumn(this);\n case undefined:\n return productAll(this);\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n mean(by) {\n const sum = this.sum(by);\n switch (by) {\n case 'row': {\n for (let i = 0; i < this.rows; i++) {\n sum[i] /= this.columns;\n }\n return sum;\n }\n case 'column': {\n for (let i = 0; i < this.columns; i++) {\n sum[i] /= this.rows;\n }\n return sum;\n }\n case undefined:\n return sum / this.size;\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n variance(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { unbiased = true, mean = this.mean(by) } = options;\n if (typeof unbiased !== 'boolean') {\n throw new TypeError('unbiased must be a boolean');\n }\n switch (by) {\n case 'row': {\n if (!isAnyArray.isAnyArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByRow(this, unbiased, mean);\n }\n case 'column': {\n if (!isAnyArray.isAnyArray(mean)) {\n throw new TypeError('mean must be an array');\n }\n return varianceByColumn(this, unbiased, mean);\n }\n case undefined: {\n if (typeof mean !== 'number') {\n throw new TypeError('mean must be a number');\n }\n return varianceAll(this, unbiased, mean);\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n standardDeviation(by, options) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n const variance = this.variance(by, options);\n if (by === undefined) {\n return Math.sqrt(variance);\n } else {\n for (let i = 0; i < variance.length; i++) {\n variance[i] = Math.sqrt(variance[i]);\n }\n return variance;\n }\n }\n\n center(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n const { center = this.mean(by) } = options;\n switch (by) {\n case 'row': {\n if (!isAnyArray.isAnyArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByRow(this, center);\n return this;\n }\n case 'column': {\n if (!isAnyArray.isAnyArray(center)) {\n throw new TypeError('center must be an array');\n }\n centerByColumn(this, center);\n return this;\n }\n case undefined: {\n if (typeof center !== 'number') {\n throw new TypeError('center must be a number');\n }\n centerAll(this, center);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n scale(by, options = {}) {\n if (typeof by === 'object') {\n options = by;\n by = undefined;\n }\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n let scale = options.scale;\n switch (by) {\n case 'row': {\n if (scale === undefined) {\n scale = getScaleByRow(this);\n } else if (!isAnyArray.isAnyArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByRow(this, scale);\n return this;\n }\n case 'column': {\n if (scale === undefined) {\n scale = getScaleByColumn(this);\n } else if (!isAnyArray.isAnyArray(scale)) {\n throw new TypeError('scale must be an array');\n }\n scaleByColumn(this, scale);\n return this;\n }\n case undefined: {\n if (scale === undefined) {\n scale = getScaleAll(this);\n } else if (typeof scale !== 'number') {\n throw new TypeError('scale must be a number');\n }\n scaleAll(this, scale);\n return this;\n }\n default:\n throw new Error(`invalid option: ${by}`);\n }\n }\n\n toString(options) {\n return inspectMatrixWithOptions(this, options);\n }\n\n [Symbol.iterator]() {\n return this.entries();\n }\n\n /**\n * iterator from left to right, from top to bottom\n * yield [row, column, value]\n * @returns {Generator<[number, number, number], void, void>}\n */\n *entries() {\n for (let row = 0; row < this.rows; row++) {\n for (let col = 0; col < this.columns; col++) {\n yield [row, col, this.get(row, col)];\n }\n }\n }\n\n /**\n * iterator from left to right, from top to bottom\n * yield value\n * @returns {Generator<number, void, void>}\n */\n *values() {\n for (let row = 0; row < this.rows; row++) {\n for (let col = 0; col < this.columns; col++) {\n yield this.get(row, col);\n }\n }\n }\n}\n\nAbstractMatrix.prototype.klass = 'Matrix';\nif (typeof Symbol !== 'undefined') {\n AbstractMatrix.prototype[Symbol.for('nodejs.util.inspect.custom')] =\n inspectMatrix;\n}\n\nfunction compareNumbers(a, b) {\n return a - b;\n}\n\nfunction isArrayOfNumbers(array) {\n return array.every((element) => {\n return typeof element === 'number';\n });\n}\n\n// Synonyms\nAbstractMatrix.random = AbstractMatrix.rand;\nAbstractMatrix.randomInt = AbstractMatrix.randInt;\nAbstractMatrix.diagonal = AbstractMatrix.diag;\nAbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag;\nAbstractMatrix.identity = AbstractMatrix.eye;\nAbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg;\nAbstractMatrix.prototype.tensorProduct =\n AbstractMatrix.prototype.kroneckerProduct;\n\nclass Matrix extends AbstractMatrix {\n /**\n * @type {Float64Array[]}\n */\n data;\n\n /**\n * Init an empty matrix\n * @param {number} nRows\n * @param {number} nColumns\n */\n #initData(nRows, nColumns) {\n this.data = [];\n\n if (Number.isInteger(nColumns) && nColumns >= 0) {\n for (let i = 0; i < nRows; i++) {\n this.data.push(new Float64Array(nColumns));\n }\n } else {\n throw new TypeError('nColumns must be a positive integer');\n }\n\n this.rows = nRows;\n this.columns = nColumns;\n }\n\n constructor(nRows, nColumns) {\n super();\n if (Matrix.isMatrix(nRows)) {\n this.#initData(nRows.rows, nRows.columns);\n Matrix.copy(nRows, this);\n } else if (Number.isInteger(nRows) && nRows >= 0) {\n this.#initData(nRows, nColumns);\n } else if (isAnyArray.isAnyArray(nRows)) {\n // Copy the values from the 2D array\n const arrayData = nRows;\n nRows = arrayData.length;\n nColumns = nRows ? arrayData[0].length : 0;\n if (typeof nColumns !== 'number') {\n throw new TypeError(\n 'Data must be a 2D array with at least one element',\n );\n }\n this.data = [];\n\n for (let i = 0; i < nRows; i++) {\n if (arrayData[i].length !== nColumns) {\n throw new RangeError('Inconsistent array dimensions');\n }\n if (!isArrayOfNumbers(arrayData[i])) {\n throw new TypeError('Input data contains non-numeric values');\n }\n this.data.push(Float64Array.from(arrayData[i]));\n }\n\n this.rows = nRows;\n this.columns = nColumns;\n } else {\n throw new TypeError(\n 'First argument must be a positive number or an array',\n );\n }\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n\n removeRow(index) {\n checkRowIndex(this, index);\n this.data.splice(index, 1);\n this.rows -= 1;\n return this;\n }\n\n addRow(index, array) {\n if (array === undefined) {\n array = index;\n index = this.rows;\n }\n checkRowIndex(this, index, true);\n array = Float64Array.from(checkRowVector(this, array));\n this.data.splice(index, 0, array);\n this.rows += 1;\n return this;\n }\n\n removeColumn(index) {\n checkColumnIndex(this, index);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns - 1);\n for (let j = 0; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n for (let j = index + 1; j < this.columns; j++) {\n newRow[j - 1] = this.data[i][j];\n }\n this.data[i] = newRow;\n }\n this.columns -= 1;\n return this;\n }\n\n addColumn(index, array) {\n if (typeof array === 'undefined') {\n array = index;\n index = this.columns;\n }\n checkColumnIndex(this, index, true);\n array = checkColumnVector(this, array);\n for (let i = 0; i < this.rows; i++) {\n const newRow = new Float64Array(this.columns + 1);\n let j = 0;\n for (; j < index; j++) {\n newRow[j] = this.data[i][j];\n }\n newRow[j++] = array[i];\n for (; j < this.columns + 1; j++) {\n newRow[j] = this.data[i][j - 1];\n }\n this.data[i] = newRow;\n }\n this.columns += 1;\n return this;\n }\n}\n\ninstallMathOperations(AbstractMatrix, Matrix);\n\n/**\n * @typedef {0 | 1 | number | boolean} Mask\n */\n\nclass SymmetricMatrix extends AbstractMatrix {\n /** @type {Matrix} */\n #matrix;\n\n get size() {\n return this.#matrix.size;\n }\n\n get rows() {\n return this.#matrix.rows;\n }\n\n get columns() {\n return this.#matrix.columns;\n }\n\n get diagonalSize() {\n return this.rows;\n }\n\n /**\n * not the same as matrix.isSymmetric()\n * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n *\n * @param value\n * @returns {boolean}\n */\n static isSymmetricMatrix(value) {\n return Matrix.isMatrix(value) && value.klassType === 'SymmetricMatrix';\n }\n\n /**\n * @param diagonalSize\n * @return {SymmetricMatrix}\n */\n static zeros(diagonalSize) {\n return new this(diagonalSize);\n }\n\n /**\n * @param diagonalSize\n * @return {SymmetricMatrix}\n */\n static ones(diagonalSize) {\n return new this(diagonalSize).fill(1);\n }\n\n /**\n * @param {number | AbstractMatrix | ArrayLike<ArrayLike<number>>} diagonalSize\n * @return {this}\n */\n constructor(diagonalSize) {\n super();\n\n if (Matrix.isMatrix(diagonalSize)) {\n if (!diagonalSize.isSymmetric()) {\n throw new TypeError('not symmetric data');\n }\n\n this.#matrix = Matrix.copy(\n diagonalSize,\n new Matrix(diagonalSize.rows, diagonalSize.rows),\n );\n } else if (Number.isInteger(diagonalSize) && diagonalSize >= 0) {\n this.#matrix = new Matrix(diagonalSize, diagonalSize);\n } else {\n this.#matrix = new Matrix(diagonalSize);\n\n if (!this.isSymmetric()) {\n throw new TypeError('not symmetric data');\n }\n }\n }\n\n clone() {\n const matrix = new SymmetricMatrix(this.diagonalSize);\n\n for (const [row, col, value] of this.upperRightEntries()) {\n matrix.set(row, col, value);\n }\n\n return matrix;\n }\n\n toMatrix() {\n return new Matrix(this);\n }\n\n get(rowIndex, columnIndex) {\n return this.#matrix.get(rowIndex, columnIndex);\n }\n set(rowIndex, columnIndex, value) {\n // symmetric set\n this.#matrix.set(rowIndex, columnIndex, value);\n this.#matrix.set(columnIndex, rowIndex, value);\n\n return this;\n }\n\n removeCross(index) {\n // symmetric remove side\n this.#matrix.removeRow(index);\n this.#matrix.removeColumn(index);\n\n return this;\n }\n\n addCross(index, array) {\n if (array === undefined) {\n array = index;\n index = this.diagonalSize;\n }\n\n const row = array.slice();\n row.splice(index, 1);\n\n this.#matrix.addRow(index, row);\n this.#matrix.addColumn(index, array);\n\n return this;\n }\n\n /**\n * @param {Mask[]} mask\n */\n applyMask(mask) {\n if (mask.length !== this.diagonalSize) {\n throw new RangeError('Mask size do not match with matrix size');\n }\n\n // prepare sides to remove from matrix from mask\n /** @type {number[]} */\n const sidesToRemove = [];\n for (const [index, passthroughs] of mask.entries()) {\n if (passthroughs) continue;\n sidesToRemove.push(index);\n }\n // to remove from highest to lowest for no mutation shifting\n sidesToRemove.reverse();\n\n // remove sides\n for (const sideIndex of sidesToRemove) {\n this.removeCross(sideIndex);\n }\n\n return this;\n }\n\n /**\n * Compact format upper-right corner of matrix\n * iterate from left to right, from top to bottom.\n *\n * ```\n * A B C D\n * A 1 2 3 4\n * B 2 5 6 7\n * C 3 6 8 9\n * D 4 7 9 10\n * ```\n *\n * will return compact 1D array `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`\n *\n * length is S(i=0, n=sideSize) => 10 for a 4 sideSized matrix\n *\n * @returns {number[]}\n */\n toCompact() {\n const { diagonalSize } = this;\n\n /** @type {number[]} */\n const compact = new Array((diagonalSize * (diagonalSize + 1)) / 2);\n for (let col = 0, row = 0, index = 0; index < compact.length; index++) {\n compact[index] = this.get(row, col);\n\n if (++col >= diagonalSize) col = ++row;\n }\n\n return compact;\n }\n\n /**\n * @param {number[]} compact\n * @return {SymmetricMatrix}\n */\n static fromCompact(compact) {\n const compactSize = compact.length;\n // compactSize = (sideSize * (sideSize + 1)) / 2\n // https://mathsolver.microsoft.com/fr/solve-problem/y%20%3D%20%20x%20%60cdot%20%20%20%60frac%7B%20%20%60left(%20x%2B1%20%20%60right)%20%20%20%20%7D%7B%202%20%20%7D\n // sideSize = (Sqrt(8 × compactSize + 1) - 1) / 2\n const diagonalSize = (Math.sqrt(8 * compactSize + 1) - 1) / 2;\n\n if (!Number.isInteger(diagonalSize)) {\n throw new TypeError(\n `This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(\n compact,\n )}`,\n );\n }\n\n const matrix = new SymmetricMatrix(diagonalSize);\n for (let col = 0, row = 0, index = 0; index < compactSize; index++) {\n matrix.set(col, row, compact[index]);\n if (++col >= diagonalSize) col = ++row;\n }\n\n return matrix;\n }\n\n /**\n * half iterator upper-right-corner from left to right, from top to bottom\n * yield [row, column, value]\n *\n * @returns {Generator<[number, number, number], void, void>}\n */\n *upperRightEntries() {\n for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n const value = this.get(row, col);\n\n yield [row, col, value];\n\n // at the end of row, move cursor to next row at diagonal position\n if (++col >= this.diagonalSize) col = ++row;\n }\n }\n\n /**\n * half iterator upper-right-corner from left to right, from top to bottom\n * yield value\n *\n * @returns {Generator<[number, number, number], void, void>}\n */\n *upperRightValues() {\n for (let row = 0, col = 0; row < this.diagonalSize; void 0) {\n const value = this.get(row, col);\n\n yield value;\n\n // at the end of row, move cursor to next row at diagonal position\n if (++col >= this.diagonalSize) col = ++row;\n }\n }\n}\nSymmetricMatrix.prototype.klassType = 'SymmetricMatrix';\n\nclass DistanceMatrix extends SymmetricMatrix {\n /**\n * not the same as matrix.isSymmetric()\n * Here is to check if it's instanceof SymmetricMatrix without bundling issues\n *\n * @param value\n * @returns {boolean}\n */\n static isDistanceMatrix(value) {\n return (\n SymmetricMatrix.isSymmetricMatrix(value) &&\n value.klassSubType === 'DistanceMatrix'\n );\n }\n\n constructor(sideSize) {\n super(sideSize);\n\n if (!this.isDistance()) {\n throw new TypeError('Provided arguments do no produce a distance matrix');\n }\n }\n\n set(rowIndex, columnIndex, value) {\n // distance matrix diagonal is 0\n if (rowIndex === columnIndex) value = 0;\n\n return super.set(rowIndex, columnIndex, value);\n }\n\n addCross(index, array) {\n if (array === undefined) {\n array = index;\n index = this.diagonalSize;\n }\n\n // ensure distance\n array = array.slice();\n array[index] = 0;\n\n return super.addCross(index, array);\n }\n\n toSymmetricMatrix() {\n return new SymmetricMatrix(this);\n }\n\n clone() {\n const matrix = new DistanceMatrix(this.diagonalSize);\n\n for (const [row, col, value] of this.upperRightEntries()) {\n if (row === col) continue;\n matrix.set(row, col, value);\n }\n\n return matrix;\n }\n\n /**\n * Compact format upper-right corner of matrix\n * no diagonal (only zeros)\n * iterable from left to right, from top to bottom.\n *\n * ```\n * A B C D\n * A 0 1 2 3\n * B 1 0 4 5\n * C 2 4 0 6\n * D 3 5 6 0\n * ```\n *\n * will return compact 1D array `[1, 2, 3, 4, 5, 6]`\n *\n * length is S(i=0, n=sideSize-1) => 6 for a 4 side sized matrix\n *\n * @returns {number[]}\n */\n toCompact() {\n const { diagonalSize } = this;\n const compactLength = ((diagonalSize - 1) * diagonalSize) / 2;\n\n /** @type {number[]} */\n const compact = new Array(compactLength);\n for (let col = 1, row = 0, index = 0; index < compact.length; index++) {\n compact[index] = this.get(row, col);\n\n if (++col >= diagonalSize) col = ++row + 1;\n }\n\n return compact;\n }\n\n /**\n * @param {number[]} compact\n */\n static fromCompact(compact) {\n const compactSize = compact.length;\n\n if (compactSize === 0) {\n return new this(0);\n }\n\n // compactSize in Natural integer range ]0;∞]\n // compactSize = (sideSize * (sideSize - 1)) / 2\n // sideSize = (Sqrt(8 × compactSize + 1) + 1) / 2\n const diagonalSize = (Math.sqrt(8 * compactSize + 1) + 1) / 2;\n\n if (!Number.isInteger(diagonalSize)) {\n throw new TypeError(\n `This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(\n compact,\n )}`,\n );\n }\n\n const matrix = new this(diagonalSize);\n for (let col = 1, row = 0, index = 0; index < compactSize; index++) {\n matrix.set(col, row, compact[index]);\n if (++col >= diagonalSize) col = ++row + 1;\n }\n\n return matrix;\n }\n}\nDistanceMatrix.prototype.klassSubType = 'DistanceMatrix';\n\nclass BaseView extends AbstractMatrix {\n constructor(matrix, rows, columns) {\n super();\n this.matrix = matrix;\n this.rows = rows;\n this.columns = columns;\n }\n}\n\nclass MatrixColumnView extends BaseView {\n constructor(matrix, column) {\n checkColumnIndex(matrix, column);\n super(matrix, matrix.rows, 1);\n this.column = column;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.column, value);\n return this;\n }\n\n get(rowIndex) {\n return this.matrix.get(rowIndex, this.column);\n }\n}\n\nclass MatrixColumnSelectionView extends BaseView {\n constructor(matrix, columnIndices) {\n checkColumnIndices(matrix, columnIndices);\n super(matrix, matrix.rows, columnIndices.length);\n this.columnIndices = columnIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.columnIndices[columnIndex], value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(rowIndex, this.columnIndices[columnIndex]);\n }\n}\n\nclass MatrixFlipColumnView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.rows, matrix.columns);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(rowIndex, this.columns - columnIndex - 1, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(rowIndex, this.columns - columnIndex - 1);\n }\n}\n\nclass MatrixFlipRowView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.rows, matrix.columns);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.rows - rowIndex - 1, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.rows - rowIndex - 1, columnIndex);\n }\n}\n\nclass MatrixRowView extends BaseView {\n constructor(matrix, row) {\n checkRowIndex(matrix, row);\n super(matrix, 1, matrix.columns);\n this.row = row;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.row, columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.row, columnIndex);\n }\n}\n\nclass MatrixRowSelectionView extends BaseView {\n constructor(matrix, rowIndices) {\n checkRowIndices(matrix, rowIndices);\n super(matrix, rowIndices.length, matrix.columns);\n this.rowIndices = rowIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(this.rowIndices[rowIndex], columnIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(this.rowIndices[rowIndex], columnIndex);\n }\n}\n\nclass MatrixSelectionView extends BaseView {\n constructor(matrix, rowIndices, columnIndices) {\n checkRowIndices(matrix, rowIndices);\n checkColumnIndices(matrix, columnIndices);\n super(matrix, rowIndices.length, columnIndices.length);\n this.rowIndices = rowIndices;\n this.columnIndices = columnIndices;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.rowIndices[rowIndex],\n this.columnIndices[columnIndex],\n );\n }\n}\n\nclass MatrixSubView extends BaseView {\n constructor(matrix, startRow, endRow, startColumn, endColumn) {\n checkRange(matrix, startRow, endRow, startColumn, endColumn);\n super(matrix, endRow - startRow + 1, endColumn - startColumn + 1);\n this.startRow = startRow;\n this.startColumn = startColumn;\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n value,\n );\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(\n this.startRow + rowIndex,\n this.startColumn + columnIndex,\n );\n }\n}\n\nclass MatrixTransposeView extends BaseView {\n constructor(matrix) {\n super(matrix, matrix.columns, matrix.rows);\n }\n\n set(rowIndex, columnIndex, value) {\n this.matrix.set(columnIndex, rowIndex, value);\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.matrix.get(columnIndex, rowIndex);\n }\n}\n\nclass WrapperMatrix1D extends AbstractMatrix {\n constructor(data, options = {}) {\n const { rows = 1 } = options;\n\n if (data.length % rows !== 0) {\n throw new Error('the data length is not divisible by the number of rows');\n }\n super();\n this.rows = rows;\n this.columns = data.length / rows;\n this.data = data;\n }\n\n set(rowIndex, columnIndex, value) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n this.data[index] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n let index = this._calculateIndex(rowIndex, columnIndex);\n return this.data[index];\n }\n\n _calculateIndex(row, column) {\n return row * this.columns + column;\n }\n}\n\nclass WrapperMatrix2D extends AbstractMatrix {\n constructor(data) {\n super();\n this.data = data;\n this.rows = data.length;\n this.columns = data[0].length;\n }\n\n set(rowIndex, columnIndex, value) {\n this.data[rowIndex][columnIndex] = value;\n return this;\n }\n\n get(rowIndex, columnIndex) {\n return this.data[rowIndex][columnIndex];\n }\n}\n\nfunction wrap(array, options) {\n if (isAnyArray.isAnyArray(array)) {\n if (array[0] && isAnyArray.isAnyArray(array[0])) {\n return new WrapperMatrix2D(array);\n } else {\n return new WrapperMatrix1D(array, options);\n }\n } else {\n throw new Error('the argument is not an array');\n }\n}\n\nclass LuDecomposition {\n constructor(matrix) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n\n let lu = matrix.clone();\n let rows = lu.rows;\n let columns = lu.columns;\n let pivotVector = new Float64Array(rows);\n let pivotSign = 1;\n let i, j, k, p, s, t, v;\n let LUcolj, kmax;\n\n for (i = 0; i < rows; i++) {\n pivotVector[i] = i;\n }\n\n LUcolj = new Float64Array(rows);\n\n for (j = 0; j < columns; j++) {\n for (i = 0; i < rows; i++) {\n LUcolj[i] = lu.get(i, j);\n }\n\n for (i = 0; i < rows; i++) {\n kmax = Math.min(i, j);\n s = 0;\n for (k = 0; k < kmax; k++) {\n s += lu.get(i, k) * LUcolj[k];\n }\n LUcolj[i] -= s;\n lu.set(i, j, LUcolj[i]);\n }\n\n p = j;\n for (i = j + 1; i < rows; i++) {\n if (Math.abs(LUcolj[i]) > Math.abs(LUcolj[p])) {\n p = i;\n }\n }\n\n if (p !== j) {\n for (k = 0; k < columns; k++) {\n t = lu.get(p, k);\n lu.set(p, k, lu.get(j, k));\n lu.set(j, k, t);\n }\n\n v = pivotVector[p];\n pivotVector[p] = pivotVector[j];\n pivotVector[j] = v;\n\n pivotSign = -pivotSign;\n }\n\n if (j < rows && lu.get(j, j) !== 0) {\n for (i = j + 1; i < rows; i++) {\n lu.set(i, j, lu.get(i, j) / lu.get(j, j));\n }\n }\n }\n\n this.LU = lu;\n this.pivotVector = pivotVector;\n this.pivotSign = pivotSign;\n }\n\n isSingular() {\n let data = this.LU;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n if (data.get(j, j) === 0) {\n return true;\n }\n }\n return false;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let lu = this.LU;\n let rows = lu.rows;\n\n if (rows !== value.rows) {\n throw new Error('Invalid matrix dimensions');\n }\n if (this.isSingular()) {\n throw new Error('LU matrix is singular');\n }\n\n let count = value.columns;\n let X = value.subMatrixRow(this.pivotVector, 0, count - 1);\n let columns = lu.columns;\n let i, j, k;\n\n for (k = 0; k < columns; k++) {\n for (i = k + 1; i < columns; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n for (k = columns - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / lu.get(k, k));\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * lu.get(i, k));\n }\n }\n }\n return X;\n }\n\n get determinant() {\n let data = this.LU;\n if (!data.isSquare()) {\n throw new Error('Matrix must be square');\n }\n let determinant = this.pivotSign;\n let col = data.columns;\n for (let j = 0; j < col; j++) {\n determinant *= data.get(j, j);\n }\n return determinant;\n }\n\n get lowerTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i > j) {\n X.set(i, j, data.get(i, j));\n } else if (i === j) {\n X.set(i, j, 1);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get upperTriangularMatrix() {\n let data = this.LU;\n let rows = data.rows;\n let columns = data.columns;\n let X = new Matrix(rows, columns);\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < columns; j++) {\n if (i <= j) {\n X.set(i, j, data.get(i, j));\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get pivotPermutationVector() {\n return Array.from(this.pivotVector);\n }\n}\n\nfunction hypotenuse(a, b) {\n let r = 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n return Math.abs(a) * Math.sqrt(1 + r * r);\n }\n if (b !== 0) {\n r = a / b;\n return Math.abs(b) * Math.sqrt(1 + r * r);\n }\n return 0;\n}\n\nclass QrDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let qr = value.clone();\n let m = value.rows;\n let n = value.columns;\n let rdiag = new Float64Array(n);\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n let nrm = 0;\n for (i = k; i < m; i++) {\n nrm = hypotenuse(nrm, qr.get(i, k));\n }\n if (nrm !== 0) {\n if (qr.get(k, k) < 0) {\n nrm = -nrm;\n }\n for (i = k; i < m; i++) {\n qr.set(i, k, qr.get(i, k) / nrm);\n }\n qr.set(k, k, qr.get(k, k) + 1);\n for (j = k + 1; j < n; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * qr.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n qr.set(i, j, qr.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n rdiag[k] = -nrm;\n }\n\n this.QR = qr;\n this.Rdiag = rdiag;\n }\n\n solve(value) {\n value = Matrix.checkMatrix(value);\n\n let qr = this.QR;\n let m = qr.rows;\n\n if (value.rows !== m) {\n throw new Error('Matrix row dimensions must agree');\n }\n if (!this.isFullRank()) {\n throw new Error('Matrix is rank deficient');\n }\n\n let count = value.columns;\n let X = value.clone();\n let n = qr.columns;\n let i, j, k, s;\n\n for (k = 0; k < n; k++) {\n for (j = 0; j < count; j++) {\n s = 0;\n for (i = k; i < m; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n s = -s / qr.get(k, k);\n for (i = k; i < m; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n for (k = n - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n X.set(k, j, X.get(k, j) / this.Rdiag[k]);\n }\n for (i = 0; i < k; i++) {\n for (j = 0; j < count; j++) {\n X.set(i, j, X.get(i, j) - X.get(k, j) * qr.get(i, k));\n }\n }\n }\n\n return X.subMatrix(0, n - 1, 0, count - 1);\n }\n\n isFullRank() {\n let columns = this.QR.columns;\n for (let i = 0; i < columns; i++) {\n if (this.Rdiag[i] === 0) {\n return false;\n }\n }\n return true;\n }\n\n get upperTriangularMatrix() {\n let qr = this.QR;\n let n = qr.columns;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i < j) {\n X.set(i, j, qr.get(i, j));\n } else if (i === j) {\n X.set(i, j, this.Rdiag[i]);\n } else {\n X.set(i, j, 0);\n }\n }\n }\n return X;\n }\n\n get orthogonalMatrix() {\n let qr = this.QR;\n let rows = qr.rows;\n let columns = qr.columns;\n let X = new Matrix(rows, columns);\n let i, j, k, s;\n\n for (k = columns - 1; k >= 0; k--) {\n for (i = 0; i < rows; i++) {\n X.set(i, k, 0);\n }\n X.set(k, k, 1);\n for (j = k; j < columns; j++) {\n if (qr.get(k, k) !== 0) {\n s = 0;\n for (i = k; i < rows; i++) {\n s += qr.get(i, k) * X.get(i, j);\n }\n\n s = -s / qr.get(k, k);\n\n for (i = k; i < rows; i++) {\n X.set(i, j, X.get(i, j) + s * qr.get(i, k));\n }\n }\n }\n }\n return X;\n }\n}\n\nclass SingularValueDecomposition {\n constructor(value, options = {}) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n if (value.isEmpty()) {\n throw new Error('Matrix must be non-empty');\n }\n\n let m = value.rows;\n let n = value.columns;\n\n const {\n computeLeftSingularVectors = true,\n computeRightSingularVectors = true,\n autoTranspose = false,\n } = options;\n\n let wantu = Boolean(computeLeftSingularVectors);\n let wantv = Boolean(computeRightSingularVectors);\n\n let swapped = false;\n let a;\n if (m < n) {\n if (!autoTranspose) {\n a = value.clone();\n // eslint-disable-next-line no-console\n console.warn(\n 'Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose',\n );\n } else {\n a = value.transpose();\n m = a.rows;\n n = a.columns;\n swapped = true;\n let aux = wantu;\n wantu = wantv;\n wantv = aux;\n }\n } else {\n a = value.clone();\n }\n\n let nu = Math.min(m, n);\n let ni = Math.min(m + 1, n);\n let s = new Float64Array(ni);\n let U = new Matrix(m, nu);\n let V = new Matrix(n, n);\n\n let e = new Float64Array(n);\n let work = new Float64Array(m);\n\n let si = new Float64Array(ni);\n for (let i = 0; i < ni; i++) si[i] = i;\n\n let nct = Math.min(m - 1, n);\n let nrt = Math.max(0, Math.min(n - 2, m));\n let mrc = Math.max(nct, nrt);\n\n for (let k = 0; k < mrc; k++) {\n if (k < nct) {\n s[k] = 0;\n for (let i = k; i < m; i++) {\n s[k] = hypotenuse(s[k], a.get(i, k));\n }\n if (s[k] !== 0) {\n if (a.get(k, k) < 0) {\n s[k] = -s[k];\n }\n for (let i = k; i < m; i++) {\n a.set(i, k, a.get(i, k) / s[k]);\n }\n a.set(k, k, a.get(k, k) + 1);\n }\n s[k] = -s[k];\n }\n\n for (let j = k + 1; j < n; j++) {\n if (k < nct && s[k] !== 0) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += a.get(i, k) * a.get(i, j);\n }\n t = -t / a.get(k, k);\n for (let i = k; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * a.get(i, k));\n }\n }\n e[j] = a.get(k, j);\n }\n\n if (wantu && k < nct) {\n for (let i = k; i < m; i++) {\n U.set(i, k, a.get(i, k));\n }\n }\n\n if (k < nrt) {\n e[k] = 0;\n for (let i = k + 1; i < n; i++) {\n e[k] = hypotenuse(e[k], e[i]);\n }\n if (e[k] !== 0) {\n if (e[k + 1] < 0) {\n e[k] = 0 - e[k];\n }\n for (let i = k + 1; i < n; i++) {\n e[i] /= e[k];\n }\n e[k + 1] += 1;\n }\n e[k] = -e[k];\n if (k + 1 < m && e[k] !== 0) {\n for (let i = k + 1; i < m; i++) {\n work[i] = 0;\n }\n for (let i = k + 1; i < m; i++) {\n for (let j = k + 1; j < n; j++) {\n work[i] += e[j] * a.get(i, j);\n }\n }\n for (let j = k + 1; j < n; j++) {\n let t = -e[j] / e[k + 1];\n for (let i = k + 1; i < m; i++) {\n a.set(i, j, a.get(i, j) + t * work[i]);\n }\n }\n }\n if (wantv) {\n for (let i = k + 1; i < n; i++) {\n V.set(i, k, e[i]);\n }\n }\n }\n }\n\n let p = Math.min(n, m + 1);\n if (nct < n) {\n s[nct] = a.get(nct, nct);\n }\n if (m < p) {\n s[p - 1] = 0;\n }\n if (nrt + 1 < p) {\n e[nrt] = a.get(nrt, p - 1);\n }\n e[p - 1] = 0;\n\n if (wantu) {\n for (let j = nct; j < nu; j++) {\n for (let i = 0; i < m; i++) {\n U.set(i, j, 0);\n }\n U.set(j, j, 1);\n }\n for (let k = nct - 1; k >= 0; k--) {\n if (s[k] !== 0) {\n for (let j = k + 1; j < nu; j++) {\n let t = 0;\n for (let i = k; i < m; i++) {\n t += U.get(i, k) * U.get(i, j);\n }\n t = -t / U.get(k, k);\n for (let i = k; i < m; i++) {\n U.set(i, j, U.get(i, j) + t * U.get(i, k));\n }\n }\n for (let i = k; i < m; i++) {\n U.set(i, k, -U.get(i, k));\n }\n U.set(k, k, 1 + U.get(k, k));\n for (let i = 0; i < k - 1; i++) {\n U.set(i, k, 0);\n }\n } else {\n for (let i = 0; i < m; i++) {\n U.set(i, k, 0);\n }\n U.set(k, k, 1);\n }\n }\n }\n\n if (wantv) {\n for (let k = n - 1; k >= 0; k--) {\n if (k < nrt && e[k] !== 0) {\n for (let j = k + 1; j < n; j++) {\n let t = 0;\n for (let i = k + 1; i < n; i++) {\n t += V.get(i, k) * V.get(i, j);\n }\n t = -t / V.get(k + 1, k);\n for (let i = k + 1; i < n; i++) {\n V.set(i, j, V.get(i, j) + t * V.get(i, k));\n }\n }\n }\n for (let i = 0; i < n; i++) {\n V.set(i, k, 0);\n }\n V.set(k, k, 1);\n }\n }\n\n let pp = p - 1;\n let eps = Number.EPSILON;\n while (p > 0) {\n let k, kase;\n for (k = p - 2; k >= -1; k--) {\n if (k === -1) {\n break;\n }\n const alpha =\n Number.MIN_VALUE + eps * Math.abs(s[k] + Math.abs(s[k + 1]));\n if (Math.abs(e[k]) <= alpha || Number.isNaN(e[k])) {\n e[k] = 0;\n break;\n }\n }\n if (k === p - 2) {\n kase = 4;\n } else {\n let ks;\n for (ks = p - 1; ks >= k; ks--) {\n if (ks === k) {\n break;\n }\n let t =\n (ks !== p ? Math.abs(e[ks]) : 0) +\n (ks !== k + 1 ? Math.abs(e[ks - 1]) : 0);\n if (Math.abs(s[ks]) <= eps * t) {\n s[ks] = 0;\n break;\n }\n }\n if (ks === k) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n k = ks;\n }\n }\n\n k++;\n\n switch (kase) {\n case 1: {\n let f = e[p - 2];\n e[p - 2] = 0;\n for (let j = p - 2; j >= k; j--) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n if (j !== k) {\n f = -sn * e[j - 1];\n e[j - 1] = cs * e[j - 1];\n }\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, p - 1);\n V.set(i, p - 1, -sn * V.get(i, j) + cs * V.get(i, p - 1));\n V.set(i, j, t);\n }\n }\n }\n break;\n }\n case 2: {\n let f = e[k - 1];\n e[k - 1] = 0;\n for (let j = k; j < p; j++) {\n let t = hypotenuse(s[j], f);\n let cs = s[j] / t;\n let sn = f / t;\n s[j] = t;\n f = -sn * e[j];\n e[j] = cs * e[j];\n if (wantu) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, k - 1);\n U.set(i, k - 1, -sn * U.get(i, j) + cs * U.get(i, k - 1));\n U.set(i, j, t);\n }\n }\n }\n break;\n }\n case 3: {\n const scale = Math.max(\n Math.abs(s[p - 1]),\n Math.abs(s[p - 2]),\n Math.abs(e[p - 2]),\n Math.abs(s[k]),\n Math.abs(e[k]),\n );\n const sp = s[p - 1] / scale;\n const spm1 = s[p - 2] / scale;\n const epm1 = e[p - 2] / scale;\n const sk = s[k] / scale;\n const ek = e[k] / scale;\n const b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2;\n const c = sp * epm1 * (sp * epm1);\n let shift = 0;\n if (b !== 0 || c !== 0) {\n if (b < 0) {\n shift = 0 - Math.sqrt(b * b + c);\n } else {\n shift = Math.sqrt(b * b + c);\n }\n shift = c / (b + shift);\n }\n let f = (sk + sp) * (sk - sp) + shift;\n let g = sk * ek;\n for (let j = k; j < p - 1; j++) {\n let t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n let cs = f / t;\n let sn = g / t;\n if (j !== k) {\n e[j - 1] = t;\n }\n f = cs * s[j] + sn * e[j];\n e[j] = cs * e[j] - sn * s[j];\n g = sn * s[j + 1];\n s[j + 1] = cs * s[j + 1];\n if (wantv) {\n for (let i = 0; i < n; i++) {\n t = cs * V.get(i, j) + sn * V.get(i, j + 1);\n V.set(i, j + 1, -sn * V.get(i, j) + cs * V.get(i, j + 1));\n V.set(i, j, t);\n }\n }\n t = hypotenuse(f, g);\n if (t === 0) t = Number.MIN_VALUE;\n cs = f / t;\n sn = g / t;\n s[j] = t;\n f = cs * e[j] + sn * s[j + 1];\n s[j + 1] = -sn * e[j] + cs * s[j + 1];\n g = sn * e[j + 1];\n e[j + 1] = cs * e[j + 1];\n if (wantu && j < m - 1) {\n for (let i = 0; i < m; i++) {\n t = cs * U.get(i, j) + sn * U.get(i, j + 1);\n U.set(i, j + 1, -sn * U.get(i, j) + cs * U.get(i, j + 1));\n U.set(i, j, t);\n }\n }\n }\n e[p - 2] = f;\n break;\n }\n case 4: {\n if (s[k] <= 0) {\n s[k] = s[k] < 0 ? -s[k] : 0;\n if (wantv) {\n for (let i = 0; i <= pp; i++) {\n V.set(i, k, -V.get(i, k));\n }\n }\n }\n while (k < pp) {\n if (s[k] >= s[k + 1]) {\n break;\n }\n let t = s[k];\n s[k] = s[k + 1];\n s[k + 1] = t;\n if (wantv && k < n - 1) {\n for (let i = 0; i < n; i++) {\n t = V.get(i, k + 1);\n V.set(i, k + 1, V.get(i, k));\n V.set(i, k, t);\n }\n }\n if (wantu && k < m - 1) {\n for (let i = 0; i < m; i++) {\n t = U.get(i, k + 1);\n U.set(i, k + 1, U.get(i, k));\n U.set(i, k, t);\n }\n }\n k++;\n }\n p--;\n break;\n }\n // no default\n }\n }\n\n if (swapped) {\n let tmp = V;\n V = U;\n U = tmp;\n }\n\n this.m = m;\n this.n = n;\n this.s = s;\n this.U = U;\n this.V = V;\n }\n\n solve(value) {\n let Y = value;\n let e = this.threshold;\n let scols = this.s.length;\n let Ls = Matrix.zeros(scols, scols);\n\n for (let i = 0; i < scols; i++) {\n if (Math.abs(this.s[i]) <= e) {\n Ls.set(i, i, 0);\n } else {\n Ls.set(i, i, 1 / this.s[i]);\n }\n }\n\n let U = this.U;\n let V = this.rightSingularVectors;\n\n let VL = V.mmul(Ls);\n let vrows = V.rows;\n let urows = U.rows;\n let VLU = Matrix.zeros(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < scols; k++) {\n sum += VL.get(i, k) * U.get(j, k);\n }\n VLU.set(i, j, sum);\n }\n }\n\n return VLU.mmul(Y);\n }\n\n solveForDiagonal(value) {\n return this.solve(Matrix.diag(value));\n }\n\n inverse() {\n let V = this.V;\n let e = this.threshold;\n let vrows = V.rows;\n let vcols = V.columns;\n let X = new Matrix(vrows, this.s.length);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < vcols; j++) {\n if (Math.abs(this.s[j]) > e) {\n X.set(i, j, V.get(i, j) / this.s[j]);\n }\n }\n }\n\n let U = this.U;\n\n let urows = U.rows;\n let ucols = U.columns;\n let Y = new Matrix(vrows, urows);\n\n for (let i = 0; i < vrows; i++) {\n for (let j = 0; j < urows; j++) {\n let sum = 0;\n for (let k = 0; k < ucols; k++) {\n sum += X.get(i, k) * U.get(j, k);\n }\n Y.set(i, j, sum);\n }\n }\n\n return Y;\n }\n\n get condition() {\n return this.s[0] / this.s[Math.min(this.m, this.n) - 1];\n }\n\n get norm2() {\n return this.s[0];\n }\n\n get rank() {\n let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON;\n let r = 0;\n let s = this.s;\n for (let i = 0, ii = s.length; i < ii; i++) {\n if (s[i] > tol) {\n r++;\n }\n }\n return r;\n }\n\n get diagonal() {\n return Array.from(this.s);\n }\n\n get threshold() {\n return (Number.EPSILON / 2) * Math.max(this.m, this.n) * this.s[0];\n }\n\n get leftSingularVectors() {\n return this.U;\n }\n\n get rightSingularVectors() {\n return this.V;\n }\n\n get diagonalMatrix() {\n return Matrix.diag(this.s);\n }\n}\n\nfunction inverse(matrix, useSVD = false) {\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (useSVD) {\n return new SingularValueDecomposition(matrix).inverse();\n } else {\n return solve(matrix, Matrix.eye(matrix.rows));\n }\n}\n\nfunction solve(leftHandSide, rightHandSide, useSVD = false) {\n leftHandSide = WrapperMatrix2D.checkMatrix(leftHandSide);\n rightHandSide = WrapperMatrix2D.checkMatrix(rightHandSide);\n if (useSVD) {\n return new SingularValueDecomposition(leftHandSide).solve(rightHandSide);\n } else {\n return leftHandSide.isSquare()\n ? new LuDecomposition(leftHandSide).solve(rightHandSide)\n : new QrDecomposition(leftHandSide).solve(rightHandSide);\n }\n}\n\nfunction determinant(matrix) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isSquare()) {\n if (matrix.columns === 0) {\n return 1;\n }\n\n let a, b, c, d;\n if (matrix.columns === 2) {\n // 2 x 2 matrix\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(1, 0);\n d = matrix.get(1, 1);\n\n return a * d - b * c;\n } else if (matrix.columns === 3) {\n // 3 x 3 matrix\n let subMatrix0, subMatrix1, subMatrix2;\n subMatrix0 = new MatrixSelectionView(matrix, [1, 2], [1, 2]);\n subMatrix1 = new MatrixSelectionView(matrix, [1, 2], [0, 2]);\n subMatrix2 = new MatrixSelectionView(matrix, [1, 2], [0, 1]);\n a = matrix.get(0, 0);\n b = matrix.get(0, 1);\n c = matrix.get(0, 2);\n\n return (\n a * determinant(subMatrix0) -\n b * determinant(subMatrix1) +\n c * determinant(subMatrix2)\n );\n } else {\n // general purpose determinant using the LU decomposition\n return new LuDecomposition(matrix).determinant;\n }\n } else {\n throw Error('determinant can only be calculated for a square matrix');\n }\n}\n\nfunction xrange(n, exception) {\n let range = [];\n for (let i = 0; i < n; i++) {\n if (i !== exception) {\n range.push(i);\n }\n }\n return range;\n}\n\nfunction dependenciesOneRow(\n error,\n matrix,\n index,\n thresholdValue = 10e-10,\n thresholdError = 10e-10,\n) {\n if (error > thresholdError) {\n return new Array(matrix.rows + 1).fill(0);\n } else {\n let returnArray = matrix.addRow(index, [0]);\n for (let i = 0; i < returnArray.rows; i++) {\n if (Math.abs(returnArray.get(i, 0)) < thresholdValue) {\n returnArray.set(i, 0, 0);\n }\n }\n return returnArray.to1DArray();\n }\n}\n\nfunction linearDependencies(matrix, options = {}) {\n const { thresholdValue = 10e-10, thresholdError = 10e-10 } = options;\n matrix = Matrix.checkMatrix(matrix);\n\n let n = matrix.rows;\n let results = new Matrix(n, n);\n\n for (let i = 0; i < n; i++) {\n let b = Matrix.columnVector(matrix.getRow(i));\n let Abis = matrix.subMatrixRow(xrange(n, i)).transpose();\n let svd = new SingularValueDecomposition(Abis);\n let x = svd.solve(b);\n let error = Matrix.sub(b, Abis.mmul(x)).abs().max();\n results.setRow(\n i,\n dependenciesOneRow(error, x, i, thresholdValue, thresholdError),\n );\n }\n return results;\n}\n\nfunction pseudoInverse(matrix, threshold = Number.EPSILON) {\n matrix = Matrix.checkMatrix(matrix);\n if (matrix.isEmpty()) {\n // with a zero dimension, the pseudo-inverse is the transpose, since all 0xn and nx0 matrices are singular\n // (0xn)*(nx0)*(0xn) = 0xn\n // (nx0)*(0xn)*(nx0) = nx0\n return matrix.transpose();\n }\n let svdSolution = new SingularValueDecomposition(matrix, { autoTranspose: true });\n\n let U = svdSolution.leftSingularVectors;\n let V = svdSolution.rightSingularVectors;\n let s = svdSolution.diagonal;\n\n for (let i = 0; i < s.length; i++) {\n if (Math.abs(s[i]) > threshold) {\n s[i] = 1.0 / s[i];\n } else {\n s[i] = 0.0;\n }\n }\n\n return V.mmul(Matrix.diag(s).mmul(U.transpose()));\n}\n\nfunction covariance(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = new Matrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !isAnyArray.isAnyArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = new Matrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n const { center = true } = options;\n if (center) {\n xMatrix = xMatrix.center('column');\n if (!yIsSame) {\n yMatrix = yMatrix.center('column');\n }\n }\n const cov = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < cov.rows; i++) {\n for (let j = 0; j < cov.columns; j++) {\n cov.set(i, j, cov.get(i, j) * (1 / (xMatrix.rows - 1)));\n }\n }\n return cov;\n}\n\nfunction correlation(xMatrix, yMatrix = xMatrix, options = {}) {\n xMatrix = new Matrix(xMatrix);\n let yIsSame = false;\n if (\n typeof yMatrix === 'object' &&\n !Matrix.isMatrix(yMatrix) &&\n !isAnyArray.isAnyArray(yMatrix)\n ) {\n options = yMatrix;\n yMatrix = xMatrix;\n yIsSame = true;\n } else {\n yMatrix = new Matrix(yMatrix);\n }\n if (xMatrix.rows !== yMatrix.rows) {\n throw new TypeError('Both matrices must have the same number of rows');\n }\n\n const { center = true, scale = true } = options;\n if (center) {\n xMatrix.center('column');\n if (!yIsSame) {\n yMatrix.center('column');\n }\n }\n if (scale) {\n xMatrix.scale('column');\n if (!yIsSame) {\n yMatrix.scale('column');\n }\n }\n\n const sdx = xMatrix.standardDeviation('column', { unbiased: true });\n const sdy = yIsSame\n ? sdx\n : yMatrix.standardDeviation('column', { unbiased: true });\n\n const corr = xMatrix.transpose().mmul(yMatrix);\n for (let i = 0; i < corr.rows; i++) {\n for (let j = 0; j < corr.columns; j++) {\n corr.set(\n i,\n j,\n corr.get(i, j) * (1 / (sdx[i] * sdy[j])) * (1 / (xMatrix.rows - 1)),\n );\n }\n }\n return corr;\n}\n\nclass EigenvalueDecomposition {\n constructor(matrix, options = {}) {\n const { assumeSymmetric = false } = options;\n\n matrix = WrapperMatrix2D.checkMatrix(matrix);\n if (!matrix.isSquare()) {\n throw new Error('Matrix is not a square matrix');\n }\n\n if (matrix.isEmpty()) {\n throw new Error('Matrix must be non-empty');\n }\n\n let n = matrix.columns;\n let V = new Matrix(n, n);\n let d = new Float64Array(n);\n let e = new Float64Array(n);\n let value = matrix;\n let i, j;\n\n let isSymmetric = false;\n if (assumeSymmetric) {\n isSymmetric = true;\n } else {\n isSymmetric = matrix.isSymmetric();\n }\n\n if (isSymmetric) {\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, value.get(i, j));\n }\n }\n tred2(n, e, d, V);\n tql2(n, e, d, V);\n } else {\n let H = new Matrix(n, n);\n let ort = new Float64Array(n);\n for (j = 0; j < n; j++) {\n for (i = 0; i < n; i++) {\n H.set(i, j, value.get(i, j));\n }\n }\n orthes(n, H, ort, V);\n hqr2(n, e, d, V, H);\n }\n\n this.n = n;\n this.e = e;\n this.d = d;\n this.V = V;\n }\n\n get realEigenvalues() {\n return Array.from(this.d);\n }\n\n get imaginaryEigenvalues() {\n return Array.from(this.e);\n }\n\n get eigenvectorMatrix() {\n return this.V;\n }\n\n get diagonalMatrix() {\n let n = this.n;\n let e = this.e;\n let d = this.d;\n let X = new Matrix(n, n);\n let i, j;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n X.set(i, j, 0);\n }\n X.set(i, i, d[i]);\n if (e[i] > 0) {\n X.set(i, i + 1, e[i]);\n } else if (e[i] < 0) {\n X.set(i, i - 1, e[i]);\n }\n }\n return X;\n }\n}\n\nfunction tred2(n, e, d, V) {\n let f, g, h, i, j, k, hh, scale;\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n }\n\n for (i = n - 1; i > 0; i--) {\n scale = 0;\n h = 0;\n for (k = 0; k < i; k++) {\n scale = scale + Math.abs(d[k]);\n }\n\n if (scale === 0) {\n e[i] = d[i - 1];\n for (j = 0; j < i; j++) {\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n V.set(j, i, 0);\n }\n } else {\n for (k = 0; k < i; k++) {\n d[k] /= scale;\n h += d[k] * d[k];\n }\n\n f = d[i - 1];\n g = Math.sqrt(h);\n if (f > 0) {\n g = -g;\n }\n\n e[i] = scale * g;\n h = h - f * g;\n d[i - 1] = f - g;\n for (j = 0; j < i; j++) {\n e[j] = 0;\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n V.set(j, i, f);\n g = e[j] + V.get(j, j) * f;\n for (k = j + 1; k <= i - 1; k++) {\n g += V.get(k, j) * d[k];\n e[k] += V.get(k, j) * f;\n }\n e[j] = g;\n }\n\n f = 0;\n for (j = 0; j < i; j++) {\n e[j] /= h;\n f += e[j] * d[j];\n }\n\n hh = f / (h + h);\n for (j = 0; j < i; j++) {\n e[j] -= hh * d[j];\n }\n\n for (j = 0; j < i; j++) {\n f = d[j];\n g = e[j];\n for (k = j; k <= i - 1; k++) {\n V.set(k, j, V.get(k, j) - (f * e[k] + g * d[k]));\n }\n d[j] = V.get(i - 1, j);\n V.set(i, j, 0);\n }\n }\n d[i] = h;\n }\n\n for (i = 0; i < n - 1; i++) {\n V.set(n - 1, i, V.get(i, i));\n V.set(i, i, 1);\n h = d[i + 1];\n if (h !== 0) {\n for (k = 0; k <= i; k++) {\n d[k] = V.get(k, i + 1) / h;\n }\n\n for (j = 0; j <= i; j++) {\n g = 0;\n for (k = 0; k <= i; k++) {\n g += V.get(k, i + 1) * V.get(k, j);\n }\n for (k = 0; k <= i; k++) {\n V.set(k, j, V.get(k, j) - g * d[k]);\n }\n }\n }\n\n for (k = 0; k <= i; k++) {\n V.set(k, i + 1, 0);\n }\n }\n\n for (j = 0; j < n; j++) {\n d[j] = V.get(n - 1, j);\n V.set(n - 1, j, 0);\n }\n\n V.set(n - 1, n - 1, 1);\n e[0] = 0;\n}\n\nfunction tql2(n, e, d, V) {\n let g, h, i, j, k, l, m, p, r, dl1, c, c2, c3, el1, s, s2;\n\n for (i = 1; i < n; i++) {\n e[i - 1] = e[i];\n }\n\n e[n - 1] = 0;\n\n let f = 0;\n let tst1 = 0;\n let eps = Number.EPSILON;\n\n for (l = 0; l < n; l++) {\n tst1 = Math.max(tst1, Math.abs(d[l]) + Math.abs(e[l]));\n m = l;\n while (m < n) {\n if (Math.abs(e[m]) <= eps * tst1) {\n break;\n }\n m++;\n }\n\n if (m > l) {\n do {\n\n g = d[l];\n p = (d[l + 1] - g) / (2 * e[l]);\n r = hypotenuse(p, 1);\n if (p < 0) {\n r = -r;\n }\n\n d[l] = e[l] / (p + r);\n d[l + 1] = e[l] * (p + r);\n dl1 = d[l + 1];\n h = g - d[l];\n for (i = l + 2; i < n; i++) {\n d[i] -= h;\n }\n\n f = f + h;\n\n p = d[m];\n c = 1;\n c2 = c;\n c3 = c;\n el1 = e[l + 1];\n s = 0;\n s2 = 0;\n for (i = m - 1; i >= l; i--) {\n c3 = c2;\n c2 = c;\n s2 = s;\n g = c * e[i];\n h = c * p;\n r = hypotenuse(p, e[i]);\n e[i + 1] = s * r;\n s = e[i] / r;\n c = p / r;\n p = c * d[i] - s * g;\n d[i + 1] = h + s * (c * g + s * d[i]);\n\n for (k = 0; k < n; k++) {\n h = V.get(k, i + 1);\n V.set(k, i + 1, s * V.get(k, i) + c * h);\n V.set(k, i, c * V.get(k, i) - s * h);\n }\n }\n\n p = (-s * s2 * c3 * el1 * e[l]) / dl1;\n e[l] = s * p;\n d[l] = c * p;\n } while (Math.abs(e[l]) > eps * tst1);\n }\n d[l] = d[l] + f;\n e[l] = 0;\n }\n\n for (i = 0; i < n - 1; i++) {\n k = i;\n p = d[i];\n for (j = i + 1; j < n; j++) {\n if (d[j] < p) {\n k = j;\n p = d[j];\n }\n }\n\n if (k !== i) {\n d[k] = d[i];\n d[i] = p;\n for (j = 0; j < n; j++) {\n p = V.get(j, i);\n V.set(j, i, V.get(j, k));\n V.set(j, k, p);\n }\n }\n }\n}\n\nfunction orthes(n, H, ort, V) {\n let low = 0;\n let high = n - 1;\n let f, g, h, i, j, m;\n let scale;\n\n for (m = low + 1; m <= high - 1; m++) {\n scale = 0;\n for (i = m; i <= high; i++) {\n scale = scale + Math.abs(H.get(i, m - 1));\n }\n\n if (scale !== 0) {\n h = 0;\n for (i = high; i >= m; i--) {\n ort[i] = H.get(i, m - 1) / scale;\n h += ort[i] * ort[i];\n }\n\n g = Math.sqrt(h);\n if (ort[m] > 0) {\n g = -g;\n }\n\n h = h - ort[m] * g;\n ort[m] = ort[m] - g;\n\n for (j = m; j < n; j++) {\n f = 0;\n for (i = high; i >= m; i--) {\n f += ort[i] * H.get(i, j);\n }\n\n f = f / h;\n for (i = m; i <= high; i++) {\n H.set(i, j, H.get(i, j) - f * ort[i]);\n }\n }\n\n for (i = 0; i <= high; i++) {\n f = 0;\n for (j = high; j >= m; j--) {\n f += ort[j] * H.get(i, j);\n }\n\n f = f / h;\n for (j = m; j <= high; j++) {\n H.set(i, j, H.get(i, j) - f * ort[j]);\n }\n }\n\n ort[m] = scale * ort[m];\n H.set(m, m - 1, scale * g);\n }\n }\n\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n V.set(i, j, i === j ? 1 : 0);\n }\n }\n\n for (m = high - 1; m >= low + 1; m--) {\n if (H.get(m, m - 1) !== 0) {\n for (i = m + 1; i <= high; i++) {\n ort[i] = H.get(i, m - 1);\n }\n\n for (j = m; j <= high; j++) {\n g = 0;\n for (i = m; i <= high; i++) {\n g += ort[i] * V.get(i, j);\n }\n\n g = g / ort[m] / H.get(m, m - 1);\n for (i = m; i <= high; i++) {\n V.set(i, j, V.get(i, j) + g * ort[i]);\n }\n }\n }\n }\n}\n\nfunction hqr2(nn, e, d, V, H) {\n let n = nn - 1;\n let low = 0;\n let high = nn - 1;\n let eps = Number.EPSILON;\n let exshift = 0;\n let norm = 0;\n let p = 0;\n let q = 0;\n let r = 0;\n let s = 0;\n let z = 0;\n let iter = 0;\n let i, j, k, l, m, t, w, x, y;\n let ra, sa, vr, vi;\n let notlast, cdivres;\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n d[i] = H.get(i, i);\n e[i] = 0;\n }\n\n for (j = Math.max(i - 1, 0); j < nn; j++) {\n norm = norm + Math.abs(H.get(i, j));\n }\n }\n\n while (n >= low) {\n l = n;\n while (l > low) {\n s = Math.abs(H.get(l - 1, l - 1)) + Math.abs(H.get(l, l));\n if (s === 0) {\n s = norm;\n }\n if (Math.abs(H.get(l, l - 1)) < eps * s) {\n break;\n }\n l--;\n }\n\n if (l === n) {\n H.set(n, n, H.get(n, n) + exshift);\n d[n] = H.get(n, n);\n e[n] = 0;\n n--;\n iter = 0;\n } else if (l === n - 1) {\n w = H.get(n, n - 1) * H.get(n - 1, n);\n p = (H.get(n - 1, n - 1) - H.get(n, n)) / 2;\n q = p * p + w;\n z = Math.sqrt(Math.abs(q));\n H.set(n, n, H.get(n, n) + exshift);\n H.set(n - 1, n - 1, H.get(n - 1, n - 1) + exshift);\n x = H.get(n, n);\n\n if (q >= 0) {\n z = p >= 0 ? p + z : p - z;\n d[n - 1] = x + z;\n d[n] = d[n - 1];\n if (z !== 0) {\n d[n] = x - w / z;\n }\n e[n - 1] = 0;\n e[n] = 0;\n x = H.get(n, n - 1);\n s = Math.abs(x) + Math.abs(z);\n p = x / s;\n q = z / s;\n r = Math.sqrt(p * p + q * q);\n p = p / r;\n q = q / r;\n\n for (j = n - 1; j < nn; j++) {\n z = H.get(n - 1, j);\n H.set(n - 1, j, q * z + p * H.get(n, j));\n H.set(n, j, q * H.get(n, j) - p * z);\n }\n\n for (i = 0; i <= n; i++) {\n z = H.get(i, n - 1);\n H.set(i, n - 1, q * z + p * H.get(i, n));\n H.set(i, n, q * H.get(i, n) - p * z);\n }\n\n for (i = low; i <= high; i++) {\n z = V.get(i, n - 1);\n V.set(i, n - 1, q * z + p * V.get(i, n));\n V.set(i, n, q * V.get(i, n) - p * z);\n }\n } else {\n d[n - 1] = x + p;\n d[n] = x + p;\n e[n - 1] = z;\n e[n] = -z;\n }\n\n n = n - 2;\n iter = 0;\n } else {\n x = H.get(n, n);\n y = 0;\n w = 0;\n if (l < n) {\n y = H.get(n - 1, n - 1);\n w = H.get(n, n - 1) * H.get(n - 1, n);\n }\n\n if (iter === 10) {\n exshift += x;\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - x);\n }\n s = Math.abs(H.get(n, n - 1)) + Math.abs(H.get(n - 1, n - 2));\n // eslint-disable-next-line no-multi-assign\n x = y = 0.75 * s;\n w = -0.4375 * s * s;\n }\n\n if (iter === 30) {\n s = (y - x) / 2;\n s = s * s + w;\n if (s > 0) {\n s = Math.sqrt(s);\n if (y < x) {\n s = -s;\n }\n s = x - w / ((y - x) / 2 + s);\n for (i = low; i <= n; i++) {\n H.set(i, i, H.get(i, i) - s);\n }\n exshift += s;\n // eslint-disable-next-line no-multi-assign\n x = y = w = 0.964;\n }\n }\n\n iter = iter + 1;\n\n m = n - 2;\n while (m >= l) {\n z = H.get(m, m);\n r = x - z;\n s = y - z;\n p = (r * s - w) / H.get(m + 1, m) + H.get(m, m + 1);\n q = H.get(m + 1, m + 1) - z - r - s;\n r = H.get(m + 2, m + 1);\n s = Math.abs(p) + Math.abs(q) + Math.abs(r);\n p = p / s;\n q = q / s;\n r = r / s;\n if (m === l) {\n break;\n }\n if (\n Math.abs(H.get(m, m - 1)) * (Math.abs(q) + Math.abs(r)) <\n eps *\n (Math.abs(p) *\n (Math.abs(H.get(m - 1, m - 1)) +\n Math.abs(z) +\n Math.abs(H.get(m + 1, m + 1))))\n ) {\n break;\n }\n m--;\n }\n\n for (i = m + 2; i <= n; i++) {\n H.set(i, i - 2, 0);\n if (i > m + 2) {\n H.set(i, i - 3, 0);\n }\n }\n\n for (k = m; k <= n - 1; k++) {\n notlast = k !== n - 1;\n if (k !== m) {\n p = H.get(k, k - 1);\n q = H.get(k + 1, k - 1);\n r = notlast ? H.get(k + 2, k - 1) : 0;\n x = Math.abs(p) + Math.abs(q) + Math.abs(r);\n if (x !== 0) {\n p = p / x;\n q = q / x;\n r = r / x;\n }\n }\n\n if (x === 0) {\n break;\n }\n\n s = Math.sqrt(p * p + q * q + r * r);\n if (p < 0) {\n s = -s;\n }\n\n if (s !== 0) {\n if (k !== m) {\n H.set(k, k - 1, -s * x);\n } else if (l !== m) {\n H.set(k, k - 1, -H.get(k, k - 1));\n }\n\n p = p + s;\n x = p / s;\n y = q / s;\n z = r / s;\n q = q / p;\n r = r / p;\n\n for (j = k; j < nn; j++) {\n p = H.get(k, j) + q * H.get(k + 1, j);\n if (notlast) {\n p = p + r * H.get(k + 2, j);\n H.set(k + 2, j, H.get(k + 2, j) - p * z);\n }\n\n H.set(k, j, H.get(k, j) - p * x);\n H.set(k + 1, j, H.get(k + 1, j) - p * y);\n }\n\n for (i = 0; i <= Math.min(n, k + 3); i++) {\n p = x * H.get(i, k) + y * H.get(i, k + 1);\n if (notlast) {\n p = p + z * H.get(i, k + 2);\n H.set(i, k + 2, H.get(i, k + 2) - p * r);\n }\n\n H.set(i, k, H.get(i, k) - p);\n H.set(i, k + 1, H.get(i, k + 1) - p * q);\n }\n\n for (i = low; i <= high; i++) {\n p = x * V.get(i, k) + y * V.get(i, k + 1);\n if (notlast) {\n p = p + z * V.get(i, k + 2);\n V.set(i, k + 2, V.get(i, k + 2) - p * r);\n }\n\n V.set(i, k, V.get(i, k) - p);\n V.set(i, k + 1, V.get(i, k + 1) - p * q);\n }\n }\n }\n }\n }\n\n if (norm === 0) {\n return;\n }\n\n for (n = nn - 1; n >= 0; n--) {\n p = d[n];\n q = e[n];\n\n if (q === 0) {\n l = n;\n H.set(n, n, 1);\n for (i = n - 1; i >= 0; i--) {\n w = H.get(i, i) - p;\n r = 0;\n for (j = l; j <= n; j++) {\n r = r + H.get(i, j) * H.get(j, n);\n }\n\n if (e[i] < 0) {\n z = w;\n s = r;\n } else {\n l = i;\n if (e[i] === 0) {\n H.set(i, n, w !== 0 ? -r / w : -r / (eps * norm));\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n q = (d[i] - p) * (d[i] - p) + e[i] * e[i];\n t = (x * s - z * r) / q;\n H.set(i, n, t);\n H.set(\n i + 1,\n n,\n Math.abs(x) > Math.abs(z) ? (-r - w * t) / x : (-s - y * t) / z,\n );\n }\n\n t = Math.abs(H.get(i, n));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n } else if (q < 0) {\n l = n - 1;\n\n if (Math.abs(H.get(n, n - 1)) > Math.abs(H.get(n - 1, n))) {\n H.set(n - 1, n - 1, q / H.get(n, n - 1));\n H.set(n - 1, n, -(H.get(n, n) - p) / H.get(n, n - 1));\n } else {\n cdivres = cdiv(0, -H.get(n - 1, n), H.get(n - 1, n - 1) - p, q);\n H.set(n - 1, n - 1, cdivres[0]);\n H.set(n - 1, n, cdivres[1]);\n }\n\n H.set(n, n - 1, 0);\n H.set(n, n, 1);\n for (i = n - 2; i >= 0; i--) {\n ra = 0;\n sa = 0;\n for (j = l; j <= n; j++) {\n ra = ra + H.get(i, j) * H.get(j, n - 1);\n sa = sa + H.get(i, j) * H.get(j, n);\n }\n\n w = H.get(i, i) - p;\n\n if (e[i] < 0) {\n z = w;\n r = ra;\n s = sa;\n } else {\n l = i;\n if (e[i] === 0) {\n cdivres = cdiv(-ra, -sa, w, q);\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n } else {\n x = H.get(i, i + 1);\n y = H.get(i + 1, i);\n vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q;\n vi = (d[i] - p) * 2 * q;\n if (vr === 0 && vi === 0) {\n vr =\n eps *\n norm *\n (Math.abs(w) +\n Math.abs(q) +\n Math.abs(x) +\n Math.abs(y) +\n Math.abs(z));\n }\n cdivres = cdiv(\n x * r - z * ra + q * sa,\n x * s - z * sa - q * ra,\n vr,\n vi,\n );\n H.set(i, n - 1, cdivres[0]);\n H.set(i, n, cdivres[1]);\n if (Math.abs(x) > Math.abs(z) + Math.abs(q)) {\n H.set(\n i + 1,\n n - 1,\n (-ra - w * H.get(i, n - 1) + q * H.get(i, n)) / x,\n );\n H.set(\n i + 1,\n n,\n (-sa - w * H.get(i, n) - q * H.get(i, n - 1)) / x,\n );\n } else {\n cdivres = cdiv(\n -r - y * H.get(i, n - 1),\n -s - y * H.get(i, n),\n z,\n q,\n );\n H.set(i + 1, n - 1, cdivres[0]);\n H.set(i + 1, n, cdivres[1]);\n }\n }\n\n t = Math.max(Math.abs(H.get(i, n - 1)), Math.abs(H.get(i, n)));\n if (eps * t * t > 1) {\n for (j = i; j <= n; j++) {\n H.set(j, n - 1, H.get(j, n - 1) / t);\n H.set(j, n, H.get(j, n) / t);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < nn; i++) {\n if (i < low || i > high) {\n for (j = i; j < nn; j++) {\n V.set(i, j, H.get(i, j));\n }\n }\n }\n\n for (j = nn - 1; j >= low; j--) {\n for (i = low; i <= high; i++) {\n z = 0;\n for (k = low; k <= Math.min(j, high); k++) {\n z = z + V.get(i, k) * H.get(k, j);\n }\n V.set(i, j, z);\n }\n }\n}\n\nfunction cdiv(xr, xi, yr, yi) {\n let r, d;\n if (Math.abs(yr) > Math.abs(yi)) {\n r = yi / yr;\n d = yr + r * yi;\n return [(xr + r * xi) / d, (xi - r * xr) / d];\n } else {\n r = yr / yi;\n d = yi + r * yr;\n return [(r * xr + xi) / d, (r * xi - xr) / d];\n }\n}\n\nclass CholeskyDecomposition {\n constructor(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n if (!value.isSymmetric()) {\n throw new Error('Matrix is not symmetric');\n }\n\n let a = value;\n let dimension = a.rows;\n let l = new Matrix(dimension, dimension);\n let positiveDefinite = true;\n let i, j, k;\n\n for (j = 0; j < dimension; j++) {\n let d = 0;\n for (k = 0; k < j; k++) {\n let s = 0;\n for (i = 0; i < k; i++) {\n s += l.get(k, i) * l.get(j, i);\n }\n s = (a.get(j, k) - s) / l.get(k, k);\n l.set(j, k, s);\n d = d + s * s;\n }\n\n d = a.get(j, j) - d;\n\n positiveDefinite &&= d > 0;\n l.set(j, j, Math.sqrt(Math.max(d, 0)));\n for (k = j + 1; k < dimension; k++) {\n l.set(j, k, 0);\n }\n }\n\n this.L = l;\n this.positiveDefinite = positiveDefinite;\n }\n\n isPositiveDefinite() {\n return this.positiveDefinite;\n }\n\n solve(value) {\n value = WrapperMatrix2D.checkMatrix(value);\n\n let l = this.L;\n let dimension = l.rows;\n\n if (value.rows !== dimension) {\n throw new Error('Matrix dimensions do not match');\n }\n if (this.isPositiveDefinite() === false) {\n throw new Error('Matrix is not positive definite');\n }\n\n let count = value.columns;\n let B = value.clone();\n let i, j, k;\n\n for (k = 0; k < dimension; k++) {\n for (j = 0; j < count; j++) {\n for (i = 0; i < k; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(k, i));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n for (k = dimension - 1; k >= 0; k--) {\n for (j = 0; j < count; j++) {\n for (i = k + 1; i < dimension; i++) {\n B.set(k, j, B.get(k, j) - B.get(i, j) * l.get(i, k));\n }\n B.set(k, j, B.get(k, j) / l.get(k, k));\n }\n }\n\n return B;\n }\n\n get lowerTriangularMatrix() {\n return this.L;\n }\n}\n\nclass nipals {\n constructor(X, options = {}) {\n X = WrapperMatrix2D.checkMatrix(X);\n let { Y } = options;\n const {\n scaleScores = false,\n maxIterations = 1000,\n terminationCriteria = 1e-10,\n } = options;\n\n let u;\n if (Y) {\n if (isAnyArray.isAnyArray(Y) && typeof Y[0] === 'number') {\n Y = Matrix.columnVector(Y);\n } else {\n Y = WrapperMatrix2D.checkMatrix(Y);\n }\n if (Y.rows !== X.rows) {\n throw new Error('Y should have the same number of rows as X');\n }\n u = Y.getColumnVector(0);\n } else {\n u = X.getColumnVector(0);\n }\n\n let diff = 1;\n let t, q, w, tOld;\n\n for (\n let counter = 0;\n counter < maxIterations && diff > terminationCriteria;\n counter++\n ) {\n w = X.transpose().mmul(u).div(u.transpose().mmul(u).get(0, 0));\n w = w.div(w.norm());\n\n t = X.mmul(w).div(w.transpose().mmul(w).get(0, 0));\n\n if (counter > 0) {\n diff = t.clone().sub(tOld).pow(2).sum();\n }\n tOld = t.clone();\n\n if (Y) {\n q = Y.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n q = q.div(q.norm());\n\n u = Y.mmul(q).div(q.transpose().mmul(q).get(0, 0));\n } else {\n u = t;\n }\n }\n\n if (Y) {\n let p = X.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n p = p.div(p.norm());\n let xResidual = X.clone().sub(t.clone().mmul(p.transpose()));\n let residual = u.transpose().mmul(t).div(t.transpose().mmul(t).get(0, 0));\n let yResidual = Y.clone().sub(\n t.clone().mulS(residual.get(0, 0)).mmul(q.transpose()),\n );\n\n this.t = t;\n this.p = p.transpose();\n this.w = w.transpose();\n this.q = q;\n this.u = u;\n this.s = t.transpose().mmul(t);\n this.xResidual = xResidual;\n this.yResidual = yResidual;\n this.betas = residual;\n } else {\n this.w = w.transpose();\n this.s = t.transpose().mmul(t).sqrt();\n if (scaleScores) {\n this.t = t.clone().div(this.s.get(0, 0));\n } else {\n this.t = t;\n }\n this.xResidual = X.sub(t.mmul(w.transpose()));\n }\n }\n}\n\nexports.AbstractMatrix = AbstractMatrix;\nexports.CHO = CholeskyDecomposition;\nexports.CholeskyDecomposition = CholeskyDecomposition;\nexports.DistanceMatrix = DistanceMatrix;\nexports.EVD = EigenvalueDecomposition;\nexports.EigenvalueDecomposition = EigenvalueDecomposition;\nexports.LU = LuDecomposition;\nexports.LuDecomposition = LuDecomposition;\nexports.Matrix = Matrix;\nexports.MatrixColumnSelectionView = MatrixColumnSelectionView;\nexports.MatrixColumnView = MatrixColumnView;\nexports.MatrixFlipColumnView = MatrixFlipColumnView;\nexports.MatrixFlipRowView = MatrixFlipRowView;\nexports.MatrixRowSelectionView = MatrixRowSelectionView;\nexports.MatrixRowView = MatrixRowView;\nexports.MatrixSelectionView = MatrixSelectionView;\nexports.MatrixSubView = MatrixSubView;\nexports.MatrixTransposeView = MatrixTransposeView;\nexports.NIPALS = nipals;\nexports.Nipals = nipals;\nexports.QR = QrDecomposition;\nexports.QrDecomposition = QrDecomposition;\nexports.SVD = SingularValueDecomposition;\nexports.SingularValueDecomposition = SingularValueDecomposition;\nexports.SymmetricMatrix = SymmetricMatrix;\nexports.WrapperMatrix1D = WrapperMatrix1D;\nexports.WrapperMatrix2D = WrapperMatrix2D;\nexports.correlation = correlation;\nexports.covariance = covariance;\nexports.default = Matrix;\nexports.determinant = determinant;\nexports.inverse = inverse;\nexports.linearDependencies = linearDependencies;\nexports.pseudoInverse = pseudoInverse;\nexports.solve = solve;\nexports.wrap = wrap;\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array, except those that contain bigint values).\n *\n * @param value - Object to check.\n * @returns True if the object is an array or a typed array.\n */\nexport function isAnyArray(value) {\n const tag = toString.call(value);\n return tag.endsWith('Array]') && !tag.includes('Big');\n}\n//# sourceMappingURL=index.js.map","import { isAnyArray } from 'is-any-array';\nimport max from 'ml-array-max';\nimport min from 'ml-array-min';\n\nfunction rescale(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n } else if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var output;\n\n if (options.output !== undefined) {\n if (!isAnyArray(options.output)) {\n throw new TypeError('output option must be an array if specified');\n }\n\n output = options.output;\n } else {\n output = new Array(input.length);\n }\n\n var currentMin = min(input);\n var currentMax = max(input);\n\n if (currentMin === currentMax) {\n throw new RangeError('minimum and maximum input values are equal. Cannot rescale a constant array');\n }\n\n var _options$min = options.min,\n minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min,\n _options$max = options.max,\n maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max;\n\n if (minValue >= maxValue) {\n throw new RangeError('min option must be smaller than max option');\n }\n\n var factor = (maxValue - minValue) / (currentMax - currentMin);\n\n for (var i = 0; i < input.length; i++) {\n output[i] = (input[i] - currentMin) * factor + minValue;\n }\n\n return output;\n}\n\nexport { rescale as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction min(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var _options$fromIndex = options.fromIndex,\n fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n _options$toIndex = options.toIndex,\n toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n throw new Error('fromIndex must be a positive integer smaller than length');\n }\n\n if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n }\n\n var minValue = input[fromIndex];\n\n for (var i = fromIndex + 1; i < toIndex; i++) {\n if (input[i] < minValue) minValue = input[i];\n }\n\n return minValue;\n}\n\nexport { min as default };\n","import { isAnyArray } from 'is-any-array';\n\nfunction max(input) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!isAnyArray(input)) {\n throw new TypeError('input must be an array');\n }\n\n if (input.length === 0) {\n throw new TypeError('input must not be empty');\n }\n\n var _options$fromIndex = options.fromIndex,\n fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex,\n _options$toIndex = options.toIndex,\n toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex;\n\n if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) {\n throw new Error('fromIndex must be a positive integer smaller than length');\n }\n\n if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) {\n throw new Error('toIndex must be an integer greater than fromIndex and at most equal to length');\n }\n\n var maxValue = input[fromIndex];\n\n for (var i = fromIndex + 1; i < toIndex; i++) {\n if (input[i] > maxValue) maxValue = input[i];\n }\n\n return maxValue;\n}\n\nexport { max as default };\n","import * as matrix from './matrix.js';\n\nexport const AbstractMatrix = matrix.AbstractMatrix;\nexport const CHO = matrix.CHO;\nexport const CholeskyDecomposition = matrix.CholeskyDecomposition;\nexport const DistanceMatrix = matrix.DistanceMatrix;\nexport const EVD = matrix.EVD;\nexport const EigenvalueDecomposition = matrix.EigenvalueDecomposition;\nexport const LU = matrix.LU;\nexport const LuDecomposition = matrix.LuDecomposition;\nexport const Matrix = matrix.Matrix;\nexport const MatrixColumnSelectionView = matrix.MatrixColumnSelectionView;\nexport const MatrixColumnView = matrix.MatrixColumnView;\nexport const MatrixFlipColumnView = matrix.MatrixFlipColumnView;\nexport const MatrixFlipRowView = matrix.MatrixFlipRowView;\nexport const MatrixRowSelectionView = matrix.MatrixRowSelectionView;\nexport const MatrixRowView = matrix.MatrixRowView;\nexport const MatrixSelectionView = matrix.MatrixSelectionView;\nexport const MatrixSubView = matrix.MatrixSubView;\nexport const MatrixTransposeView = matrix.MatrixTransposeView;\nexport const NIPALS = matrix.NIPALS;\nexport const Nipals = matrix.Nipals;\nexport const QR = matrix.QR;\nexport const QrDecomposition = matrix.QrDecomposition;\nexport const SVD = matrix.SVD;\nexport const SingularValueDecomposition = matrix.SingularValueDecomposition;\nexport const SymmetricMatrix = matrix.SymmetricMatrix;\nexport const WrapperMatrix1D = matrix.WrapperMatrix1D;\nexport const WrapperMatrix2D = matrix.WrapperMatrix2D;\nexport const correlation = matrix.correlation;\nexport const covariance = matrix.covariance;\nexport default matrix.default.Matrix ? matrix.default.Matrix : matrix.Matrix;\nexport const determinant = matrix.determinant;\nexport const inverse = matrix.inverse;\nexport const linearDependencies = matrix.linearDependencies;\nexport const pseudoInverse = matrix.pseudoInverse;\nexport const solve = matrix.solve;\nexport const wrap = matrix.wrap;\n"],"names":["isAnyArray","rescale","indent","repeat","indentData","inspectMatrixWithOptions","matrix","options","maxRows","maxColumns","maxNumSize","padMinus","constructor","name","rows","columns","maxI","Math","min","maxJ","result","loop","i","j","get","line","push","formatNumber","join","length","inspectData","num","formatNumber2","padEnd","len","str","toString","fix","toFixed","max","startsWith","exp","toExponential","slice","checkRowIndex","index","outer","RangeError","checkColumnIndex","checkRowVector","vector","to1DArray","checkColumnVector","checkRowIndices","rowIndices","TypeError","checkColumnIndices","columnIndices","checkRange","startRow","endRow","startColumn","endColumn","arguments","checkNumber","newArray","value","array","checkNonEmpty","isEmpty","Error","AbstractMatrix","from1DArray","newRows","newColumns","newData","newMatrix","Matrix","row","column","set","rowVector","columnVector","zeros","ones","fill","rand","random","randInt","Number","isInteger","interval","round","eye","undefined","this","diag","data","l","matrix1","matrix2","checkMatrix","isMatrix","klass","size","apply","callback","call","to2DArray","copy","toJSON","isRowVector","isColumnVector","isVector","isSquare","isSymmetric","isDistance","isEchelonForm","previousColumn","checked","isReducedEchelonForm","k","echelonForm","clone","h","iMax","swapRows","tmp","factor","reducedEchelonForm","m","n","maxRow","p","pivot","setSubMatrix","neg","mulS","getRow","getRowVector","setRow","row1","row2","temp","getColumn","getColumnVector","setColumn","swapColumns","column1","column2","addRowVector","subRowVector","mulRowVector","divRowVector","addColumnVector","subColumnVector","mulColumnVector","divColumnVector","mulRow","mulColumn","by","NaN","Array","NEGATIVE_INFINITY","maxIndex","v","idx","POSITIVE_INFINITY","minIndex","maxRowIndex","minRow","minRowIndex","maxColumn","maxColumnIndex","minColumn","minColumnIndex","norm","type","sqrt","dot","cumulativeSum","sum","vector2","vector1","mmul","other","Bcolj","Float64Array","s","mpow","scalar","bb","e","strassen2x2","a11","b11","a12","b12","a21","b21","a22","b22","m1","m2","m3","m4","m5","c00","c01","c10","c11","strassen3x3","a00","a01","a02","a10","a20","b00","b01","b02","b10","b20","m6","m7","m8","m9","m12","m13","m14","m15","m16","m17","m18","c02","c12","c20","c21","c22","mmulStrassen","y","x","r1","c1","r2","c2","embed","mat","cols","r","c","resultat","console","warn","blockMult","a","b","halfRows","parseInt","halfCols","subMatrix","add","sub","scaleRows","isFinite","output","scaleColumns","flipRows","middle","ceil","first","last","flipColumns","kroneckerProduct","q","kroneckerSum","AxI","IxB","transpose","sortRows","compareFunction","compareNumbers","sort","sortColumns","subMatrixRow","indices","subMatrixColumn","selection","rowIndex","columnIndex","trace","from","to","entries","sumByRow","sumByColumn","sumAll","product","productByRow","productByColumn","productAll","mean","variance","unbiased","sum1","sum2","varianceByRow","varianceByColumn","varianceAll","standardDeviation","center","centerByRow","centerByColumn","centerAll","scale","getScaleByRow","scaleByRow","getScaleByColumn","scaleByColumn","divider","getScaleAll","scaleAll","Symbol","iterator","col","values","prototype","for","randomInt","diagonal","identity","negate","tensorProduct","nRows","nColumns","super","arrayData","every","element","removeRow","splice","addRow","removeColumn","newRow","addColumn","addS","addM","subS","subM","subtract","subtractS","subtractM","mul","mulM","multiply","multiplyS","multiplyM","div","divS","divM","divide","divideS","divideM","mod","modS","modM","modulus","modulusS","modulusM","and","andS","andM","or","orS","orM","xor","xorS","xorM","leftShift","leftShiftS","leftShiftM","signPropagatingRightShift","signPropagatingRightShiftS","signPropagatingRightShiftM","rightShift","rightShiftS","rightShiftM","zeroFillRightShift","zeroFillRightShiftS","zeroFillRightShiftM","not","abs","acos","acosh","asin","asinh","atan","atanh","cbrt","clz32","cos","cosh","expm1","floor","fround","log","log1p","log10","log2","sign","sin","sinh","tan","tanh","trunc","pow","arg0","powS","powM","installMathOperations","SymmetricMatrix","diagonalSize","isSymmetricMatrix","klassType","upperRightEntries","toMatrix","removeCross","addCross","applyMask","mask","sidesToRemove","passthroughs","reverse","sideIndex","toCompact","compact","fromCompact","compactSize","JSON","stringify","upperRightValues","DistanceMatrix","isDistanceMatrix","klassSubType","sideSize","toSymmetricMatrix","BaseView","MatrixSelectionView","WrapperMatrix1D","_calculateIndex","WrapperMatrix2D","LuDecomposition","t","LUcolj","kmax","lu","pivotVector","pivotSign","LU","isSingular","solve","count","X","determinant","lowerTriangularMatrix","upperTriangularMatrix","pivotPermutationVector","hypotenuse","QrDecomposition","qr","rdiag","nrm","QR","Rdiag","isFullRank","orthogonalMatrix","SingularValueDecomposition","computeLeftSingularVectors","computeRightSingularVectors","autoTranspose","wantu","Boolean","wantv","swapped","aux","nu","ni","U","V","work","si","nct","nrt","mrc","pp","eps","EPSILON","kase","alpha","MIN_VALUE","isNaN","ks","f","cs","sn","sp","spm1","epm1","sk","ek","shift","g","Y","threshold","scols","Ls","rightSingularVectors","VL","vrows","urows","VLU","solveForDiagonal","inverse","vcols","ucols","condition","norm2","rank","tol","ii","leftSingularVectors","diagonalMatrix","leftHandSide","rightHandSide","useSVD","xrange","exception","range","dependenciesOneRow","error","thresholdValue","thresholdError","returnArray","EigenvalueDecomposition","assumeSymmetric","d","hh","tred2","dl1","c3","el1","s2","tst1","tql2","H","ort","high","low","orthes","nn","w","ra","sa","vr","vi","notlast","cdivres","exshift","z","iter","cdiv","hqr2","realEigenvalues","imaginaryEigenvalues","eigenvectorMatrix","xr","xi","yr","yi","CholeskyDecomposition","dimension","positiveDefinite","L","isPositiveDefinite","B","nipals","scaleScores","maxIterations","terminationCriteria","u","tOld","diff","counter","xResidual","residual","yResidual","betas","exports","xMatrix","yMatrix","yIsSame","sdx","sdy","corr","cov","subMatrix0","subMatrix1","subMatrix2","results","Abis","svdSolution","Object","tag","endsWith","includes","input","currentMin","_options$fromIndex","fromIndex","_options$toIndex","toIndex","minValue","currentMax","maxValue","_options$min","autoMinMax","_options$max"],"sourceRoot":""}
|