pi-firecode 0.8.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 (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/config.example.jsonc +100 -0
  4. package/config.ts +474 -0
  5. package/deliver.ts +32 -0
  6. package/flame-frames.ts +460 -0
  7. package/format.ts +80 -0
  8. package/header.ts +92 -0
  9. package/herdr-client.ts +60 -0
  10. package/index.ts +62 -0
  11. package/jsonc.ts +34 -0
  12. package/master/event-card.ts +106 -0
  13. package/master/event-format.ts +52 -0
  14. package/master/index.ts +1200 -0
  15. package/master/prompt.ts +26 -0
  16. package/master/prompts/master.zh.md +17 -0
  17. package/master/prompts/worker.zh.md +1 -0
  18. package/master/role.ts +13 -0
  19. package/master/spawn.ts +193 -0
  20. package/master/state.ts +201 -0
  21. package/package.json +59 -0
  22. package/provider/claude-sub.ts +129 -0
  23. package/provider/openai-native/index.ts +8 -0
  24. package/provider/openai-native/src/compact-client.ts +362 -0
  25. package/provider/openai-native/src/config.ts +297 -0
  26. package/provider/openai-native/src/extension.ts +93 -0
  27. package/provider/openai-native/src/native-compaction.ts +151 -0
  28. package/provider/openai-native/src/native-details.ts +157 -0
  29. package/provider/openai-native/src/native-replay.ts +253 -0
  30. package/provider/openai-native/src/native-runtime.ts +144 -0
  31. package/provider/openai-native/src/options.ts +85 -0
  32. package/provider/openai-native/src/request-pipeline.ts +21 -0
  33. package/provider/openai-native/src/responses-input.ts +433 -0
  34. package/review/advisor.ts +112 -0
  35. package/review/card.ts +385 -0
  36. package/review/checkpoint.ts +384 -0
  37. package/review/evidence.ts +232 -0
  38. package/review/index.ts +1246 -0
  39. package/review/outcome.ts +74 -0
  40. package/review/progress.ts +324 -0
  41. package/review/prompt.ts +210 -0
  42. package/review/prompts/advisor.en.md +41 -0
  43. package/review/prompts/advisor.zh.md +42 -0
  44. package/review/prompts/review.en.md +75 -0
  45. package/review/prompts/review.zh.md +75 -0
  46. package/review/reviewer.ts +356 -0
  47. package/review/session.ts +129 -0
  48. package/review/state.ts +905 -0
  49. package/review/ui.ts +528 -0
  50. package/session/bark.ts +157 -0
  51. package/session/herdr-display.ts +87 -0
  52. package/session/presets.ts +257 -0
  53. package/session/rename.ts +46 -0
  54. package/session/stats.ts +310 -0
  55. package/session/working-flame.ts +116 -0
  56. package/statusbar/index.ts +118 -0
  57. package/statusbar/quota-cache.ts +60 -0
  58. package/statusbar/quota-parse.ts +85 -0
  59. package/statusbar/quota.ts +203 -0
  60. package/statusbar/render.ts +181 -0
  61. package/statusbar/tps.ts +87 -0
  62. package/theme.ts +84 -0
  63. package/tools/grouping.ts +233 -0
  64. package/tools/index.ts +183 -0
  65. package/tools/line.ts +194 -0
  66. package/tools/parts.ts +143 -0
  67. package/tools/timing.ts +22 -0
  68. package/watcher/card.ts +85 -0
  69. package/watcher/index.ts +204 -0
  70. package/watcher/observer.ts +75 -0
  71. package/watcher/prompts/watch.zh.md +46 -0
  72. package/watcher/transcript.ts +64 -0
@@ -0,0 +1,460 @@
1
+ // Generated flame frame asset for pi-flow activity boxes.
2
+ // Bundled activity-frame asset.
3
+
4
+ const FRAMES = [
5
+ [
6
+ " \u001b[0m",
7
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m+::\u001b[38;2;79;58;34m. \u001b[0m",
8
+ " \u001b[38;2;166;93;65m:++\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m++:\u001b[38;2;79;58;34m:. \u001b[0m",
9
+ " \u001b[38;2;166;93;65m:++\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m+:::\u001b[38;2;79;58;34m: \u001b[0m",
10
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;25;5m++\u001b[38;2;255;141;9m##\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m: \u001b[0m",
11
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m*\u001b[38;2;255;141;9m##\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m##\u001b[38;2;255;25;5m+\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
12
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m@#\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m#\u001b[38;2;255;83;7m*\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
13
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m#@@@\u001b[38;2;255;200;11m@\u001b[38;2;255;228;12m#\u001b[38;2;255;141;9m#\u001b[38;2;79;58;34m:. \u001b[0m",
14
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m*\u001b[38;2;39;33;36m. \u001b[0m",
15
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m#\u001b[38;2;79;58;34m: \u001b[0m",
16
+ ],
17
+ [
18
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m.. \u001b[0m",
19
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m+++:\u001b[38;2;79;58;34m:. \u001b[0m",
20
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;166;93;65m:++++:\u001b[38;2;79;58;34m.. \u001b[0m",
21
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m**+\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m:. \u001b[0m",
22
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m++\u001b[38;2;255;141;9m**\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m::. \u001b[0m",
23
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;141;9m#####*\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m: \u001b[0m",
24
+ " \u001b[38;2;255;141;9m##\u001b[38;2;255;200;11m####\u001b[38;2;255;141;9m#*\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
25
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m###@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m#\u001b[38;2;255;83;7m*\u001b[38;2;39;33;36m. \u001b[0m",
26
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m#\u001b[38;2;255;83;7m* \u001b[0m",
27
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m##\u001b[38;2;255;83;7m* \u001b[0m",
28
+ ],
29
+ [
30
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m::\u001b[38;2;39;33;36m. \u001b[0m",
31
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m. \u001b[0m",
32
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
33
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;27;13m++\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m::\u001b[38;2;39;33;36m. \u001b[0m",
34
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*#\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
35
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m###*\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
36
+ " \u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m#####\u001b[38;2;255;141;9m#\u001b[38;2;255;83;7m*\u001b[38;2;39;33;36m.. \u001b[0m",
37
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m##\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;83;7m*\u001b[38;2;39;33;36m. \u001b[0m",
38
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m* \u001b[0m",
39
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m**\u001b[38;2;255;83;7m* \u001b[0m",
40
+ ],
41
+ [
42
+ " \u001b[38;2;39;33;36m..\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m:.\u001b[38;2;39;33;36m. \u001b[0m",
43
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m::+:\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
44
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m+:\u001b[38;2;79;58;34m:.\u001b[38;2;39;33;36m. \u001b[0m",
45
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m++\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m..\u001b[38;2;39;33;36m. \u001b[0m",
46
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m++\u001b[38;2;255;141;9m*##\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
47
+ " \u001b[38;2;255;141;9m#####**\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
48
+ " \u001b[38;2;255;141;9m####\u001b[38;2;255;200;11m##\u001b[38;2;255;141;9m#\u001b[38;2;255;83;7m*\u001b[38;2;39;33;36m. \u001b[0m",
49
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#@\u001b[38;2;255;228;12m@@@@\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+ \u001b[0m",
50
+ " \u001b[38;2;39;33;36m:\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;83;7m** \u001b[0m",
51
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;83;7m**\u001b[38;2;255;27;13m: \u001b[0m",
52
+ ],
53
+ [
54
+ " \u001b[38;2;39;33;36m..\u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m:: \u001b[0m",
55
+ " \u001b[38;2;39;33;36m..\u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m: \u001b[0m",
56
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m+++\u001b[38;2;79;58;34m: \u001b[0m",
57
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m++\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m:: \u001b[0m",
58
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*****\u001b[38;2;39;33;36m. \u001b[0m",
59
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m####*\u001b[38;2;255;83;7m**\u001b[38;2;255;27;13m+ \u001b[0m",
60
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m######\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m*\u001b[38;2;39;33;36m. \u001b[0m",
61
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@\u001b[38;2;255;255;255m@@\u001b[38;2;255;228;12m@\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m* \u001b[0m",
62
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m* \u001b[0m",
63
+ " \u001b[38;2;166;93;65m+\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+ \u001b[0m",
64
+ ],
65
+ [
66
+ " \u001b[38;2;39;33;36m..\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m:: \u001b[0m",
67
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m:: \u001b[0m",
68
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m: \u001b[0m",
69
+ " \u001b[38;2;166;93;65m::+\u001b[38;2;255;83;7m***\u001b[38;2;255;25;5m*\u001b[38;2;255;27;13m+ \u001b[0m",
70
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;83;7m*******\u001b[38;2;166;93;65m: \u001b[0m",
71
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*##*\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m*\u001b[38;2;255;27;13m+ \u001b[0m",
72
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m*###\u001b[38;2;255;200;11m##\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m*\u001b[38;2;39;33;36m. \u001b[0m",
73
+ " \u001b[38;2;255;27;13m:\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@@@@\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m* \u001b[0m",
74
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m#\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m* \u001b[0m",
75
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+ \u001b[0m",
76
+ ],
77
+ [
78
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m: \u001b[0m",
79
+ " \u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m: \u001b[0m",
80
+ " \u001b[38;2;166;93;65m:::\u001b[38;2;255;25;5m+*\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
81
+ " \u001b[38;2;166;93;65m::\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m***\u001b[38;2;255;25;5m++\u001b[38;2;39;33;36m. \u001b[0m",
82
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*****\u001b[38;2;255;25;5m*+\u001b[38;2;79;58;34m: \u001b[0m",
83
+ " \u001b[38;2;255;83;7m*******\u001b[38;2;255;25;5m*\u001b[38;2;255;27;13m+ \u001b[0m",
84
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m##\u001b[38;2;255;141;9m###\u001b[38;2;255;25;5m*+ \u001b[0m",
85
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m@@\u001b[38;2;255;200;11m#\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+ \u001b[0m",
86
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m@\u001b[38;2;255;25;5m*+ \u001b[0m",
87
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;83;7m*\u001b[38;2;39;33;36m. \u001b[0m",
88
+ ],
89
+ [
90
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m.: \u001b[0m",
91
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m::\u001b[38;2;255;25;5m**\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m: \u001b[0m",
92
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m+ \u001b[0m",
93
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m****\u001b[38;2;255;25;5m**\u001b[38;2;79;58;34m: \u001b[0m",
94
+ " \u001b[38;2;255;83;7m+******\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+ \u001b[0m",
95
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*******\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
96
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m###\u001b[38;2;255;200;11m###\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+ \u001b[0m",
97
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;228;12m@@@\u001b[38;2;255;200;11m@@@\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+ \u001b[0m",
98
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m@\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
99
+ " \u001b[38;2;255;141;9m*\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m# \u001b[0m",
100
+ ],
101
+ [
102
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::+:\u001b[38;2;79;58;34m: \u001b[0m",
103
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m++\u001b[38;2;166;93;65m+\u001b[38;2;79;58;34m.. \u001b[0m",
104
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;255;25;5m++**\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
105
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m*****++\u001b[38;2;166;93;65m: \u001b[0m",
106
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*****\u001b[38;2;255;25;5m++\u001b[38;2;166;93;65m: \u001b[0m",
107
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*******\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m: \u001b[0m",
108
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m#\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m###\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+ \u001b[0m",
109
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m@@@@\u001b[38;2;255;200;11m##\u001b[38;2;255;83;7m*\u001b[38;2;255;27;13m+ \u001b[0m",
110
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
111
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m# \u001b[0m",
112
+ ],
113
+ [
114
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m:::\u001b[38;2;79;58;34m: \u001b[0m",
115
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m++\u001b[38;2;39;33;36m. \u001b[0m",
116
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m++\u001b[38;2;255;25;5m+**\u001b[38;2;166;93;65m++: \u001b[0m",
117
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m*****++\u001b[38;2;166;93;65m: \u001b[0m",
118
+ " \u001b[38;2;255;25;5m******++\u001b[38;2;166;93;65m+\u001b[38;2;39;33;36m. \u001b[0m",
119
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m*\u001b[38;2;255;141;9m###*##\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+ \u001b[0m",
120
+ " \u001b[38;2;255;141;9m##\u001b[38;2;255;200;11m#####\u001b[38;2;255;25;5m*\u001b[38;2;255;27;13m+ \u001b[0m",
121
+ " \u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@@\u001b[38;2;255;200;11m##\u001b[38;2;255;27;13m++ \u001b[0m",
122
+ " \u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@\u001b[38;2;255;228;12m@\u001b[38;2;255;141;9m#\u001b[38;2;39;33;36m. \u001b[0m",
123
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m# \u001b[0m",
124
+ ],
125
+ [
126
+ " \u001b[38;2;79;58;34m::\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m:\u001b[38;2;79;58;34m. \u001b[0m",
127
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m++\u001b[38;2;255;27;13m++\u001b[38;2;79;58;34m. \u001b[0m",
128
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m++++\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m: \u001b[0m",
129
+ " \u001b[38;2;255;25;5m+*****+\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
130
+ " \u001b[38;2;255;25;5m+*****++\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
131
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m***\u001b[38;2;255;141;9m###\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+ \u001b[0m",
132
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m####\u001b[38;2;255;141;9m##\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+ \u001b[0m",
133
+ " \u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@@@\u001b[38;2;255;141;9m#\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
134
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;141;9m# \u001b[0m",
135
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;255;255m@@@@@@\u001b[38;2;255;27;13m+ \u001b[0m",
136
+ ],
137
+ [
138
+ " \u001b[38;2;79;58;34m::\u001b[38;2;255;27;13m++\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
139
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+++\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m: \u001b[0m",
140
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+++++\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m: \u001b[0m",
141
+ " \u001b[38;2;255;25;5m+++++++\u001b[38;2;255;27;13m++\u001b[38;2;39;33;36m. \u001b[0m",
142
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+++++++\u001b[38;2;166;93;65m:: \u001b[0m",
143
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;83;7m***\u001b[38;2;255;141;9m###*\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m: \u001b[0m",
144
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m######*\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
145
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@@#\u001b[38;2;255;141;9m#\u001b[38;2;255;25;5m* \u001b[0m",
146
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;200;11m#\u001b[38;2;166;93;65m: \u001b[0m",
147
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;27;13m+ \u001b[0m",
148
+ ],
149
+ [
150
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m:\u001b[38;2;39;33;36m. \u001b[0m",
151
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+++++\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m: \u001b[0m",
152
+ " \u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+++\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
153
+ " \u001b[38;2;255;27;13m+++\u001b[38;2;255;25;5m+++\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
154
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+++\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+++\u001b[38;2;166;93;65m:: \u001b[0m",
155
+ " \u001b[38;2;255;83;7m**\u001b[38;2;255;141;9m*#####\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
156
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m@@\u001b[38;2;255;141;9m###\u001b[38;2;255;83;7m*\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
157
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m@@\u001b[38;2;255;141;9m#\u001b[38;2;255;25;5m* \u001b[0m",
158
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;200;11m#\u001b[38;2;166;93;65m: \u001b[0m",
159
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;83;7m* \u001b[0m",
160
+ ],
161
+ [
162
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+++\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m: \u001b[0m",
163
+ " \u001b[38;2;255;27;13m++++++\u001b[38;2;166;93;65m++\u001b[38;2;79;58;34m: \u001b[0m",
164
+ " \u001b[38;2;255;27;13m+++++++\u001b[38;2;166;93;65m++\u001b[38;2;39;33;36m. \u001b[0m",
165
+ " \u001b[38;2;255;27;13m++++++++\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
166
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m***\u001b[38;2;255;25;5m+\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
167
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m**\u001b[38;2;255;141;9m****\u001b[38;2;255;83;7m*\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
168
+ " \u001b[38;2;255;83;7m**\u001b[38;2;255;200;11m###\u001b[38;2;255;141;9m**\u001b[38;2;255;83;7m*\u001b[38;2;79;58;34m: \u001b[0m",
169
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m####\u001b[38;2;255;83;7m*\u001b[38;2;166;93;65m: \u001b[0m",
170
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m#\u001b[38;2;166;93;65m: \u001b[0m",
171
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;83;7m* \u001b[0m",
172
+ ],
173
+ [
174
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+++++\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m: \u001b[0m",
175
+ " \u001b[38;2;255;27;13m+++++++\u001b[38;2;166;93;65m::\u001b[38;2;39;33;36m. \u001b[0m",
176
+ " \u001b[38;2;255;27;13m+++++++\u001b[38;2;166;93;65m::\u001b[38;2;39;33;36m. \u001b[0m",
177
+ " \u001b[38;2;255;27;13m++++++++\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m: \u001b[0m",
178
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m***\u001b[38;2;255;83;7m***\u001b[38;2;255;25;5m+\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
179
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;83;7m***\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m****\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
180
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;83;7m**\u001b[38;2;255;200;11m####\u001b[38;2;255;83;7m** \u001b[0m",
181
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#####\u001b[38;2;255;83;7m*\u001b[38;2;166;93;65m: \u001b[0m",
182
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m#\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m. \u001b[0m",
183
+ " \u001b[38;2;255;27;13m+\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m+ \u001b[0m",
184
+ ],
185
+ [
186
+ " \u001b[38;2;166;93;65m+++++:\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::\u001b[38;2;39;33;36m. \u001b[0m",
187
+ " \u001b[38;2;166;93;65m+++++\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m::\u001b[38;2;79;58;34m: \u001b[0m",
188
+ " \u001b[38;2;166;93;65m:++\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m+++:\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
189
+ " \u001b[38;2;166;93;65m:++++\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m++:\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
190
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m*+*\u001b[38;2;255;83;7m****\u001b[38;2;255;25;5m+\u001b[38;2;39;33;36m. \u001b[0m",
191
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+*\u001b[38;2;255;200;11m##\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m***\u001b[38;2;166;93;65m: \u001b[0m",
192
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m####\u001b[38;2;255;83;7m** \u001b[0m",
193
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m##@\u001b[38;2;255;228;12m@@\u001b[38;2;255;141;9m*\u001b[38;2;166;93;65m: \u001b[0m",
194
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m. \u001b[0m",
195
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
196
+ ],
197
+ [
198
+ " \u001b[38;2;166;93;65m::+:+:+\u001b[38;2;79;58;34m::: \u001b[0m",
199
+ " \u001b[38;2;166;93;65m:::++++\u001b[38;2;79;58;34m::: \u001b[0m",
200
+ " \u001b[38;2;166;93;65m::++++::\u001b[38;2;79;58;34m:.\u001b[38;2;39;33;36m. \u001b[0m",
201
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+++*\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m**\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
202
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m++*\u001b[38;2;255;83;7m*****\u001b[38;2;255;27;13m+\u001b[38;2;39;33;36m. \u001b[0m",
203
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+*\u001b[38;2;255;141;9m####\u001b[38;2;255;83;7m**\u001b[38;2;166;93;65m: \u001b[0m",
204
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m*\u001b[38;2;255;141;9m#####\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+ \u001b[0m",
205
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@\u001b[38;2;255;200;11m@\u001b[38;2;255;83;7m*\u001b[38;2;79;58;34m: \u001b[0m",
206
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m: \u001b[0m",
207
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;255;255m@@@@@@\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m: \u001b[0m",
208
+ ],
209
+ [
210
+ " \u001b[38;2;166;93;65m:::::::\u001b[38;2;79;58;34m::. \u001b[0m",
211
+ " \u001b[38;2;166;93;65m::::::::\u001b[38;2;79;58;34m. \u001b[0m",
212
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:+++\u001b[38;2;255;25;5m++\u001b[38;2;166;93;65m:: \u001b[0m",
213
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m:++\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m****\u001b[38;2;255;27;13m+ \u001b[0m",
214
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m++\u001b[38;2;255;25;5m+****** \u001b[0m",
215
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+*\u001b[38;2;255;141;9m###*\u001b[38;2;255;25;5m**\u001b[38;2;166;93;65m: \u001b[0m",
216
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m####*\u001b[38;2;255;25;5m*+ \u001b[0m",
217
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m@\u001b[38;2;255;83;7m*\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
218
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m@\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m: \u001b[0m",
219
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;255;255m@@@@@@\u001b[38;2;255;25;5m*\u001b[38;2;166;93;65m: \u001b[0m",
220
+ ],
221
+ [
222
+ " \u001b[38;2;166;93;65m:::::::\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
223
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::::::\u001b[38;2;79;58;34m:. \u001b[0m",
224
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;255;27;13m+++\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m:: \u001b[0m",
225
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m++\u001b[38;2;255;25;5m++****\u001b[38;2;255;27;13m+ \u001b[0m",
226
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m++\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m****+ \u001b[0m",
227
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m####\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
228
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;141;9m*#\u001b[38;2;255;200;11m###\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m* \u001b[0m",
229
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@\u001b[38;2;255;200;11m##\u001b[38;2;255;25;5m*\u001b[38;2;79;58;34m: \u001b[0m",
230
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
231
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;255;255m@@@@@@\u001b[38;2;166;93;65m:: \u001b[0m",
232
+ ],
233
+ [
234
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::::::\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
235
+ " \u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m:::\u001b[38;2;255;27;13m++\u001b[38;2;79;58;34m:: \u001b[0m",
236
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m++++\u001b[38;2;255;25;5m+++\u001b[38;2;166;93;65m: \u001b[0m",
237
+ " \u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m++++++\u001b[38;2;255;27;13m+ \u001b[0m",
238
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m++\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m++\u001b[38;2;255;27;13m+ \u001b[0m",
239
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m***\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m+ \u001b[0m",
240
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m###\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+ \u001b[0m",
241
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m@#\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
242
+ " \u001b[38;2;255;25;5m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m@@\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m: \u001b[0m",
243
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@@\u001b[38;2;255;255;255m@@@@\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
244
+ ],
245
+ [
246
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::::::::\u001b[38;2;39;33;36m. \u001b[0m",
247
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:++\u001b[38;2;255;27;13m++\u001b[38;2;79;58;34m:.\u001b[38;2;39;33;36m. \u001b[0m",
248
+ " \u001b[38;2;166;93;65m:+++\u001b[38;2;255;27;13m+++\u001b[38;2;255;25;5m++ \u001b[0m",
249
+ " \u001b[38;2;166;93;65m:++\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+++++ \u001b[0m",
250
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m++\u001b[38;2;255;83;7m****\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m++ \u001b[0m",
251
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m*****\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+ \u001b[0m",
252
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m#@\u001b[38;2;255;141;9m#\u001b[38;2;255;25;5m*+\u001b[38;2;79;58;34m. \u001b[0m",
253
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;141;9m#\u001b[38;2;255;25;5m+\u001b[38;2;79;58;34m: \u001b[0m",
254
+ " \u001b[38;2;255;25;5m*\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;25;5m+\u001b[38;2;79;58;34m: \u001b[0m",
255
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@@\u001b[38;2;255;255;255m@@@@ \u001b[0m",
256
+ ],
257
+ [
258
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m:::::\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m.. \u001b[0m",
259
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:::\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m: \u001b[0m",
260
+ " \u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m++++\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m++ \u001b[0m",
261
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:+\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m++++ \u001b[0m",
262
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:+\u001b[38;2;255;83;7m****\u001b[38;2;255;25;5m+\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m: \u001b[0m",
263
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m**\u001b[38;2;255;141;9m##\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+ \u001b[0m",
264
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m##\u001b[38;2;255;141;9m#*\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m. \u001b[0m",
265
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m*\u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m#\u001b[38;2;255;200;11m#\u001b[38;2;255;25;5m*\u001b[38;2;79;58;34m. \u001b[0m",
266
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@@\u001b[38;2;166;93;65m:\u001b[38;2;39;33;36m. \u001b[0m",
267
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@@ \u001b[0m",
268
+ ],
269
+ [
270
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m:::++\u001b[38;2;79;58;34m: \u001b[0m",
271
+ " \u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m+++\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+++ \u001b[0m",
272
+ " \u001b[38;2;166;93;65m::\u001b[38;2;255;27;13m++\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m++++ \u001b[0m",
273
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m***\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m++ \u001b[0m",
274
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m::\u001b[38;2;255;83;7m****\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m: \u001b[0m",
275
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m**\u001b[38;2;255;141;9m##*\u001b[38;2;255;27;13m+ \u001b[0m",
276
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#@\u001b[38;2;255;141;9m##\u001b[38;2;255;25;5m+ \u001b[0m",
277
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m@\u001b[38;2;255;141;9m# \u001b[0m",
278
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m@\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;25;5m+ \u001b[0m",
279
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@ \u001b[0m",
280
+ ],
281
+ [
282
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m::::::+: \u001b[0m",
283
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:+++\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m++\u001b[38;2;255;27;13m+ \u001b[0m",
284
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m::\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m*+\u001b[38;2;166;93;65m+++: \u001b[0m",
285
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;83;7m****\u001b[38;2;166;93;65m++: \u001b[0m",
286
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m****\u001b[38;2;166;93;65m+:\u001b[38;2;79;58;34m: \u001b[0m",
287
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*##\u001b[38;2;255;83;7m**\u001b[38;2;255;27;13m+ \u001b[0m",
288
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m*#\u001b[38;2;255;200;11m###\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m* \u001b[0m",
289
+ " \u001b[38;2;255;25;5m+\u001b[38;2;255;141;9m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;83;7m* \u001b[0m",
290
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;83;7m* \u001b[0m",
291
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;166;93;65m: \u001b[0m",
292
+ ],
293
+ [
294
+ " \u001b[38;2;79;58;34m::::\u001b[38;2;166;93;65m:+:+: \u001b[0m",
295
+ " \u001b[38;2;79;58;34m::\u001b[38;2;166;93;65m++:+++: \u001b[0m",
296
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m**+\u001b[38;2;166;93;65m+:: \u001b[0m",
297
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m****\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m: \u001b[0m",
298
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m:+\u001b[38;2;255;25;5m****+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
299
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m##\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m+ \u001b[0m",
300
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m**\u001b[38;2;255;200;11m###\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m* \u001b[0m",
301
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;25;5m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;83;7m* \u001b[0m",
302
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;83;7m* \u001b[0m",
303
+ " \u001b[38;2;166;93;65m+\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;200;11m#\u001b[38;2;166;93;65m: \u001b[0m",
304
+ ],
305
+ [
306
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;166;93;65m::::::: \u001b[0m",
307
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m:\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m:::: \u001b[0m",
308
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m.:\u001b[38;2;255;25;5m+*+*\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m:: \u001b[0m",
309
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m****\u001b[38;2;166;93;65m++\u001b[38;2;79;58;34m: \u001b[0m",
310
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m**\u001b[38;2;255;83;7m***\u001b[38;2;166;93;65m+\u001b[38;2;79;58;34m: \u001b[0m",
311
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m##\u001b[38;2;255;141;9m*\u001b[38;2;255;83;7m** \u001b[0m",
312
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m#\u001b[38;2;255;200;11m####\u001b[38;2;255;83;7m* \u001b[0m",
313
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@\u001b[38;2;255;228;12m@@\u001b[38;2;255;83;7m* \u001b[0m",
314
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;83;7m* \u001b[0m",
315
+ " \u001b[38;2;255;27;13m:\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;200;11m#\u001b[38;2;166;93;65m: \u001b[0m",
316
+ ],
317
+ [
318
+ " \u001b[38;2;79;58;34m..\u001b[38;2;166;93;65m::::::: \u001b[0m",
319
+ " \u001b[38;2;39;33;36m..\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+++\u001b[38;2;166;93;65m::: \u001b[0m",
320
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m++++\u001b[38;2;255;27;13m+\u001b[38;2;79;58;34m:: \u001b[0m",
321
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m+++\u001b[38;2;166;93;65m++:\u001b[38;2;79;58;34m. \u001b[0m",
322
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m:+\u001b[38;2;255;25;5m++***\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
323
+ " \u001b[38;2;39;33;36m.\u001b[38;2;255;27;13m+\u001b[38;2;255;83;7m**\u001b[38;2;255;141;9m##*\u001b[38;2;255;83;7m*\u001b[38;2;255;25;5m+ \u001b[0m",
324
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+\u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m#\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m##\u001b[38;2;255;25;5m* \u001b[0m",
325
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@@@@@\u001b[38;2;255;25;5m* \u001b[0m",
326
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;25;5m+ \u001b[0m",
327
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;228;12m@\u001b[38;2;79;58;34m. \u001b[0m",
328
+ ],
329
+ [
330
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m++\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m::: \u001b[0m",
331
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;25;5m++++\u001b[38;2;255;27;13m:\u001b[38;2;79;58;34m:: \u001b[0m",
332
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m++++\u001b[38;2;166;93;65m::\u001b[38;2;39;33;36m. \u001b[0m",
333
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m++\u001b[38;2;255;25;5m+++\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
334
+ " \u001b[38;2;255;27;13m++\u001b[38;2;255;25;5m+\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m*+\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m. \u001b[0m",
335
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m*\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m###*\u001b[38;2;255;25;5m* \u001b[0m",
336
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+\u001b[38;2;255;141;9m*\u001b[38;2;255;200;11m#####\u001b[38;2;255;25;5m* \u001b[0m",
337
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;141;9m# \u001b[0m",
338
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;25;5m+ \u001b[0m",
339
+ " \u001b[38;2;255;25;5m*\u001b[38;2;255;255;255m@@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;27;13m+ \u001b[0m",
340
+ ],
341
+ [
342
+ " \u001b[38;2;39;33;36m.\u001b[38;2;166;93;65m:+\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m+\u001b[38;2;79;58;34m::: \u001b[0m",
343
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;27;13m+\u001b[38;2;166;93;65m+++\u001b[38;2;79;58;34m:: \u001b[0m",
344
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m:++++::\u001b[38;2;79;58;34m. \u001b[0m",
345
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:++\u001b[38;2;255;25;5m+++\u001b[38;2;166;93;65m:\u001b[38;2;79;58;34m: \u001b[0m",
346
+ " \u001b[38;2;79;58;34m.\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m++\u001b[38;2;255;83;7m**\u001b[38;2;255;25;5m++\u001b[38;2;255;27;13m+ \u001b[0m",
347
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m+\u001b[38;2;255;25;5m*\u001b[38;2;255;141;9m*###*\u001b[38;2;255;25;5m+ \u001b[0m",
348
+ " \u001b[38;2;79;58;34m:\u001b[38;2;255;25;5m*\u001b[38;2;255;200;11m##\u001b[38;2;255;228;12m@@\u001b[38;2;255;200;11m#@\u001b[38;2;255;83;7m* \u001b[0m",
349
+ " \u001b[38;2;255;25;5m*\u001b[38;2;255;200;11m##\u001b[38;2;255;255;255m@@@\u001b[38;2;255;200;11m@\u001b[38;2;255;83;7m* \u001b[0m",
350
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m#\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@\u001b[38;2;255;141;9m#\u001b[38;2;166;93;65m: \u001b[0m",
351
+ " \u001b[38;2;166;93;65m+\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;228;12m@\u001b[38;2;255;27;13m+ \u001b[0m",
352
+ ],
353
+ [
354
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m++++\u001b[38;2;39;33;36m.. \u001b[0m",
355
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;255;27;13m+++++\u001b[38;2;79;58;34m:\u001b[38;2;39;33;36m. \u001b[0m",
356
+ " \u001b[38;2;79;58;34m.:\u001b[38;2;255;27;13m+++++\u001b[38;2;79;58;34m:. \u001b[0m",
357
+ " \u001b[38;2;39;33;36m.\u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m+\u001b[38;2;255;25;5m+*\u001b[38;2;255;27;13m++\u001b[38;2;79;58;34m:. \u001b[0m",
358
+ " \u001b[38;2;79;58;34m:\u001b[38;2;166;93;65m:\u001b[38;2;255;27;13m++\u001b[38;2;255;83;7m*\u001b[38;2;255;141;9m*\u001b[38;2;255;25;5m+\u001b[38;2;255;27;13m++ \u001b[0m",
359
+ " \u001b[38;2;79;58;34m.\u001b[38;2;255;27;13m+\u001b[38;2;255;141;9m**##**\u001b[38;2;255;25;5m+\u001b[38;2;39;33;36m. \u001b[0m",
360
+ " \u001b[38;2;255;25;5m*\u001b[38;2;255;200;11m##\u001b[38;2;255;228;12m#@\u001b[38;2;255;200;11m##\u001b[38;2;255;83;7m* \u001b[0m",
361
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;200;11m##\u001b[38;2;255;255;255m@@\u001b[38;2;255;228;12m@\u001b[38;2;255;200;11m#\u001b[38;2;255;83;7m* \u001b[0m",
362
+ " \u001b[38;2;255;83;7m*\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;141;9m#\u001b[38;2;79;58;34m: \u001b[0m",
363
+ " \u001b[38;2;166;93;65m:\u001b[38;2;255;228;12m@\u001b[38;2;255;255;255m@@@@\u001b[38;2;255;200;11m#\u001b[38;2;255;27;13m+ \u001b[0m",
364
+ ],
365
+ ] as const;
366
+ export const FLAME_FRAME_COUNT = FRAMES.length;
367
+
368
+ const ESC = String.fromCharCode(27);
369
+ const RESET = `${ESC}[0m`;
370
+ const ANSI_RE = new RegExp(`${ESC}\\[[0-9;]*m`, "y");
371
+
372
+ type Cell = { char: string; style: string };
373
+
374
+ interface ScaledFrameCache {
375
+ height: number;
376
+ frames: string[][];
377
+ width?: number;
378
+ }
379
+
380
+ let scaledFrameCache: ScaledFrameCache | undefined;
381
+ const ANSI_GLOBAL = new RegExp(`${ESC}\\[[0-9;]*m`, "g");
382
+
383
+ export function flameFrameLines(height: number, frameIndex: number): string[] {
384
+ const frames = scaledFrames(height);
385
+ const index = Number.isFinite(frameIndex) ? Math.floor(frameIndex) : 0;
386
+ return frames[positiveModulo(index, frames.length)];
387
+ }
388
+
389
+ export function flameFrameWidth(height: number): number {
390
+ const cache = scaledFrameCacheFor(height);
391
+ if (cache.width !== undefined) return cache.width;
392
+ cache.width = Math.max(
393
+ ...cache.frames.flatMap((frame) =>
394
+ frame.map((line) => line.replace(ANSI_GLOBAL, "").trimEnd().length),
395
+ ),
396
+ );
397
+ return cache.width;
398
+ }
399
+
400
+ export function flameFrameCacheSize() {
401
+ return scaledFrameCache ? 1 : 0;
402
+ }
403
+
404
+ function scaledFrames(height: number) {
405
+ return scaledFrameCacheFor(height).frames;
406
+ }
407
+
408
+ function scaledFrameCacheFor(height: number) {
409
+ const targetHeight = normalizeHeight(height);
410
+ if (scaledFrameCache?.height === targetHeight) return scaledFrameCache;
411
+ scaledFrameCache = {
412
+ height: targetHeight,
413
+ frames: FRAMES.map((frame) => scaleFrame(frame, targetHeight)),
414
+ };
415
+ return scaledFrameCache;
416
+ }
417
+
418
+ function normalizeHeight(height: number) {
419
+ return Number.isFinite(height) ? Math.max(1, Math.floor(height)) : 1;
420
+ }
421
+
422
+ function lineCells(line: string): Cell[] {
423
+ const cells: Cell[] = [];
424
+ let style = "";
425
+ for (let i = 0; i < line.length; ) {
426
+ ANSI_RE.lastIndex = i;
427
+ const ansi = ANSI_RE.exec(line);
428
+ if (ansi) {
429
+ style = ansi[0] === RESET ? "" : ansi[0];
430
+ i = ANSI_RE.lastIndex;
431
+ continue;
432
+ }
433
+ cells.push({ char: line[i], style });
434
+ i += 1;
435
+ }
436
+ return cells;
437
+ }
438
+
439
+ function scaleFrame(frame: readonly string[], targetHeight: number): string[] {
440
+ const rows = frame.map(lineCells);
441
+ const scale = targetHeight / rows.length;
442
+ const sourceWidth = Math.max(...rows.map((row) => row.length));
443
+ const targetWidth = Math.ceil(sourceWidth * scale);
444
+
445
+ return Array.from({ length: targetHeight }, (_, y) => {
446
+ const sourceRow = rows[Math.floor(y / scale)];
447
+ const cells = Array.from({ length: targetWidth }, (_, x) => {
448
+ const cell = sourceRow[Math.floor(x / scale)];
449
+ return cell ? `${cell.style}${cell.char}` : " ";
450
+ });
451
+ // 行尾空白格裁掉:可见宽度必须与 flameFrameWidth(trimEnd 计宽)一致,
452
+ // 否则窄屏适配按小宽度放行、实际渲染却溢出。
453
+ while (cells.length > 0 && (cells.at(-1) as string).endsWith(" ")) cells.pop();
454
+ return `${cells.join("")}${RESET}`;
455
+ });
456
+ }
457
+
458
+ function positiveModulo(value: number, modulo: number) {
459
+ return ((value % modulo) + modulo) % modulo;
460
+ }
package/format.ts ADDED
@@ -0,0 +1,80 @@
1
+ /** 宽度、文本与数值格式化:状态栏与工具行共用。 */
2
+ import { visibleWidth } from "@earendil-works/pi-tui";
3
+
4
+ const ELLIPSIS = "…";
5
+ const segmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
6
+
7
+ /** 压平换行与连续空白,用于把任意文本塞进单行 UI。 */
8
+ export function oneLine(value = ""): string {
9
+ return value
10
+ .replace(/[\r\n\t]+/g, " ")
11
+ .replace(/ {2,}/g, " ")
12
+ .trim();
13
+ }
14
+
15
+ export type ClipSide = "start" | "end";
16
+
17
+ /**
18
+ * 按显示宽度截断,保留完整字素簇。
19
+ * `from: "end"` 保留头部(命令),`from: "start"` 保留尾部(路径 basename)。
20
+ */
21
+ export function clip(
22
+ text: string,
23
+ width: number,
24
+ from: ClipSide = "end",
25
+ ellipsis: string = ELLIPSIS,
26
+ ): string {
27
+ if (width <= 0) return "";
28
+ if (visibleWidth(text) <= width) return text;
29
+ const target = Math.max(0, width - visibleWidth(ellipsis));
30
+ const segments = [...segmenter.segment(text)].map((entry) => entry.segment);
31
+ let output = "";
32
+ let used = 0;
33
+ if (from === "start") {
34
+ for (let index = segments.length - 1; index >= 0; index--) {
35
+ const segmentWidth = visibleWidth(segments[index]);
36
+ if (used + segmentWidth > target) break;
37
+ output = segments[index] + output;
38
+ used += segmentWidth;
39
+ }
40
+ return ellipsis + output;
41
+ }
42
+ for (const segment of segments) {
43
+ const segmentWidth = visibleWidth(segment);
44
+ if (used + segmentWidth > target) break;
45
+ output += segment;
46
+ used += segmentWidth;
47
+ }
48
+ return output + ellipsis;
49
+ }
50
+
51
+ /** 1234 → 1.2k,1_500_000 → 1.5M;0 与 undefined 显示为 ?。 */
52
+ export function formatTokens(tokens: number): string {
53
+ if (tokens >= 1_000_000) {
54
+ const value = tokens / 1_000_000;
55
+ return value >= 10 ? `${Math.round(value)}M` : `${value.toFixed(1)}M`;
56
+ }
57
+ if (tokens >= 1_000) {
58
+ const value = tokens / 1_000;
59
+ return value >= 10 ? `${Math.round(value)}k` : `${value.toFixed(1)}k`;
60
+ }
61
+ return tokens ? `${tokens}` : "?";
62
+ }
63
+
64
+ /** 900 → 0.9s,12_400 → 12s,93_000 → 1m33s。 */
65
+ export function formatDuration(milliseconds: number): string {
66
+ if (milliseconds < 10_000) return `${(milliseconds / 1_000).toFixed(1)}s`;
67
+ const totalSeconds = Math.round(milliseconds / 1_000);
68
+ if (totalSeconds < 60) return `${totalSeconds}s`;
69
+ const minutes = Math.floor(totalSeconds / 60);
70
+ const seconds = totalSeconds % 60;
71
+ return seconds ? `${minutes}m${seconds}s` : `${minutes}m`;
72
+ }
73
+
74
+ /** 去掉模型 id 的 provider 前缀与日期后缀。 */
75
+ export function formatModelName(id: string | undefined): string {
76
+ if (!id) return "no-model";
77
+ return (id.split("/").pop() ?? id)
78
+ .replace(/-\d{8}$/, "")
79
+ .replace(/-\d{4}-\d{2}-\d{2}$/, "");
80
+ }