ksaa 2025.8.23.1__py3-none-any.whl → 2025.9b2__py3-none-any.whl

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 (764) hide show
  1. {kotonebot/kaa → kaa}/application/core/idle_mode.py +1 -1
  2. {kotonebot/kaa → kaa}/application/core/misc_core.py +1 -1
  3. {kotonebot/kaa → kaa}/common.py +2 -2
  4. {kotonebot/kaa → kaa}/config/const.py +1 -1
  5. {kotonebot/kaa → kaa}/config/produce.py +1 -1
  6. {kotonebot/kaa → kaa}/config/schema.py +10 -1
  7. {kotonebot/kaa → kaa}/db/sqlite.py +1 -1
  8. {kotonebot/kaa → kaa}/errors.py +7 -0
  9. {kotonebot/kaa → kaa}/game_ui/dialog.py +1 -1
  10. {kotonebot/kaa → kaa}/game_ui/idols_overview.py +4 -4
  11. {kotonebot/kaa → kaa}/game_ui/schedule.py +2 -2
  12. {kotonebot/kaa → kaa}/game_ui/scrollable.py +4 -3
  13. {kotonebot/kaa → kaa}/image_db/db.py +1 -1
  14. {kotonebot/kaa → kaa}/main/gr.py +157 -65
  15. {kotonebot/kaa → kaa}/main/kaa.py +2 -2
  16. {kotonebot/kaa → kaa}/metadata.py +55 -0
  17. kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  18. {kotonebot/kaa → kaa}/resources/game.db +0 -0
  19. kaa/resources/game_ver.txt +0 -0
  20. kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
  21. kaa/sprites/207594fa-6a0b-45ec-aeff-b3e45348c508.png +0 -0
  22. kaa/sprites/9483fae5-3a72-4684-9403-d25d2c602d3d.png +0 -0
  23. kaa/sprites/eaad330d-4e50-4b55-be2c-8da0f72764d9.png +0 -0
  24. {kotonebot/kaa → kaa}/tasks/R.py +133 -127
  25. {kotonebot/kaa → kaa}/tasks/actions/commu.py +3 -3
  26. {kotonebot/kaa → kaa}/tasks/actions/loading.py +1 -1
  27. {kotonebot/kaa → kaa}/tasks/actions/scenes.py +5 -3
  28. {kotonebot/kaa → kaa}/tasks/actions/stats.py +1 -1
  29. {kotonebot/kaa → kaa}/tasks/daily/acquire_activity_funds.py +2 -2
  30. {kotonebot/kaa → kaa}/tasks/daily/acquire_presents.py +2 -2
  31. {kotonebot/kaa → kaa}/tasks/daily/assignment.py +2 -2
  32. {kotonebot/kaa → kaa}/tasks/daily/capsule_toys.py +4 -3
  33. {kotonebot/kaa → kaa}/tasks/daily/club_reward.py +3 -3
  34. {kotonebot/kaa → kaa}/tasks/daily/contest.py +4 -4
  35. {kotonebot/kaa → kaa}/tasks/daily/mission_reward.py +2 -2
  36. {kotonebot/kaa → kaa}/tasks/daily/purchase.py +2 -2
  37. {kotonebot/kaa → kaa}/tasks/daily/upgrade_support_card.py +3 -3
  38. {kotonebot/kaa → kaa}/tasks/end_game.py +1 -1
  39. {kotonebot/kaa → kaa}/tasks/produce/cards.py +17 -7
  40. {kotonebot/kaa → kaa}/tasks/produce/common.py +94 -6
  41. {kotonebot/kaa → kaa}/tasks/produce/in_purodyuusu.py +94 -71
  42. {kotonebot/kaa → kaa}/tasks/produce/non_lesson_actions.py +17 -11
  43. {kotonebot/kaa → kaa}/tasks/produce/p_drink.py +1 -1
  44. {kotonebot/kaa → kaa}/tasks/produce/produce.py +42 -61
  45. {kotonebot/kaa → kaa}/tasks/start_game.py +9 -7
  46. {kotonebot/kaa → kaa}/util/paths.py +1 -1
  47. {ksaa-2025.8.23.1.dist-info → ksaa-2025.9b2.dist-info}/METADATA +5 -2
  48. ksaa-2025.9b2.dist-info/RECORD +519 -0
  49. ksaa-2025.9b2.dist-info/entry_points.txt +2 -0
  50. ksaa-2025.9b2.dist-info/top_level.txt +1 -0
  51. kotonebot/__init__.py +0 -40
  52. kotonebot/backend/bot.py +0 -302
  53. kotonebot/backend/color.py +0 -525
  54. kotonebot/backend/context/__init__.py +0 -3
  55. kotonebot/backend/context/context.py +0 -1001
  56. kotonebot/backend/context/task_action.py +0 -176
  57. kotonebot/backend/core.py +0 -126
  58. kotonebot/backend/debug/__init__.py +0 -1
  59. kotonebot/backend/debug/entry.py +0 -89
  60. kotonebot/backend/debug/mock.py +0 -79
  61. kotonebot/backend/debug/server.py +0 -223
  62. kotonebot/backend/debug/vars.py +0 -346
  63. kotonebot/backend/dispatch.py +0 -228
  64. kotonebot/backend/flow_controller.py +0 -197
  65. kotonebot/backend/image.py +0 -748
  66. kotonebot/backend/loop.py +0 -277
  67. kotonebot/backend/ocr.py +0 -511
  68. kotonebot/backend/preprocessor.py +0 -103
  69. kotonebot/client/__init__.py +0 -10
  70. kotonebot/client/device.py +0 -500
  71. kotonebot/client/fast_screenshot.py +0 -378
  72. kotonebot/client/host/__init__.py +0 -12
  73. kotonebot/client/host/adb_common.py +0 -94
  74. kotonebot/client/host/custom.py +0 -114
  75. kotonebot/client/host/leidian_host.py +0 -202
  76. kotonebot/client/host/mumu12_host.py +0 -245
  77. kotonebot/client/host/protocol.py +0 -213
  78. kotonebot/client/host/windows_common.py +0 -55
  79. kotonebot/client/implements/__init__.py +0 -7
  80. kotonebot/client/implements/adb.py +0 -85
  81. kotonebot/client/implements/adb_raw.py +0 -159
  82. kotonebot/client/implements/nemu_ipc/__init__.py +0 -8
  83. kotonebot/client/implements/nemu_ipc/external_renderer_ipc.py +0 -280
  84. kotonebot/client/implements/nemu_ipc/nemu_ipc.py +0 -327
  85. kotonebot/client/implements/remote_windows.py +0 -193
  86. kotonebot/client/implements/uiautomator2.py +0 -82
  87. kotonebot/client/implements/windows.py +0 -168
  88. kotonebot/client/protocol.py +0 -69
  89. kotonebot/client/registration.py +0 -24
  90. kotonebot/config/__init__.py +0 -1
  91. kotonebot/config/base_config.py +0 -96
  92. kotonebot/config/manager.py +0 -36
  93. kotonebot/debug_entry.py +0 -42
  94. kotonebot/errors.py +0 -72
  95. kotonebot/interop/win/message_box.py +0 -314
  96. kotonebot/interop/win/reg.py +0 -37
  97. kotonebot/interop/win/shortcut.py +0 -43
  98. kotonebot/interop/win/task_dialog.py +0 -469
  99. kotonebot/kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  100. kotonebot/kaa/resources/game_ver.txt +0 -0
  101. kotonebot/kaa/resources/idol_cards/i_card-skin-fktn-3-014_0.png +0 -0
  102. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-011_0.png +0 -0
  103. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-011_1.png +0 -0
  104. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-012_0.png +0 -0
  105. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-012_1.png +0 -0
  106. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-013_0.png +0 -0
  107. kotonebot/kaa/resources/idol_cards/i_card-skin-jsna-3-013_1.png +0 -0
  108. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-000_0.png +0 -0
  109. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-000_1.png +0 -0
  110. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-001_0.png +0 -0
  111. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-1-001_1.png +0 -0
  112. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-2-000_0.png +0 -0
  113. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-2-000_1.png +0 -0
  114. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-000_0.png +0 -0
  115. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-000_1.png +0 -0
  116. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-001_0.png +0 -0
  117. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-001_1.png +0 -0
  118. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-002_0.png +0 -0
  119. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-002_1.png +0 -0
  120. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-003_0.png +0 -0
  121. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-003_1.png +0 -0
  122. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-004_0.png +0 -0
  123. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-004_1.png +0 -0
  124. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-005_0.png +0 -0
  125. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-005_1.png +0 -0
  126. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-006_0.png +0 -0
  127. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-006_1.png +0 -0
  128. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-007_0.png +0 -0
  129. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-007_1.png +0 -0
  130. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-008_0.png +0 -0
  131. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-008_1.png +0 -0
  132. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-009_0.png +0 -0
  133. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-009_1.png +0 -0
  134. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-010_0.png +0 -0
  135. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-010_1.png +0 -0
  136. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-011_0.png +0 -0
  137. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-011_1.png +0 -0
  138. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-012_0.png +0 -0
  139. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-012_1.png +0 -0
  140. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-013_0.png +0 -0
  141. kotonebot/kaa/resources/idol_cards/i_card-skin-kcna-3-013_1.png +0 -0
  142. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-000_0.png +0 -0
  143. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-000_1.png +0 -0
  144. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-001_0.png +0 -0
  145. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-1-001_1.png +0 -0
  146. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-2-000_0.png +0 -0
  147. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-2-000_1.png +0 -0
  148. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-000_0.png +0 -0
  149. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-000_1.png +0 -0
  150. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-001_0.png +0 -0
  151. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-001_1.png +0 -0
  152. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-002_0.png +0 -0
  153. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-002_1.png +0 -0
  154. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-004_0.png +0 -0
  155. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-004_1.png +0 -0
  156. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-005_0.png +0 -0
  157. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-005_1.png +0 -0
  158. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-006_0.png +0 -0
  159. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-006_1.png +0 -0
  160. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-007_0.png +0 -0
  161. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-007_1.png +0 -0
  162. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-008_0.png +0 -0
  163. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-008_1.png +0 -0
  164. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-009_0.png +0 -0
  165. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-009_1.png +0 -0
  166. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-010_0.png +0 -0
  167. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-010_1.png +0 -0
  168. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-011_0.png +0 -0
  169. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-011_1.png +0 -0
  170. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-012_0.png +0 -0
  171. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-012_1.png +0 -0
  172. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-013_0.png +0 -0
  173. kotonebot/kaa/resources/idol_cards/i_card-skin-kllj-3-013_1.png +0 -0
  174. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-000_0.png +0 -0
  175. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-000_1.png +0 -0
  176. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-001_0.png +0 -0
  177. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-1-001_1.png +0 -0
  178. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-2-000_0.png +0 -0
  179. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-2-000_1.png +0 -0
  180. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-000_0.png +0 -0
  181. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-000_1.png +0 -0
  182. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-001_0.png +0 -0
  183. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-001_1.png +0 -0
  184. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-002_0.png +0 -0
  185. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-002_1.png +0 -0
  186. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-003_0.png +0 -0
  187. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-003_1.png +0 -0
  188. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-004_0.png +0 -0
  189. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-004_1.png +0 -0
  190. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-006_0.png +0 -0
  191. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-006_1.png +0 -0
  192. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-007_0.png +0 -0
  193. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-007_1.png +0 -0
  194. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-008_0.png +0 -0
  195. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-008_1.png +0 -0
  196. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-009_0.png +0 -0
  197. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-009_1.png +0 -0
  198. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-010_0.png +0 -0
  199. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-010_1.png +0 -0
  200. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-011_0.png +0 -0
  201. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-011_1.png +0 -0
  202. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-012_0.png +0 -0
  203. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-012_1.png +0 -0
  204. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-013_0.png +0 -0
  205. kotonebot/kaa/resources/idol_cards/i_card-skin-shro-3-013_1.png +0 -0
  206. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-000_0.png +0 -0
  207. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-000_1.png +0 -0
  208. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-001_0.png +0 -0
  209. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-1-001_1.png +0 -0
  210. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-2-000_0.png +0 -0
  211. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-2-000_1.png +0 -0
  212. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-000_0.png +0 -0
  213. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-000_1.png +0 -0
  214. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-001_0.png +0 -0
  215. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-001_1.png +0 -0
  216. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-002_0.png +0 -0
  217. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-002_1.png +0 -0
  218. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-003_0.png +0 -0
  219. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-003_1.png +0 -0
  220. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-005_0.png +0 -0
  221. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-005_1.png +0 -0
  222. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-006_0.png +0 -0
  223. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-006_1.png +0 -0
  224. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-007_0.png +0 -0
  225. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-007_1.png +0 -0
  226. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-008_0.png +0 -0
  227. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-008_1.png +0 -0
  228. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-009_0.png +0 -0
  229. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-009_1.png +0 -0
  230. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-010_0.png +0 -0
  231. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-010_1.png +0 -0
  232. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-011_0.png +0 -0
  233. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-011_1.png +0 -0
  234. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-012_0.png +0 -0
  235. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-012_1.png +0 -0
  236. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-013_0.png +0 -0
  237. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-013_1.png +0 -0
  238. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-014_0.png +0 -0
  239. kotonebot/kaa/resources/idol_cards/i_card-skin-ssmk-3-014_1.png +0 -0
  240. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-000_0.png +0 -0
  241. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-000_1.png +0 -0
  242. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-001_0.png +0 -0
  243. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-1-001_1.png +0 -0
  244. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-2-000_0.png +0 -0
  245. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-2-000_1.png +0 -0
  246. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-000_0.png +0 -0
  247. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-000_1.png +0 -0
  248. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-001_0.png +0 -0
  249. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-001_1.png +0 -0
  250. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-002_0.png +0 -0
  251. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-002_1.png +0 -0
  252. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-003_0.png +0 -0
  253. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-003_1.png +0 -0
  254. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-004_0.png +0 -0
  255. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-004_1.png +0 -0
  256. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-006_0.png +0 -0
  257. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-006_1.png +0 -0
  258. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-007_0.png +0 -0
  259. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-007_1.png +0 -0
  260. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-008_0.png +0 -0
  261. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-008_1.png +0 -0
  262. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-009_0.png +0 -0
  263. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-009_1.png +0 -0
  264. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-010_0.png +0 -0
  265. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-010_1.png +0 -0
  266. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-011_0.png +0 -0
  267. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-011_1.png +0 -0
  268. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-012_0.png +0 -0
  269. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-012_1.png +0 -0
  270. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-013_0.png +0 -0
  271. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-013_1.png +0 -0
  272. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-014_0.png +0 -0
  273. kotonebot/kaa/resources/idol_cards/i_card-skin-ttmr-3-014_1.png +0 -0
  274. kotonebot/kaa/tasks/actions/__init__.py +0 -0
  275. kotonebot/kaa/tasks/daily/__init__.py +0 -0
  276. kotonebot/kaa/tasks/produce/__init__.py +0 -0
  277. kotonebot/logging/__init__.py +0 -2
  278. kotonebot/logging/log.py +0 -18
  279. kotonebot/primitives/__init__.py +0 -17
  280. kotonebot/primitives/geometry.py +0 -290
  281. kotonebot/primitives/visual.py +0 -63
  282. kotonebot/tools/__init__.py +0 -0
  283. kotonebot/tools/mirror.py +0 -354
  284. kotonebot/ui/__init__.py +0 -0
  285. kotonebot/ui/file_host/sensio.py +0 -36
  286. kotonebot/ui/file_host/tmp_send.py +0 -54
  287. kotonebot/ui/pushkit/__init__.py +0 -3
  288. kotonebot/ui/pushkit/image_host.py +0 -87
  289. kotonebot/ui/pushkit/protocol.py +0 -13
  290. kotonebot/ui/pushkit/wxpusher.py +0 -53
  291. kotonebot/ui/user.py +0 -144
  292. kotonebot/util.py +0 -409
  293. ksaa-2025.8.23.1.dist-info/RECORD +0 -755
  294. ksaa-2025.8.23.1.dist-info/entry_points.txt +0 -2
  295. ksaa-2025.8.23.1.dist-info/top_level.txt +0 -1
  296. {kotonebot/kaa → kaa}/application/adapter/misc_adapter.py +0 -0
  297. {kotonebot/kaa → kaa}/config/__init__.py +0 -0
  298. {kotonebot/kaa → kaa}/config/migrations/__init__.py +0 -0
  299. {kotonebot/kaa → kaa}/config/migrations/_idol.py +0 -0
  300. {kotonebot/kaa → kaa}/config/migrations/_v1_to_v2.py +0 -0
  301. {kotonebot/kaa → kaa}/config/migrations/_v2_to_v3.py +0 -0
  302. {kotonebot/kaa → kaa}/config/migrations/_v3_to_v4.py +0 -0
  303. {kotonebot/kaa → kaa}/config/migrations/_v4_to_v5.py +0 -0
  304. {kotonebot/kaa → kaa}/config/migrations/_v5_to_v6.py +0 -0
  305. {kotonebot/kaa → kaa}/config/upgrade.py +0 -0
  306. {kotonebot/kaa → kaa}/db/__init__.py +0 -0
  307. {kotonebot/kaa → kaa}/db/constants.py +0 -0
  308. {kotonebot/kaa → kaa}/db/idol_card.py +0 -0
  309. {kotonebot/kaa → kaa}/game_ui/__init__.py +0 -0
  310. {kotonebot/kaa → kaa}/game_ui/badge.py +0 -0
  311. {kotonebot/kaa → kaa}/game_ui/common.py +0 -0
  312. {kotonebot/kaa → kaa}/game_ui/commu_event_buttons.py +0 -0
  313. {kotonebot/kaa → kaa}/game_ui/primary_button.py +0 -0
  314. {kotonebot/kaa → kaa}/game_ui/toolbar.py +0 -0
  315. {kotonebot/kaa → kaa}/image_db/__init__.py +0 -0
  316. {kotonebot/kaa → kaa}/image_db/descriptors/__init__.py +0 -0
  317. {kotonebot/kaa → kaa}/image_db/descriptors/hist.py +0 -0
  318. {kotonebot/kaa → kaa}/kaa_context.py +0 -0
  319. {kotonebot/kaa → kaa}/main/__init__.py +0 -0
  320. {kotonebot/kaa → kaa}/main/cli.py +0 -0
  321. {kotonebot/kaa → kaa}/main/dmm_host.py +0 -0
  322. {kotonebot/backend → kaa/resources}/__init__.py +0 -0
  323. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_0.png +0 -0
  324. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-000_1.png +0 -0
  325. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_0.png +0 -0
  326. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-1-001_1.png +0 -0
  327. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_0.png +0 -0
  328. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-2-000_1.png +0 -0
  329. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_0.png +0 -0
  330. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-000_1.png +0 -0
  331. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_0.png +0 -0
  332. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-001_1.png +0 -0
  333. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_0.png +0 -0
  334. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-002_1.png +0 -0
  335. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_0.png +0 -0
  336. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-003_1.png +0 -0
  337. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_0.png +0 -0
  338. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-005_1.png +0 -0
  339. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_0.png +0 -0
  340. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-006_1.png +0 -0
  341. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_0.png +0 -0
  342. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-007_1.png +0 -0
  343. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_0.png +0 -0
  344. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-008_1.png +0 -0
  345. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_0.png +0 -0
  346. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-009_1.png +0 -0
  347. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_0.png +0 -0
  348. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-010_1.png +0 -0
  349. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_0.png +0 -0
  350. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-011_1.png +0 -0
  351. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_0.png +0 -0
  352. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-012_1.png +0 -0
  353. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_0.png +0 -0
  354. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-amao-3-013_1.png +0 -0
  355. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_0.png +0 -0
  356. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-000_1.png +0 -0
  357. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_0.png +0 -0
  358. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-1-001_1.png +0 -0
  359. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_0.png +0 -0
  360. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-2-000_1.png +0 -0
  361. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_0.png +0 -0
  362. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-000_1.png +0 -0
  363. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_0.png +0 -0
  364. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-001_1.png +0 -0
  365. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_0.png +0 -0
  366. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-002_1.png +0 -0
  367. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_0.png +0 -0
  368. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-003_1.png +0 -0
  369. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_0.png +0 -0
  370. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-005_1.png +0 -0
  371. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_0.png +0 -0
  372. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-006_1.png +0 -0
  373. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_0.png +0 -0
  374. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-007_1.png +0 -0
  375. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_0.png +0 -0
  376. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-008_1.png +0 -0
  377. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_0.png +0 -0
  378. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-009_1.png +0 -0
  379. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_0.png +0 -0
  380. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-010_1.png +0 -0
  381. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_0.png +0 -0
  382. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-011_1.png +0 -0
  383. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_0.png +0 -0
  384. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-012_1.png +0 -0
  385. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_0.png +0 -0
  386. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-013_1.png +0 -0
  387. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-014_1.png +0 -0
  388. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_0.png +0 -0
  389. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-fktn-3-015_1.png +0 -0
  390. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_0.png +0 -0
  391. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-000_1.png +0 -0
  392. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_0.png +0 -0
  393. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-1-001_1.png +0 -0
  394. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_0.png +0 -0
  395. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-2-000_1.png +0 -0
  396. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_0.png +0 -0
  397. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-000_1.png +0 -0
  398. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_0.png +0 -0
  399. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-001_1.png +0 -0
  400. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_0.png +0 -0
  401. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-002_1.png +0 -0
  402. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_0.png +0 -0
  403. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-005_1.png +0 -0
  404. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_0.png +0 -0
  405. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-010_1.png +0 -0
  406. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_0.png +0 -0
  407. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hmsz-3-012_1.png +0 -0
  408. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_0.png +0 -0
  409. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-000_1.png +0 -0
  410. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_0.png +0 -0
  411. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-1-001_1.png +0 -0
  412. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_0.png +0 -0
  413. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-2-000_1.png +0 -0
  414. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_0.png +0 -0
  415. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-000_1.png +0 -0
  416. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_0.png +0 -0
  417. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-001_1.png +0 -0
  418. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_0.png +0 -0
  419. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-002_1.png +0 -0
  420. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_0.png +0 -0
  421. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-003_1.png +0 -0
  422. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_0.png +0 -0
  423. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-004_1.png +0 -0
  424. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_0.png +0 -0
  425. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-005_1.png +0 -0
  426. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_0.png +0 -0
  427. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-006_1.png +0 -0
  428. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_0.png +0 -0
  429. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-007_1.png +0 -0
  430. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_0.png +0 -0
  431. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-008_1.png +0 -0
  432. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_0.png +0 -0
  433. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-009_1.png +0 -0
  434. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_0.png +0 -0
  435. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-010_1.png +0 -0
  436. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_0.png +0 -0
  437. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-011_1.png +0 -0
  438. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_0.png +0 -0
  439. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-012_1.png +0 -0
  440. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_0.png +0 -0
  441. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hrnm-3-014_1.png +0 -0
  442. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_0.png +0 -0
  443. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-000_1.png +0 -0
  444. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_0.png +0 -0
  445. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-1-001_1.png +0 -0
  446. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_0.png +0 -0
  447. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-2-000_1.png +0 -0
  448. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_0.png +0 -0
  449. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-000_1.png +0 -0
  450. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_0.png +0 -0
  451. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-001_1.png +0 -0
  452. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_0.png +0 -0
  453. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-002_1.png +0 -0
  454. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_0.png +0 -0
  455. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-003_1.png +0 -0
  456. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_0.png +0 -0
  457. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-005_1.png +0 -0
  458. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_0.png +0 -0
  459. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-006_1.png +0 -0
  460. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_0.png +0 -0
  461. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-007_1.png +0 -0
  462. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_0.png +0 -0
  463. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-008_1.png +0 -0
  464. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_0.png +0 -0
  465. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-009_1.png +0 -0
  466. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_0.png +0 -0
  467. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-010_1.png +0 -0
  468. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_0.png +0 -0
  469. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-011_1.png +0 -0
  470. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_0.png +0 -0
  471. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-012_1.png +0 -0
  472. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_0.png +0 -0
  473. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-013_1.png +0 -0
  474. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_0.png +0 -0
  475. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hski-3-014_1.png +0 -0
  476. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_0.png +0 -0
  477. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-000_1.png +0 -0
  478. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_0.png +0 -0
  479. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-1-001_1.png +0 -0
  480. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_0.png +0 -0
  481. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-2-000_1.png +0 -0
  482. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_0.png +0 -0
  483. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-000_1.png +0 -0
  484. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_0.png +0 -0
  485. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-001_1.png +0 -0
  486. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_0.png +0 -0
  487. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-002_1.png +0 -0
  488. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_0.png +0 -0
  489. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-004_1.png +0 -0
  490. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_0.png +0 -0
  491. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-005_1.png +0 -0
  492. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_0.png +0 -0
  493. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-006_1.png +0 -0
  494. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_0.png +0 -0
  495. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-011_1.png +0 -0
  496. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_0.png +0 -0
  497. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-012_1.png +0 -0
  498. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_0.png +0 -0
  499. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-013_1.png +0 -0
  500. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_0.png +0 -0
  501. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-hume-3-014_1.png +0 -0
  502. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_0.png +0 -0
  503. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-000_1.png +0 -0
  504. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_0.png +0 -0
  505. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-1-001_1.png +0 -0
  506. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_0.png +0 -0
  507. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-2-000_1.png +0 -0
  508. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_0.png +0 -0
  509. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-000_1.png +0 -0
  510. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_0.png +0 -0
  511. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-002_1.png +0 -0
  512. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_0.png +0 -0
  513. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-003_1.png +0 -0
  514. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_0.png +0 -0
  515. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-004_1.png +0 -0
  516. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_0.png +0 -0
  517. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-005_1.png +0 -0
  518. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_0.png +0 -0
  519. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-006_1.png +0 -0
  520. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_0.png +0 -0
  521. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-007_1.png +0 -0
  522. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_0.png +0 -0
  523. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-008_1.png +0 -0
  524. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_0.png +0 -0
  525. {kotonebot/kaa → kaa}/resources/idol_cards/i_card-skin-jsna-3-010_1.png +0 -0
  526. {kotonebot/kaa → kaa}/sprites/00551158-fee9-483f-b034-549139a96f58.png +0 -0
  527. /kotonebot/kaa/sprites/a938bf45-e622-424f-829a-76152586f413.png → /kaa/sprites/0078d85c-3f22-4d65-834d-bef862386c28.png +0 -0
  528. /kotonebot/kaa/sprites/6dacc5c6-85e2-4e26-b7a4-6bda6cc3ed0e.png → /kaa/sprites/01621013-b0e9-49bb-b7c1-296d1c8e7c4d.png +0 -0
  529. /kotonebot/kaa/sprites/9dcb4207-f546-4382-a87d-5d3377a31f4f.png → /kaa/sprites/03ea1e8a-93e4-41c2-940c-6738de3519ad.png +0 -0
  530. /kotonebot/kaa/sprites/998be65c-b835-4004-bbe0-411a4d74985c.png → /kaa/sprites/03f1e81a-e762-45bd-b8fc-a5ccd99413f2.png +0 -0
  531. {kotonebot/kaa → kaa}/sprites/05890a1b-8764-4e9f-9d21-65d292c22e13.png +0 -0
  532. {kotonebot/kaa → kaa}/sprites/0949c622-9067-4f0d-bac2-3f938a1d2ed2.png +0 -0
  533. {kotonebot/kaa → kaa}/sprites/0bf5e34e-afc6-4447-bbac-67026ce2ad26.png +0 -0
  534. {kotonebot/kaa → kaa}/sprites/0c0627be-4a09-4450-a078-1858d3ace532.png +0 -0
  535. /kotonebot/kaa/sprites/034203b6-cadb-4b7c-af70-3e9551083457.png → /kaa/sprites/0c5871f8-7b83-458e-93ea-87dd96b4e714.png +0 -0
  536. {kotonebot/kaa → kaa}/sprites/0d9ac648-eefa-4869-ac99-1b0c83649681.png +0 -0
  537. /kotonebot/kaa/sprites/faeb1498-1c11-4bc7-8e85-864fd876751c.png → /kaa/sprites/0e311fd9-5027-4fe9-9701-f6ace207a47f.png +0 -0
  538. {kotonebot/kaa → kaa}/sprites/0f7d581d-cea3-4039-9205-732e4cd29293.png +0 -0
  539. /kotonebot/kaa/sprites/441934e4-3659-4522-985c-0e683eb03f1c.png → /kaa/sprites/1201b142-fccd-497d-b082-95c8f3dfd46b.png +0 -0
  540. /kotonebot/kaa/sprites/6e3515d4-68ce-4760-948b-5fb20576fc12.png → /kaa/sprites/13b4ec6d-855e-457a-bc46-ec07bbae2555.png +0 -0
  541. /kotonebot/kaa/sprites/725e767e-79bb-4ce6-a448-8ebee80193b7.png → /kaa/sprites/141ebd00-0572-4186-9e46-caaf2d1f1920.png +0 -0
  542. {kotonebot/kaa → kaa}/sprites/1652f06a-5417-49ef-8949-4854772d9ab7.png +0 -0
  543. {kotonebot/kaa → kaa}/sprites/16fbc93d-b294-4001-b4e9-ee2af181415f.png +0 -0
  544. {kotonebot/kaa → kaa}/sprites/185f7838-92a7-460b-9340-f60858948ce9.png +0 -0
  545. {kotonebot/kaa → kaa}/sprites/1926f2f9-4bd7-48eb-9eba-28ec4efb0606.png +0 -0
  546. /kotonebot/kaa/sprites/fc64316e-8394-4019-a16f-d6e7bb83d9bf.png → /kaa/sprites/19e5119b-2fcf-4e07-b67f-e78bba0adcf1.png +0 -0
  547. /kotonebot/kaa/sprites/8d595a36-a900-42ea-871f-f17f99d5d73a.png → /kaa/sprites/1a0708a6-9b04-4bf5-9e50-7c548a8e37f8.png +0 -0
  548. /kotonebot/kaa/sprites/395a07be-38b7-4c8c-948e-9efcb93a2e49.png → /kaa/sprites/1b8104bd-f872-4618-b7ca-fe334fd14dc8.png +0 -0
  549. /kotonebot/kaa/sprites/2ebe4066-c47c-4284-a52d-b3f5bed523f3.png → /kaa/sprites/1c0a4be2-be62-4c06-964f-b2de5d7860c3.png +0 -0
  550. /kotonebot/kaa/sprites/cf89988c-c930-4890-8a55-018de7a4ae5a.png → /kaa/sprites/1de78cb8-fa69-4226-952a-50bbb20fc7dd.png +0 -0
  551. /kotonebot/kaa/sprites/0b3b7c7d-ad01-44dd-bd25-c819eb002a31.png → /kaa/sprites/1e7f4639-0d64-46dc-977f-79dc7ccb7043.png +0 -0
  552. /kotonebot/kaa/sprites/d55c4fd9-f8be-467a-923f-03cef8bd0525.png → /kaa/sprites/1fa1f7da-0f8d-40f0-ac59-84007fe005cb.png +0 -0
  553. {kotonebot/kaa → kaa}/sprites/213016c2-c3a2-43d8-86a3-ab4d27666ced.png +0 -0
  554. /kotonebot/kaa/sprites/0411b7d9-8f30-44c8-ad51-fde15025ab5f.png → /kaa/sprites/22263c0e-6c8a-45ac-8b26-6fe3af677496.png +0 -0
  555. /kotonebot/kaa/sprites/8dfc96b9-678a-4126-914a-8b5ba920e280.png → /kaa/sprites/23937cf2-9324-4d7d-b87f-17e571e8bb11.png +0 -0
  556. {kotonebot/kaa → kaa}/sprites/23d88465-65d9-4718-8725-8dbf0a98a5a4.png +0 -0
  557. /kotonebot/kaa/sprites/288ca9e3-237f-4de6-ba06-e586a9f87d03.png → /kaa/sprites/246b641d-5cfc-4f06-8f89-1f041a69ea1d.png +0 -0
  558. {kotonebot/kaa → kaa}/sprites/24dc7158-036c-4a66-9280-e934f470be53.png +0 -0
  559. {kotonebot/kaa → kaa}/sprites/24e99232-9434-457f-a9a0-69dd7ecf675f.png +0 -0
  560. {kotonebot/kaa → kaa}/sprites/25f00ee3-8dfe-42d1-a67e-191fa5c3df4b.png +0 -0
  561. /kotonebot/kaa/sprites/cdbf1f7f-63f6-40d7-a3b6-3d64bd6f9083.png → /kaa/sprites/2751a3b3-0184-45fd-bfd5-c1fc75436c05.png +0 -0
  562. /kotonebot/kaa/sprites/ccb670dd-7c8e-4bc9-8e73-934ce26d23a8.png → /kaa/sprites/293fdb6c-9ea9-4471-be88-bdb69ef7e55a.png +0 -0
  563. {kotonebot/kaa → kaa}/sprites/2bd6fe88-99fa-443d-8e42-bb3de5881213.png +0 -0
  564. /kotonebot/kaa/sprites/53eca690-1c14-4424-9456-3a8397ae9ff3.png → /kaa/sprites/2c722ef4-b6c0-4e48-b6e3-78c187e0cf1a.png +0 -0
  565. /kotonebot/kaa/sprites/d61df6da-4b09-4b8c-bc97-46632a80fcd9.png → /kaa/sprites/2c7da64b-4a9a-46ee-a8c2-7fe6d5ca61e2.png +0 -0
  566. /kotonebot/kaa/sprites/4c4339dc-c9b2-4a3c-a80a-02512d281289.png → /kaa/sprites/2ed36417-e2aa-45c6-8fc0-aca1a47f3106.png +0 -0
  567. {kotonebot/kaa → kaa}/sprites/2ededcf5-1d80-4e2a-9c83-2a31998331ce.png +0 -0
  568. /kotonebot/kaa/sprites/44b34d58-8178-416f-88bc-a3c4a5a26bac.png → /kaa/sprites/2f5377ec-e08d-47f4-bf60-928961957b8d.png +0 -0
  569. {kotonebot/kaa → kaa}/sprites/303cccc1-c674-4d3a-8c89-19ea729fdbef.png +0 -0
  570. {kotonebot/kaa → kaa}/sprites/30a6f399-6999-4f04-bb77-651e0214112f.png +0 -0
  571. /kotonebot/kaa/sprites/7f459ed4-063c-48ab-a9ed-48f73bd3a865.png → /kaa/sprites/316fe4ed-272a-4c6a-8822-1a8edf296293.png +0 -0
  572. /kotonebot/kaa/sprites/5efaf4bf-b3cb-456f-88a1-ff1d28be80c1.png → /kaa/sprites/360e32a4-0f22-42da-9da0-fca8d2da6020.png +0 -0
  573. /kotonebot/kaa/sprites/f8237a04-9f49-4796-9238-8dfab4cabcbe.png → /kaa/sprites/37e7c488-7ad6-447e-a37f-75c2553a4a89.png +0 -0
  574. {kotonebot/kaa → kaa}/sprites/3942ae40-7f22-412c-aebe-4b064f68db9b.png +0 -0
  575. {kotonebot/kaa → kaa}/sprites/3b473fe6-e147-477f-b088-9b8fb042a4f6.png +0 -0
  576. {kotonebot/kaa → kaa}/sprites/3c8b477a-8eda-407e-9e9f-7540c8808f89.png +0 -0
  577. /kotonebot/kaa/sprites/6fe17986-a29d-4198-b366-1c40637069b5.png → /kaa/sprites/3c8e18ba-a948-4885-8d07-285faf7a9f32.png +0 -0
  578. /kotonebot/kaa/sprites/b34a76e2-e318-47a0-b194-6e1b01eb269c.png → /kaa/sprites/3da3fd94-081d-4e90-8c11-0ff5f9e216eb.png +0 -0
  579. /kotonebot/kaa/sprites/2e76fba4-b9db-47ce-b6a4-d0a857b3fd4b.png → /kaa/sprites/3ef0ee98-7572-40df-b608-8cf6e76a2bc7.png +0 -0
  580. {kotonebot/kaa → kaa}/sprites/3f637e86-6b74-4693-9131-1fe411fc21e5.png +0 -0
  581. /kotonebot/kaa/sprites/c35208a6-261e-4a2e-aeae-aae19d8c83d6.png → /kaa/sprites/3f91c443-cd32-4048-8dbe-ffa1459171b1.png +0 -0
  582. {kotonebot/kaa → kaa}/sprites/4096cffa-a889-4622-852e-760fc7022d93.png +0 -0
  583. /kotonebot/kaa/sprites/5df708a6-1383-47a4-aec7-69f492f4f783.png → /kaa/sprites/41ff7111-553e-48f7-9fb7-7eb071264c20.png +0 -0
  584. /kotonebot/kaa/sprites/81b9a59e-5714-459b-b6ce-03e1f4c4e503.png → /kaa/sprites/4231568f-b383-4944-99de-0589bb24aa2e.png +0 -0
  585. /kotonebot/kaa/sprites/15552124-cc5c-4abe-b08d-123624248d77.png → /kaa/sprites/42b85806-07f6-4dad-8f03-664c93546d1d.png +0 -0
  586. {kotonebot/kaa → kaa}/sprites/447d0e44-5d87-4b7c-8e60-edb111fe1639.png +0 -0
  587. {kotonebot/kaa → kaa}/sprites/44ba8515-4a60-42c9-8878-b42e4e34ee15.png +0 -0
  588. {kotonebot/kaa → kaa}/sprites/4503db6b-7224-4b81-9971-e7cfa56e10f2.png +0 -0
  589. {kotonebot/kaa → kaa}/sprites/4695f96b-c4f5-4bb6-a021-a13b6ceb2883.png +0 -0
  590. {kotonebot/kaa → kaa}/sprites/4883c564-f950-4a29-9f5f-6f924123cd22.png +0 -0
  591. /kotonebot/kaa/sprites/24b645e9-66a6-4c4b-8273-c895ba6b8324.png → /kaa/sprites/499d34e9-3f0f-4ff6-b0d6-44ee4919c9c0.png +0 -0
  592. {kotonebot/kaa → kaa}/sprites/4d78add6-1027-4939-bb51-f99fca7db2ce.png +0 -0
  593. /kotonebot/kaa/sprites/a8a3d531-9024-4603-a864-64bfe439a9ab.png → /kaa/sprites/4f7fa41d-a32b-4090-badb-05336cf67620.png +0 -0
  594. {kotonebot/kaa → kaa}/sprites/5031808b-5525-4118-92b4-317ec8bda985.png +0 -0
  595. {kotonebot/kaa → kaa}/sprites/50e23c8a-7ba2-4c9c-9cfb-196c260fa1d5.png +0 -0
  596. /kotonebot/kaa/sprites/fba7b4b2-46d3-4a5a-a161-6891014e6daf.png → /kaa/sprites/550d0d4e-9c71-465a-a9ab-a64a25a1c958.png +0 -0
  597. /kotonebot/kaa/sprites/1989466d-c486-4e0c-acc9-ed3116e3c0b8.png → /kaa/sprites/55efbfcf-96c1-45f1-a7bc-3a922c9cf22f.png +0 -0
  598. {kotonebot/kaa → kaa}/sprites/55f7db71-0a18-4b3d-b847-57959b8d2e32.png +0 -0
  599. /kotonebot/kaa/sprites/32966af9-8bfe-4b67-b9b5-2fd5e2678468.png → /kaa/sprites/5615c359-ccc0-469a-82d0-6002c117f4a0.png +0 -0
  600. {kotonebot/kaa → kaa}/sprites/582d36c0-0916-4706-9833-4fbc026701f5.png +0 -0
  601. /kotonebot/kaa/sprites/28282c09-6ce2-4d65-8475-1fc6fbf54e15.png → /kaa/sprites/59123d3e-4b29-4f25-b561-ac9bcd70640e.png +0 -0
  602. /kotonebot/kaa/sprites/e2287baf-c165-467b-8b6c-640d1f2ee376.png → /kaa/sprites/5ca94c3e-908d-49c9-803e-0d75dd56ee9d.png +0 -0
  603. {kotonebot/kaa → kaa}/sprites/5d36b880-7b3f-49b1-a018-7de59867d376.png +0 -0
  604. {kotonebot/kaa → kaa}/sprites/5ebcde3b-f0fd-4e5d-b3de-ada8f0b5e03b.png +0 -0
  605. /kotonebot/kaa/sprites/a43abe98-376b-4da7-ab17-b6c9e1a875fb.png → /kaa/sprites/64396919-34c4-44ff-b39a-c126a7d6b73f.png +0 -0
  606. /kotonebot/kaa/sprites/7465297a-497d-41fa-948d-7f04ad5fdc94.png → /kaa/sprites/64d5db07-ac11-4c55-979e-87f7205287a8.png +0 -0
  607. /kotonebot/kaa/sprites/e734df59-a24f-42e2-9f53-3ca720ddc612.png → /kaa/sprites/65769b32-57b7-4e63-bda9-11cd96525831.png +0 -0
  608. /kotonebot/kaa/sprites/51d0f732-2fe9-40c5-b888-8143270d35bb.png → /kaa/sprites/6670deb8-5f26-4efe-bc8b-65283073851a.png +0 -0
  609. /kotonebot/kaa/sprites/80bfcb8e-fb27-4240-85c5-61650419a304.png → /kaa/sprites/670f3fea-6ac8-4ac5-bb5c-058a52239412.png +0 -0
  610. /kotonebot/kaa/sprites/9a9c9044-53c6-40f7-8eb5-2dc71383e58c.png → /kaa/sprites/674ab5dd-4c63-484d-9f68-7c601d5cf0c7.png +0 -0
  611. /kotonebot/kaa/sprites/d61a93e8-0e24-40d8-814a-402765d057ea.png → /kaa/sprites/6996ae36-4f49-4e60-baef-f481142d8afa.png +0 -0
  612. {kotonebot/kaa → kaa}/sprites/6b58d90d-2e5e-4b7f-bc01-941f2633de89.png +0 -0
  613. {kotonebot/kaa → kaa}/sprites/6cd80be8-c9b3-4ba5-bf17-3ffc9b000743.png +0 -0
  614. /kotonebot/kaa/sprites/97f4f186-da9e-404c-bf1e-918f1b962fee.png → /kaa/sprites/6e158fab-4d9b-4557-8ea7-eabc94bb83c5.png +0 -0
  615. /kotonebot/kaa/sprites/38526b38-7f62-466b-8702-0c657891c7fa.png → /kaa/sprites/6f6f8f1d-cfa6-4d53-abf9-910c4a12739f.png +0 -0
  616. {kotonebot/kaa → kaa}/sprites/70898bf8-56c5-4f84-becb-629c9ab6a7da.png +0 -0
  617. /kotonebot/kaa/sprites/c1c710cd-885b-4b2c-9752-8a2754d0f72d.png → /kaa/sprites/716fbc7f-beda-4482-8c59-699b87778309.png +0 -0
  618. /kotonebot/kaa/sprites/b241eff8-039e-4734-bea2-e10da89426d8.png → /kaa/sprites/71b3edaf-e384-452e-96b0-096d92c4c298.png +0 -0
  619. /kotonebot/kaa/sprites/c38d6852-316f-4a77-9987-e15789ee8612.png → /kaa/sprites/7300a151-0fc1-4261-b98e-ff3e8077eaee.png +0 -0
  620. /kotonebot/kaa/sprites/19962647-b587-488b-9ed3-1f4f7ce36406.png → /kaa/sprites/73b16c0e-2bc6-4e8e-b678-00af0c9c3e0d.png +0 -0
  621. /kotonebot/kaa/sprites/647e6110-8c89-4c34-9352-b8b321c61500.png → /kaa/sprites/73fba395-96ee-45ab-bca8-9426a0504fed.png +0 -0
  622. {kotonebot/kaa → kaa}/sprites/74ec3510-583d-4a76-ac69-38480fbf1387.png +0 -0
  623. /kotonebot/kaa/sprites/be8a47df-79fe-48c1-b41e-77fe1a26a90b.png → /kaa/sprites/773c7946-041e-40b3-b951-229aed614dbe.png +0 -0
  624. /kotonebot/kaa/sprites/cac8bff8-569e-450f-8ac7-dad3eebf18d9.png → /kaa/sprites/78bea52e-d7d0-4b99-8f89-e89324527611.png +0 -0
  625. {kotonebot/kaa → kaa}/sprites/79abd239-5eed-4195-9fa8-d729daa874ca.png +0 -0
  626. /kotonebot/kaa/sprites/d88c35b8-f101-4557-b2a5-0f7846fecd4c.png → /kaa/sprites/7a5eff9d-4e2d-4f8f-bdf2-d81a15d9cc6d.png +0 -0
  627. /kotonebot/kaa/sprites/1cc8c106-1830-433e-956f-7d31a01da99e.png → /kaa/sprites/7bc266f0-0166-4bd4-a8c2-0d5555e6d74d.png +0 -0
  628. /kotonebot/kaa/sprites/a5e675c9-8fc8-46f2-ae73-bc871d65daaf.png → /kaa/sprites/7bcaf86b-8594-40fb-9f06-a7ffeb0bd10e.png +0 -0
  629. /kotonebot/kaa/sprites/d3832642-3108-4947-8274-68ad8a78b690.png → /kaa/sprites/7e7f553f-8f93-400a-b70c-644df794ddfa.png +0 -0
  630. /kotonebot/kaa/sprites/c84958c3-37a8-4f1e-9874-45d2c3723b80.png → /kaa/sprites/7ee5bce2-9c00-4a1b-91f3-3de0dd1821ac.png +0 -0
  631. /kotonebot/kaa/sprites/444bc913-a075-4f71-baf8-a94cbb8a8ab0.png → /kaa/sprites/802cd7cb-066a-49b5-a0c3-3da0eab9d674.png +0 -0
  632. /kotonebot/kaa/sprites/2f707d1b-98d5-47b1-a14c-5c7b95a1cc8c.png → /kaa/sprites/808e16c7-e112-4928-a03f-23a5fcbe0b24.png +0 -0
  633. {kotonebot/kaa → kaa}/sprites/81c97cd3-df53-44d3-bf3d-1eb4dc67b62a.png +0 -0
  634. {kotonebot/kaa → kaa}/sprites/835489e2-b29b-426c-b4c9-3bb9f8eb6195.png +0 -0
  635. {kotonebot/kaa → kaa}/sprites/83d0a033-466c-463a-bb8c-be0f2953e9b2.png +0 -0
  636. {kotonebot/kaa → kaa}/sprites/8424ecdd-8857-4764-9fd0-d4bfa440c128.png +0 -0
  637. /kotonebot/kaa/sprites/8af8652d-06fe-4d2c-b123-641c7fbc651d.png → /kaa/sprites/85a9ee57-a69d-452c-9533-3913dd4af5e8.png +0 -0
  638. /kotonebot/kaa/sprites/e072322f-eff1-4cbd-80c2-4e2103a1aa2f.png → /kaa/sprites/85dad1b9-edfb-44f9-b59d-c92a90ed0d13.png +0 -0
  639. /kotonebot/kaa/sprites/8836e28c-e310-4870-94d2-b58e5dffad49.png → /kaa/sprites/8660b8a5-dce0-4e34-a0b4-5cbee251cc9d.png +0 -0
  640. /kotonebot/kaa/sprites/87ee5cea-6fb4-4768-8767-3c422df08371.png → /kaa/sprites/8795c644-edd9-4930-b307-e02b8df8f63c.png +0 -0
  641. {kotonebot/kaa → kaa}/sprites/8c179a21-be6f-4db8-a9b0-9afeb5c36b1c.png +0 -0
  642. /kotonebot/kaa/sprites/f4212619-497f-4dcd-a197-e7c4c1c1a8ad.png → /kaa/sprites/8c32afab-a759-4d17-bb09-5ee4f78bc094.png +0 -0
  643. /kotonebot/kaa/sprites/6a77517b-99b1-42a1-ba61-a3109151339e.png → /kaa/sprites/8c3412f5-77a4-4d95-96fc-af9c562e73b9.png +0 -0
  644. {kotonebot/kaa → kaa}/sprites/8ded6c98-85ea-4858-a66d-4fc8caecb7c5.png +0 -0
  645. {kotonebot/kaa → kaa}/sprites/8f8b7b46-53bb-42ab-907a-4ea87eb09ab4.png +0 -0
  646. /kotonebot/kaa/sprites/974015ca-854d-43e3-a8ed-faa247d304bc.png → /kaa/sprites/8fbb1d42-c540-4e2a-91b1-871ca77ecdb1.png +0 -0
  647. /kotonebot/kaa/sprites/8f8f1144-5c30-41f0-8a6b-b39fe78e3e99.png → /kaa/sprites/919e00d2-7319-4541-bdc5-8d398d4759ce.png +0 -0
  648. {kotonebot/kaa → kaa}/sprites/921eefeb-730e-46fc-9924-d338fb286592.png +0 -0
  649. {kotonebot/kaa → kaa}/sprites/9340b854-025c-40da-9387-385d38433bef.png +0 -0
  650. /kotonebot/kaa/sprites/64969b0b-a6ef-4342-a967-20428d5baa65.png → /kaa/sprites/998391fa-c5a6-40cb-80d6-3b1c75a3fa91.png +0 -0
  651. /kotonebot/kaa/sprites/34fd0d97-1018-4986-b990-29e48abc2a56.png → /kaa/sprites/99d679f6-8371-46e7-a742-6180cc7e68f6.png +0 -0
  652. /kotonebot/kaa/sprites/87f96abd-8290-4a06-bfc4-c7275cd01d9a.png → /kaa/sprites/9afa238e-be07-4d01-9e5c-350bf83d9884.png +0 -0
  653. /kotonebot/kaa/sprites/f53ff71d-54b5-44d2-9e48-ad2dee918fd1.png → /kaa/sprites/9f7eba7c-2e9d-4d2a-9c8b-b9eadf9addd4.png +0 -0
  654. {kotonebot/kaa → kaa}/sprites/9fd0753f-c607-4d49-82d1-40bda27e014f.png +0 -0
  655. {kotonebot/interop/win → kaa/sprites}/__init__.py +0 -0
  656. /kotonebot/kaa/sprites/724e9b7b-0bf6-4d78-b887-9b108474e732.png → /kaa/sprites/a07ba9ce-3a90-42ae-b8c4-cba80a8fd676.png +0 -0
  657. {kotonebot/kaa → kaa}/sprites/a0bd6a5f-784d-4f0a-9d66-10f4b80c8d3e.png +0 -0
  658. /kotonebot/kaa/sprites/56c4d716-65b3-4fb8-badb-970853544c7a.png → /kaa/sprites/a1c84ff9-9350-4927-bb0c-708e215ef721.png +0 -0
  659. {kotonebot/kaa → kaa}/sprites/a1df3af1-a3e7-4521-a085-e4dc3cd1cc57.png +0 -0
  660. {kotonebot/kaa → kaa}/sprites/a48324ae-7c1a-489e-b3c4-93d12267f88d.png +0 -0
  661. /kotonebot/kaa/sprites/50718df3-1b0e-425f-802c-ca4abd08a4b5.png → /kaa/sprites/a8dc76c8-a90d-48c9-a20e-32d185b329c9.png +0 -0
  662. {kotonebot/kaa → kaa}/sprites/a9fcaf04-0c1f-4b0f-bb5b-ede9da96180f.png +0 -0
  663. /kotonebot/kaa/sprites/59f54f2a-1efb-4d5a-b76b-b740ddf561ec.png → /kaa/sprites/abd8b312-348c-40b3-b034-921cefaf0bfe.png +0 -0
  664. /kotonebot/kaa/sprites/f162875f-08d7-4a64-a7b2-2fff14497f74.png → /kaa/sprites/acb20bc4-1109-40b8-9c14-526878a699f2.png +0 -0
  665. {kotonebot/kaa → kaa}/sprites/adc533a7-970b-4c5b-a037-2181531a35d6.png +0 -0
  666. /kotonebot/kaa/sprites/87b36188-2bf9-4b56-98cf-9e8df3879dbf.png → /kaa/sprites/ae36e6ef-e2bf-4dd5-825a-c047432e3e52.png +0 -0
  667. /kotonebot/kaa/sprites/ceaa1281-57d5-4c32-b5e2-86781518709b.png → /kaa/sprites/ae5af81c-c75f-448b-88aa-c148cb728dfe.png +0 -0
  668. {kotonebot/kaa → kaa}/sprites/ae9fe233-9acc-4e96-ba8e-1fb1d9bc2ea5.png +0 -0
  669. /kotonebot/kaa/sprites/bbc8ae86-9ad5-4fc7-8662-05a096ec1b84.png → /kaa/sprites/aeba7356-fc43-4450-8088-9f46a395bb00.png +0 -0
  670. {kotonebot/kaa → kaa}/sprites/b0283997-7931-476d-a92f-d7569f6ea34c.png +0 -0
  671. {kotonebot/kaa → kaa}/sprites/b2af59e9-60e3-4d97-8c72-c7ba092113a3.png +0 -0
  672. {kotonebot/kaa → kaa}/sprites/b2e1bf3c-2c36-4fb5-9db7-c10a29563a37.png +0 -0
  673. /kotonebot/kaa/sprites/5e473a8c-bf57-44d8-a711-db1f4ccc182c.png → /kaa/sprites/b4613fe1-10d8-47bc-88e8-7b729268e0e5.png +0 -0
  674. /kotonebot/kaa/sprites/3d8ab1bb-f8a8-4b19-a565-3b06e1cfe11c.png → /kaa/sprites/b4f86f2c-668d-48ed-bc1e-57886c57a731.png +0 -0
  675. {kotonebot/kaa → kaa}/sprites/b62bf889-da3c-495a-8707-f3bde73efe92.png +0 -0
  676. {kotonebot/kaa → kaa}/sprites/b6b94f21-ef4b-4425-9c7e-ca2b574b0add.png +0 -0
  677. /kotonebot/kaa/sprites/e38ced13-5ab3-47ee-b10b-63b5ed4224fb.png → /kaa/sprites/b83ae84f-79c0-4bd1-b8b8-86096cc3d5c1.png +0 -0
  678. /kotonebot/kaa/sprites/d67de935-b5f2-4176-ab52-d0482290cb59.png → /kaa/sprites/b949cf3e-4614-4fcd-8328-35b34234a9b2.png +0 -0
  679. {kotonebot/kaa → kaa}/sprites/bab6c393-692c-4681-ac0d-76c0d9dabea6.png +0 -0
  680. /kotonebot/kaa/sprites/32395105-71b0-4f98-a439-c181e82a648e.png → /kaa/sprites/bb51dcf2-9041-4214-91a3-de2d55c1d864.png +0 -0
  681. /kotonebot/kaa/sprites/e129c096-35c3-4fd8-b30c-ce92c3c9b85f.png → /kaa/sprites/bbc9449f-b923-4e56-844e-8e4cdbe803e3.png +0 -0
  682. {kotonebot/kaa → kaa}/sprites/bc7155ac-18c9-4335-9ec2-c8762d37a057.png +0 -0
  683. /kotonebot/kaa/sprites/e707f860-027c-44ee-a7a3-b18573b539e3.png → /kaa/sprites/bdb71eb9-15d7-4ce8-8622-b11d4eb20e90.png +0 -0
  684. /kotonebot/kaa/sprites/cdd7bbc5-8ebd-4a5c-84ca-0e7ca7702d8f.png → /kaa/sprites/bddbdc46-2127-4688-ba26-15f2f87b9af4.png +0 -0
  685. /kotonebot/kaa/sprites/f79fb63f-1737-4e67-b017-0b34bc93295a.png → /kaa/sprites/c08761c4-33ff-4f6c-85d4-102a1789b3a9.png +0 -0
  686. {kotonebot/kaa → kaa}/sprites/c3f536d6-a04a-4651-b3f9-dd2c22593f7f.png +0 -0
  687. /kotonebot/kaa/sprites/62b425ac-3e19-4924-8a58-c085f4d38f56.png → /kaa/sprites/c52b6db3-c440-4db2-ae25-a27668c9b114.png +0 -0
  688. {kotonebot/kaa → kaa}/sprites/c5b7d67e-7260-4f08-a0e9-4d31ce9bbecf.png +0 -0
  689. {kotonebot/kaa → kaa}/sprites/c78c38cc-7b61-4dc4-820d-0a5b684ef52e.png +0 -0
  690. /kotonebot/kaa/sprites/97f26adc-071b-4289-8243-dc20e024c7e4.png → /kaa/sprites/c907c525-3d6a-4b82-8d10-91831cb37b1b.png +0 -0
  691. {kotonebot/kaa → kaa}/sprites/c948f136-416f-447e-8152-54a1cd1d1329.png +0 -0
  692. {kotonebot/kaa → kaa}/sprites/c954e153-d3e9-4488-869f-d00cfdfac5ee.png +0 -0
  693. /kotonebot/kaa/sprites/d289f4e1-e92e-4263-93a4-33da4767d7a9.png → /kaa/sprites/ca8427c9-7af9-44dd-9960-7938222b84ea.png +0 -0
  694. {kotonebot/kaa → kaa}/sprites/cb3d0ca7-8d14-408a-a2f5-2e25f7b86d6c.png +0 -0
  695. /kotonebot/kaa/sprites/c107e00b-f94f-4526-88f5-2eae03a7d7f6.png → /kaa/sprites/cbde3ad5-276c-4826-a616-ab8692ab5a50.png +0 -0
  696. {kotonebot/kaa → kaa}/sprites/cbf4ce9c-f8d8-4fb7-a197-15bb9847df04.png +0 -0
  697. {kotonebot/kaa → kaa}/sprites/cc60b509-2ed5-493d-bb9f-333c6d2a6006.png +0 -0
  698. {kotonebot/kaa → kaa}/sprites/cc8a495d-330d-447d-8a80-a8a6ecc409c5.png +0 -0
  699. {kotonebot/kaa → kaa}/sprites/ccbcb114-7f73-43d1-904a-3a7ae660c531.png +0 -0
  700. {kotonebot/kaa → kaa}/sprites/ce1d1d6f-38f2-48bf-98bd-6e091c7ca5b8.png +0 -0
  701. {kotonebot/kaa → kaa}/sprites/ce20a856-5629-4f8e-a8e1-d1bd14e18e4f.png +0 -0
  702. {kotonebot/kaa → kaa}/sprites/cfc9c8e8-cbe1-49f0-9afa-ead7f9455a2e.png +0 -0
  703. /kotonebot/kaa/sprites/b6f57baa-1d05-464f-81c9-0014063d6656.png → /kaa/sprites/d17f66dc-b4c5-4227-9e29-ec202cc2b1fe.png +0 -0
  704. /kotonebot/kaa/sprites/640826ef-c7cf-494c-888a-b151ef418531.png → /kaa/sprites/d24d63c1-10ea-479f-868c-8e2d6936900a.png +0 -0
  705. {kotonebot/kaa → kaa}/sprites/d271a24f-efe8-424d-8fd5-f6b3756ba4ca.png +0 -0
  706. {kotonebot/kaa → kaa}/sprites/d3424d31-0502-4623-996e-f0194e5085ce.png +0 -0
  707. /kotonebot/kaa/sprites/a7f4d9cb-d0ee-4abd-b9fa-148c059c7a0f.png → /kaa/sprites/d3c2a7a6-802d-407c-bc5b-aca5bb1741fa.png +0 -0
  708. {kotonebot/kaa → kaa}/sprites/d3cc3323-51af-4882-ae12-49e7384b746d.png +0 -0
  709. /kotonebot/kaa/sprites/37686733-d013-4580-b255-6db73142c0f6.png → /kaa/sprites/d4941156-d2c4-4bad-9e42-80e2c409640b.png +0 -0
  710. {kotonebot/kaa → kaa}/sprites/d6b64759-26b7-45b1-bf8e-5c0d98611e0d.png +0 -0
  711. {kotonebot/kaa → kaa}/sprites/d7667903-7149-4f2f-9c15-d8a4b5f4d347.png +0 -0
  712. {kotonebot/kaa → kaa}/sprites/d83f338d-dde3-494b-9bea-cae511e3517c.png +0 -0
  713. /kotonebot/kaa/sprites/46abcf20-513c-4759-9976-eaab68be7f8f.png → /kaa/sprites/d8a19204-b2bd-430b-83d5-005e8cd08d20.png +0 -0
  714. /kotonebot/kaa/sprites/8fad2402-594e-4466-927a-1f83139d7edf.png → /kaa/sprites/d9620175-115f-4a7e-9a8b-0728bd464929.png +0 -0
  715. {kotonebot/kaa → kaa}/sprites/d982d2b5-4bc0-4ae9-a516-f29c2848d64b.png +0 -0
  716. /kotonebot/kaa/sprites/814da106-1756-4bce-9140-d2730b635e7e.png → /kaa/sprites/da0f5694-01e2-4015-b7c5-e6827fe1bb51.png +0 -0
  717. {kotonebot/kaa → kaa}/sprites/da439e8c-3b74-4371-9657-0736d826c7d1.png +0 -0
  718. {kotonebot/kaa → kaa}/sprites/daf3d823-b7f1-4584-acf3-90b9d880332c.png +0 -0
  719. {kotonebot/kaa → kaa}/sprites/db7d3f03-1f7f-43bf-8125-f7c2d345fca2.png +0 -0
  720. /kotonebot/kaa/sprites/5661e7a0-9513-4bb6-9549-87b7ad871a0d.png → /kaa/sprites/dbfd0dd6-abeb-4fd0-a072-e6319a9e0981.png +0 -0
  721. {kotonebot/kaa → kaa}/sprites/de325534-3fd3-480a-9eb8-eb47960a753a.png +0 -0
  722. /kotonebot/kaa/sprites/5af6d58e-52c5-47fd-8ea5-c2fa8bb67e99.png → /kaa/sprites/deae7249-6fea-4059-b8fd-6fdd8836b17c.png +0 -0
  723. {kotonebot/kaa → kaa}/sprites/df991b42-ed8e-4f2c-bf0c-aa7522f147b6.png +0 -0
  724. /kotonebot/kaa/sprites/88456f07-23f0-48f7-ac81-206312717095.png → /kaa/sprites/e153cfbb-1a2e-4f66-a884-e110c0a83d53.png +0 -0
  725. /kotonebot/kaa/sprites/6e314b73-5ff5-4aa9-9dc3-1ebf28a578a7.png → /kaa/sprites/e2e253b8-0536-41ef-9982-292dc4a2fbc3.png +0 -0
  726. {kotonebot/kaa → kaa}/sprites/e4683def-8d1d-472b-a5ab-bb3885c0c98e.png +0 -0
  727. /kotonebot/kaa/sprites/2af71658-11c3-4c34-b604-003fb8a6a542.png → /kaa/sprites/e5cec3e1-aa3c-4c73-880c-2341d22c68ce.png +0 -0
  728. /kotonebot/kaa/sprites/71841087-2d73-4726-943a-c784df0b0d2d.png → /kaa/sprites/e5da45b7-2315-49c0-ba97-58d82e139ff5.png +0 -0
  729. {kotonebot/kaa → kaa}/sprites/e5e84f9e-28da-4cf4-bcba-c9145fe39b07.png +0 -0
  730. {kotonebot/kaa → kaa}/sprites/e6b45405-cd9f-4c6e-a9f1-6ec953747c65.png +0 -0
  731. {kotonebot/kaa → kaa}/sprites/e88c9ad1-ec37-4fcd-b086-862e1e7ce8fd.png +0 -0
  732. {kotonebot/kaa → kaa}/sprites/e9ee330d-dfca-440e-8b8c-0a3b4e8c8730.png +0 -0
  733. {kotonebot/kaa → kaa}/sprites/ea1ba124-9cb3-4427-969a-bacd47e7d920.png +0 -0
  734. /kotonebot/kaa/sprites/c32068c9-6e52-4176-98de-fd4d252969dd.png → /kaa/sprites/ea3e0843-df72-4dda-a933-7647c2ca356b.png +0 -0
  735. /kotonebot/kaa/sprites/9d87795b-c322-49c6-a9c9-6064828a55a2.png → /kaa/sprites/ea4f97d8-cc07-425b-a594-1ee698d257ec.png +0 -0
  736. {kotonebot/kaa → kaa}/sprites/eaba6ebe-f0df-4918-aee5-ef4e3ffedcf0.png +0 -0
  737. /kotonebot/kaa/sprites/4999097e-2f8b-4965-9e7e-cb9801f8ed0e.png → /kaa/sprites/eb9a68bf-624e-4faa-ae44-c5aafa1156e9.png +0 -0
  738. /kotonebot/kaa/sprites/b80cec57-1d9c-4e40-a4d2-df1e1b1546d3.png → /kaa/sprites/eda4839f-5487-4444-ac64-216d94b33d0e.png +0 -0
  739. {kotonebot/kaa → kaa}/sprites/ee4e512b-4982-49b6-9c71-31984b58e1d0.png +0 -0
  740. {kotonebot/kaa → kaa}/sprites/eef25cf9-afd0-43b1-b9c5-fbd997bd5fe0.png +0 -0
  741. /kotonebot/kaa/sprites/4fa138a2-4f39-4023-afd4-af5be7df662b.png → /kaa/sprites/f03a8a47-9ae8-48b3-ae2c-8df04d9a9ea9.png +0 -0
  742. /kotonebot/kaa/sprites/ef601e20-dc47-4c70-a251-4238fde74d49.png → /kaa/sprites/f0cbde7d-157d-4964-811f-bd8491946ad4.png +0 -0
  743. /kotonebot/kaa/sprites/9ac47ce9-2594-4740-ba70-c61f97c0f992.png → /kaa/sprites/f0dcbc16-20ed-4852-bfe2-5ad0b1df5380.png +0 -0
  744. {kotonebot/kaa → kaa}/sprites/f1f21925-3e22-4dd1-b53b-bb52bcf26c2b.png +0 -0
  745. /kotonebot/kaa/sprites/cc65d34b-b220-451e-a18e-66b05b911e97.png → /kaa/sprites/f34d2983-c306-4b26-be19-c8aceb41879c.png +0 -0
  746. {kotonebot/kaa → kaa}/sprites/f43c313b-8a7b-467b-8442-fc5bcb8b4388.png +0 -0
  747. /kotonebot/kaa/sprites/0bab5a6b-631c-4661-8035-50a03299bd08.png → /kaa/sprites/f4684588-dae3-4a18-ba44-153f37339652.png +0 -0
  748. {kotonebot/kaa → kaa}/sprites/f5c16d2f-ebc5-4617-9b96-971696af7c52.png +0 -0
  749. /kotonebot/kaa/sprites/184e517f-f37f-4cc8-ac49-6858025903ee.png → /kaa/sprites/f5db23dd-9ba4-4dac-bf7d-fe6f6593d464.png +0 -0
  750. /kotonebot/kaa/sprites/c48df972-98fd-4303-99df-9374f542beda.png → /kaa/sprites/f6a458d4-453d-404a-b37d-3ecd1f4ec9ca.png +0 -0
  751. {kotonebot/kaa → kaa}/sprites/f6ca6bd3-543f-4779-8367-c5c883f04b95.png +0 -0
  752. /kotonebot/kaa/sprites/649f1c6d-03f8-4e84-87a7-b3418bdb9f61.png → /kaa/sprites/fa841e1c-c2b0-47f9-aff2-6a2accfaccb1.png +0 -0
  753. {kotonebot/kaa → kaa}/sprites/fad5eec2-5fd5-412f-9abb-987a3087dc54.png +0 -0
  754. /kotonebot/kaa/sprites/180168f7-9ead-4ce3-9cd9-b1960d649e5c.png → /kaa/sprites/fd242e23-dc69-45a0-94ee-53172f793687.png +0 -0
  755. /kotonebot/kaa/sprites/cca278bb-88cb-4898-8bbe-f52a49a0f740.png → /kaa/sprites/ff692c66-7c5c-4105-a456-789f8d78cd88.png +0 -0
  756. /kotonebot/kaa/sprites/f68eb4f1-b30b-43fc-8a24-11394cc759d2.png → /kaa/sprites/ff86b3e5-e0e8-46c6-a645-e7ff10c32baf.png +0 -0
  757. {kotonebot/kaa → kaa/tasks}/__init__.py +0 -0
  758. {kotonebot/kaa/resources → kaa/tasks/actions}/__init__.py +0 -0
  759. {kotonebot/kaa → kaa}/tasks/clear_logs.py +0 -0
  760. {kotonebot/kaa/sprites → kaa/tasks/daily}/__init__.py +0 -0
  761. {kotonebot/kaa/tasks → kaa/tasks/produce}/__init__.py +0 -0
  762. {kotonebot/kaa → kaa}/util/trace.py +0 -0
  763. {ksaa-2025.8.23.1.dist-info → ksaa-2025.9b2.dist-info}/WHEEL +0 -0
  764. {ksaa-2025.8.23.1.dist-info → ksaa-2025.9b2.dist-info}/licenses/LICENSE +0 -0
@@ -1,202 +0,0 @@
1
- import os
2
- import subprocess
3
- from typing import Literal
4
- from functools import lru_cache
5
- from typing_extensions import override
6
-
7
- from kotonebot import logging
8
- from kotonebot.client import Device
9
- from kotonebot.util import Countdown, Interval
10
- from .protocol import HostProtocol, Instance, copy_type, AdbHostConfig
11
- from .adb_common import AdbRecipes, CommonAdbCreateDeviceMixin
12
-
13
- logger = logging.getLogger(__name__)
14
- LeidianRecipes = AdbRecipes
15
-
16
- if os.name == 'nt':
17
- from ...interop.win.reg import read_reg
18
- else:
19
- def read_reg(key, subkey, name, *, default=None, **kwargs):
20
- """Stub for read_reg on non-Windows platforms."""
21
- return default
22
-
23
- class LeidianInstance(CommonAdbCreateDeviceMixin, Instance[AdbHostConfig]):
24
- @copy_type(Instance.__init__)
25
- def __init__(self, *args, **kwargs):
26
- super().__init__(*args, **kwargs)
27
- self._args = args
28
- self.index: int | None = None
29
- self.is_running: bool = False
30
-
31
- @override
32
- def refresh(self):
33
- ins = LeidianHost.query(id=self.id)
34
- assert isinstance(ins, LeidianInstance), f'Expected LeidianInstance, got {type(ins)}'
35
- if ins is not None:
36
- self.adb_port = ins.adb_port
37
- self.adb_ip = ins.adb_ip
38
- self.adb_name = ins.adb_name
39
- self.is_running = ins.is_running
40
- logger.debug('Refreshed Leidian instance: %s', repr(ins))
41
-
42
- @override
43
- def start(self):
44
- if self.running():
45
- logger.warning('Instance is already running.')
46
- return
47
- logger.info('Starting Leidian instance %s', self)
48
- LeidianHost._invoke_manager(['launch', '--index', str(self.index)])
49
- self.refresh()
50
-
51
- @override
52
- def stop(self):
53
- if not self.running():
54
- logger.warning('Instance is not running.')
55
- return
56
- logger.info('Stopping Leidian instance id=%s name=%s...', self.id, self.name)
57
- LeidianHost._invoke_manager(['quit', '--index', str(self.index)])
58
- self.refresh()
59
-
60
- @override
61
- def wait_available(self, timeout: float = 180):
62
- cd = Countdown(timeout)
63
- it = Interval(5)
64
- while not cd.expired() and not self.running():
65
- it.wait()
66
- self.refresh()
67
- if not self.running():
68
- raise TimeoutError(f'Leidian instance "{self.name}" is not available.')
69
-
70
- @override
71
- def running(self) -> bool:
72
- return self.is_running
73
-
74
- @override
75
- def create_device(self, impl: LeidianRecipes, host_config: AdbHostConfig) -> Device:
76
- """为雷电模拟器实例创建 Device。"""
77
- if self.adb_port is None:
78
- raise ValueError("ADB port is not set and is required.")
79
-
80
- return super().create_device(impl, host_config)
81
-
82
- class LeidianHost(HostProtocol[LeidianRecipes]):
83
- @staticmethod
84
- @lru_cache(maxsize=1)
85
- def _read_install_path() -> str | None:
86
- """
87
- 从注册表中读取雷电模拟器的安装路径。
88
-
89
- :return: 安装路径,如果未找到则返回 None。
90
- """
91
- if os.name != 'nt':
92
- return None
93
-
94
- try:
95
- icon_path = read_reg('HKCU', r'Software\leidian\LDPlayer9', 'DisplayIcon', default=None)
96
- if icon_path and isinstance(icon_path, str):
97
- icon_path = icon_path.replace('"', '')
98
- path = os.path.dirname(icon_path)
99
- logger.debug('Leidian installation path (from DisplayIcon): %s', path)
100
- return path
101
- install_dir = read_reg('HKCU', r'Software\leidian\LDPlayer9', 'InstallDir', default=None)
102
- if install_dir and isinstance(install_dir, str):
103
- install_dir = install_dir.replace('"', '')
104
- logger.debug('Leidian installation path (from InstallDir): %s', install_dir)
105
- return install_dir
106
- except Exception as e:
107
- logger.error(f'Failed to read Leidian installation path from registry: {e}')
108
-
109
- return None
110
-
111
- @staticmethod
112
- def _invoke_manager(args: list[str]) -> str:
113
- """
114
- 调用 ldconsole.exe。
115
-
116
- 参考文档:https://www.ldmnq.com/forum/30.html,以及命令行帮助。
117
- 另外还有个 ld.exe,封装了 adb.exe,可以直接执行 adb 命令。(https://www.ldmnq.com/forum/9178.html)
118
-
119
- :param args: 命令行参数列表。
120
- :return: 命令执行的输出。
121
- """
122
- install_path = LeidianHost._read_install_path()
123
- if install_path is None:
124
- raise RuntimeError('Leidian is not installed.')
125
- manager_path = os.path.join(install_path, 'ldconsole.exe')
126
- logger.debug('ldconsole execute: %s', repr(args))
127
- output = subprocess.run(
128
- [manager_path] + args,
129
- capture_output=True,
130
- text=True,
131
- # encoding='utf-8', # 居然不是 utf-8 编码
132
- # https://stackoverflow.com/questions/6011235/run-a-program-from-python-and-have-it-continue-to-run-after-the-script-is-kille
133
- creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP
134
- )
135
- if output.returncode != 0:
136
- raise RuntimeError(f'Failed to invoke ldconsole: {output.stderr}')
137
- return output.stdout
138
-
139
- @staticmethod
140
- def installed() -> bool:
141
- return LeidianHost._read_install_path() is not None
142
-
143
- @staticmethod
144
- def list() -> list[Instance]:
145
- output = LeidianHost._invoke_manager(['list2'])
146
- instances = []
147
-
148
- # 解析 list2 命令的输出
149
- # 格式: 索引,标题,顶层窗口句柄,绑定窗口句柄,是否进入android,进程PID,VBox进程PID
150
- for line in output.strip().split('\n'):
151
- if not line:
152
- continue
153
-
154
- parts = line.split(',')
155
- if len(parts) < 5:
156
- logger.warning(f'Invalid list2 output line: {line}')
157
- continue
158
-
159
- index = parts[0]
160
- name = parts[1]
161
- is_android_started = parts[4] == '1'
162
- # 端口号规则 https://help.ldmnq.com/docs/LD9adbserver#a67730c2e7e2e0400d40bcab37d0e0cf
163
- adb_port = 5554 + (int(index) * 2)
164
-
165
- instance = LeidianInstance(
166
- id=index,
167
- name=name,
168
- adb_port=adb_port,
169
- adb_ip='127.0.0.1',
170
- adb_name=f'emulator-{adb_port}'
171
- )
172
- instance.index = int(index)
173
- instance.is_running = is_android_started
174
- logger.debug('Leidian instance: %s', repr(instance))
175
- instances.append(instance)
176
-
177
- return instances
178
-
179
- @staticmethod
180
- def query(*, id: str) -> Instance | None:
181
- instances = LeidianHost.list()
182
- for instance in instances:
183
- if instance.id == id:
184
- return instance
185
- return None
186
-
187
- @staticmethod
188
- def recipes() -> 'list[LeidianRecipes]':
189
- return ['adb', 'adb_raw', 'uiautomator2']
190
-
191
- if __name__ == '__main__':
192
- logging.basicConfig(level=logging.DEBUG, format='[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s] [%(lineno)d] %(message)s')
193
- print(LeidianHost._read_install_path())
194
- print(LeidianHost.installed())
195
- print(LeidianHost.list())
196
- print(ins:=LeidianHost.query(id='0'))
197
- assert isinstance(ins, LeidianInstance)
198
- ins.start()
199
- ins.wait_available()
200
- print('status', ins.running(), ins.adb_port, ins.adb_ip)
201
- # ins.stop()
202
- # print('status', ins.running(), ins.adb_port, ins.adb_ip)
@@ -1,245 +0,0 @@
1
- from dataclasses import dataclass
2
- import os
3
- import json
4
- import subprocess
5
- from functools import lru_cache
6
- from typing import Any, Literal, overload
7
- from typing_extensions import override
8
-
9
- from kotonebot import logging
10
- from kotonebot.client import Device
11
- from kotonebot.client.device import AndroidDevice
12
- from kotonebot.client.implements.adb import AdbImpl
13
- from kotonebot.client.implements.nemu_ipc import NemuIpcImpl, NemuIpcImplConfig
14
- from kotonebot.util import Countdown, Interval
15
- from .protocol import HostProtocol, Instance, copy_type, AdbHostConfig
16
- from .adb_common import AdbRecipes, CommonAdbCreateDeviceMixin, connect_adb, is_adb_recipe
17
-
18
- if os.name == 'nt':
19
- from ...interop.win.reg import read_reg
20
- else:
21
- def read_reg(key, subkey, name, *, default=None, **kwargs):
22
- """Stub for read_reg on non-Windows platforms."""
23
- return default
24
-
25
- logger = logging.getLogger(__name__)
26
- MuMu12Recipes = AdbRecipes | Literal['nemu_ipc']
27
-
28
- @dataclass
29
- class MuMu12HostConfig(AdbHostConfig):
30
- """nemu_ipc 能力的配置模型。"""
31
- display_id: int | None = 0
32
- """目标显示器 ID,默认为 0(主显示器)。若为 None 且设置了 target_package_name,则自动获取对应的 display_id。"""
33
- target_package_name: str | None = None
34
- """目标应用包名,用于自动获取 display_id。"""
35
- app_index: int = 0
36
- """多开应用索引,传给 get_display_id 方法。"""
37
-
38
-
39
- class Mumu12Instance(CommonAdbCreateDeviceMixin, Instance[MuMu12HostConfig]):
40
- @copy_type(Instance.__init__)
41
- def __init__(self, *args, **kwargs):
42
- super().__init__(*args, **kwargs)
43
- self._args = args
44
- self.index: int | None = None
45
- self.is_android_started: bool = False
46
-
47
- @override
48
- def refresh(self):
49
- ins = Mumu12Host.query(id=self.id)
50
- assert isinstance(ins, Mumu12Instance), f'Expected Mumu12Instance, got {type(ins)}'
51
- if ins is not None:
52
- self.adb_port = ins.adb_port
53
- self.adb_ip = ins.adb_ip
54
- self.adb_name = ins.adb_name
55
- self.is_android_started = ins.is_android_started
56
- logger.debug('Refreshed MuMu12 instance: %s', repr(ins))
57
-
58
- @override
59
- def start(self):
60
- if self.running():
61
- logger.warning('Instance is already running.')
62
- return
63
- logger.info('Starting MuMu12 instance %s', self)
64
- Mumu12Host._invoke_manager(['control', '-v', self.id, 'launch'])
65
- self.refresh()
66
-
67
- @override
68
- def stop(self):
69
- if not self.running():
70
- logger.warning('Instance is not running.')
71
- return
72
- logger.info('Stopping MuMu12 instance id=%s name=%s...', self.id, self.name)
73
- Mumu12Host._invoke_manager(['control', '-v', self.id, 'shutdown'])
74
- self.refresh()
75
-
76
- @override
77
- def wait_available(self, timeout: float = 180):
78
- cd = Countdown(timeout)
79
- it = Interval(5)
80
- while not cd.expired() and not self.running():
81
- it.wait()
82
- self.refresh()
83
- if not self.running():
84
- raise TimeoutError(f'MuMu12 instance "{self.name}" is not available.')
85
-
86
- @override
87
- def running(self) -> bool:
88
- return self.is_android_started
89
-
90
- @overload
91
- def create_device(self, recipe: Literal['nemu_ipc'], host_config: MuMu12HostConfig) -> Device: ...
92
- @overload
93
- def create_device(self, recipe: AdbRecipes, host_config: AdbHostConfig) -> Device: ...
94
-
95
- @override
96
- def create_device(self, recipe: MuMu12Recipes, host_config: MuMu12HostConfig | AdbHostConfig) -> Device:
97
- """为MuMu12模拟器实例创建 Device。"""
98
- if self.adb_port is None:
99
- raise ValueError("ADB port is not set and is required.")
100
-
101
- if recipe == 'nemu_ipc' and isinstance(host_config, MuMu12HostConfig):
102
- # NemuImpl
103
- nemu_path = Mumu12Host._read_install_path()
104
- if not nemu_path:
105
- raise RuntimeError("无法找到 MuMu12 的安装路径。")
106
- nemu_config = NemuIpcImplConfig(
107
- nemu_folder=nemu_path,
108
- instance_id=int(self.id),
109
- display_id=host_config.display_id,
110
- target_package_name=host_config.target_package_name,
111
- app_index=host_config.app_index
112
- )
113
- nemu_impl = NemuIpcImpl(nemu_config)
114
- # AdbImpl
115
- adb_impl = AdbImpl(connect_adb(
116
- self.adb_ip,
117
- self.adb_port,
118
- timeout=host_config.timeout,
119
- device_serial=self.adb_name
120
- ))
121
- device = AndroidDevice()
122
- device._screenshot = nemu_impl
123
- device._touch = nemu_impl
124
- device.commands = adb_impl
125
-
126
- return device
127
- elif isinstance(host_config, AdbHostConfig) and is_adb_recipe(recipe):
128
- return super().create_device(recipe, host_config)
129
- else:
130
- raise ValueError(f'Unknown recipe: {recipe}')
131
-
132
- class Mumu12Host(HostProtocol[MuMu12Recipes]):
133
- @staticmethod
134
- @lru_cache(maxsize=1)
135
- def _read_install_path() -> str | None:
136
- r"""
137
- 从注册表中读取 MuMu Player 12 的安装路径。
138
-
139
- 返回的路径为根目录。如 `F:\Apps\Netease\MuMuPlayer-12.0`。
140
-
141
- :return: 若找到,则返回安装路径;否则返回 None。
142
- """
143
- if os.name != 'nt':
144
- return None
145
-
146
- uninstall_subkeys = [
147
- r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MuMuPlayer-12.0',
148
- # TODO: 支持国际版 MuMu
149
- # r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MuMuPlayerGlobal-12.0'
150
- ]
151
-
152
- for subkey in uninstall_subkeys:
153
- icon_path = read_reg('HKLM', subkey, 'DisplayIcon', default=None)
154
- if icon_path and isinstance(icon_path, str):
155
- icon_path = icon_path.replace('"', '')
156
- path = os.path.dirname(icon_path)
157
- logger.debug('MuMu Player 12 installation path: %s', path)
158
- # 返回根目录(去掉 shell 子目录)
159
- if os.path.basename(path).lower() == 'shell':
160
- path = os.path.dirname(path)
161
- return path
162
- return None
163
-
164
- @staticmethod
165
- def _invoke_manager(args: list[str]) -> str:
166
- """
167
- 调用 MuMuManager.exe。
168
-
169
- :param args: 命令行参数列表。
170
- :return: 命令执行的输出。
171
- """
172
- install_path = Mumu12Host._read_install_path()
173
- if install_path is None:
174
- raise RuntimeError('MuMu Player 12 is not installed.')
175
- manager_path = os.path.join(install_path, 'shell', 'MuMuManager.exe')
176
- logger.debug('MuMuManager execute: %s', repr(args))
177
- output = subprocess.run(
178
- [manager_path] + args,
179
- capture_output=True,
180
- text=True,
181
- encoding='utf-8',
182
- # https://stackoverflow.com/questions/6011235/run-a-program-from-python-and-have-it-continue-to-run-after-the-script-is-kille
183
- creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP
184
- )
185
- if output.returncode != 0:
186
- # raise RuntimeError(f'Failed to invoke MuMuManager: {output.stderr}')
187
- logger.warning('Failed to invoke MuMuManager: %s', output.stderr)
188
- return output.stdout
189
-
190
- @staticmethod
191
- def installed() -> bool:
192
- return Mumu12Host._read_install_path() is not None
193
-
194
- @staticmethod
195
- def list() -> list[Instance]:
196
- output = Mumu12Host._invoke_manager(['info', '-v', 'all'])
197
- logger.debug('MuMuManager.exe output: %s', output)
198
-
199
- try:
200
- data: dict[str, dict[str, Any]] = json.loads(output)
201
- if 'name' in data.keys():
202
- # 这里有个坑:
203
- # 如果只有一个实例,返回的 JSON 结构是单个对象而不是数组
204
- data = { '0': data }
205
- instances = []
206
- for index, instance_data in data.items():
207
- instance = Mumu12Instance(
208
- id=index,
209
- name=instance_data['name'],
210
- adb_port=instance_data.get('adb_port'),
211
- adb_ip=instance_data.get('adb_host_ip', '127.0.0.1'),
212
- adb_name=None
213
- )
214
- instance.index = int(index)
215
- instance.is_android_started = instance_data.get('is_android_started', False)
216
- logger.debug('Mumu12 instance: %s', repr(instance))
217
- instances.append(instance)
218
- return instances
219
- except json.JSONDecodeError as e:
220
- raise RuntimeError(f'Failed to parse output: {e}')
221
-
222
- @staticmethod
223
- def query(*, id: str) -> Instance | None:
224
- instances = Mumu12Host.list()
225
- for instance in instances:
226
- if instance.id == id:
227
- return instance
228
- return None
229
-
230
- @staticmethod
231
- def recipes() -> 'list[MuMu12Recipes]':
232
- return ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc']
233
-
234
- if __name__ == '__main__':
235
- logging.basicConfig(level=logging.DEBUG, format='[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s] [%(lineno)d] %(message)s')
236
- print(Mumu12Host._read_install_path())
237
- print(Mumu12Host.installed())
238
- print(Mumu12Host.list())
239
- print(ins:=Mumu12Host.query(id='2'))
240
- assert isinstance(ins, Mumu12Instance)
241
- ins.start()
242
- ins.wait_available()
243
- print('status', ins.running(), ins.adb_port, ins.adb_ip)
244
- ins.stop()
245
- print('status', ins.running(), ins.adb_port, ins.adb_ip)
@@ -1,213 +0,0 @@
1
- import time
2
- import socket
3
- from abc import ABC, abstractmethod
4
- from typing import Callable, TypeVar, Protocol, Any, Generic
5
- from dataclasses import dataclass
6
-
7
- from adbutils import adb, AdbTimeout, AdbError
8
- from adbutils._device import AdbDevice
9
-
10
- from kotonebot import logging
11
- from kotonebot.client import Device, DeviceImpl
12
-
13
- from kotonebot.util import Countdown, Interval
14
-
15
- logger = logging.getLogger(__name__)
16
- # https://github.com/python/typing/issues/769#issuecomment-903760354
17
- _T = TypeVar("_T")
18
- def copy_type(_: _T) -> Callable[[Any], _T]:
19
- return lambda x: x
20
-
21
- # --- 定义专用的 HostConfig 数据类 ---
22
- @dataclass
23
- class AdbHostConfig:
24
- """由外部为基于 ADB 的主机提供的配置。"""
25
- timeout: float = 180
26
-
27
- @dataclass
28
- class WindowsHostConfig:
29
- """由外部为 Windows 实现提供配置。"""
30
- window_title: str
31
- ahk_exe_path: str
32
-
33
- @dataclass
34
- class RemoteWindowsHostConfig:
35
- """由外部为远程 Windows 实现提供配置。"""
36
- windows_host_config: WindowsHostConfig
37
- host: str
38
- port: int
39
-
40
- # --- 使用泛型改造 Instance 协议 ---
41
- T_HostConfig = TypeVar("T_HostConfig")
42
-
43
- def tcp_ping(host: str, port: int, timeout: float = 1.0) -> bool:
44
- """
45
- 通过 TCP ping 检查主机和端口是否可达。
46
-
47
- :param host: 主机名或 IP 地址
48
- :param port: 端口号
49
- :param timeout: 超时时间(秒)
50
- :return: 如果主机和端口可达,则返回 True,否则返回 False
51
- """
52
- logger.debug('TCP ping %s:%d...', host, port)
53
- try:
54
- with socket.create_connection((host, port), timeout):
55
- logger.debug('TCP ping %s:%d success.', host, port)
56
- return True
57
- except (socket.timeout, ConnectionRefusedError, OSError):
58
- logger.debug('TCP ping %s:%d failed.', host, port)
59
- return False
60
-
61
-
62
- class Instance(Generic[T_HostConfig], ABC):
63
- """
64
- 代表一个可运行环境的实例(如一个模拟器)。
65
- 使用泛型来约束 create_device 方法的配置参数类型。
66
- """
67
- def __init__(self,
68
- id: str,
69
- name: str,
70
- adb_port: int | None = None,
71
- adb_ip: str = '127.0.0.1',
72
- adb_name: str | None = None
73
- ):
74
- self.id: str = id
75
- self.name: str = name
76
- self.adb_port: int | None = adb_port
77
- self.adb_ip: str = adb_ip
78
- self.adb_name: str | None = adb_name
79
-
80
- def require_adb_port(self) -> int:
81
- if self.adb_port is None:
82
- raise ValueError("ADB port is not set and is required.")
83
- return self.adb_port
84
-
85
- @abstractmethod
86
- def refresh(self):
87
- """
88
- 刷新实例信息,如 ADB 端口号等。
89
- """
90
- raise NotImplementedError()
91
-
92
- @abstractmethod
93
- def start(self):
94
- """
95
- 启动模拟器实例。
96
- """
97
- raise NotImplementedError()
98
-
99
- @abstractmethod
100
- def stop(self):
101
- """
102
- 停止模拟器实例。
103
- """
104
- raise NotImplementedError()
105
-
106
- @abstractmethod
107
- def running(self) -> bool:
108
- raise NotImplementedError()
109
-
110
- @abstractmethod
111
- def create_device(self, impl: DeviceImpl, host_config: T_HostConfig) -> Device:
112
- """
113
- 根据实现名称和类型化的主机配置创建设备。
114
-
115
- :param impl: 设备实现的名称。
116
- :param host_config: 一个类型化的数据对象,包含创建所需的所有外部配置。
117
- :return: 配置好的 Device 实例。
118
- """
119
- raise NotImplementedError()
120
-
121
- def wait_available(self, timeout: float = 180):
122
- logger.info('Starting to wait for emulator %s(127.0.0.1:%d) to be available...', self.name, self.adb_port)
123
- state = 0
124
- port = self.require_adb_port()
125
- emulator_name = self.adb_name
126
- cd = Countdown(timeout)
127
- it = Interval(1)
128
- d: AdbDevice | None = None
129
- while True:
130
- if cd.expired():
131
- raise TimeoutError(f'Emulator "{self.name}" is not available.')
132
- it.wait()
133
- try:
134
- match state:
135
- case 0:
136
- logger.debug('Ping emulator %s(127.0.0.1:%d)...', self.name, port)
137
- if tcp_ping('127.0.0.1', port):
138
- logger.debug('Ping emulator %s(127.0.0.1:%d) success.', self.name, port)
139
- state = 1
140
- case 1:
141
- logger.debug('Connecting to emulator %s(127.0.0.1:%d)...', self.name, port)
142
- if adb.connect(f'127.0.0.1:{port}', timeout=0.5):
143
- logger.debug('Connect to emulator %s(127.0.0.1:%d) success.', self.name, port)
144
- state = 2
145
- case 2:
146
- logger.debug('Getting device list...')
147
- if devices := adb.device_list():
148
- logger.debug('Get device list success. devices=%s', devices)
149
- # emulator_name 用于适配雷电模拟器
150
- # 雷电模拟器启动后,在上方的列表中并不会出现 127.0.0.1:5555,而是 emulator-5554
151
- d = next(
152
- (d for d in devices if d.serial == f'127.0.0.1:{port}' or d.serial == emulator_name),
153
- None
154
- )
155
- if d:
156
- logger.debug('Get target device success. d=%s', d)
157
- state = 3
158
- case 3:
159
- if not d:
160
- logger.warning('Device is None.')
161
- state = 0
162
- continue
163
- logger.debug('Waiting for device state...')
164
- if d.get_state() == 'device':
165
- logger.debug('Device state ready. state=%s', d.get_state())
166
- state = 4
167
- case 4:
168
- logger.debug('Waiting for device boot completed...')
169
- if not d:
170
- logger.warning('Device is None.')
171
- state = 0
172
- continue
173
- ret = d.shell('getprop sys.boot_completed')
174
- if isinstance(ret, str) and ret.strip() == '1':
175
- logger.debug('Device boot completed. ret=%s', ret)
176
- state = 5
177
- case 5:
178
- if not d:
179
- logger.warning('Device is None.')
180
- state = 0
181
- continue
182
- app = d.app_current()
183
- logger.debug('Waiting for launcher... (current=%s)', app)
184
- if app and 'launcher' in app.package:
185
- logger.info('Emulator %s(127.0.0.1:%d) now is available.', self.name, self.adb_port)
186
- state = 6
187
- case 6:
188
- break
189
- except (AdbError, AdbTimeout):
190
- state = 1
191
- continue
192
- time.sleep(1)
193
- logger.info('Emulator %s(127.0.0.1:%d) now is available.', self.name, self.adb_port)
194
-
195
- def __repr__(self) -> str:
196
- return f'{self.__class__.__name__}(name="{self.name}", id="{self.id}", adb="{self.adb_ip}:{self.adb_port}"({self.adb_name}))'
197
-
198
- Recipe = TypeVar('Recipe', bound=str)
199
- class HostProtocol(Generic[Recipe], Protocol):
200
- @staticmethod
201
- def installed() -> bool: ...
202
-
203
- @staticmethod
204
- def list() -> list[Instance]: ...
205
-
206
- @staticmethod
207
- def query(*, id: str) -> Instance | None: ...
208
-
209
- @staticmethod
210
- def recipes() -> 'list[Recipe]': ...
211
-
212
- if __name__ == '__main__':
213
- pass