@openmouse/protocol 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. package/CONTRIBUTING.md +167 -0
  2. package/README.md +89 -0
  3. package/dist/asus/index.d.ts +52 -0
  4. package/dist/asus/index.d.ts.map +1 -0
  5. package/dist/asus/index.js +248 -0
  6. package/dist/asus/index.js.map +1 -0
  7. package/dist/atk/index.d.ts +200 -0
  8. package/dist/atk/index.d.ts.map +1 -0
  9. package/dist/atk/index.js +480 -0
  10. package/dist/atk/index.js.map +1 -0
  11. package/dist/bitmouse/index.d.ts +284 -0
  12. package/dist/bitmouse/index.d.ts.map +1 -0
  13. package/dist/bitmouse/index.js +396 -0
  14. package/dist/bitmouse/index.js.map +1 -0
  15. package/dist/compx/codec.d.ts +31 -0
  16. package/dist/compx/codec.d.ts.map +1 -0
  17. package/dist/compx/codec.js +50 -0
  18. package/dist/compx/codec.js.map +1 -0
  19. package/dist/corsair/index.d.ts +147 -0
  20. package/dist/corsair/index.d.ts.map +1 -0
  21. package/dist/corsair/index.js +223 -0
  22. package/dist/corsair/index.js.map +1 -0
  23. package/dist/dareu/index.d.ts +136 -0
  24. package/dist/dareu/index.d.ts.map +1 -0
  25. package/dist/dareu/index.js +344 -0
  26. package/dist/dareu/index.js.map +1 -0
  27. package/dist/drivers/asus/hid.d.ts +29 -0
  28. package/dist/drivers/asus/hid.d.ts.map +1 -0
  29. package/dist/drivers/asus/hid.js +419 -0
  30. package/dist/drivers/asus/hid.js.map +1 -0
  31. package/dist/drivers/atk/bitmouse-hid.d.ts +80 -0
  32. package/dist/drivers/atk/bitmouse-hid.d.ts.map +1 -0
  33. package/dist/drivers/atk/bitmouse-hid.js +501 -0
  34. package/dist/drivers/atk/bitmouse-hid.js.map +1 -0
  35. package/dist/drivers/atk/hid.d.ts +163 -0
  36. package/dist/drivers/atk/hid.d.ts.map +1 -0
  37. package/dist/drivers/atk/hid.js +1368 -0
  38. package/dist/drivers/atk/hid.js.map +1 -0
  39. package/dist/drivers/atk/products.d.ts +13 -0
  40. package/dist/drivers/atk/products.d.ts.map +1 -0
  41. package/dist/drivers/atk/products.js +13 -0
  42. package/dist/drivers/atk/products.js.map +1 -0
  43. package/dist/drivers/attackshark/dpi.d.ts +41 -0
  44. package/dist/drivers/attackshark/dpi.d.ts.map +1 -0
  45. package/dist/drivers/attackshark/dpi.js +215 -0
  46. package/dist/drivers/attackshark/dpi.js.map +1 -0
  47. package/dist/drivers/attackshark/hid.d.ts +124 -0
  48. package/dist/drivers/attackshark/hid.d.ts.map +1 -0
  49. package/dist/drivers/attackshark/hid.js +728 -0
  50. package/dist/drivers/attackshark/hid.js.map +1 -0
  51. package/dist/drivers/corsair/hid.d.ts +70 -0
  52. package/dist/drivers/corsair/hid.d.ts.map +1 -0
  53. package/dist/drivers/corsair/hid.js +414 -0
  54. package/dist/drivers/corsair/hid.js.map +1 -0
  55. package/dist/drivers/dareu/hid.d.ts +59 -0
  56. package/dist/drivers/dareu/hid.d.ts.map +1 -0
  57. package/dist/drivers/dareu/hid.js +478 -0
  58. package/dist/drivers/dareu/hid.js.map +1 -0
  59. package/dist/drivers/endgame/egg-op1-hid.d.ts +107 -0
  60. package/dist/drivers/endgame/egg-op1-hid.d.ts.map +1 -0
  61. package/dist/drivers/endgame/egg-op1-hid.js +605 -0
  62. package/dist/drivers/endgame/egg-op1-hid.js.map +1 -0
  63. package/dist/drivers/endgame/egg-we-control.d.ts +42 -0
  64. package/dist/drivers/endgame/egg-we-control.d.ts.map +1 -0
  65. package/dist/drivers/endgame/egg-we-control.js +87 -0
  66. package/dist/drivers/endgame/egg-we-control.js.map +1 -0
  67. package/dist/drivers/endgame/egg-we-hid.d.ts +58 -0
  68. package/dist/drivers/endgame/egg-we-hid.d.ts.map +1 -0
  69. package/dist/drivers/endgame/egg-we-hid.js +514 -0
  70. package/dist/drivers/endgame/egg-we-hid.js.map +1 -0
  71. package/dist/drivers/fantech/hid.d.ts +106 -0
  72. package/dist/drivers/fantech/hid.d.ts.map +1 -0
  73. package/dist/drivers/fantech/hid.js +295 -0
  74. package/dist/drivers/fantech/hid.js.map +1 -0
  75. package/dist/drivers/finalmouse/hid.d.ts +31 -0
  76. package/dist/drivers/finalmouse/hid.d.ts.map +1 -0
  77. package/dist/drivers/finalmouse/hid.js +181 -0
  78. package/dist/drivers/finalmouse/hid.js.map +1 -0
  79. package/dist/drivers/gearhub/hid.d.ts +191 -0
  80. package/dist/drivers/gearhub/hid.d.ts.map +1 -0
  81. package/dist/drivers/gearhub/hid.js +542 -0
  82. package/dist/drivers/gearhub/hid.js.map +1 -0
  83. package/dist/drivers/glorious/classic-hid.d.ts +62 -0
  84. package/dist/drivers/glorious/classic-hid.d.ts.map +1 -0
  85. package/dist/drivers/glorious/classic-hid.js +326 -0
  86. package/dist/drivers/glorious/classic-hid.js.map +1 -0
  87. package/dist/drivers/glorious/hid.d.ts +39 -0
  88. package/dist/drivers/glorious/hid.d.ts.map +1 -0
  89. package/dist/drivers/glorious/hid.js +203 -0
  90. package/dist/drivers/glorious/hid.js.map +1 -0
  91. package/dist/drivers/gwolves/hid.d.ts +27 -0
  92. package/dist/drivers/gwolves/hid.d.ts.map +1 -0
  93. package/dist/drivers/gwolves/hid.js +225 -0
  94. package/dist/drivers/gwolves/hid.js.map +1 -0
  95. package/dist/drivers/gwolves/products.d.ts +17 -0
  96. package/dist/drivers/gwolves/products.d.ts.map +1 -0
  97. package/dist/drivers/gwolves/products.js +58 -0
  98. package/dist/drivers/gwolves/products.js.map +1 -0
  99. package/dist/drivers/hyperx/hid.d.ts +59 -0
  100. package/dist/drivers/hyperx/hid.d.ts.map +1 -0
  101. package/dist/drivers/hyperx/hid.js +229 -0
  102. package/dist/drivers/hyperx/hid.js.map +1 -0
  103. package/dist/drivers/incott/hid.d.ts +513 -0
  104. package/dist/drivers/incott/hid.d.ts.map +1 -0
  105. package/dist/drivers/incott/hid.js +1173 -0
  106. package/dist/drivers/incott/hid.js.map +1 -0
  107. package/dist/drivers/index.d.ts +5 -0
  108. package/dist/drivers/index.d.ts.map +1 -0
  109. package/dist/drivers/index.js +5 -0
  110. package/dist/drivers/index.js.map +1 -0
  111. package/dist/drivers/keychron/m6-hid.d.ts +81 -0
  112. package/dist/drivers/keychron/m6-hid.d.ts.map +1 -0
  113. package/dist/drivers/keychron/m6-hid.js +486 -0
  114. package/dist/drivers/keychron/m6-hid.js.map +1 -0
  115. package/dist/drivers/keychron/nape-hid.d.ts +60 -0
  116. package/dist/drivers/keychron/nape-hid.d.ts.map +1 -0
  117. package/dist/drivers/keychron/nape-hid.js +432 -0
  118. package/dist/drivers/keychron/nape-hid.js.map +1 -0
  119. package/dist/drivers/ksnake/hid.d.ts +74 -0
  120. package/dist/drivers/ksnake/hid.d.ts.map +1 -0
  121. package/dist/drivers/ksnake/hid.js +368 -0
  122. package/dist/drivers/ksnake/hid.js.map +1 -0
  123. package/dist/drivers/lamzu/hid.d.ts +58 -0
  124. package/dist/drivers/lamzu/hid.d.ts.map +1 -0
  125. package/dist/drivers/lamzu/hid.js +414 -0
  126. package/dist/drivers/lamzu/hid.js.map +1 -0
  127. package/dist/drivers/lamzu-atlantis/hid.d.ts +148 -0
  128. package/dist/drivers/lamzu-atlantis/hid.d.ts.map +1 -0
  129. package/dist/drivers/lamzu-atlantis/hid.js +587 -0
  130. package/dist/drivers/lamzu-atlantis/hid.js.map +1 -0
  131. package/dist/drivers/logitech/bolt.d.ts +41 -0
  132. package/dist/drivers/logitech/bolt.d.ts.map +1 -0
  133. package/dist/drivers/logitech/bolt.js +105 -0
  134. package/dist/drivers/logitech/bolt.js.map +1 -0
  135. package/dist/drivers/logitech/hidpp.d.ts +525 -0
  136. package/dist/drivers/logitech/hidpp.d.ts.map +1 -0
  137. package/dist/drivers/logitech/hidpp.js +2774 -0
  138. package/dist/drivers/logitech/hidpp.js.map +1 -0
  139. package/dist/drivers/logitech/mode-status.d.ts +53 -0
  140. package/dist/drivers/logitech/mode-status.d.ts.map +1 -0
  141. package/dist/drivers/logitech/mode-status.js +52 -0
  142. package/dist/drivers/logitech/mode-status.js.map +1 -0
  143. package/dist/drivers/logitech/onboard-profiles.d.ts +298 -0
  144. package/dist/drivers/logitech/onboard-profiles.d.ts.map +1 -0
  145. package/dist/drivers/logitech/onboard-profiles.js +965 -0
  146. package/dist/drivers/logitech/onboard-profiles.js.map +1 -0
  147. package/dist/drivers/logitech/rgb-effects.d.ts +20 -0
  148. package/dist/drivers/logitech/rgb-effects.d.ts.map +1 -0
  149. package/dist/drivers/logitech/rgb-effects.js +93 -0
  150. package/dist/drivers/logitech/rgb-effects.js.map +1 -0
  151. package/dist/drivers/mchose/a5-gen1-hid.d.ts +36 -0
  152. package/dist/drivers/mchose/a5-gen1-hid.d.ts.map +1 -0
  153. package/dist/drivers/mchose/a5-gen1-hid.js +219 -0
  154. package/dist/drivers/mchose/a5-gen1-hid.js.map +1 -0
  155. package/dist/drivers/mchose/dock-hid.d.ts +26 -0
  156. package/dist/drivers/mchose/dock-hid.d.ts.map +1 -0
  157. package/dist/drivers/mchose/dock-hid.js +176 -0
  158. package/dist/drivers/mchose/dock-hid.js.map +1 -0
  159. package/dist/drivers/mchose/hid.d.ts +118 -0
  160. package/dist/drivers/mchose/hid.d.ts.map +1 -0
  161. package/dist/drivers/mchose/hid.js +550 -0
  162. package/dist/drivers/mchose/hid.js.map +1 -0
  163. package/dist/drivers/mchose/v3-hid.d.ts +109 -0
  164. package/dist/drivers/mchose/v3-hid.d.ts.map +1 -0
  165. package/dist/drivers/mchose/v3-hid.js +572 -0
  166. package/dist/drivers/mchose/v3-hid.js.map +1 -0
  167. package/dist/drivers/microsoft/hid.d.ts +25 -0
  168. package/dist/drivers/microsoft/hid.d.ts.map +1 -0
  169. package/dist/drivers/microsoft/hid.js +247 -0
  170. package/dist/drivers/microsoft/hid.js.map +1 -0
  171. package/dist/drivers/moddo/hid.d.ts +31 -0
  172. package/dist/drivers/moddo/hid.d.ts.map +1 -0
  173. package/dist/drivers/moddo/hid.js +154 -0
  174. package/dist/drivers/moddo/hid.js.map +1 -0
  175. package/dist/drivers/mouse-types.d.ts +388 -0
  176. package/dist/drivers/mouse-types.d.ts.map +1 -0
  177. package/dist/drivers/mouse-types.js +2 -0
  178. package/dist/drivers/mouse-types.js.map +1 -0
  179. package/dist/drivers/ninjutso/hid.d.ts +62 -0
  180. package/dist/drivers/ninjutso/hid.d.ts.map +1 -0
  181. package/dist/drivers/ninjutso/hid.js +680 -0
  182. package/dist/drivers/ninjutso/hid.js.map +1 -0
  183. package/dist/drivers/orbital/hid.d.ts +24 -0
  184. package/dist/drivers/orbital/hid.d.ts.map +1 -0
  185. package/dist/drivers/orbital/hid.js +85 -0
  186. package/dist/drivers/orbital/hid.js.map +1 -0
  187. package/dist/drivers/orbital/host-protocol.d.ts +59 -0
  188. package/dist/drivers/orbital/host-protocol.d.ts.map +1 -0
  189. package/dist/drivers/orbital/host-protocol.js +884 -0
  190. package/dist/drivers/orbital/host-protocol.js.map +1 -0
  191. package/dist/drivers/pulsar/pulsar-hid.d.ts +63 -0
  192. package/dist/drivers/pulsar/pulsar-hid.d.ts.map +1 -0
  193. package/dist/drivers/pulsar/pulsar-hid.js +381 -0
  194. package/dist/drivers/pulsar/pulsar-hid.js.map +1 -0
  195. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts +46 -0
  196. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts.map +1 -0
  197. package/dist/drivers/pulsar/pulsar-pro-hid.js +343 -0
  198. package/dist/drivers/pulsar/pulsar-pro-hid.js.map +1 -0
  199. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts +40 -0
  200. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts.map +1 -0
  201. package/dist/drivers/pulsar/pulsar-xs1-hid.js +251 -0
  202. package/dist/drivers/pulsar/pulsar-xs1-hid.js.map +1 -0
  203. package/dist/drivers/rawm/hid.d.ts +29 -0
  204. package/dist/drivers/rawm/hid.d.ts.map +1 -0
  205. package/dist/drivers/rawm/hid.js +210 -0
  206. package/dist/drivers/rawm/hid.js.map +1 -0
  207. package/dist/drivers/razer/cobra-hid.d.ts +63 -0
  208. package/dist/drivers/razer/cobra-hid.d.ts.map +1 -0
  209. package/dist/drivers/razer/cobra-hid.js +282 -0
  210. package/dist/drivers/razer/cobra-hid.js.map +1 -0
  211. package/dist/drivers/razer/hid-open.d.ts +13 -0
  212. package/dist/drivers/razer/hid-open.d.ts.map +1 -0
  213. package/dist/drivers/razer/hid-open.js +29 -0
  214. package/dist/drivers/razer/hid-open.js.map +1 -0
  215. package/dist/drivers/razer/hid.d.ts +231 -0
  216. package/dist/drivers/razer/hid.d.ts.map +1 -0
  217. package/dist/drivers/razer/hid.js +772 -0
  218. package/dist/drivers/razer/hid.js.map +1 -0
  219. package/dist/drivers/razer/viper-hid.d.ts +33 -0
  220. package/dist/drivers/razer/viper-hid.d.ts.map +1 -0
  221. package/dist/drivers/razer/viper-hid.js +177 -0
  222. package/dist/drivers/razer/viper-hid.js.map +1 -0
  223. package/dist/drivers/razer/viper-mini-hid.d.ts +58 -0
  224. package/dist/drivers/razer/viper-mini-hid.d.ts.map +1 -0
  225. package/dist/drivers/razer/viper-mini-hid.js +273 -0
  226. package/dist/drivers/razer/viper-mini-hid.js.map +1 -0
  227. package/dist/drivers/razer/viper-v4-pro-hid.d.ts +26 -0
  228. package/dist/drivers/razer/viper-v4-pro-hid.d.ts.map +1 -0
  229. package/dist/drivers/razer/viper-v4-pro-hid.js +154 -0
  230. package/dist/drivers/razer/viper-v4-pro-hid.js.map +1 -0
  231. package/dist/drivers/registry.d.ts +70 -0
  232. package/dist/drivers/registry.d.ts.map +1 -0
  233. package/dist/drivers/registry.js +146 -0
  234. package/dist/drivers/registry.js.map +1 -0
  235. package/dist/drivers/steelseries/aerox3-hid.d.ts +53 -0
  236. package/dist/drivers/steelseries/aerox3-hid.d.ts.map +1 -0
  237. package/dist/drivers/steelseries/aerox3-hid.js +172 -0
  238. package/dist/drivers/steelseries/aerox3-hid.js.map +1 -0
  239. package/dist/drivers/steelseries/aerox5-hid.d.ts +54 -0
  240. package/dist/drivers/steelseries/aerox5-hid.d.ts.map +1 -0
  241. package/dist/drivers/steelseries/aerox5-hid.js +173 -0
  242. package/dist/drivers/steelseries/aerox5-hid.js.map +1 -0
  243. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts +69 -0
  244. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts.map +1 -0
  245. package/dist/drivers/steelseries/aerox5-wireless-hid.js +234 -0
  246. package/dist/drivers/steelseries/aerox5-wireless-hid.js.map +1 -0
  247. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts +70 -0
  248. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts.map +1 -0
  249. package/dist/drivers/steelseries/aerox9-wireless-hid.js +227 -0
  250. package/dist/drivers/steelseries/aerox9-wireless-hid.js.map +1 -0
  251. package/dist/drivers/steelseries/hid.d.ts +48 -0
  252. package/dist/drivers/steelseries/hid.d.ts.map +1 -0
  253. package/dist/drivers/steelseries/hid.js +157 -0
  254. package/dist/drivers/steelseries/hid.js.map +1 -0
  255. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts +62 -0
  256. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts.map +1 -0
  257. package/dist/drivers/steelseries/prime-mini-wireless-hid.js +215 -0
  258. package/dist/drivers/steelseries/prime-mini-wireless-hid.js.map +1 -0
  259. package/dist/drivers/steelseries/prime-plus-hid.d.ts +51 -0
  260. package/dist/drivers/steelseries/prime-plus-hid.d.ts.map +1 -0
  261. package/dist/drivers/steelseries/prime-plus-hid.js +150 -0
  262. package/dist/drivers/steelseries/prime-plus-hid.js.map +1 -0
  263. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts +61 -0
  264. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts.map +1 -0
  265. package/dist/drivers/steelseries/rival3-wireless-hid.js +185 -0
  266. package/dist/drivers/steelseries/rival3-wireless-hid.js.map +1 -0
  267. package/dist/drivers/steelseries/rival310-hid.d.ts +59 -0
  268. package/dist/drivers/steelseries/rival310-hid.d.ts.map +1 -0
  269. package/dist/drivers/steelseries/rival310-hid.js +182 -0
  270. package/dist/drivers/steelseries/rival310-hid.js.map +1 -0
  271. package/dist/drivers/steelseries/rival650-hid.d.ts +68 -0
  272. package/dist/drivers/steelseries/rival650-hid.d.ts.map +1 -0
  273. package/dist/drivers/steelseries/rival650-hid.js +209 -0
  274. package/dist/drivers/steelseries/rival650-hid.js.map +1 -0
  275. package/dist/drivers/steelseries/sensei-ten-hid.d.ts +62 -0
  276. package/dist/drivers/steelseries/sensei-ten-hid.d.ts.map +1 -0
  277. package/dist/drivers/steelseries/sensei-ten-hid.js +186 -0
  278. package/dist/drivers/steelseries/sensei-ten-hid.js.map +1 -0
  279. package/dist/drivers/teevolution/hid.d.ts +82 -0
  280. package/dist/drivers/teevolution/hid.d.ts.map +1 -0
  281. package/dist/drivers/teevolution/hid.js +607 -0
  282. package/dist/drivers/teevolution/hid.js.map +1 -0
  283. package/dist/drivers/vendors.d.ts +254 -0
  284. package/dist/drivers/vendors.d.ts.map +1 -0
  285. package/dist/drivers/vendors.js +587 -0
  286. package/dist/drivers/vendors.js.map +1 -0
  287. package/dist/drivers/vgn/hid.d.ts +33 -0
  288. package/dist/drivers/vgn/hid.d.ts.map +1 -0
  289. package/dist/drivers/vgn/hid.js +213 -0
  290. package/dist/drivers/vgn/hid.js.map +1 -0
  291. package/dist/drivers/wallhack/keyboard-hid.d.ts +28 -0
  292. package/dist/drivers/wallhack/keyboard-hid.d.ts.map +1 -0
  293. package/dist/drivers/wallhack/keyboard-hid.js +80 -0
  294. package/dist/drivers/wallhack/keyboard-hid.js.map +1 -0
  295. package/dist/drivers/wallhack/mouse-hid.d.ts +45 -0
  296. package/dist/drivers/wallhack/mouse-hid.d.ts.map +1 -0
  297. package/dist/drivers/wallhack/mouse-hid.js +288 -0
  298. package/dist/drivers/wallhack/mouse-hid.js.map +1 -0
  299. package/dist/drivers/webhid.d.ts +59 -0
  300. package/dist/drivers/webhid.d.ts.map +1 -0
  301. package/dist/drivers/webhid.js +2 -0
  302. package/dist/drivers/webhid.js.map +1 -0
  303. package/dist/drivers/wlmouse/hid.d.ts +81 -0
  304. package/dist/drivers/wlmouse/hid.d.ts.map +1 -0
  305. package/dist/drivers/wlmouse/hid.js +576 -0
  306. package/dist/drivers/wlmouse/hid.js.map +1 -0
  307. package/dist/drivers/wooting/hid.d.ts +86 -0
  308. package/dist/drivers/wooting/hid.d.ts.map +1 -0
  309. package/dist/drivers/wooting/hid.js +320 -0
  310. package/dist/drivers/wooting/hid.js.map +1 -0
  311. package/dist/drivers/zaunkoenig/hid.d.ts +31 -0
  312. package/dist/drivers/zaunkoenig/hid.d.ts.map +1 -0
  313. package/dist/drivers/zaunkoenig/hid.js +162 -0
  314. package/dist/drivers/zaunkoenig/hid.js.map +1 -0
  315. package/dist/endgame-gear/op1.d.ts +165 -0
  316. package/dist/endgame-gear/op1.d.ts.map +1 -0
  317. package/dist/endgame-gear/op1.js +384 -0
  318. package/dist/endgame-gear/op1.js.map +1 -0
  319. package/dist/endgame-gear/wireless.d.ts +93 -0
  320. package/dist/endgame-gear/wireless.d.ts.map +1 -0
  321. package/dist/endgame-gear/wireless.js +242 -0
  322. package/dist/endgame-gear/wireless.js.map +1 -0
  323. package/dist/fantech/index.d.ts +9 -0
  324. package/dist/fantech/index.d.ts.map +1 -0
  325. package/dist/fantech/index.js +11 -0
  326. package/dist/fantech/index.js.map +1 -0
  327. package/dist/finalmouse/index.d.ts +41 -0
  328. package/dist/finalmouse/index.d.ts.map +1 -0
  329. package/dist/finalmouse/index.js +106 -0
  330. package/dist/finalmouse/index.js.map +1 -0
  331. package/dist/gearhub/index.d.ts +210 -0
  332. package/dist/gearhub/index.d.ts.map +1 -0
  333. package/dist/gearhub/index.js +282 -0
  334. package/dist/gearhub/index.js.map +1 -0
  335. package/dist/glorious/index.d.ts +89 -0
  336. package/dist/glorious/index.d.ts.map +1 -0
  337. package/dist/glorious/index.js +236 -0
  338. package/dist/glorious/index.js.map +1 -0
  339. package/dist/glorious-classic/index.d.ts +103 -0
  340. package/dist/glorious-classic/index.d.ts.map +1 -0
  341. package/dist/glorious-classic/index.js +304 -0
  342. package/dist/glorious-classic/index.js.map +1 -0
  343. package/dist/gwolves/index.d.ts +82 -0
  344. package/dist/gwolves/index.d.ts.map +1 -0
  345. package/dist/gwolves/index.js +197 -0
  346. package/dist/gwolves/index.js.map +1 -0
  347. package/dist/hyperx/index.d.ts +181 -0
  348. package/dist/hyperx/index.d.ts.map +1 -0
  349. package/dist/hyperx/index.js +303 -0
  350. package/dist/hyperx/index.js.map +1 -0
  351. package/dist/incott/index.d.ts +1067 -0
  352. package/dist/incott/index.d.ts.map +1 -0
  353. package/dist/incott/index.js +1482 -0
  354. package/dist/incott/index.js.map +1 -0
  355. package/dist/index.d.ts +30 -0
  356. package/dist/index.d.ts.map +1 -0
  357. package/dist/index.js +30 -0
  358. package/dist/index.js.map +1 -0
  359. package/dist/keychron/index.d.ts +194 -0
  360. package/dist/keychron/index.d.ts.map +1 -0
  361. package/dist/keychron/index.js +341 -0
  362. package/dist/keychron/index.js.map +1 -0
  363. package/dist/ksnake/index.d.ts +157 -0
  364. package/dist/ksnake/index.d.ts.map +1 -0
  365. package/dist/ksnake/index.js +314 -0
  366. package/dist/ksnake/index.js.map +1 -0
  367. package/dist/lamzu/atlantis.d.ts +237 -0
  368. package/dist/lamzu/atlantis.d.ts.map +1 -0
  369. package/dist/lamzu/atlantis.js +263 -0
  370. package/dist/lamzu/atlantis.js.map +1 -0
  371. package/dist/lamzu/index.d.ts +60 -0
  372. package/dist/lamzu/index.d.ts.map +1 -0
  373. package/dist/lamzu/index.js +86 -0
  374. package/dist/lamzu/index.js.map +1 -0
  375. package/dist/logitech/controls.d.ts +138 -0
  376. package/dist/logitech/controls.d.ts.map +1 -0
  377. package/dist/logitech/controls.js +184 -0
  378. package/dist/logitech/controls.js.map +1 -0
  379. package/dist/logitech/friendly-name.d.ts +50 -0
  380. package/dist/logitech/friendly-name.d.ts.map +1 -0
  381. package/dist/logitech/friendly-name.js +74 -0
  382. package/dist/logitech/friendly-name.js.map +1 -0
  383. package/dist/logitech/haptics.d.ts +97 -0
  384. package/dist/logitech/haptics.d.ts.map +1 -0
  385. package/dist/logitech/haptics.js +116 -0
  386. package/dist/logitech/haptics.js.map +1 -0
  387. package/dist/logitech/hosts.d.ts +55 -0
  388. package/dist/logitech/hosts.d.ts.map +1 -0
  389. package/dist/logitech/hosts.js +80 -0
  390. package/dist/logitech/hosts.js.map +1 -0
  391. package/dist/logitech/index.d.ts +127 -0
  392. package/dist/logitech/index.d.ts.map +1 -0
  393. package/dist/logitech/index.js +233 -0
  394. package/dist/logitech/index.js.map +1 -0
  395. package/dist/logitech/wheel.d.ts +117 -0
  396. package/dist/logitech/wheel.d.ts.map +1 -0
  397. package/dist/logitech/wheel.js +133 -0
  398. package/dist/logitech/wheel.js.map +1 -0
  399. package/dist/mchose/a5-gen1.d.ts +38 -0
  400. package/dist/mchose/a5-gen1.d.ts.map +1 -0
  401. package/dist/mchose/a5-gen1.js +60 -0
  402. package/dist/mchose/a5-gen1.js.map +1 -0
  403. package/dist/mchose/buttons.d.ts +66 -0
  404. package/dist/mchose/buttons.d.ts.map +1 -0
  405. package/dist/mchose/buttons.js +184 -0
  406. package/dist/mchose/buttons.js.map +1 -0
  407. package/dist/mchose/dock.d.ts +77 -0
  408. package/dist/mchose/dock.d.ts.map +1 -0
  409. package/dist/mchose/dock.js +133 -0
  410. package/dist/mchose/dock.js.map +1 -0
  411. package/dist/mchose/index.d.ts +299 -0
  412. package/dist/mchose/index.d.ts.map +1 -0
  413. package/dist/mchose/index.js +429 -0
  414. package/dist/mchose/index.js.map +1 -0
  415. package/dist/mchose/v3-buttons.d.ts +64 -0
  416. package/dist/mchose/v3-buttons.d.ts.map +1 -0
  417. package/dist/mchose/v3-buttons.js +258 -0
  418. package/dist/mchose/v3-buttons.js.map +1 -0
  419. package/dist/mchose/v3.d.ts +380 -0
  420. package/dist/mchose/v3.d.ts.map +1 -0
  421. package/dist/mchose/v3.js +608 -0
  422. package/dist/mchose/v3.js.map +1 -0
  423. package/dist/microsoft/index.d.ts +19 -0
  424. package/dist/microsoft/index.d.ts.map +1 -0
  425. package/dist/microsoft/index.js +22 -0
  426. package/dist/microsoft/index.js.map +1 -0
  427. package/dist/moddo/index.d.ts +72 -0
  428. package/dist/moddo/index.d.ts.map +1 -0
  429. package/dist/moddo/index.js +147 -0
  430. package/dist/moddo/index.js.map +1 -0
  431. package/dist/ninjutso/index.d.ts +74 -0
  432. package/dist/ninjutso/index.d.ts.map +1 -0
  433. package/dist/ninjutso/index.js +133 -0
  434. package/dist/ninjutso/index.js.map +1 -0
  435. package/dist/orbital/index.d.ts +14 -0
  436. package/dist/orbital/index.d.ts.map +1 -0
  437. package/dist/orbital/index.js +19 -0
  438. package/dist/orbital/index.js.map +1 -0
  439. package/dist/pulsar/index.d.ts +81 -0
  440. package/dist/pulsar/index.d.ts.map +1 -0
  441. package/dist/pulsar/index.js +185 -0
  442. package/dist/pulsar/index.js.map +1 -0
  443. package/dist/rawm/index.d.ts +55 -0
  444. package/dist/rawm/index.d.ts.map +1 -0
  445. package/dist/rawm/index.js +229 -0
  446. package/dist/rawm/index.js.map +1 -0
  447. package/dist/razer/codec.d.ts +504 -0
  448. package/dist/razer/codec.d.ts.map +1 -0
  449. package/dist/razer/codec.js +648 -0
  450. package/dist/razer/codec.js.map +1 -0
  451. package/dist/razer/devices.d.ts +156 -0
  452. package/dist/razer/devices.d.ts.map +1 -0
  453. package/dist/razer/devices.js +540 -0
  454. package/dist/razer/devices.js.map +1 -0
  455. package/dist/razer/index.d.ts +2 -0
  456. package/dist/razer/index.d.ts.map +1 -0
  457. package/dist/razer/index.js +2 -0
  458. package/dist/razer/index.js.map +1 -0
  459. package/dist/razer/v4.d.ts +19 -0
  460. package/dist/razer/v4.d.ts.map +1 -0
  461. package/dist/razer/v4.js +51 -0
  462. package/dist/razer/v4.js.map +1 -0
  463. package/dist/steelseries/aerox3.d.ts +236 -0
  464. package/dist/steelseries/aerox3.d.ts.map +1 -0
  465. package/dist/steelseries/aerox3.js +311 -0
  466. package/dist/steelseries/aerox3.js.map +1 -0
  467. package/dist/steelseries/aerox5-wireless.d.ts +300 -0
  468. package/dist/steelseries/aerox5-wireless.d.ts.map +1 -0
  469. package/dist/steelseries/aerox5-wireless.js +389 -0
  470. package/dist/steelseries/aerox5-wireless.js.map +1 -0
  471. package/dist/steelseries/aerox5.d.ts +228 -0
  472. package/dist/steelseries/aerox5.d.ts.map +1 -0
  473. package/dist/steelseries/aerox5.js +294 -0
  474. package/dist/steelseries/aerox5.js.map +1 -0
  475. package/dist/steelseries/aerox9-wireless.d.ts +213 -0
  476. package/dist/steelseries/aerox9-wireless.d.ts.map +1 -0
  477. package/dist/steelseries/aerox9-wireless.js +305 -0
  478. package/dist/steelseries/aerox9-wireless.js.map +1 -0
  479. package/dist/steelseries/devices.d.ts +82 -0
  480. package/dist/steelseries/devices.d.ts.map +1 -0
  481. package/dist/steelseries/devices.js +310 -0
  482. package/dist/steelseries/devices.js.map +1 -0
  483. package/dist/steelseries/index.d.ts +13 -0
  484. package/dist/steelseries/index.d.ts.map +1 -0
  485. package/dist/steelseries/index.js +13 -0
  486. package/dist/steelseries/index.js.map +1 -0
  487. package/dist/steelseries/prime-mini-wireless.d.ts +253 -0
  488. package/dist/steelseries/prime-mini-wireless.d.ts.map +1 -0
  489. package/dist/steelseries/prime-mini-wireless.js +351 -0
  490. package/dist/steelseries/prime-mini-wireless.js.map +1 -0
  491. package/dist/steelseries/prime-plus.d.ts +179 -0
  492. package/dist/steelseries/prime-plus.d.ts.map +1 -0
  493. package/dist/steelseries/prime-plus.js +275 -0
  494. package/dist/steelseries/prime-plus.js.map +1 -0
  495. package/dist/steelseries/rival3-wireless.d.ts +222 -0
  496. package/dist/steelseries/rival3-wireless.d.ts.map +1 -0
  497. package/dist/steelseries/rival3-wireless.js +308 -0
  498. package/dist/steelseries/rival3-wireless.js.map +1 -0
  499. package/dist/steelseries/rival3.d.ts +99 -0
  500. package/dist/steelseries/rival3.d.ts.map +1 -0
  501. package/dist/steelseries/rival3.js +147 -0
  502. package/dist/steelseries/rival3.js.map +1 -0
  503. package/dist/steelseries/rival310.d.ts +230 -0
  504. package/dist/steelseries/rival310.d.ts.map +1 -0
  505. package/dist/steelseries/rival310.js +322 -0
  506. package/dist/steelseries/rival310.js.map +1 -0
  507. package/dist/steelseries/rival650.d.ts +215 -0
  508. package/dist/steelseries/rival650.d.ts.map +1 -0
  509. package/dist/steelseries/rival650.js +284 -0
  510. package/dist/steelseries/rival650.js.map +1 -0
  511. package/dist/steelseries/sensei-ten.d.ts +283 -0
  512. package/dist/steelseries/sensei-ten.d.ts.map +1 -0
  513. package/dist/steelseries/sensei-ten.js +389 -0
  514. package/dist/steelseries/sensei-ten.js.map +1 -0
  515. package/dist/teevolution/index.d.ts +211 -0
  516. package/dist/teevolution/index.d.ts.map +1 -0
  517. package/dist/teevolution/index.js +458 -0
  518. package/dist/teevolution/index.js.map +1 -0
  519. package/dist/valkyrie/index.d.ts +19 -0
  520. package/dist/valkyrie/index.d.ts.map +1 -0
  521. package/dist/valkyrie/index.js +43 -0
  522. package/dist/valkyrie/index.js.map +1 -0
  523. package/dist/valkyrie/settings.d.ts +28 -0
  524. package/dist/valkyrie/settings.d.ts.map +1 -0
  525. package/dist/valkyrie/settings.js +84 -0
  526. package/dist/valkyrie/settings.js.map +1 -0
  527. package/dist/vgn/index.d.ts +59 -0
  528. package/dist/vgn/index.d.ts.map +1 -0
  529. package/dist/vgn/index.js +165 -0
  530. package/dist/vgn/index.js.map +1 -0
  531. package/dist/wallhack/index.d.ts +165 -0
  532. package/dist/wallhack/index.d.ts.map +1 -0
  533. package/dist/wallhack/index.js +226 -0
  534. package/dist/wallhack/index.js.map +1 -0
  535. package/dist/wlmouse/index.d.ts +4 -0
  536. package/dist/wlmouse/index.d.ts.map +1 -0
  537. package/dist/wlmouse/index.js +7 -0
  538. package/dist/wlmouse/index.js.map +1 -0
  539. package/dist/wooting/index.d.ts +225 -0
  540. package/dist/wooting/index.d.ts.map +1 -0
  541. package/dist/wooting/index.js +296 -0
  542. package/dist/wooting/index.js.map +1 -0
  543. package/dist/zaunkoenig/index.d.ts +49 -0
  544. package/dist/zaunkoenig/index.d.ts.map +1 -0
  545. package/dist/zaunkoenig/index.js +127 -0
  546. package/dist/zaunkoenig/index.js.map +1 -0
  547. package/package.json +193 -0
@@ -0,0 +1,501 @@
1
+ import { bitmouseAddressDataRequest, bitmouseDecodeCidMid, bitmouseDecodeConfig, bitmouseDecodeDpiBlock, bitmouseDecodeReply, bitmouseDecodeSensorMode, bitmouseDecodeLiftOffLevel, bitmouseLiftOffMillimetres, bitmouseDecodeVersion, bitmouseDpiBlockAddresses, bitmouseDpiOptions, bitmouseEnabledStages, bitmouseEncodePollingRate, bitmouseEncodeSensorMode, bitmouseEncodeRequest, bitmouseSetDpiRequest, bitmouseSetFarDistanceRequest, bitmouseSetFlagRequest, bitmouseSetLiftOffRequest, bitmouseSetSensorModeRequest, bitmouseSetSleepRequest, BITMOUSE_ADDRESS, BITMOUSE_ADDRESS_DATA_OFFSET, BITMOUSE_COMMAND, BITMOUSE_DPI_BLOCK_CHUNK, BITMOUSE_DPI_RANGES, BITMOUSE_LENGTHS, BITMOUSE_LIFT_OFF_MAX_CODE, BITMOUSE_LIFT_OFF_MIN_CODE, BITMOUSE_POLLING_RATES, BITMOUSE_PRODUCTS, BITMOUSE_REPORT_ID, BITMOUSE_TARGET, BITMOUSE_USAGE, BITMOUSE_USAGE_PAGE, } from "@openmouse/protocol/bitmouse";
2
+ import { VENDOR_ID } from "../vendors.js";
3
+ /**
4
+ * Driver for ATK's BITMOUSE configuration channel — the protocol the current
5
+ * ATK HUB speaks to the ZERO family. See bitmouse/index.ts for the framing.
6
+ *
7
+ * The older ATK mice in atk/hid.ts use a different channel entirely (16-byte
8
+ * EEPROM commands on usage page 0xff02), so the two drivers never contend for
9
+ * the same collection.
10
+ *
11
+ * Only the products verified on hardware are claimed here. The vendor software
12
+ * drives many more models over this same protocol; adding one is a product-table
13
+ * entry plus a hardware check.
14
+ */
15
+ const REPLY_TIMEOUT_MS = 700;
16
+ const WRITE_SETTLE_MS = 120;
17
+ /**
18
+ * Debounce is written as a raw byte with no documented ceiling; 15 ms matches
19
+ * the rest of the ATK range. Only 4 and 8 ms have been exercised on hardware.
20
+ */
21
+ const DEBOUNCE_MAX_MS = 15;
22
+ const SLEEP_SECONDS = [30, 60, 120, 300, 600, 1800];
23
+ const SLEEP_MIN_SECONDS = 30;
24
+ const SLEEP_MAX_SECONDS = 0xffff;
25
+ /**
26
+ * The register runs 1 to 11 (0.7 mm to 1.7 mm in tenths), which the vendor
27
+ * software exposes as a slider. MouseStatus carries three stops, so the shared
28
+ * control writes the ends and the middle and reports anything the vendor app
29
+ * left in between by which stop it is nearest.
30
+ */
31
+ const LIFT_OFF_LEVELS = [
32
+ [1, "Low"],
33
+ [4, "Medium"],
34
+ [11, "High"],
35
+ ];
36
+ export class AtkBitmouseHidClient {
37
+ canDisableSleep = false;
38
+ device;
39
+ queue = Promise.resolve();
40
+ lastStatus = null;
41
+ dpiBlock = null;
42
+ constructor(device) {
43
+ this.device = device;
44
+ }
45
+ static isSupported(device) {
46
+ if (device.vendorId !== VENDOR_ID.atk)
47
+ return false;
48
+ if (!BITMOUSE_PRODUCTS.has(device.productId))
49
+ return false;
50
+ return device.collections.some((collection) => hasConfigChannel(collection));
51
+ }
52
+ get product() {
53
+ return BITMOUSE_PRODUCTS.get(this.device.productId) ?? null;
54
+ }
55
+ /** A receiver relays configuration to the mouse on target 1. */
56
+ get target() {
57
+ return this.product?.receiver ? BITMOUSE_TARGET.mouseBehindReceiver : BITMOUSE_TARGET.device;
58
+ }
59
+ async open() {
60
+ if (!this.device.opened)
61
+ await this.device.open();
62
+ }
63
+ async close() {
64
+ this.lastStatus = null;
65
+ this.dpiBlock = null;
66
+ if (this.device.opened)
67
+ await this.device.close();
68
+ }
69
+ /** The protocol has a change-notification report, but it is not decoded yet. */
70
+ async startNotifications() {
71
+ return false;
72
+ }
73
+ displayName() {
74
+ return this.product?.name ?? this.device.productName?.trim() ?? "ATK";
75
+ }
76
+ isWireless() {
77
+ return this.product?.receiver ?? false;
78
+ }
79
+ maxDpi() {
80
+ return BITMOUSE_DPI_RANGES[this.product?.sensor ?? "PAW3950Ultra"].max;
81
+ }
82
+ getSleepOptions() {
83
+ return SLEEP_SECONDS;
84
+ }
85
+ getDebounceMaxMs() {
86
+ return DEBOUNCE_MAX_MS;
87
+ }
88
+ getSupportedPollingRates() {
89
+ return BITMOUSE_POLLING_RATES.map(([, hertz]) => hertz).sort((left, right) => left - right);
90
+ }
91
+ getDpiOptions() {
92
+ return bitmouseDpiOptions(BITMOUSE_DPI_RANGES[this.product?.sensor ?? "PAW3950Ultra"]);
93
+ }
94
+ async readStatus(live = false) {
95
+ await this.open();
96
+ const config = await this.readConfig();
97
+ const battery = await this.readByte(BITMOUSE_COMMAND.getBatteryLevel, BITMOUSE_LENGTHS.getBatteryLevel);
98
+ const charging = await this.readByte(BITMOUSE_COMMAND.getBatteryChargingStatus, BITMOUSE_LENGTHS.getBatteryChargingStatus);
99
+ // The DPI table costs seven exchanges, so a live refresh reuses the last one.
100
+ if (!live || !this.dpiBlock)
101
+ this.dpiBlock = await this.readDpiBlock();
102
+ const dpi = this.activeStage();
103
+ if (live && this.lastStatus) {
104
+ return this.lastStatus = {
105
+ ...this.lastStatus,
106
+ batteryPercent: battery,
107
+ batteryState: charging === 1 ? "Charging" : "Discharging",
108
+ pollingRateHz: config?.pollingRateHz ?? this.lastStatus.pollingRateHz,
109
+ dpi: dpi ?? this.lastStatus.dpi,
110
+ };
111
+ }
112
+ const sensorMode = bitmouseDecodeSensorMode(await this.readAddressByte(BITMOUSE_ADDRESS.sensorModel) ?? -1);
113
+ const longRangeByte = await this.readAddressByte(BITMOUSE_ADDRESS.farDistance);
114
+ const longRange = longRangeByte === null ? null : longRangeByte === 1;
115
+ const usable = this.dpiBlock ? bitmouseEnabledStages(this.dpiBlock) : [];
116
+ const stages = usable.map((stage) => stage.x);
117
+ const activeStage = this.dpiBlock && this.dpiBlock.currentIndex < usable.length
118
+ ? this.dpiBlock.currentIndex
119
+ : undefined;
120
+ return this.lastStatus = {
121
+ brand: "ATK",
122
+ name: this.displayName(),
123
+ ui: {
124
+ family: "atk-bitmouse",
125
+ hideUnsupportedPollingRates: true,
126
+ showAdvancedSection: true,
127
+ forceShowBattery: battery !== null,
128
+ dpiStageEditor: stages.length
129
+ ? {
130
+ maxStages: usable.length,
131
+ countEditable: false,
132
+ minDpi: BITMOUSE_DPI_RANGES[this.product?.sensor ?? "PAW3950Ultra"].min,
133
+ maxDpi: this.maxDpi(),
134
+ stepDpi: 10,
135
+ }
136
+ : undefined,
137
+ },
138
+ batteryPercent: battery,
139
+ batteryState: charging === 1 ? "Charging" : "Discharging",
140
+ dpi: dpi ?? 0,
141
+ supportsSeparateDpiAxes: false,
142
+ dpiStages: stages.length ? stages : undefined,
143
+ activeDpiStage: activeStage,
144
+ pollingRateHz: config?.pollingRateHz ?? 0,
145
+ supportedPollingRates: this.getSupportedPollingRates(),
146
+ activeProfile: config ? config.profile : null,
147
+ connectionType: this.isWireless() ? "Wireless" : "Wired",
148
+ connectionDetail: this.isWireless() ? "2.4 GHz receiver" : "Wired USB",
149
+ motionSync: config?.motionSync ?? null,
150
+ rippleControl: config?.rippleControl ?? null,
151
+ debounceMs: config?.debounceMs ?? null,
152
+ sleepTimeout: config?.sleepSeconds || null,
153
+ // The vendor names this "straight line correction"; it is angle snapping.
154
+ angleSnapping: config?.linearCorrection ?? null,
155
+ sensorMode,
156
+ sensorModeEditable: sensorMode !== null,
157
+ longRangeMode: longRange,
158
+ liftOffDistance: this.decodeLiftOff(config),
159
+ supportedLiftOffDistances: ["Low", "Medium", "High"],
160
+ liftOffScale: this.liftOffScale(config),
161
+ firmware: await this.readFirmware(),
162
+ };
163
+ }
164
+ async setPollingRate(pollingRateHz) {
165
+ const code = bitmouseEncodePollingRate(pollingRateHz);
166
+ if (code === null)
167
+ throw new Error(`This mouse does not support ${pollingRateHz} Hz.`);
168
+ await this.write(bitmouseSetFlagRequest(BITMOUSE_COMMAND.setReportRate, BITMOUSE_LENGTHS.setReportRate, code));
169
+ const confirmed = (await this.readConfig())?.pollingRateHz;
170
+ if (confirmed !== pollingRateHz) {
171
+ throw new Error(`The mouse kept ${confirmed ?? "an unknown rate"} instead of ${pollingRateHz} Hz.`);
172
+ }
173
+ this.patch({ pollingRateHz });
174
+ return pollingRateHz;
175
+ }
176
+ /** Writes the stage the mouse is currently on. */
177
+ async setDpi(dpi) {
178
+ if (!this.dpiBlock)
179
+ this.dpiBlock = await this.readDpiBlock();
180
+ return await this.writeStage(this.dpiBlock?.currentIndex ?? 0, dpi);
181
+ }
182
+ /** Writes any stage, which is what the shared DPI stage editor drives. */
183
+ async setDpiStageValue(stage, dpi) {
184
+ return await this.writeStage(stage, dpi);
185
+ }
186
+ async writeStage(index, dpi) {
187
+ const range = BITMOUSE_DPI_RANGES[this.product?.sensor ?? "PAW3950Ultra"];
188
+ if (!Number.isInteger(dpi) || dpi < range.min || dpi > range.max) {
189
+ throw new Error(`${dpi.toLocaleString()} is not a supported DPI value.`);
190
+ }
191
+ if (!this.dpiBlock)
192
+ this.dpiBlock = await this.readDpiBlock();
193
+ const stage = this.dpiBlock?.stages[index];
194
+ if (!stage)
195
+ throw new Error("The mouse did not report its DPI stages.");
196
+ // Colour rides along with every DPI write, so it is carried over from the
197
+ // stage as read. `enable` is not part of the stored record: it tells the
198
+ // mouse to move onto this stage, which is only right for the active one.
199
+ const active = this.dpiBlock?.currentIndex ?? 0;
200
+ await this.write(bitmouseSetDpiRequest({
201
+ index,
202
+ x: dpi,
203
+ y: dpi,
204
+ red: stage.red,
205
+ green: stage.green,
206
+ blue: stage.blue,
207
+ enable: index === active,
208
+ }));
209
+ this.dpiBlock = await this.readDpiBlock();
210
+ const confirmed = this.dpiBlock?.stages[index]?.x;
211
+ if (confirmed !== dpi) {
212
+ throw new Error(`The mouse kept ${confirmed?.toLocaleString() ?? "an unknown value"} instead of ${dpi.toLocaleString()} DPI.`);
213
+ }
214
+ const stages = this.dpiBlock ? bitmouseEnabledStages(this.dpiBlock).map((entry) => entry.x) : undefined;
215
+ this.patch({
216
+ dpiStages: stages?.length ? stages : undefined,
217
+ ...(index === active ? { dpi } : {}),
218
+ });
219
+ return dpi;
220
+ }
221
+ /**
222
+ * Lift-off. The level lives in the config block's offsetCalibration byte,
223
+ * not in the byte the vendor's field map calls silentHeight, and a write
224
+ * sends it as { height: 0, offsetCalibration: level - 1 }.
225
+ */
226
+ async setLiftOffDistance(value) {
227
+ const level = LIFT_OFF_LEVELS.find(([, name]) => name === value)?.[0];
228
+ if (level === undefined) {
229
+ throw new Error(`This mouse does not support a ${value.toLowerCase()} lift-off distance.`);
230
+ }
231
+ await this.write(bitmouseSetLiftOffRequest(level));
232
+ const confirmed = this.decodeLiftOff(await this.readConfig());
233
+ if (confirmed !== value) {
234
+ throw new Error(`The mouse kept a ${String(confirmed ?? "unknown").toLowerCase()} lift-off distance instead of ${value.toLowerCase()}.`);
235
+ }
236
+ this.patch({ liftOffDistance: confirmed });
237
+ return confirmed;
238
+ }
239
+ /**
240
+ * The full 0.7-1.7 mm range, which is what the vendor software offers as a
241
+ * slider. The three-stop setLiftOffDistance above stays for the shared
242
+ * Low/Medium/High control.
243
+ */
244
+ async setLiftOffScale(code) {
245
+ await this.write(bitmouseSetLiftOffRequest(code));
246
+ const config = await this.readConfig();
247
+ const confirmed = config ? bitmouseDecodeLiftOffLevel(config.offsetCalibration) : null;
248
+ if (confirmed !== code) {
249
+ throw new Error(`The mouse kept lift-off code ${confirmed ?? "unknown"} instead of ${code}.`);
250
+ }
251
+ this.patch({
252
+ liftOffDistance: this.decodeLiftOff(config),
253
+ liftOffScale: this.liftOffScale(config),
254
+ });
255
+ return code;
256
+ }
257
+ liftOffScale(config) {
258
+ if (!config)
259
+ return null;
260
+ const code = bitmouseDecodeLiftOffLevel(config.offsetCalibration);
261
+ const millimetres = bitmouseLiftOffMillimetres(code);
262
+ if (millimetres === null)
263
+ return null;
264
+ return {
265
+ value: code,
266
+ min: BITMOUSE_LIFT_OFF_MIN_CODE,
267
+ max: BITMOUSE_LIFT_OFF_MAX_CODE,
268
+ millimetres,
269
+ minMillimetres: bitmouseLiftOffMillimetres(BITMOUSE_LIFT_OFF_MIN_CODE),
270
+ maxMillimetres: bitmouseLiftOffMillimetres(BITMOUSE_LIFT_OFF_MAX_CODE),
271
+ };
272
+ }
273
+ /** The vendor calls this "straight line correction". */
274
+ async setAngleSnapping(enabled) {
275
+ await this.write(bitmouseSetFlagRequest(BITMOUSE_COMMAND.setLinearCorrection, BITMOUSE_LENGTHS.setLinearCorrection, enabled ? 1 : 0));
276
+ const confirmed = (await this.readConfig())?.linearCorrection;
277
+ if (confirmed !== enabled)
278
+ throw new Error(`The mouse left angle snapping ${confirmed ? "on" : "off"}.`);
279
+ this.patch({ angleSnapping: confirmed });
280
+ return confirmed;
281
+ }
282
+ /** ATK's "Ultra Long Range": more radio range for less battery life. */
283
+ async setLongRangeMode(enabled) {
284
+ await this.write(bitmouseSetFarDistanceRequest(enabled));
285
+ const byte = await this.readAddressByte(BITMOUSE_ADDRESS.farDistance);
286
+ const confirmed = byte === null ? null : byte === 1;
287
+ if (confirmed !== enabled) {
288
+ throw new Error(`The mouse left long-range mode ${confirmed ? "on" : "off"}.`);
289
+ }
290
+ this.patch({ longRangeMode: confirmed });
291
+ return confirmed;
292
+ }
293
+ async setSensorMode(mode) {
294
+ const code = bitmouseEncodeSensorMode(mode);
295
+ if (code === null)
296
+ throw new Error(`This mouse does not support a ${mode} sensor mode.`);
297
+ await this.write(bitmouseSetSensorModeRequest(code));
298
+ const confirmed = bitmouseDecodeSensorMode(await this.readAddressByte(BITMOUSE_ADDRESS.sensorModel) ?? -1);
299
+ if (confirmed !== mode) {
300
+ throw new Error(`The mouse kept the ${confirmed ?? "unknown"} sensor mode instead of ${mode}.`);
301
+ }
302
+ this.patch({ sensorMode: confirmed });
303
+ return confirmed;
304
+ }
305
+ decodeLiftOff(config) {
306
+ if (!config)
307
+ return null;
308
+ const millimetres = bitmouseLiftOffMillimetres(bitmouseDecodeLiftOffLevel(config.offsetCalibration));
309
+ if (millimetres === null)
310
+ return null;
311
+ if (millimetres < 1)
312
+ return "Low";
313
+ return millimetres < 1.5 ? "Medium" : "High";
314
+ }
315
+ /** One-byte reads for the settings the config block does not carry. */
316
+ async readAddressByte(address) {
317
+ const reply = await this.exchange(bitmouseAddressDataRequest(address, 1)).catch(() => null);
318
+ return reply?.payload[BITMOUSE_ADDRESS_DATA_OFFSET] ?? null;
319
+ }
320
+ async setMotionSync(enabled) {
321
+ return await this.setFlag(BITMOUSE_COMMAND.setMotionSync, BITMOUSE_LENGTHS.setMotionSync, enabled, "motionSync", "Motion Sync");
322
+ }
323
+ async setRippleControl(enabled) {
324
+ return await this.setFlag(BITMOUSE_COMMAND.setRippleControl, BITMOUSE_LENGTHS.setRippleControl, enabled, "rippleControl", "ripple control");
325
+ }
326
+ async setDebounceTime(milliseconds) {
327
+ if (!Number.isInteger(milliseconds) || milliseconds < 0 || milliseconds > DEBOUNCE_MAX_MS) {
328
+ throw new Error(`Debounce must be a whole number of milliseconds between 0 and ${DEBOUNCE_MAX_MS}.`);
329
+ }
330
+ await this.write(bitmouseSetFlagRequest(BITMOUSE_COMMAND.setStabilizationTime, BITMOUSE_LENGTHS.setStabilizationTime, milliseconds));
331
+ const confirmed = (await this.readConfig())?.debounceMs;
332
+ if (confirmed !== milliseconds) {
333
+ throw new Error(`The mouse kept ${confirmed ?? "an unknown value"} ms of debounce instead of ${milliseconds} ms.`);
334
+ }
335
+ this.patch({ debounceMs: milliseconds });
336
+ return milliseconds;
337
+ }
338
+ async setSleepTimeout(seconds) {
339
+ if (!Number.isInteger(seconds) || seconds < SLEEP_MIN_SECONDS || seconds > SLEEP_MAX_SECONDS) {
340
+ throw new Error(`The sleep timeout must be between ${SLEEP_MIN_SECONDS} and ${SLEEP_MAX_SECONDS} seconds.`);
341
+ }
342
+ await this.write(bitmouseSetSleepRequest(seconds));
343
+ const confirmed = (await this.readConfig())?.sleepSeconds;
344
+ if (confirmed !== seconds) {
345
+ throw new Error(`The mouse kept a ${confirmed ?? "unknown"} second sleep timeout instead of ${seconds} seconds.`);
346
+ }
347
+ this.patch({ sleepTimeout: seconds });
348
+ return seconds;
349
+ }
350
+ async setFlag(commandId, lengths, enabled, field, label) {
351
+ await this.write(bitmouseSetFlagRequest(commandId, lengths, enabled ? 1 : 0));
352
+ const config = await this.readConfig();
353
+ const confirmed = config ? config[field] : null;
354
+ if (confirmed !== enabled)
355
+ throw new Error(`The mouse left ${label} ${confirmed ? "on" : "off"}.`);
356
+ this.patch({ [field]: confirmed });
357
+ return confirmed;
358
+ }
359
+ activeStage() {
360
+ const block = this.dpiBlock;
361
+ if (!block)
362
+ return null;
363
+ return block.stages[block.currentIndex]?.x ?? null;
364
+ }
365
+ async readConfig() {
366
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.getCurrentMouseConfig;
367
+ const reply = await this.exchange({
368
+ commandId: BITMOUSE_COMMAND.getCurrentMouseConfig,
369
+ paramLen,
370
+ cmdLen,
371
+ }).catch(() => null);
372
+ return reply ? bitmouseDecodeConfig(reply.payload) : null;
373
+ }
374
+ async readByte(commandId, lengths) {
375
+ const reply = await this.exchange({ commandId, paramLen: lengths[0], cmdLen: lengths[1] })
376
+ .catch(() => null);
377
+ return reply && reply.payload.length ? reply.payload[0] : null;
378
+ }
379
+ /** Seven ten-byte reads assemble the stage table; a gap makes it unusable. */
380
+ async readDpiBlock() {
381
+ const bytes = [];
382
+ for (const address of bitmouseDpiBlockAddresses()) {
383
+ const reply = await this.exchange(bitmouseAddressDataRequest(address, BITMOUSE_DPI_BLOCK_CHUNK))
384
+ .catch(() => null);
385
+ if (!reply)
386
+ return null;
387
+ const chunk = reply.payload.subarray(BITMOUSE_ADDRESS_DATA_OFFSET, BITMOUSE_ADDRESS_DATA_OFFSET + BITMOUSE_DPI_BLOCK_CHUNK);
388
+ if (chunk.length < BITMOUSE_DPI_BLOCK_CHUNK)
389
+ return null;
390
+ bytes.push(...chunk);
391
+ }
392
+ return bitmouseDecodeDpiBlock(bytes);
393
+ }
394
+ async readFirmware() {
395
+ const lines = [];
396
+ const mouse = await this.readVersion(BITMOUSE_COMMAND.getDeviceVersion, this.target);
397
+ if (mouse)
398
+ lines.push(`Mouse ${mouse}`);
399
+ if (this.product?.receiver) {
400
+ // Dongle commands answer on target 0 even when the mouse is behind it.
401
+ const dongle = await this.readVersion(BITMOUSE_COMMAND.getDongleVersion, BITMOUSE_TARGET.device);
402
+ if (dongle)
403
+ lines.push(`Dongle ${dongle}`);
404
+ }
405
+ return lines;
406
+ }
407
+ async readVersion(commandId, target) {
408
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.getDeviceVersion;
409
+ const reply = await this.exchange({ commandId, paramLen, cmdLen, target }).catch(() => null);
410
+ return reply ? bitmouseDecodeVersion(reply.payload) : null;
411
+ }
412
+ /**
413
+ * The cid,mid pair the mouse answers with — an ATK ZERO reports 1,1. It is
414
+ * how the vendor software tells models apart behind a shared receiver PID,
415
+ * so it is the check to extend when adding a product.
416
+ */
417
+ async readCidMid() {
418
+ const [paramLen, cmdLen] = BITMOUSE_LENGTHS.mouseCidMid;
419
+ const reply = await this.exchange({
420
+ commandId: BITMOUSE_COMMAND.mouseCidMid,
421
+ paramLen,
422
+ cmdLen,
423
+ payload: [0],
424
+ }).catch(() => null);
425
+ const identity = reply ? bitmouseDecodeCidMid(reply.payload) : null;
426
+ return identity ? `${identity.cid},${identity.mid}` : null;
427
+ }
428
+ /** True when the mouse identifies as the product its USB id claims. */
429
+ async confirmsProduct() {
430
+ const expected = this.product?.cidMid;
431
+ if (!expected)
432
+ return null;
433
+ const actual = await this.readCidMid();
434
+ return actual === null ? null : actual === expected;
435
+ }
436
+ async write(request) {
437
+ await this.run(async () => {
438
+ await this.open();
439
+ const frame = bitmouseEncodeRequest({ ...request, target: request.target ?? this.target });
440
+ await this.device.sendReport(BITMOUSE_REPORT_ID, frame);
441
+ await delay(WRITE_SETTLE_MS);
442
+ });
443
+ }
444
+ /** Send a request and resolve with the reply carrying the same command id. */
445
+ async exchange(request) {
446
+ const frame = bitmouseEncodeRequest({ ...request, target: request.target ?? this.target });
447
+ return await this.run(async () => {
448
+ await this.open();
449
+ return await new Promise((resolve, reject) => {
450
+ const finish = () => {
451
+ clearTimeout(timer);
452
+ this.device.removeEventListener("inputreport", listener);
453
+ };
454
+ const timer = setTimeout(() => {
455
+ finish();
456
+ reject(new Error("The mouse did not answer — it may be asleep or out of range."));
457
+ }, REPLY_TIMEOUT_MS);
458
+ const listener = (event) => {
459
+ if (event.reportId !== BITMOUSE_REPORT_ID)
460
+ return;
461
+ const decoded = bitmouseDecodeReply(copyDataView(event.data));
462
+ if (!decoded || decoded.commandId !== request.commandId)
463
+ return;
464
+ finish();
465
+ if (decoded.isError) {
466
+ reject(new Error(`The mouse rejected command ${request.commandId}.`));
467
+ return;
468
+ }
469
+ resolve(decoded);
470
+ };
471
+ this.device.addEventListener("inputreport", listener);
472
+ this.device.sendReport(BITMOUSE_REPORT_ID, frame).catch((error) => {
473
+ finish();
474
+ reject(error);
475
+ });
476
+ });
477
+ });
478
+ }
479
+ patch(changes) {
480
+ if (this.lastStatus)
481
+ this.lastStatus = { ...this.lastStatus, ...changes };
482
+ }
483
+ async run(task) {
484
+ const started = this.queue.then(task, task);
485
+ this.queue = started.catch(() => undefined);
486
+ return await started;
487
+ }
488
+ }
489
+ function hasConfigChannel(collection) {
490
+ const here = collection.usagePage === BITMOUSE_USAGE_PAGE
491
+ && collection.usage === BITMOUSE_USAGE
492
+ && collection.outputReports.some((report) => report.reportId === BITMOUSE_REPORT_ID);
493
+ return here || collection.children.some(hasConfigChannel);
494
+ }
495
+ function copyDataView(view) {
496
+ return new Uint8Array(view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength));
497
+ }
498
+ function delay(milliseconds) {
499
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
500
+ }
501
+ //# sourceMappingURL=bitmouse-hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmouse-hid.js","sourceRoot":"","sources":["../../../src/drivers/atk/bitmouse-hid.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,gBAAgB,EAChB,4BAA4B,EAC5B,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,mBAAmB,GAMpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C;;;;;;;;;;;GAWG;AAEH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B;;;GAGG;AACH,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,aAAa,GAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACvE,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAIjC;;;;;GAKG;AACH,MAAM,eAAe,GAAkE;IACrF,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,QAAQ,CAAC;IACb,CAAC,EAAE,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,OAAO,oBAAoB;IACtB,eAAe,GAAG,KAAK,CAAC;IACxB,MAAM,CAAY;IAEnB,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,UAAU,GAAuB,IAAI,CAAC;IACtC,QAAQ,GAA4B,IAAI,CAAC;IAEjD,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAiB;QAClC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACpD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QAC3D,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC9D,CAAC;IAED,gEAAgE;IAChE,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,kBAAkB;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC;IACxE,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC,CAAC,GAAG,CAAC;IACzE,CAAC;IAED,eAAe;QACb,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,gBAAgB;QACd,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,wBAAwB;QACtB,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IAC9F,CAAC;IAED,aAAa;QACX,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,KAAK;QAC3B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAClC,gBAAgB,CAAC,wBAAwB,EACzC,gBAAgB,CAAC,wBAAwB,CAC1C,CAAC;QAEF,8EAA8E;QAC9E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAE/B,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,UAAU,GAAG;gBACvB,GAAG,IAAI,CAAC,UAAU;gBAClB,cAAc,EAAE,OAAO;gBACvB,YAAY,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;gBACzD,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa;gBACrE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG;aAChC,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,wBAAwB,CACzC,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC/D,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC;QAEtE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM;YAC7E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY;YAC5B,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,IAAI,CAAC,UAAU,GAAG;YACvB,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,EAAE,EAAE;gBACF,MAAM,EAAE,cAAc;gBACtB,2BAA2B,EAAE,IAAI;gBACjC,mBAAmB,EAAE,IAAI;gBACzB,gBAAgB,EAAE,OAAO,KAAK,IAAI;gBAClC,cAAc,EAAE,MAAM,CAAC,MAAM;oBAC3B,CAAC,CAAC;wBACA,SAAS,EAAE,MAAM,CAAC,MAAM;wBACxB,aAAa,EAAE,KAAK;wBACpB,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC,CAAC,GAAG;wBACvE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;wBACrB,OAAO,EAAE,EAAE;qBACZ;oBACD,CAAC,CAAC,SAAS;aACd;YACD,cAAc,EAAE,OAAO;YACvB,YAAY,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;YACzD,GAAG,EAAE,GAAG,IAAI,CAAC;YACb,uBAAuB,EAAE,KAAK;YAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC7C,cAAc,EAAE,WAAW;YAC3B,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,CAAC;YACzC,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,EAAE;YACtD,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YAC7C,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YACxD,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW;YACtE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;YACtC,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,IAAI;YAC5C,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;YACtC,YAAY,EAAE,MAAM,EAAE,YAAY,IAAI,IAAI;YAC1C,0EAA0E;YAC1E,aAAa,EAAE,MAAM,EAAE,gBAAgB,IAAI,IAAI;YAC/C,UAAU;YACV,kBAAkB,EAAE,UAAU,KAAK,IAAI;YACvC,aAAa,EAAE,SAAS;YACxB,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC3C,yBAAyB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;YACpD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACvC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,aAAqB;QACxC,MAAM,IAAI,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;QACtD,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,aAAa,MAAM,CAAC,CAAC;QACvF,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CACrC,gBAAgB,CAAC,aAAa,EAC9B,gBAAgB,CAAC,aAAa,EAC9B,IAAI,CACL,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,aAAa,CAAC;QAC3D,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,IAAI,iBAAiB,eAAe,aAAa,MAAM,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9D,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,GAAW;QAC/C,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,GAAW;QACjD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAExE,0EAA0E;QAC1E,yEAAyE;QACzE,yEAAyE;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;YACrC,KAAK;YACL,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,KAAK,MAAM;SACzB,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,EAAE,cAAc,EAAE,IAAI,kBAAkB,eAAe,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxG,IAAI,CAAC,KAAK,CAAC;YACT,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YAC9C,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,KAAsB;QAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9D,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,WAAW,EAAE,iCAAiC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC3I,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,SAAS,IAAI,SAAS,eAAe,IAAI,GAAG,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,KAAK,CAAC;YACT,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC3C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;SACxC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAAC,MAA6B;QAChD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,0BAA0B,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,0BAA0B;YAC/B,GAAG,EAAE,0BAA0B;YAC/B,WAAW;YACX,cAAc,EAAE,0BAA0B,CAAC,0BAA0B,CAAE;YACvE,cAAc,EAAE,0BAA0B,CAAC,0BAA0B,CAAE;SACxE,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,gBAAgB,CAAC,OAAgB;QACrC,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CACrC,gBAAgB,CAAC,mBAAmB,EACpC,gBAAgB,CAAC,mBAAmB,EACpC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAChB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,gBAAgB,CAAC;QAC9D,IAAI,SAAS,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACzG,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,gBAAgB,CAAC,OAAgB;QACrC,MAAM,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA8B;QAChD,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,eAAe,CAAC,CAAC;QACzF,MAAM,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,wBAAwB,CACxC,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC/D,CAAC;QACF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,IAAI,SAAS,2BAA2B,IAAI,GAAG,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,aAAa,CAAC,MAA6B;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,WAAW,GAAG,0BAA0B,CAAC,0BAA0B,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrG,IAAI,WAAW,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,WAAW,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,OAAO,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED,uEAAuE;IAC/D,KAAK,CAAC,eAAe,CAAC,OAAe;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5F,OAAO,KAAK,EAAE,OAAO,CAAC,4BAA4B,CAAC,IAAI,IAAI,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,OAAO,MAAM,IAAI,CAAC,OAAO,CACvB,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,aAAa,EAC9D,OAAO,EAAE,YAAY,EAAE,aAAa,CACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAgB;QACrC,OAAO,MAAM,IAAI,CAAC,OAAO,CACvB,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,EACpE,OAAO,EAAE,eAAe,EAAE,gBAAgB,CAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,YAAoB;QACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;YAC1F,MAAM,IAAI,KAAK,CAAC,iEAAiE,eAAe,GAAG,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CACrC,gBAAgB,CAAC,oBAAoB,EACrC,gBAAgB,CAAC,oBAAoB,EACrC,YAAY,CACb,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC;QACxD,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,IAAI,kBAAkB,8BAA8B,YAAY,MAAM,CAAC,CAAC;QACrH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,iBAAiB,IAAI,OAAO,GAAG,iBAAiB,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,qCAAqC,iBAAiB,QAAQ,iBAAiB,WAAW,CAAC,CAAC;QAC9G,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY,CAAC;QAC1D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,IAAI,SAAS,oCAAoC,OAAO,WAAW,CAAC,CAAC;QACpH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,SAAiB,EACjB,OAAkC,EAClC,OAAgB,EAChB,KAAqC,EACrC,KAAa;QAEb,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,IAAI,SAAS,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACnG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,WAAW;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,qBAAqB,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YAChC,SAAS,EAAE,gBAAgB,CAAC,qBAAqB;YACjD,QAAQ;YACR,MAAM;SACP,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,OAAkC;QAC1E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;aACvF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAED,8EAA8E;IACtE,KAAK,CAAC,YAAY;QACxB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,OAAO,IAAI,yBAAyB,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;iBAC7F,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAClC,4BAA4B,EAC5B,4BAA4B,GAAG,wBAAwB,CACxD,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAwB;gBAAE,OAAO,IAAI,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC3B,uEAAuE;YACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YACjG,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,MAAc;QACzD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7F,OAAO,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YAChC,SAAS,EAAE,gBAAgB,CAAC,WAAW;YACvC,QAAQ;YACR,MAAM;YACN,OAAO,EAAE,CAAC,CAAC,CAAC;SACb,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,eAAe;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,OAAwB;QAC1C,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACxB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3F,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IACtE,KAAK,CAAC,QAAQ,CAAC,OAAwB;QAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAC/B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1D,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBAC3D,CAAC,CAAC;gBACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,MAAM,EAAE,CAAC;oBACT,MAAM,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC,CAAC;gBACpF,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAG,CAAC,KAA0B,EAAE,EAAE;oBAC9C,IAAI,KAAK,CAAC,QAAQ,KAAK,kBAAkB;wBAAE,OAAO;oBAClD,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC9D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;wBAAE,OAAO;oBAChE,MAAM,EAAE,CAAC;oBACT,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;wBACtE,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACzE,MAAM,EAAE,CAAC;oBACT,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAA6B;QACzC,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5E,CAAC;IAEO,KAAK,CAAC,GAAG,CAAI,IAAsB;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,UAA6B;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,KAAK,mBAAmB;WACpD,UAAU,CAAC,KAAK,KAAK,cAAc;WACnC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,kBAAkB,CAAC,CAAC;IACvF,OAAO,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,KAAK,CAAC,YAAoB;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC"}