ascii-side-of-the-moon 1.0.4 → 1.0.6

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 (3) hide show
  1. package/README.md +22 -0
  2. package/dist/cli.cjs +643 -0
  3. package/package.json +4 -1
package/README.md CHANGED
@@ -4,6 +4,20 @@
4
4
 
5
5
  For a given date it returns a 29 row by 60 column string.
6
6
 
7
+ ![moon](https://github.com/user-attachments/assets/0baf4510-12cb-49db-a816-785334ba52ef)
8
+
9
+ ## CLI Usage
10
+
11
+ You can use this package directly from the command line:
12
+
13
+ ```bash
14
+ # Show moon for current date
15
+ npx ascii-side-of-the-moon
16
+
17
+ # Show moon for a specific date
18
+ npx ascii-side-of-the-moon 2025-01-01
19
+ ```
20
+
7
21
  ## Example
8
22
 
9
23
  ```js
@@ -35,3 +49,11 @@ pnpm run render:demo_animate 2025-01-01 2025-12-30
35
49
 
36
50
  ## Char aspect ratio.
37
51
  This package assumes a character ratio of 10/22.
52
+
53
+
54
+ ## Preview image
55
+ The preview svg was generated with these commands:
56
+ ```sh
57
+ asciinema rec -c "pnpm run render:demo_animate 2025-07-25 2025-08-23" moon.cast
58
+ cat moon.cast | npx svg-term-cli --out=moon.svg
59
+ ```
package/dist/cli.cjs ADDED
@@ -0,0 +1,643 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __esm = (fn, res) => function __init() {
10
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
11
+ };
12
+ var __export = (target, all) => {
13
+ for (var name in all)
14
+ __defProp(target, name, { get: all[name], enumerable: true });
15
+ };
16
+ var __copyProps = (to, from, except, desc) => {
17
+ if (from && typeof from === "object" || typeof from === "function") {
18
+ for (let key of __getOwnPropNames(from))
19
+ if (!__hasOwnProp.call(to, key) && key !== except)
20
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
30
+ mod
31
+ ));
32
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
33
+
34
+ // src/core/astronomy.ts
35
+ function addDays(d, days) {
36
+ const n = new Date(d.getTime());
37
+ n.setDate(n.getDate() + days);
38
+ return n;
39
+ }
40
+ function isWaxingAt(date) {
41
+ const today = Astronomy.Illumination(Astronomy.Body.Moon, date).phase_fraction;
42
+ const tomorrow = Astronomy.Illumination(Astronomy.Body.Moon, addDays(date, 1)).phase_fraction;
43
+ return tomorrow > today;
44
+ }
45
+ function getMoonState(date) {
46
+ const illum = Astronomy.Illumination(Astronomy.Body.Moon, date);
47
+ const lib = Astronomy.Libration(date);
48
+ return {
49
+ date,
50
+ phase: {
51
+ phaseAngleDeg: illum.phase_angle,
52
+ illuminatedFraction: illum.phase_fraction,
53
+ isWaxing: isWaxingAt(date)
54
+ },
55
+ size: {
56
+ distanceKm: lib.dist_km,
57
+ angularDiameterDeg: lib.diam_deg
58
+ },
59
+ libration: {
60
+ elon: lib.elon,
61
+ elat: lib.elat
62
+ }
63
+ };
64
+ }
65
+ var AstronomyNS, Astronomy;
66
+ var init_astronomy = __esm({
67
+ "src/core/astronomy.ts"() {
68
+ "use strict";
69
+ AstronomyNS = __toESM(require("astronomy-engine"), 1);
70
+ Astronomy = AstronomyNS.default ?? AstronomyNS;
71
+ }
72
+ });
73
+
74
+ // src/render/ascii.json
75
+ var ascii_default;
76
+ var init_ascii = __esm({
77
+ "src/render/ascii.json"() {
78
+ ascii_default = {
79
+ moons: [
80
+ {
81
+ index: 0,
82
+ distance_km: 405493.5,
83
+ libration_elat: -0.888,
84
+ libration_elon: -0.412,
85
+ ascii: ' \n \n ._ . - . \n ,_++> a, +. `-. \n zr\' ^ ~")ssy_ss_. e__ \n ^\' w3$B$#R$2tBW&`x. \n M@$@@E@@$YAm5Q@s<T \n _*4Fk ;_ . : _r 4$g$B` `T!~4Z HDb*y_ \n 7w=:-yyXm#sg@$$@$#Z . R$@$@R$?@` \n ,Z$Kj9@W@$@@@@@@BG@w., / e$$0@5@Bbl" \n } z$@@y@@@@@@@@@$$@@@B@w$L cyM%H$$WP=K* \n /^ 9M@@@@@@@@@@@@@@@@@$@@$~ y, ?#$$; \'L \n MF. ?E@$$@@@@$@@@@@@@@@@g *z\'_. ,Z@@ + \n >w% E@@@@@@@@@@@@@@$@@@$$$%>$k- `y*.~$xtv \n ##y$_-_y_aL` ~@@@@@@@@@@$@$@@@@@$@$$yB@$$/~ ~^Q+ \n kXB@@_g@@@A`wgy@@$@@@@@@@@@@@$@@@$B@@@$@$I ~_ \n "_K@$Rb$^ ~MW$@$B@@@@@@$@$@@$@B$$@@@@5%sW v$v+ \n #U@W$9@W_ .yd@$@@$@@$@$@@@$$$@$$M$M@2B@&@zgM `"+ \n [F*$E$@g@d@RR$E@@@$$@R@@@@@Rg@B$@$@0$@2@@_ypJ~ \n \\\'MB@PR$@$@@$$$@g@@@@@@$$$$$@E0@G$@g@$$A$MgV( \n ^>Y$W3$@05$@B$$$@@@@M@$@R@@@BR$0$a@$@$@$@K? \n ~4&BWB@@@@@@@$@@@@$@@@@@B@$$@B$NEBgW$~^" \n `^^T&~v$R$B@@$@BB$$y@$$E@$$@A&N0M"~~ \n \'Nv?52EMJ!_@$5g@@$R@RA$@E@7nF"^ \n "^ 74~0~#<ERggkA=s3p4yyL. ` \n ` ``^^ ^@n8m+"`^ \n \n \n'
86
+ },
87
+ {
88
+ index: 1,
89
+ distance_km: 361882.7,
90
+ libration_elat: 5.044,
91
+ libration_elon: 0.661,
92
+ ascii: `
93
+ . -r..
94
+ _1{ *~ ML1W>u, _ . ^..,
95
+ y/ ^w@@$@sEgg_9u_{_
96
+ \` .yyB@$4@@@e#jmg\\Wk"*+.
97
+ \` -@R4@sF~~$WJ'R/~Z$%bk~\\
98
+ ,"_ ^ . m _w@$@@\\ \\@Rw@$h@k@K7,
99
+ ~T'~. _y y-w(4$a$@$F@$ : 'Z@$@R@R$@L
100
+ _L_<A@@@gy$$$@@$g$@@g_ y -9@@@$@W#)y=k_
101
+ a@@2g@@@@@@@@$@@$$@@$@$g$y. >3[~~QM$ZW" ~_
102
+ d$@@@@@@@@@@@@@@@@$@B@B@$%\` ,M '=$$$ 1
103
+ { #[$@@@@@@@@@@@@@@@@$@@@@@@x4# -w -r?M@w V\\
104
+ ?% , 4$B@@@@@@@@@@@@@@@@@@$$$@@"H[db^ sEM!^*aVc
105
+ y'_ jZ@@@@@@$@@@@@@@@$@@$@@@$$M@E@@$%~ . ~"\\
106
+ %vM_ _ _} "0@@@@@@$@@@@@B@@@@$@@@@@@@@M@@Z* Pj
107
+ <5%BgP,vg@@$Yf\`y4@@@@@@@@$@@$@@@$@@@@B$@@$@$@WzK yyu~
108
+ @2E$gW@@5F~ 4@@@@@@$@@@@@@@$@@$@@@@$@0@$@@$g@n$sz\`1H'i
109
+ +A@@$g$Z' _2$@@@@$$@@@$$$@@@B$@$@@@$B@@A$@4@#4yJj k
110
+ '&@K@@@HE__xamB@g@@@@@@@@$@@@@@$@@@@$@@@A@g04$Wg#HB7"'
111
+ HeAERBg$$@$$A@@0@$$B@@@@@@R@@$$$@$@@$5@B@a@b@W@WEU.
112
+ (~4@@E@@@W@@g@$$@@$@@@0MRWB@@$$5$@@$0$$@g@$$$@eRr/
113
+ "gj4ZE4@@$M$@$@$g$@@$@@W$@@A@$@$B@B@EB@00BBWTlM
114
+ ^$F2@E$$$0@@@B@@0@@$@$@@$@gB@@$$EP$$$bRN#^~
115
+ "EZ8$ERAzBM@$B@@$$Z@ga@@2$@@g@0@9mwa4~\`<
116
+ \`!7RvsyJ_D$@~$0$$B@@@00%@$4AT2Ef7^<
117
+ T$('@KEWc54$2Z$M$R#@MUT@NK1 "
118
+ \`T^^+{$)$2a73I9;@%RcM\`"
119
+ ~'"\`'~
120
+ `
121
+ },
122
+ {
123
+ index: 2,
124
+ distance_km: 363474.7,
125
+ libration_elat: -4.493,
126
+ libration_elon: 2.394,
127
+ ascii: " _ \n . .- T - -, \n -bZ?-aLrw*j_ : . \n : _$Y^ ~ ^-XRyw|,, ~- \n F`` _#@@dgsgs _2_! \n _ : . y@@@@$zE$AD21ftW' \n _yWBxm' *- : . __ \"N$@@UOF4@b\\%sB7WR.' \n `s;wd__1 W_;Vn@yyag@$@5 `~ ,s,<%[gs/k \n t$$2AW@@@$@@$$@$$@@E$# r . \"@@$D$Wjny \n -:; . q@@@$$$$@$$$@@@@@@$@@@W _ K@5@$5E55Z \n v2K ~0@@@@@@@@@@@@@@@@@@B@@$$ylD y$@@5d@~Ewx \n _V$(. 7HB@$@@@@@@@@@@@@@$@@5$$@@F~ T d@gs | \n /v a; ; ```@@@$@@@@@@@B@@@$@@@@@$@ ,, ' ^T0$ \n L0@@$ v@$@@@@@@@@@@$@@@@@$@$@B;y: y,. +^ A$ , \n \\b2Y$$E{x2gz@L=_D5@@@@@@@@@@@$@@@@@$@@@$y_tw$@_ u\"^ ^W%' \n WLA$$@$%@@@@@B`Y=L@@$@@@@@@@@@$$@@@@@@$@$E@R@$@E \"{ \n ]y@NB@@@$$F ^B@@@B$@@@@@@$@@@@@$$@@@@@$@s0$@Z . \n {4X$@$@aR=e _R$@$@$$@@@@@@@$$$B@@@$@@@@E5@PYE\\ y) \n @*AgMB$$R5aR@@R$g@@@@@@@@@@@@@$@$@@B$$#$@Qjm@TdW/ j\"/ \n #aZW$MBMR@0@@@$@A@$@$@@@@$@$@@@W@$@E$@@$$WgHP%^~hu` \n `%$0$F$@$0@@@@B$$@@@@@@$@B@@E$@@@%@$@@@@$@W$@$BZ~ \n 4?9@dB$$R$@@$B$MB$@@@$$$$@$$@5@$@g@g@B$9b$@AZG \n *E@R$MR$$@@AZ$$R$@@$R$5$@@@D@$$$$$@ZE3@@a`^ \n AA-j_^AT$$E@E@$@$@$RB2@Wa@$@%R@@$5BT~v \n ^@V%@5@Q5WXE@@@R2@@RWR$b@$4@$WXMW] \n r'AF)[%st$@BEc$E@Bx?t5_@\"T`^ \n ~^ !7iT5$Z@@R0HW~4! \n ~ ~~ ` \n"
128
+ },
129
+ {
130
+ index: 3,
131
+ distance_km: 363808.5,
132
+ libration_elat: -0.275,
133
+ libration_elon: 0.915,
134
+ ascii: " \n \\ l.r \n ._u:UK4 ^v w_ ~ ^\\ . \n . . v> ` ` `^4@Rj_Qx__ MBm \n .(~ 2g@$@@zgWi9%Qd|4 \n {0@@$5@@@B~D#gmHgk\"M \n _$g.y = _ _gDg$M\" `TYr~Z^ 1RvqF^ \n \"~`K'.:,_L _w_s2@y$$$@@R` !@%g@R*Mz#{ \n . &yg^YR@@s@$B$@@@@@W0Z ,@$0@$BRXU \\ \n w@@$f$$$$@@@@A@@@$B$@@&_ G; @@@B@@Zj0k#x \n M g@@@@@$@@@@@@@@@@@@@@@$@@@$+- -MM~~W@$# `!v \n !Xe =#$@@@@@0$@@@@@@B@$@@@$@@. =r . 44$$ ' \n M]| . \"@@@@@@@@@@$$@@@@@@@@@@$xfi m . wu=Az. $ \n `[#< J@@@@@@@@@@@@@@@@@@@@$@@g@_42s_ y?% ^K}@! \n <my$yy} ww,a_ .~$$@@@@@@@@@$@@@@@@@@R$$@B@@@$zs' ~`~ \n XNv9$@p$$@$$E3L*y0@@@@@@@@$@@@@@@@@@@$@@$@W2@gM- -. \n 'Vd@$Z@@@@\"` $$@@E@@@@@@@@@@@$@@@$$$@$@@$@$NKc . ,j1, \n wkBQR@@%k,! ,z@R$@@@@@@@@@@@@@@@@M@@@@@@$$@Wg\\$g* %>V \n `VJ$$s&0Bv_J$$0B0@$$$@$@@@@$@@$@$@$@$@@$$$@@@f@YF_L` ' \n ??K#gZ@@$@@@$s2$$@@@$@@@$$@@@B$@$$$@@G@R@ERBB@g#Xfuf \n twZRW2$@@@$$$@@@@$@@$$@$@B$@@$E@$0@@@E@M$@M5$@WyL \n ~\"E@@yE@@$@@$@@$@$@B@$$$@$E@@@$@$@$@$@@@@ER@27>\" \n ^!F5#g@@$@$$@EE$$@@@@$W@@M@@$$@0@@gKzBBK%9~ \n `'^~~^T~7R@g@R$$@B$@MQ$a$BE@@$gE@$HJP5(~ \n ` '}K$@g#R#0$15$@$Z@R@@BRz@$@V[Qe\\ \n `f='^4ysMh$54T$W42@PE~FfW&9~~ \n '~=\\ <?^F0%~>BR$?)^T\"` \n ` ~ ~~ \n"
135
+ },
136
+ {
137
+ index: 4,
138
+ distance_km: 364350.7,
139
+ libration_elat: -5.105,
140
+ libration_elon: -1.866,
141
+ ascii: " \n . - ``` e . \n , -zq{^o{.1n, = \":\"y . \n . _Z0~ ` -ZAmLi,.. '_, \n M\" X@yygyw-x_2/Gk. \n . . . jg$@@$$g@@$1?V#WR}^_ \n s*R W M/ ;.. 4$5W$$RF@$WgEZ99@2q'\\ \n . 'w._w_y_7__-z@$ym@@@$2' T~~_$'/@2@*7j, \n y@ghT@@@$@@@@$@@@@$$W<- 7$E#@B$g4N \n ,} . y@@@W2B$@B@@@@@@@@$g@$ , / ug$$@B$@@8w; \n /|r 5B@@@@@@@@@R@@g@@@$@@@@@_w@ 7A@$@K@C45)|! \n hM: ^4$$@@@$$@@@@@@@$@@@B@@@@=^k _:4'~~@@$w'~`m; \n ^\"Z' ` . ~ 4@@@@@@@@@@@@@@$@@$@@@$ j_f^ =@@@ '\\ \n (g@@ _. 5@@@@@@@@@@@$@@@@@@$@@$4BW_yL _ 4YT@s .\\ \n eRZ$9@,Wgs$g,-{V$@@@@@@@@@@$@@@@@@$@$@@@zy@@_.\\#FF RB@~^ \n '|@@@sB@$$@B P=yg@@$@@@@@@@@@@@@@@@@$@@$$@$$@$F\" ^U . \n \\wAb@B@@$` $@@@@@@@@@@@$@@@@@$@$@$B@@@@WB$C\\. Q \n 3FB$A@m@ y$@@@@$$$@@@@@@@@B$$$@$$@@@Z@@B$m; {yX{ \n ^4H@0@@@KRy$@Ta@@@@@$@@@@@@$B@$@@Q$B@B@EB@@$$46z: ]EZ+ \n \\\"w@E3R@$@E$$@@@@@@R$@@@$@@@@$@$$$$@@@0@@$KMB\"3L(^;^ \n ~<%@E%W@B@R5@@$$$@$@@@@$@$$0@@@4R$B@W$@@0gB@b@@` \" \n nM%4$$g$E@@@@$@@@$$@$$@@$$B$@E$@$E$$RMBZ$$N%$V \n `=4EMT@Q@g@S2g@$@@$@@BE$@$0@@@$$$M@gW$@4Z9~/ \n !_3w~P#KB$@@g@@R5@@R$$@@@@$@RR$a44%44v^ \n 't\"Y#$XM@_\"55$$B@$@EgB$@$awR4MzG~| \n !-`z%T4@>ME&b~E9B$rT>4_-$4Y' \n ` `TWD13d~A2fK~Wv^= \n ` ''` \n"
142
+ },
143
+ {
144
+ index: 5,
145
+ distance_km: 366333.9,
146
+ libration_elat: 0.278,
147
+ libration_elon: -3.312,
148
+ ascii: " \n ~' ^ _. . \n __*^w<-xr=<w ` ' '?, \n gf` ''\\KAy@-_w__ _)Mg, \n \" u2$$$R$gn&w@sB_M~(_ \n $@@$@B@@@@@$mg@gRk*>Y \n __ _! r _ _4@@@$~ ~R^~gE,sgm$GI}\\ \n ' ~ ,_y _k ,R@yW@@$@K`, $@&@@@a1&$K\". \n , al~_$@@@gBBg@g@@$00{ . @ \"$$$5B$$sMy\\u, \n .4@$4$@$$@@@@@@$@@@@@$y_VR }E@@@$W@s~wW7l. \n s$@@B@@@@$$@@@@@@$@@@@$$$@Y* {4rT~BM$qB \", \n N fd@E@@@@0@@@@@@@@@$@$@@$E_4_gF f=@M$ Rr \n 7! 9@@@@@@@@@@$@@@@@@@$@$$m$y@g___ +F*Y&m ,X \n VwL b@@$@$@@@@$@@@@@@@@@@@@@@b@$$R_1aB3^`4mWk{ \n J$Wz_L ._yx fB@@@@@@@@@$@@@$@@@@@$@@@@$@@2gF_ '^\"n) \n l4@$+E$$@@`E*y4@$@@$@@@@@@$@@@@@@@@M@$$@@$@@a. 7>o' \n R@RK@$$F`' 2$@@@@@@@@$@@@@@$@@$$@$$@@@B@$0@$k ,.nyd> \n lY$E@y4. ygR$@E#$@@@@@$$$$@$$@@$@@R$@$$$0a@@gM,%^> \n #q8@g@$wy2g$~$$@@$$@@@@@@@@@@@@@$@@0@$$W$@K@6D@LL\" +/ \n ^jJ0@@@g@@@gK$P@@@@$@@@@$@@$B$$$@$@Wg@g@@g$$g$E2B(<~ \n VWM64k$@$2@$@@$$@@@@@@$@$$@$@@$$B$@@$$R%@$@$@E$*( \n `=X@LZ$gB@$$@$g@$$@$@W@M@$@@$@W0B$@@$@$@$@$$@RV \n ^KM?N9$@@$@W5BB@#B$$$$$$R$@@$@@@Dd@%BMAmkWx^ \n 'H\"'%_RF2@$@Bg@@#GA$$5$R@@@@W$$BRkK1|`' \n <V=H@Z#$__3$bgA$Fe$RYR@R2Wy=%V` ^ \n `=L~YGT$6$49TEygg$gw1dse< '\" \n ~'!\"T~A4_EtR00>V~-~ \n ` ` \n"
149
+ },
150
+ {
151
+ index: 6,
152
+ distance_km: 366534.2,
153
+ libration_elat: 5.395,
154
+ libration_elon: -3.121,
155
+ ascii: `
156
+ . : ' 7 __.
157
+ + : =c_ws_ . . "",>
158
+ |'\` ~NEmszz$_E_a2wcju.
159
+ / ;$y$@%h$$0*R5j@#WwyYn
160
+ 4@5$gF^~@$JRg@\`T@KV3p2|_
161
+ , : _$$@$+ : a@$B4Em2y$g.-
162
+ .r ' :-|u 4D@g@@$$ , .2@@@@#B$@W@>_
163
+ _+ G$$gy9@@$sz$5$@@\` y@ . N9@@@$s$xFym>%
164
+ #gg|@@@@@@@@R@@@@@@@@$a@gL,.)4yk~Me@@WT '"v_
165
+ .d@$$$@@@@@@@@@@@@@@@@B@@$J\`_a*< Y4@@v (v
166
+ , 4MM$$@@@$@@@$$0@$@@@@@@@@g$$WyG , xK*HRy_ v:
167
+ !: ?@@@@@@@@@@@@@@@@@@@@$$g$ME$@yF *$MF ~@C}"|
168
+ uX . ty$$0@@@@@@@@@$@@@@@@@@@$$$@$@$@E ^{\\.L
169
+ Q4+ _ _ ;'@7@$@@@@@@@@@@@@@@@@@@@@@@@$@R$ !V!
170
+ #[%XI 4agMR4_-_@@$@@@@@@@@@$@@@$$@@@@@@$@$$@$z: w-Lvm.
171
+ ~%m@Ed@$@F~ /$$@@g$E@@@$@@@@@@$@@@$@@@@@@$$B@a$$NT]W($\\+
172
+ lz@$$@@~ _$$@@@$$$@@@@@@@@@@$$0@$$@@$@$$W@A9@$$/ Uv
173
+ pXM@RgLj.1w@M@$@@@$$@@@$@@$@@@$@R@@@$$$$$$@@@@R@2$;/
174
+ MNK5@$@@@@@aW$E@@$$@@$@@@@$@@@$B@$@$@$$@R$$@$@@2*U"
175
+ "=?6F$R$$BR@B@@$@@@@$@AR2@$$E$@B@@g@@@y@$$@0W$2%4
176
+ "%wKD^@@$@y$@B$@$g$$@$B$$$@$@B@@$@@5@2k@@ZaF"\`'
177
+ 'V@R$&$$BR$@M@0$R@B@$@@R@@@@$@@$@@@bBZ@JM^
178
+ '*?bKJ"%0$g@@$@E$$a$g$p5@g$eyB3RRZ$tF~ ~
179
+ ~-g8k#@59g_y$@$F$$RTaE@Enf~5H|~)< \`
180
+ ''$'"Pys/4dRHbD2kKZWa@RMXH +
181
+ ~^~YMa.5~$_yWTKBa4=r^\`
182
+ \`\`
183
+ `
184
+ },
185
+ {
186
+ index: 7,
187
+ distance_km: 368573.4,
188
+ libration_elat: 5.829,
189
+ libration_elon: 3.778,
190
+ ascii: " \n . T r \n +_:X ={_r;_ , ~ - \n _y^ `` ' `^X@ygRBy=. ]ZC; \n u'^ _w%$@Rp$g*=E#7Vy,,\\ \n ' ~@KR@$F~M$V*_2'4$%]/}. \n _. , x ., . , ,g$m$@` $ewsP05k$M \n w75,F ;_ _w_/j$4$@$S@} t$@@@R@G@y \n 4gGJ<@@@@w@@@@@$0@@$s g $bdB@K6FGfs- \n H@@_@$@@$@@@@A@@@@@@$@Wg$y. \"N/~~@@@@ `~? \n i q@$@$@@$@@@@@@@@@$@@E2@$@k W S=@@) \\ \n ,_ M$B@@@@@@$@@$@$9@$$@@@R@@@w}\" _ ` 4^?@x. w \n $t ~?@$B@@@@@@@@@@@@@@@$@$@yyK X$4_. v'! ~*]^ \n ^W`w . - $@@@@@@@@@@@$@@@$@@@@@@@$$g$@@Wg~ '.7+ \n K$wG_ ._ _TM@@@@@@@@@$@@@@@@@@@$$$B@@$@0@Q* zl \n ;bWagg2'W@@@@$V\"*g@@@@@@@@@@@@@@@@@@@@@$@@$$@@4R/ zv| \n `vN4$$$$@@@FF~ 4$$$@W@@$@@@@@@$$@W$$$$@@$@$@B#4%@mP xJX \n {W@W$$@$@F y$@@@@@@@@$@@@$@@@$@@$$$@@@@@$%@B~_wa Y \n @Y@E$2@@@\"y ug@$@@@@@$$@@@$@@@@@W$$$@@W$#M$B@@@@B$?x \n {mKW@$@$@$@$@@@$0@@@$$B@$@@$@$@@@$$@@$@@yMAEE$0H5X \n [/aM@$R@B@@#$@$$@5$$@@$@@$$@@@@@#@@@$@E@@$@@@WX\\ \n ^t&W@$%T0@$@@g$@m@$@$@@@$$@$W@@BB@@@$@gbNR5k5L` \n [UZ$Z23@@@$B$@B5$@@@@$T@d5@@0@@$PM$$KRkW^^` \n '\\@PBKtYKTP@@M@g@@$@$gR$g$BWB$Bh3~8X' ` \n 'f?k>@ghg@MBT@8RE@fd$RnZs#?1w)[!: \n '\"~$J~m#?Bd$M4@gE@Z$0a3GGV1' ~ \n T^~^T`^j4Zlu*M4T ' ` \n \n"
191
+ },
192
+ {
193
+ index: 8,
194
+ distance_km: 368792.8,
195
+ libration_elat: 1.882,
196
+ libration_elon: 4.299,
197
+ ascii: " \n .: . - \n ,_*_q -/nvu`. ' ' x \n jj+~ '` `'^hUyygZl _1r. \n <^~ w@B$M$$$g./5BY, \n .4@E@@a0@@#.1&$#$i{., \n u_: s r..4$@@@~ ~\" '$_,R@WQ,; \n -F'h~ _.y_4y1_Fd$gg@$@TL R$@MBE0M# \n :@z=w9@@@@@@@$$$M@$$$ / n$@g$BR${, \n '. 4@@$#@@@@B@@@@B@$@@@@gy_4+ `9e#@%g$\\\\~\\ \n r_ . 9$@$@@@$@@$@@@@@@@@@@R@@RBK `/ #g@5 ^ \n XQ? \"A@@@$@@@$$@@@@$@$@@@@@$@@ ? .\"^$&i \n /VzL . ..\"M@@@@@@@@@@@$@@@@@@@@@@[\"_ __ _. `V^#\\, : \n ^J,$y n@@@@@@@@@@@@@@@@@@@@@@$$y_WggwLjT` ~$w \n )S@@@L______ywJ.5@@@@@@@$@@@@@@B@@@@@@@@@@@B@g0i 'Y \n ^9650g@$2s@$$@F@*g#@$@@@@@@@@@@@@@@$$B$EBg@B$@Hf. ?| \n #3@M@$@@$@F~~ a@$@@$@$$@@@$@@@@@@@@@@$@@@V$@EO?; ?s4 \n Jjg@$$N$5Z., w$@@@@@@@@@@$@$@@@@0BW@$@RR$$$9@ZR$ x. \n ^4N%7W@R@y$wB9W@$@$@@@$@@@B@B@@@$$@@@@A$@B$Bdg@_jW: \n \\@$B$@@$g2@@@gE$W$@@@@B@@@$@@5@@$@E$@W$@@$gM@@@2k,` \n \"Wfj@$s@gg@@2@$$@@$@B$@@$@@$@@@$@$R$@@2@E22@EA$@# \n \"@BG0L$@B@@$@$@$$@R@$$@@E@$$@@@@g@R$$@@$$@MFt~ \n `fT$$%@R@$@$$d2sg$$@@$@@@@g$@$@@HRRM@ETT7+\" \n ?X@W~YT{WT#@B$$@@@$@$g0B@@W$#@@#$$dWn \n !8Hg@mE$EBVT&0y%$@0#sNEWAmpV*4M ~ \n ~n'__@2#Ga-BE@$sglEE(NNZJZ \n ^ ^ {3'9i@V_zM+>-~~ \n \n"
198
+ },
199
+ {
200
+ index: 9,
201
+ distance_km: 370979.8,
202
+ libration_elat: -5.57,
203
+ libration_elon: 4.616,
204
+ ascii: ' \n . r F^. , ,. \n 7 , _mvpaW..,_.^ -r> , \n z$"``~ `r ~-zR9_ ` ` +. \n \' {Y~^ ~3Bwyak. .QU \n . . )gg$@R9g@R/Rtmu. \n , . _g@WyZ.xsv. , u7@E@AaK@@W"H%)__^ \n ; `T`$__ yw).f__.WRwya@$g@$` "?^-~_/X#!: \n < _ g@@*5g@@$$0@$@@$g@@53 4@@p@aRi< \n Jjp , ~g$@@$@@$@@@@@@@@@0@@@l , T@@E5@KL \n _4g@ R@$B@@@@@@@@@@$g$@$@@$$a_,\\ 2@$$$g8@\\ \n T>@{; 4M@@@@@@@@$@@@@$@@@@@@$$EePh "~~`~5$V/". \n _*@LZX . `$@@@R@@@@@@$@$$@@@$@@$K *R@; `: \n |$P@W%_ w _ r.@@@@@@@@@@@@@@@@@@@@@@@~ -, .n:01 > \n )XjE5B@@~aZ$gg$ya$$@@@@@@@@@@@$@@@@@$B@$gW _yN_ .X! 4M/` \n JD$@B@@@R0@@@$M~Fx@g@@@@@@@@@@@@g@@@@@@@$@Ws@@B(^ `>\' \n 7$4$P@$$$@F" R@$@@@@$@@@@W$@$@@$$@$$W$@$y@gL+ . \n !2BR$@6@@WMg __m$$@@@@@@@@@@@$@@@@@@B$@@@@E$@$%\\ . > \n 7*>M$@B@@0@Em$@@@@@@@@@@@@B@@@@$@@B$@@$$dRE@MRyy M \n ^!@$yEgZQ@$$@$@@@s@@@@$@@@@@g@@@gR@@ZB@@@@0BW@~~_v \n "9BR$@T#$@@gE@@$@@@$$$@B@@#@@@@g$$@@$s$g@@#$g$GR! \n \'M&@@@D@@R@@@@B@@$@R@@s@@@@$$@@@@BB@RR@WM0@@B" \n ~0B#@Bt@@@RCgy@E$@@@@$$$@@$E$@B@@@@$3@@<P \n \'2[@g_{iE@$Z@@0BKEE0$R$@$$#@5@$$$@@MT \n ~<[F8g(EzaZM$#@yM$4yB$$@$d4MW4W~^ \n \'R@/2Sy<MRg$W5D$^>OT\'" ~ \n ~r!7/4%E@@5vr*?^" \n \n'
205
+ },
206
+ {
207
+ index: 10,
208
+ distance_km: 372936.5,
209
+ libration_elat: -5.822,
210
+ libration_elon: -5.197,
211
+ ascii: " \n ; -: . \n _, >c +___' ,`i + ._ \n ._Nw^~\"~T~ ;\\ 9M_., \"`4o_ \n ^>~ . ^$@$2%2Wiu zRzq \n ` Lg@@@$@@ge$d$gZ2~aL \n _vW<> ;-' g$@$RZ&@B$4@K$$4R%_%M_ \n ` | ,,.: . _,xgEyX@@g$$M` \"4Y?$$~-MB]*K_g \n _zW*32@@g5y$@@R@$@@@@Kv '$$$W$m#mggJk \n :2@$WgBg@@$@@@@$@@$@@h_./yG j@@$@$WBw4M-, \n [ '4@@@$@@@@@@@@@@@$@@@$g2@$E,: ;@$$$@@@2#MIo( \n < ^w5@@@@$@@@@@@@@@@@@@@$@$@k j\"@@VF@@@@KM~\"|> \n rj $@$@@@@@@@@B@@$@@@@@@M~$y@Y ` R@$@% !| \n 5\\E , _@@@@@@@@@@@@@@@@@@@@$EK@@@$_, .eX#b> j \n \"KEN~;zyy$_, `0R$@$@@@@@@@@@@@@@$@R@@y@$$$~ -aA<^W1nV' \n #E0R@@$B##~F_yg@g@@@@@@@@@@@@@@@@@@$@$$@$@Z=\"~ ,'MI`' \n cMF$@B@' =#$@5@K$@@@@@@@@@@@$@$$$B@@$@@R$ .' \n w\\a@@m_, yz$5$@M~$@@@@$@@@$$@@@@$@@@@$@$s@t LyA'; \n i,kRR$@ma@@$gW@@@@@$$@@@@E@@$@$@@$$$@@@@$@@gwm ;%XP \n }44$KB@@@@g@$$$@@$@@@@@$@$@$@@$B@@@$@@@R@B@R$yX^,/^ \n YVAYT@@$Z@$@@@$@@@0@B$@@@@$$$@B@$$@@$$B@@W#ER4_~ \n SK@2@B@$B@@@@Z$5$@5@R@@@B@$D5@@200@MM@$4@E~_ \n ^I\"<Z24B@9y@g5$@@@@$g@@@$$@$@R@@$$R@@@Y?k` \n ~^j._;4$Ta@s@@@5@ER$$2@$$@gBsyAH4@O- \n `\"';tK/RyvR@Nq@@#$@$QE$@@E7$d\\J= + \n ~ Yg+F=9fP$12$F*+$)@~j~?` \n T~zE$45[~K=\"~ \n \n"
212
+ },
213
+ {
214
+ index: 11,
215
+ distance_km: 376361.2,
216
+ libration_elat: 2,
217
+ libration_elon: -5.764,
218
+ ascii: ' \n ; .. _ \n .- yxw__ `\'( ` n> \n - ~"F M@g_-m\\_,, _W<x, \n l` . __$@$@@RK9>4$d$%,qn_ \n mg@$@@D@@$2D#g@sgMyJ4} \n .._ 4$@@@F~ ~F\\~k5~x$@@WMswt, \n ^r . ywyE@@@$;, #R$$@S$g$H*m . \n $ . @$y$UNg@LZ@@@@$ ~, \\ .g@@@$@$$$$dF;; \n js@ug@$@@$@@@@@$@$$@ysx$E{ ZR$$@$@RQ@M%)N^ \n . -@@@m$@@@@$@$@@$$@@R@@@@$#* [^M8F.$$@$@ ~MN \n _: 4ZR5@@@@@@@@@B$$@@@@@$@@@@B$@j ."^5g$_ >| \n (. *y@R@@@@@@@@@@@@@@@@@$@@$@@$zy.r3<VH@z_ *j \n \'_ )Z@R@@@@@@@@@@@@@@@$@@@$@@@B$sy$$\'M `AgWi^? \n Wd, . j ~Ey2@@@@@@@@@@@@@@@@@@@$@$$@$#E . ~?]X: \n X;0>)_g@RK7.ggA@@@@@@@@@@@@@@$@@@@@@$$g@@AB_ . _,j\' \n \\@ME@@$F~ .$@@$$T$$@@@@@@$$@@@@@@$@@@$@0@@ga1_$*@wK<_ \n 7#%BB$ y#j$$Za$@@@@@$$@@@@@@B@@$@@@$gEg@@@ ~&>\\ \n `,N4Rgy/jggR4W@@@$$@@@@@$$@@@$@B@@@@$@0@$@gg9$WW_j5r \n V\\2W$$AgR$y@$@@@@@@$@$@@@@@@BB@$g@@@$$E$WB$@AK@7+ \n YXnbM5@@d$@@@@a@$$@@$@@@@@$@0$@@@@@@B@$0$%@HK%2\' \n \'42K^RB@B$$$$@$@@@@$@@$M@$@$R$@$@@@@@@BW@$#{" \n ^"Z@0E@@BgM@$@@@$$E@@$@@B@$$B@@d$Zm@R#{~" \n `x`.U +$$@B@W@@@@gM$$@$#g$40A#gF[~$"M \n K@cm$M8wK@gG3g$R@g$s4@M7xH~4j^ ~ \n " -~~&CTp9=$$@9U$RE?kv7+ur \n `~` `T"-"<M5PT \n \n'
219
+ },
220
+ {
221
+ index: 12,
222
+ distance_km: 377700.5,
223
+ libration_elat: 5.801,
224
+ libration_elon: -5.923,
225
+ ascii: `
226
+ -
227
+ .,_ .. ~ ~ '" ^g:,
228
+ ; ^~ ' \`$$WyzQLw: j8yG=-
229
+ " Ly@$$&@RM72g<@%$LYR_.
230
+ +4$M@GB=R@kdM@M^?$@WxM"|,
231
+ . _gW@$K ~' 2$x@MgM@WE)r1
232
+ .- ^ >:, 4y@$@M0$ =@@@$B$@@QWz(?
233
+ - .$$jQygg$y$$$g$C,: a. j@R$@@@ZmBR#Kw{
234
+ 5$us@@$$@@@$$$@@@@@gGgFLL.J?$W0~$@$@U~\`~\\n&
235
+ ,a@@@$$@@@@@@@@@@@@@$$@@@~gy$r ' =~$@$\\ ^3|
236
+ . (5M$@@@@@@@@@@@@@@@$@@$$@@@@@L__ wRR~E@@ ,Xk
237
+ ~\`{W$@@@@@@@@@@@@@@@@@@@@$$$@@&~wdM*M~#@gL~J
238
+ ; _$$$@@@@@@@@@@@@@@@$$$$@$@$@@$$~. '~~v[/
239
+ w_ . _ '4^y0@@@@@@@@@@@@@@@@@@@@@@$@$@*> >w-
240
+ H &i +w@#M$ _$$$@@@@$@$$@@@@$$@@@@@@@$@@$NM>_,-_kgv9Y
241
+ ~<msX@BF~ 9@R$mR@MB@@$@@@R@@@$@$@@@@@@@@@@gg$BQW+%$_/
242
+ \\FRW$$ _yH&4gy$@@@@@@@@@@@@$@$@@@@$@@@@@E0@$$]"FM'
243
+ '?V]MgL+,_g%a$@@@@@@@@@@@@@$@@K@@$@@@2@$$$@@$%0M@2A^
244
+ a@7@$g@g@y$@@B@$@R@@$B@@$@@@@@@@@@R@@MR@$$@By@#YF
245
+ ^3k522#@B@@@B@@@@@@@EE@@@@@$@@@@E$BR@$@$RgR$R+~
246
+ ^(^4\`@@WA$@B$$@$@$@@9R@@$@$$@@$@E2@@RRWgMw?/^
247
+ 'Q7W2$0$W@$@$@$@@@@zRW@$@B0BK0W@@MBMM~\\J
248
+ "V('x.~3@RRB@@$@RB@@@$$A$B@@jptW%~' "
249
+ \\T$/RRZBgp$ZGPRMg$$$@$E$X/'~W)
250
+ \` =""&*G]@wtB4E4$gg$4$4EP!^
251
+ "^ \`\`"+M= -T~^'\`
252
+
253
+ `
254
+ },
255
+ {
256
+ index: 13,
257
+ distance_km: 378113.4,
258
+ libration_elat: -2.581,
259
+ libration_elon: -5.835,
260
+ ascii: ' \n . . .. \n . `, ,_. -7`". \n /J^~T ~ " z4$_ ._ `":- \n 4-\' . . [@$@x@Wyy y@$iu. \n jy$@@@$g@A@g$DARB}@w_ \n _*_ . 790$$g$MA@@a@W@NRBRk^% \n \' .~ +_ *$_yx@B@E= ^`~JBsm$$HWbyQ^, \n Jy-"@@g@_a@@@#@@$5gTn "ZM@$$$g$@@w^. \n _@@@$Gg@$@@@@@B$@E@$;$gys\' _9@@@g0$Ra@j_~. \n q@@@$@@@@@@@@@@@$$@@@@$g## _vQ@R@B@Ew#&~nr2 \n .T `#2@@@$@@@@@@$@@@@G@@$@$@%_z:7F^ W@@B^ (*l \n } =D@@@@@@@@@@@@$@@@@@@@N@#Wy ,`_5@#w \\. \n #PL . 5g@M@@@@@@@@@@@@@@@@@@@$gR@$pu,_%7"R$L KU\' \n \\ Pz\\_y-gb "05L@@@@@$@$@@@@@@@@$@R@@g$@@$g>~ ~KAD\'@ \n 7|B$)g@@$@ Y=y$@g@$@@@@@@@@@@@$@$$@@@@@@@BR_ r\' \n \'YK$$N@" PF@EgM@$@@@$$$$@@@@@@$g@@@@@R$@z. _)z7 \n :kR@$0;_ g@W@$_yg@@@@g@@@@$@$B@$@@@@@$5R_$*.iH9R? \n TQ@@$d1w$@9#$@@@@@@@@@@@@@@$@B@@@$$@@@g$BgB@@wMk:T \n {%AP5@@0@@s@@$@@@@@@@$@@$B$@$B@$@M$@$RRg@dyw@#W};` \n ^y5XA@$MRB$@@@$R$@@@B@$@@@@$@@B@@$@@@@RA@@B@YQ;~ \n `6%RGBB@@@@$W$$@$$@$@E$@$@@$@$B$@$$$@@@$%5"` \n `\\X3~~2@ER$$B@@$$$E0RB$h$R$@$@a$aA@%R@%9 \n >Un _{6$RA@$@RW$g@0$$@@ygWKMM$@@W^~ \n ~n1M5&*#_a0@@@AR@$@$$$EXU7YMf^? \n ` ~^~k[c5s%MAYqMFFM@"VZ \' \n ^-^*F^~?~`~` \n \n'
261
+ },
262
+ {
263
+ index: 14,
264
+ distance_km: 379658.1,
265
+ libration_elat: 5.491,
266
+ libration_elon: 6.128,
267
+ ascii: ' \n , - ,. \n , __ _x` , , \n ,+Y\'=\' .^?=PywwM__., _.- \n -s- lE@@$@g@__L_$>. . \n " ` >$$@$$44@F<Ma YX_(:. \n . _. 4@W$R "" ^wyy9$%BZ \n ,#RoP ` k \\\\;_a@m@@@#ET ~@@#$%syV; \n ~a_bX$@$$3@$$@W@9$g@L , W$@@RzFC}t \n . ~@$@$$@@$@@@@@$$$$@@$N%y___ ~g?~5$Bw^"| \n ^ y$$@@$$@@@@@@@@@@@$@@Q@@RP^ ` "R$@_ : \n ..W ~@@@@@@@@@$@@@@$@$@@@@@$@$. u /m=Ey . \n ^jR "~?@@@$@@@@@@@@@@@@@@@@@$w_< `gy; j~) tyl \n xV^> {+2@$@@@@@@@@@@@@@@@@@@$@B@_@R$$W~ "?Y \n \'&W$z . y[_?@@@@@@@@@@@@@@B@@@@@@$$@@@@0@Ek !\' \n ^N26@9g_pdg$$$M$*@@@@@@@@@$@@@@@@@$@$@@@@@*@$Rb\\ :d/ \n ^ARj@@$$$@@@~~.}9$@@$@@@$@@@@@$$@B$@$@@@$$g@@@PgKL *" \n 4M*$$$@@$$__ x$@@@@@@@@@$@$$@$$$$B@@$$@@W@R$E~_j!u \n ^0MN@@@@$$wmys2@@@$@@@@@@$@@$$$$@0@@@@$$@s@@BR@@KK \' \n "\\3@@$R$@$$@$@@$@$@@$@@$@@@$@@$$@@@@@a@@B@E@E$0_\\ \n ~WR#W@$s0@$@@K@@@@@@@$@@$f@@@M@@@@$g@K@$B$@0$P"" \n ~^@QB@$~b$R@g$B@@@0$$@@@@@@gBB$$@@@B@@B@54M~ \n )=W&@A4M@@$@@E@W@@2@B@gWK@gD@@@gEW${$#^ \n /@TEEE`&A$#0y$@@Z$MM@$p$@0BtP5%@<l \n \'~XmT$E$W@MgyR$$aRs9gS4WW9/~ \n ` f=L"0EZW$@RPG%#$R{Rx{&\'\'~ \n `^`^ \'`"\\"?~ \' \n \n'
268
+ },
269
+ {
270
+ index: 15,
271
+ distance_km: 381331.9,
272
+ libration_elat: 0.836,
273
+ libration_elon: 6.123,
274
+ ascii: " \n . _, \n __ . _ \" < \n wz?^^\\^ `r={*_, _. ` ,, \n .4fT '80@Ma<w% <,). \n gg$$$$B@%K$YJi[ = \n ___y, ^ji . . _ 'J$g$0F~~5\"*J:`6x\"i: \n . #T5ZY ;`-,'_n-;)wyWB$@$\" aygg5B4W \n ' g@9e@@@@Ea$$g@$@$R$$ j@0@@@KR \n 2 +@@@y$$@$$@@@@@@@$@@RL_ * \\$@RRwgT^I \n /jw 4$@@@$@@@@$@@@@@@$$@@@@E@$+ \"4\"'7Ak@^ w \n .%g$ `@A@@@@@@$@@@@@RR@$@@@$@$E | TT@5 ' \n ,&X<> `~?@@@$B@@@@@@@$@@@@@@$@@ _; ? MW { \n 'MtJz. +^$@@@@@@@@@@@@@@@@@@@@$gG| _ay, *` ~GV \n 5yjE@$yz(ny_y$ -@@@@@@@@@@@@@@$$$@@@@$$@ga@R$@T `\"- \n IJEW#$@B4@@@@@KS1g@@@@@@@@@@@@@@@$@@@#@@@$B$R@7 '- \n 2ZW@E$@&&$F~~. VB$@$@$@@@@$@@@$$@@$$E@$@@Z0$$$> y)' \n ?%&$@$@$g@x{ _,m@M@@@@@@@@@$@$@$@@@$gB@R$$*$$Y@M 2 \n ` %2@$BB@Rb$L@@@@@@@$$@@@@@@$@@@@@R@@$@$R$$$I2l_y> \n `Wkg#@@R@$@@@@@@R@@@$$$$@$@$@$%@@@B$a$Rg@@@g@@Pp+' \n 74&$R@WM@B@@$RR@@$W@$@@@@@g@@@@$gRbEB@@W@@E@@&; \n +E#@$am@0@B$@@@@$$$@$$@@@gW$5@@$@@$d@@BgRR^^ \n `\"@S@$MM$3RRE@$@@$$$MW@R$$BR#@$@@@%$%@< \n ` J8MqG_3=AM$$a@@@W$@@@$@@$aR@R?Tx~' \n \"|QT4RARm4$*ARQsGW@EaRP7$TTP~` \n ~- zMeeE65tsF0g12$Lb9X^ \n ` ' T~F~~ ~^`` \n \n"
275
+ },
276
+ {
277
+ index: 16,
278
+ distance_km: 381859.3,
279
+ libration_elat: -2.705,
280
+ libration_elon: 5.978,
281
+ ascii: ' \n . . \n . ___ L._ ^; - ( \n mze^^`" \'~~RX_ " . \n .tv? `B$@lglu- | . \n . pggR@@$@EZ:dFR, \n wax_. y_ R0ER$@f4$WyCW?w:v \n !. ~TT%~_."u_Jw__j*E_x$@g@H ~"\'J_ jQtjj \n [ $$bdB@@@@W$@0$E@@@Q$ . \'@$@zNBcX \n [| ";g$@@@$@@B@@@@@@$E$@@@ :. 4@B5@R%(` \n jyMy t@$@@@@@@@@$@@@@@@@@@B@%y1_ . Zf$RK@CG# \n vNt` Pg@@@@@@@$@@@@@@@@@@gB@$F\'~ F WB@\' \n 8j@~w - ~f@@@$@@@@@@@@@@$@@@$@@L. \' `"?_ \n AM$@Zy . . .`w@@@@@@@@@@@@@@@@$@@B@$_i yL " yN).P \n )jy@0@h@~LsgyggaR@@@@@@@@@@$@@@@@@@@$@@@g_g$$v;^ 7N \n !VH#$B$g$$$@@@$7k4$@@@@@@@@@$@@$@@@@@@@$@$@R@@a ". \n \'5SBBR$Bg$$F {f$@@S@@@@@$@@$B@@@B@@$g$@B$$$[, 4` \n 1X@8@@2@@$hg __W@B@@@@@$@@@@@$@@@@$@$@@@@W@B$y_ M/ \n JQRB$D@$$@2$g$$@@@@@@@$@@@@$@@@@@$$@$@@R@@WWkFV {" \n \'@@fF$@0@@gR@@@@B$@@B@@$@@@$@$R@sM$@@@$$@$$@WwgW" \n `@V$4$ER$$E$$@@$@@g$0@@$@@@$@B@$$@$5@B5@@@NT3~; \n {~$M@@E$@$@@@$@@$@@@$$@s$$9@$@@2$@4@@RK$T@@^ \n ^ FqR#mZ3JH@Wgs$$EBW$@Z@0MWg@B@@$WM$B55? \n ~^k/1ayDgW$$#$00B@$@$2Kg@$$Eg$$$\\$\' ` \n ^+K^YG#%gWa9Ra@@9MT$$EZ@@~wO="\' \n ~ `-%Hy~T@@M?a4%M$"^k( ` \n ~\' `~P!+^^ ~` \n \n'
282
+ },
283
+ {
284
+ index: 17,
285
+ distance_km: 383889.6,
286
+ libration_elat: -5.925,
287
+ libration_elon: 6.256,
288
+ ascii: ' \n _ . \n . \' _,._ \' .:_ \n .nzF\'~-^`Fnrj__ . \n aF~ ~ `!Hyw_g_ w. \n . ` xygg@@W#k,=|l. \n _gwa; _wJ ($@9@@d@@\\W^@K_ . \n _ t~"$~_ ,_W_z+\'_jz. y$@W@" ~~kfX#~5i; \n /\\ \'.3@$@@$$@$$@ss@B$W@$MC 4m9p6b>{ \n G5[ _. ,$@@@D$$@@$@@@@$@@0@0@~ 0@$$B$$ \n .}2A> 9$@@@@$@@@@@@@@@@$@@@BaL ( \\$FgY$HX; \n M@@Bq . H@@@$@@@@@@@@@@@@@@@@$W@s "NV^?$g_"M \n jW@%y@ ~ . r ~@@@@$@@@@@@$$@$@$@@$@@ *#$m \n &U*&WMW y _pG$@@@@@@@@@@@@$@@@$@$@@F " =\'$, \' \n (T$Rg$@@E$w@g$@W$@@@@@@@@@@@@@@@@@$@E$@gy _y_ | `v</ \n &&mV$RB@@R@@$##K$s@@@@@@@@@@@$@@$@@@@@@g@ya@$Em ? \n `5VA$@$@g$RE`, @B@@@$@@@@@@@$$@@@@$$g@$B@y$$" _ \n v<Aqs@R@B@E9_yy@@@@@@@@@@@@@@$$@@@@B$@g@@E@@@$\\ ,> \n $AR$Bg@@$$@sR$@@$@$@@@@B@@@@@B@@$@@$@$MG$0@GlWw ; \n ~~qZ$BRgZ@@@@$$$@$@@E@@@@@$B@@$$@@@$@M@@$aRfM~,, \n ^R*@@zZ$@$@h$$@$@g$B@E$$@@$$A@@@@$@$BWWE@@B@) \n 79@@gW$@gg@@@R@$@$@R$D$@@@$@@@WB$$RXBBgM5[ \n {JGKRHk~@@g$$R@$Ez@@$$$@$@0$@$@$EB@@RMX~ \n &@R2$4yKBbAER@@R$$dW@@g@@@D$m@@XN`" \n ~^u"?F4KPEz$$$Z$#@g0$&@@55M@v"~ \n `~-Xw7PPe=TA4jzFW<_t^\' \n "^r-^^^ " ` \n \n'
289
+ },
290
+ {
291
+ index: 18,
292
+ distance_km: 389306.6,
293
+ libration_elat: -5.818,
294
+ libration_elon: -6.036,
295
+ ascii: ' \n . _ \n . ; ``( }. \n w;MP|* =n>fsL ^ . \n *|| `^RE@_}y_ 4ym, \n . ,yAg@M$R2@L$RMw< \n _w , . g@$$B@R@@m@y%B$@y,(k \n ``~\' x _yy.J$E@@BM~T@T@A$TM$gWg"VL \n .$x_gg$J0@a@@@@@@$@si aM$RB@AWMe/, \n . . .g@F*g$@@@@@@@$@R@g@\',_ z j$@$$@5$$W]`; \n / j@$$@$@@@@@@@@@$@@$@@ygz@_ #@@@g@$@BEa<u \n . . Jk4@@@$@@@@@@@$@@@@$@@$@$E ,7$2=@g$z&"^KTL \n /j A@@@@@@@@@g@@@$@@@$@BEgys\\ \' HB$@N ~P \n h0L . >@$@$@@@@@@$@@@@@$@$@M@@6$_ .we{@0 .l \n %>E$ -gsWw_^`RME@@@@@@@$@@@@@@B@@@$%#@$@~ y@# 4@*X|, \n MRQ@K@@@hff $y$@$@@@@@@@@@@@@@@@@@@$$@@BE$" "4> j \n L45B@MF . ~ZR@K@#B@@@@@@$@@@@@@$$@@@@0@R$ . x9r \n {5S0g$_ , g$T9@y_@@@$@@@@$@@$$@$@@@$@$BWN\\ xkx \' \n "VM$g@$@R@TJ$$@@$@$@@@$@@$$@@R@@@@@$@0%@gg$$^;M<:X \n \\ t@@g$$$@R$@@@@@@@@$$@@@B@$$$@@@@$$$E@@$M$yW`j+ \n \'jj`R5@@@$@@$@$@$$@@$@$@$@@@$B$@@Wgg@$B@@W@>/` \n \\^48R$@@$@$@$@@@@E@$K@@g@@@@@$@Z$$BW#sP#^| \n \'-:, {$MA@$@EZ5@@@@@$$@B$@@@$@g5$@Em9/^ \n z~*gT6GfTA$H$@z5$Z$KREBa@3GW5#9"^\' \n " +?L$"3f@@@1$E5$5F5$=Dj?$>?"` \n ~` ?tJjg#E@gH@~W$:` \n \'"``"\' \n \n'
296
+ },
297
+ {
298
+ index: 19,
299
+ distance_km: 390509.1,
300
+ libration_elat: 1.475,
301
+ libration_elon: -5.963,
302
+ ascii: `
303
+ _
304
+ - _ \` ... .
305
+ _r -- ~^<_)$w _,_ \` jy.
306
+ r 'g@$$$$x$yyMW_~:_
307
+ .j$$@Bk@$@@W2gRZ@y"<y
308
+ . NgM@R$~~4$RMgBM1%&E$jWy
309
+ w~ " . y_y@@@@~ g@@B@m$#RKJ{
310
+ ,, _s@@ngLg$5$@$@@'^ w _$$B@@$@W$Nrj:
311
+ g0Yw$g$@@@@$$E@$@@@yjy4_; 4@@@@@E@#Xb@X>
312
+ q@$Eg@@@@@@@$@$@@@@$$$s$a.-vI5MFT@@@a\\~ \\nW
313
+ _ d7@@@@@@$@@@@$@@@@$$$$@Jp@$@, . FR0@F j!
314
+ ' \`+R$@@@@@@@@@@@$@@@@@$d@@@gLuy,r@@%Wk :f-
315
+ LF C@@@$@@@@@@$@@@@@@@B@@@@$@@@wcHPT "%bs/1+
316
+ NU_+ __ 7^y$$@@$@@@@@@$@@@$@@@@@$@gR$ . '#~w:
317
+ %_W<_ygBR (=yB5$@@@@@$@@@@@@@@R@E@$@@@@@gW !M'
318
+ (Rg&@@~ *B$$@FRR$@@@@@@@@@@@@$@@@@@@s@EgW,y*RGvW+
319
+ K0@2@ w@#@$yX@B@$@@@@@@@@@@@$@@$@$g@@@@$_P%y~''
320
+ ^\`gM@@EyyWH_$$0$@$@@@@@@$$$$@@$@$R$B@$E0BG$aH@@+J/
321
+ ^N4@$@M@E@$ER$@@@$@@$$@@@$$@@$@@@@@$$W@@@$@Rz#7
322
+ ^,W$FH0$@@@@$$@@@@@@KR@$@@@@$g@B@B#@0Z@B4Y$0v
323
+ Yx*BK$$@@@$BZ@@@@B@@@@@0@R0@@@$@M@$B#0@K~
324
+ '~~~}3?RA@$@$R$@BW@E$$gB$@$QM$#@@@kF}F"
325
+ "(4w~2#$n#M0@HW@$@9@@Z@AB)EKfBF'. '
326
+ '\\D?^X0@$$g%4s7@RB4$9%Z_w~, '
327
+ ~^^P&Y"r*?59P44M%J~5~ ^
328
+ \`T~'"\`"
329
+
330
+ `
331
+ },
332
+ {
333
+ index: 20,
334
+ distance_km: 391670,
335
+ libration_elat: 5.642,
336
+ libration_elon: -5.869,
337
+ ascii: ' \n \n x`! \n | ;! ^\\+e%*_,<- ,_ _pK+ \n ..F ggg$Z%92kyBWWyC /. \n wg@$E$$@@K@Rg$7QRvx$t,_ \n . a@@B$" ~~"WRux$$@g@@$}L \n i ` jLyA$@@$ "0@@@@s@KRM*W{, \n _ gg-N<gyg^@@@R@> _ J X@#$@$@05&3x2=. \n _@_7&$E$$@@@@y@@@@$ggg0= . 9@$P5$$gb#~ \\M$. \n _ag$W@@@@0@@@@@@@@B$@@$@R\'yy.^~ R@BK/ &) \n . .F@@@@@$$@@@@@@@$@@@@$$$g@g@gw_ .w*y#@K_ }W \n k ` ]y@@@@$@@$@@@@@@@@$@$@@$@@@gF/g@t=\'4@$$/O \n t5$M$@@@@$@@$@@@@@@@@@$@$@$@ERF` ^~1.4/ \n jy . `E_2R@@@$@@@@@@@@@@B@@@@@E@$$gQ ]<W L \n 4;,-ag@$4.gg$R@$@@@@$@@$@@$@B@@@$@@@@@sBFy_ ua9mm7W \n "Y#@%$@^~ 0A@$$M4R$$@@@@@$$@@@@@@@@@@$@@W@$@r&MMMx# \n ^@K$g@ a$*R$gg$@@@$$@@@$@@@@@$@@@R@$@@@E$$$0V$R \n 0W$@ja\\_$@`$$B$@$$@@$$@@@$$$$$@$@$$B@$@@$@22@$@t\\ \n <P4m$W@@@$@2@@@@g@@@@@$$@@$@@@@$@@B$2R@@@$@Eh(` \n `TSsW@@R$$@@$$$$$@$@5$@@@$$$@$@$B@$@@@$gRRs5\' \n `^}&`$b$$@gH$@@$@@@$M@RM$g@@$@@%$N@R@5\\R"^ \n >j?"T#M$0#@@@g@R@@Dg@$$@$$$@b0B@E@#^` \n `? <L. k45k~F@E#@@0$T@BE@#5@$?6m-, \n 4K?4Y($GE4zR@5g$$EEgBngK"_>-~ \n `~>?^4 MMKqZR@Ds!=`(\' ` \n `\' ` ` \n \n'
338
+ },
339
+ {
340
+ index: 21,
341
+ distance_km: 393407.6,
342
+ libration_elat: 5.513,
343
+ libration_elon: 5.636,
344
+ ascii: " \n \n . ^ \n LNV' `T~{$b_ -, \" . \n _j@' <R@$mW$wxt!mn \n ~ g@@@$@$@@'Yq\\as;' \n g@@$6^ `P ~<\"_M@yMj \n _g%n- z+ sEyg$@$@' ~M$g$M$sX \n \" 'a(_ra@g@@$@$g2$$$@@ f4g$gA@4M \n `$@@y$Z@$@@@@$$B@@@@g$_y, *@7M?$$N~'\". \n ^ _H@@@@@@$@@@@@@@@@@@$$@@5~ ,. `B@N_ \n ;yK `gR@@@@@@R@@@@@@@@@@@@@$$_ ` w=~@L . \n <$\\ ~?@@$$@@@@@@@@$@@@@$@$@@yk `W@! ,I? YP( \n -JMw - 3B@@@@@@@@@@$@$@@@@@$@@@Mz@B@#! \"^ \n \\Xw$g _ . yJ_\"BB@@@@@@@@@@@@@@@@$@@@5@$@2BR[ ./ \n FP@w@g$_n@$@@M@*y$@@@@@@@@$@@@@@@@B@@2$@M@@@e> .W' \n y#@$@@@@$$~~ ~4$@@$@@@@@@@@@@$$$@@@@@$$@MBER$%< <^' \n l6$d@@@B@L a@@@@@$@@@@@@@@$@@@@E@$$@$B@Rm@\"_/, \n BM$g$@5gmezvB$$$@@@@$$@@@@R@@$$@@@$@#$@@@@R$$@(.` \n ~12KMy@R@@$@$@R@$$@@@@@@$E@@@AB$A@@@AR@@@@KE@Gz \n '@kRM@$@$@$gR8@@@@$B$@R@g@g@@$@@$@@$Ra$@@@$Z` \n ^?WE@x@@@@@@@@$$b$@g@@@@@gB4@$R$BBMRMyTT' \n \"4QB@@@M@$R$@$@@@$@RE@@@A5$R@BQM@M#P\\ \n ~^@j@&_gm$@%4T$B@@@W$@@UK@#W7~7' \n CtHP@$02WR@14@5Z2FA#3j\\J: \n '\"r'F5$~(G@7_$TM$4>^ \n ' \n \n"
345
+ },
346
+ {
347
+ index: 22,
348
+ distance_km: 395633.7,
349
+ libration_elat: -2.548,
350
+ libration_elon: -5.238,
351
+ ascii: " \n \n `` , ;/ >_, \n ,_ +,P> * y _ ~ 'u_ \n :{T` `~=$WWk_r, _#P+ \n ~ _yD$@@g0Es&#ZB@'x. \n _ , @@@@Ea8@@bEY$@@sGL2t \n f^ Y '' . .w_ _$@@B@' `=3'25Zp$$>a#Iu \n g_:.g$_RMzy$U$@@$#E7 . Rg$@$@HgaEK` \n $@wR$@@@@$@$@$@$$@!y- g! .g@BB@$@$$M,3 \n . -@@@@@@@@@@@$@@$$@@@$@s$L ?BB$$B$@RMXFW, \n ` ~C$$$@@@@@@@@@@@@@@@$@@@?E_;]=^ 1@@WE {( \n >M `RZ$$@@@@@@$@$@@@@@@@0RgB2r ~M@$_ 4' \n (@+ . %@@@@@@@@@@@@@@@$@@@B$$$R@$w+ ~A_52v_xr \n ~^MkFwa-wK `XF2@@@@@@@@@@@@@@@$@$$@@@$$sA^ ' ~@$}'^ \n w$$$g$@$N`wty@@@$@@@@@@@$@@@@$@@@@@$@B$#_ `_' \n M$@B$g^ AB$@$R$R@@@@@@$@@$@@@@@$$@@$@G( y,]\" \n ~sf#R@,_ y$H@@$B@@@@@@@@@$@@@$@@$@$@$5R$yyw-^W4h; \n I}V5@K@@ME+R@@@$@$@@@@@@@@$$$@@@$@@R$$BgF4@_'T#_ \n m\"y*$@$#@@@@$@$@K@@@$@@@$@@@5$@5@@@B$B@@@RQ@_X` \n ~\"$~@g$$R$@@$$@@@@@@$@$g$@$R$@B$g@E$Z@@@$sx. \n ^FP$@$@@@@@@$@@@$a@@$$$@@$$g@@A@@g$@@@5VF \n ^ ~/`~$@K@@$@@@@$AE$@0@@B@$B$@a4?P@P\" \n uW&\\@m@ETRDH@Hg$sRgS@E&N@5@%6^X \n ' u3@#pME@RS@PQ4RWKRMkz@ `. \n r{^M=Fi@9#KEP(K7~/ \n `~ \n \n"
352
+ },
353
+ {
354
+ index: 23,
355
+ distance_km: 396804,
356
+ libration_elat: -5.205,
357
+ libration_elon: 5.066,
358
+ ascii: " \n \n T - \n .x*zZTn>-- _ . . \n .. a_0F ~` n4M_;. ~u. \n '~ ,^@g$$gw_;kw, \n . ._w{ , __' r@$R$R#@$tfU~_x;. \n . ?X?E$`_~G _: __+ _@E$@^~~?kic%\"$/$ \n p @B%<#$$y@$W@$@@6@$@F y@_z@sl| \n n__ _M@@$z#$$@@@@@@@@4$0@ `A$@@g$( \n 4JK& , g@@@@@@@@@@@@$$@@@$@@$( # 9gKzgW&\\ \n jD@z_ +#@@@@@@@@@@@@@@@@@@B@W@m hN~\"5#F^ \n ?7#.@ 1 \\r ~$@@$$@@@@@@$$$@$@@@@@ < 'MRy V \n N%P#Rg _ ~W@@@@@@@@@@@@@@@@@@@g$,' -. r~$, j \n NGqQ@@$Ejy$gg$2s@@@@@@@@$@@@@@@@@@@5@@a,{Zg, ; ^ 0< \n (3H4@@B@$@@$#=~t0@@@@@@@@@$@@@$@@@@$@@$@@$@$$ ' \n `4Hg$B@@@$F`. \"4@@@@@@@@@@@@@@@@@@@@E$@$$e@W, j \n KR$$bR$$@gZ_vzg$@@@@@@$@@@@BB@$@E@@gB@$-g@E$) \\` \n Eeb@@$@$WgW@@Eg$$@@@@@R@$@$@$@@$@@@$B@$f@R)P@ . \n ~75RR#$@$@@@B$@@$$@@@@@@@@@@@$W@M$$BB@$@E2B_jn^ \n =W%B@_@@$B@@$$@@$@$@@B$@R@B@@$@@M$@D$$@RMBX \n ~~#M@0@M@@@@@@$s@@$$$BE@#@@$@W$@$g@B@B@>~^ \n ~#w7%,wRG$@M$$@@@$@$&$@$@@$@@M$gRR@^^ \n Ry$aG0$#MM45$$ZZR@$a3@@0@$R@2pM` \n `'=4Kh5M$K4AN*@tSd$sT&C^~} '` \n \" ~TF_75@RgmF4`~ \n ``~``` \n \n"
359
+ },
360
+ {
361
+ index: 24,
362
+ distance_km: 396918.3,
363
+ libration_elat: 1.016,
364
+ libration_elon: 4.987,
365
+ ascii: ' \n \n ~ r .:c . \n . ju ]>_^*Y=yL \' ` . \n .W> m@wy+l_ M~ \n ` ,ggm@Eg$WRwx_!_ \n . L$Eg@K`4$_dW$ \\wY \n _R4B$ ~).{. ,.sELgB@$E. ` yWw4aggy: \n `7kp>_ggy#Tg@$M@$@Wg . `4@$@R$@y \n ,$@$g$@@$$@@@@@B$@@$y_ - ?ER@22R]>, \n >. ,. 1z@@@$@@@@@@@$@@@@@@@@$@gp `"@~~2$$Y^~) \n vZr BW@@@@@@@$@@@@@@@B@g@@gB 7 jY$l \n 4v$y . ` ~@@@$@@@@$@@$@@@$@@@@@. - \\Y4w ) \n }A_z, \' ;;@@@@@@@@@@@@@@@@@@@@g$sI W*_ ,{^ ^@L\' \n T@#R@yy).y__$W-y@@@@@@@@@$@@@@@@@@@@@@$g@@$$( "I \n .X@9a$@gy$@@@$$=$g@@@@@@@@$$@@@@@@$$$@0$@@$#f >J \n 9D$$@$@R$R JB@$@@@@@@@$@$@@$@@@B@g@@G0@@D_ N \n :s$E@a@$@my _ggB$$@@@@@$$@$B$@$B$@@@BE@E0MQmM / \n 7X@@@R$@@@@ggR@@@@@@@@@@$@$@$@d@@M$@$$W@@g@Ly$M) \n myX$$K$@@@@@B@$@g$@$@@$@@$$@@@$@$@$M$$@@@$@g/l \n "?-&@@Z5$@@g@$@@@Q$g@$@$$@@@@$$@@R$@@W@@@gMG^ \n "7#5@0E@@@@Z@B@$B@$@@@$@$B@@@@B@$5$$$@R$\'" \n "0M$M4FD@@$@$@$$@@RB@@$@$E$RN0$PW0~~ \n ~5@<X@$0j@$#~$B@ZE@$gR%RA0EM7?"~ \n \'*TT3m4aH@2@RW$3M$P=BzR)^: \n ` A<?X%f_WmPg@EM-`" \n ` \n \n'
366
+ },
367
+ {
368
+ index: 25,
369
+ distance_km: 402200.1,
370
+ libration_elat: 0.434,
371
+ libration_elon: -3.119,
372
+ ascii: " \n \n \\ r \n ___< *r z_ ? \n . ~ `''P0wvzkyu _M:n. \n v __$B$MRM#%e$XgZLn_ \n ` 'd@$B@b4@$%%%@M@4drY- \n +A 5 ~ .___a$@$$~ ^``R$w$$#@@G~, \n v2x a@y*HkW$R$$$8yP 4$@bB$$@$@w: \n g@_D@$@@@@@$@@2$$@_.Jy\\ BR$@@@$E6Rw& \n ug@@$$@@@@@@$@@@@@@$@@@$:, &#MF2R$EW~'/W \n x `E$B@@@$@@@@@$@$@@$@@@@%~(ye ` 44$#F 'r \n !, 5y@@@@@@@@@@@$$@@@@@@y$$yw . ,*YMEG > \n 4[$ j 32@$@@@@@@@@@@@@@@@@@@@@@$MM`_mMF =bb^\" \n 45tgy: _ g_ .\"R$$@@@@@@@@@@@@@@@@@@$$@@@@$` . ''4* \n (j@$aDB@@%X Ly$@@@@@@@$@@@@$@@@$@@$@@g@$a_ W, \n (@0R@E@' `5@@@@$$$@@@$@$@@$@$B$@@@W@$M$PL_ yr/. \n Jm4XR@9;_ _ggF0@@@$@$@@@@$@@$$$$@@@@@$$@KZM@';e!j^ \n 3Y@M@$@wy$E_5$@@@@@$@@@@@$$$@$$@@@@@@@$@$WZ$$~i^ \n t)753M$@#@@$@$@@@@@@R@@@@@$@E$@@$$B@$W@B@@$Gl' \n V@G~@g$$0@@@B@$$@@@@@@$$B@@$@$$$@$WR$WW$W<( \n ~%p2#B$@$@N05@W@@@$$$$$$@@@@$@g$@@@M@Wz \n ^~`/`^PW@@@@$@B$$E@$@$@$BBg@@WERKC,\" \n 'V?hg$q#E2A@M42@g@GRMg@*wK@l~)' \n {7$k$n5HMDA@wBF$%bwmyI + ~ \n 'Y~~ *bv@4$$K'?~ '\" \n \n \n"
373
+ },
374
+ {
375
+ index: 26,
376
+ distance_km: 402352.2,
377
+ libration_elat: 5.638,
378
+ libration_elon: -2.986,
379
+ ascii: " \n \n . . \n __| -;<pN__ _ ~ g.. \n xP' @R$@SpJV.$U4+^ \n r~ _@@@BBR@@Z@HeP$@yl^t. \n j@s$0\"`~R\\F$E,g$$gmQJi \n - . ,. (_j$@@@\" MW@$0mA@E&n_ \n ``, ysg\\%ygP5@$@$F /_ 4@$$@@0R@a\\j. \n 2L @W$@a@$$@@g@$@@a~u@ %TBFg@$Z}'^`X \n y$@z$@@@@@@@@@@@@$$@$@@~'.u.^ <@gK@ \". \n . -@$@g@@@@@@B@@$@@$$@@@@$W$M-_ _>aMgz, 3' \n ' `'~2B$@@@@@@@@@@@@@@$@@@@Bg@$@^`aE*~^kmz~ \n F .D$$R@@@@@@@$@@@@@$@@@$$$@@@gg' ^$)(; \n ,p y 'sF@$@@@@@@@@@@$@$@@@$$@@D2@y> ?^}, \n !{P@_;A$@T$=L$@@@@@@@$@@@@@@@$@@$$@@@@B#RN_,x7Aw7 \n 't$$R@@F~ `TE$#@E@@@@@@@$@@@@@@@@$@@E@@$0$@@P2|ctx \n j$B@$# +@Mg@gg@$@@@@@@@@$$@@@@@@$g$@g@g$$$9vy! \n >rQ@0EgWw@@%M$R@@@@@@@@@@B@@@@@$$@@@R$$@E@@@MPF/ \n \"9?a$@@@@B@@@@@$@$@$@@@@@B@@$WRg@$R@$B@$$@WM6F \n N~(@v$$g@ZB@$@@@@B@$$@@E@@@@@@b@E@@n$@ME2Vl` \n `\"W@y0@B@$@$$@@Q$$$@@@BEB@@@@M@g@$R$$PV' \n ~2@@~^TK$@#@@#@@@g@@ME$@$E$4#E@$4< ~ \n \") u*yv2$2V5RW@W$RBW$g@RA[f(*`: \n /*_\"<sd9t($5$$g$7RbJR*&7 ~ \n ~~ #<`+MLN%~DJM/^ ` \n \n \n"
380
+ },
381
+ {
382
+ index: 27,
383
+ distance_km: 402371.7,
384
+ libration_elat: -5.458,
385
+ libration_elon: -2.965,
386
+ ascii: " \n \n ..~ . . y , \n ._wIq;ws _._ !`P- , \n ,p4 ~ ^r*$_w... `\"5s. \n ^ ,X@@$gWWm_aEKv \n __; , .$@$$B9@@@$<@g$Wf\"x \n -^??K `; _.. @@B@E\"~fMQ$a@=$RS_l. \n , z__g@gWasw0@y$E@@RA yWa|B$4&jF \n .g@$j@$$@@@$@@$@@$g$'' t@g@6@@%e ; \n m+ @@$@@@@@@@@$E@@@$@@$yWu#~ K$g$B@#RPW\\ \n v$. P3@@@$@@@@@@@@@B@@@@@@g9- ^4@YM@@g@! /: \n >,_ ! 5$@E@@@@@$@$@@$$@@$@B\"p_* . 0$W# ' \n v$g , / @@@@@@@@@@@@@@@@@@@@$N$j.$_ ,*=X@_ y \n /a&yE)awgBw_M4@$@@@@@@@@$@@@$@$@@@@NK$$_'veMr^Z$Q` \n #$N$$N@@MP M3L9$@@$@@$@@@$@@@@@@@@@@@M@$0~ `\"^ \n #Z@$@$$^ 4y@@@M@@@@@$B@@@@@$@$Rg@R$@@yM \\\\ \n K~@RBs`w_,j$F@@$Eg$@@@R@@@$$@@@@B@@6@@$$(, .qWe \n x#W$$@$@@@$i$@@@@$$@@@@g@$@@$@@@@@@$5@B@Z0@ K{. \n \\eM$A@$$$@@@$$@@@R@@@@@R$@$$$@@@9A$$$gBy_aa\\ \" \n o7k@0BREA@@@@$$@@@$@$@@$$R$$W$@@@@$$g@P@b} \n '83yFBA@$$M@$@R@$$@#R$@$@@$$$@@R@$g#bQH' \n ^!w_'V@$@@Bg$$F@dM5$$@@@R$Z$@$@@@E/!' \n =>fmMWEPSZM5RB5@A@B0$Ba$0$T\\A+(~ \n ^ ^#~fAIf@@@h$M5p@JEkX^F'' \n `' `P^@degNB+M?P\" \n \n \n"
387
+ },
388
+ {
389
+ index: 28,
390
+ distance_km: 403437.1,
391
+ libration_elat: 5.803,
392
+ libration_elon: 2.179,
393
+ ascii: " \n \n . ; . . \n . , >; =_z/r_ `^r- \n .:=~ ~d@ywgyg_Ll]-1 , \n >^ yg$$@4@@JWTg$9Gx\"; \n gm&@M~~~#?\"EW_k@yG' \n . ,+;_ r x ,Lym@R@s' $@g$@Ay?#._ \n ~`<_ +gzwsAsAgs@@$z$* i N$$6R@$@/_. \n ysGyBE@@@@@$@@$@$@Byw_r MDRBB@@^^\"t, \n u$@@y@@@@$@@@@@@@@@5@$$F~^.+'' ABg( `- \n . #P$@@@@$@@@@@@@@$@@@$@$L,w\" ; _-fR1 > \n Ae ~~@E@$@@@@@@@@@@@@@@@@$LmmyEZY uz&\\\"H*X~ \n .N^ - JD@$@$@@@@@@$@$@@@@@@@$@$$M@WZ ^^X \n tzg _J rT$@@@@@@@@@@@@@@@@@$@@@@$0$$R_ ^C \n v%W4g~e$$@@[E=L$B@@@@@@$@$@$@@@$@$E$@@$$BRP_ ym/ \n ^y@$$N@@@~~ 'fE$@@@$@@@@@$$$@@@B@$@B@@@@@@$@Wi G\"+ \n Kf$$@$9$_! q$@@@@$@@@@@@@@$@@@@@@@@@@g@BXgy2${z \n !t2@eQ0gggN@@@R$B@$$@@@@$$@@@@@@@$@$$$$gA$A$gEm| \n `@k2W$@@@R$@Bs@@@$@$@@@@@@@R@@$@$@@@BgW@@@R2{\" \n T3za@@0$$$$@$$@$E$@$@$@$0W@@@$@$$$R$ZR@B@Fs~ \n `zRMy$@@0@@@$@@@E@@@@EhM@@@@@$2p@5gW$~~\" \n `^?&$W@5Q0m@@@@$@$@@$$$3$k@@@$PGR$F~ \n `]U_#x$2$@$Iy$@k0M5F@@kY@%mr~^~' \n \"k?RK@F4@$&Gg$RMF4C@XV? \n ` '^-~'~'7MA*Z%T~~ \n \n \n"
394
+ },
395
+ {
396
+ index: 29,
397
+ distance_km: 403723.3,
398
+ libration_elat: -1.613,
399
+ libration_elon: 1.645,
400
+ ascii: " \n \n .. : ;-. \n +y__ Jv/ , {! .. \n _W~ ` ''YIg>*g,.,,{<. \n J\" ug@@@@0@fvN2R_, \n R@@$@R$@$5M#WhE. ; \n x04s* ^l __ :_, 4$g@$' `P\\^fPjAbyK}. \n 2_>iWayKQysg$@$@$#@ R$@ZAW05_ \n $@KZ@@B@@@@@@@$@R$w / v@@$@@5@x^ \n ._ g$@@@@@@@@@@W@@@$@@@gy4} <g9@MMMZXR^. \n |$ ~B$@@@@@@@@@@@@@$@@D$@@@~\" : ~ #S@k \"! \n jTg, ~4@@$@@@@@@@$@@@@@$@@g,z \" J~$w \n ty%* ' 14@@$@@@@@@@@@@@@@@@$@KmYx*_u wm'%xuU \n \\RA$x*Y_vygy-JF@@@@@@@@@@@@@@@@@$@@$by@WRmk^ 7N \n ^@$@@@@@@B@TJ-$y@@@@@@@@@@@@@@@@@D@@@@B#@Y\\ : \n 1W$#R$@@P . 7Hg@$@@@@B@@@$@@@$@$@B@$@K$@$*_ .GK \n Y&2AMBgEi_._zgR$@@@$@@@$@$@@@$@$@@@@@@@@$@$g+ R~ \n ?y2#MMW$@$$@BB$@@@@@$@@@@$@@@@$@B@$@$@gP$@~yy_': \n =Wg@$@$@$$@B@B@@R@@@@@$$@$$$@@R$@$@$@@@$@R0@'< \n ~%|A#Z$$@@2@@@@@$@@@@g@@0@@@$M@@@@R$@0@$@@U` \n ~=Zy$$@@B$$$#@0B$$@$@R@$@@@@B@@R@@$ByZY~ \n \"V~15P{24@0$@$@@R$Q@mBm0@@@g%8@B6M^~` \n oFe$9Z52g$$$5EE#M$@@RKRVRmVY \n ' \"Aw9@R4g$M$g$$$@9yjC~`~ \n ' ^!`!~P%$%s-fr\"`~ \n \n \n"
401
+ },
402
+ {
403
+ index: 30,
404
+ distance_km: 404313.4,
405
+ libration_elat: -5.652,
406
+ libration_elon: 1.402,
407
+ ascii: ' \n \n +. - _ \n ,-m1_yz_.l~ !]~J \n _$#` "` "r|kz__L ` : \n ^ ` .X@@$mWgy.ym?. \n y_ , ug@@$H2g@R{MYW*r \n +=hP# ft ._,. _ "$$@$=~4@YByB?sHx \n , .$K@VKyy$ssg@$a$$@@$T `` Zsi#R$64 \n ^, -@@$2@$$@$@@@@g@@@$E . 7g@zag@/> \n em" .s@@@@@@@@@@$$B$$@E@@$y:u) /$@m$B@$X\' \n 3nM; t@@@@@@@$@@@@@@@@@@@@gQw {0~~$B#M"\'_ \n dtyk ^$@@@@@@@@@$B@B@$@@@@E -/ ` M4E$ ~ \n @mHA_ . r @@@@@@@@@@@@$@@@@$@@@>" uX@ \n K@3B@$y-$g$g.{A$@@@@@@@@@@@@@@@@@@@$@ D$E _ <~@e( \n &Q$BBR#$@R== \\BW@@@@@@@@@@@@@$@@@$@$$$$$@$E # \n z8M0M@@@E R@$$@@$@@@@$@@@@$@@@@$@@M4R5r -` \n ?MBys$@$a_;wZ@@@@$$$@@@@@$$@$@$$@@$@R$@$$X< *# \n tX)A@@$@$@$@W@@$@$$@$@@@$@$@@$$$$$@@$d$P6R@F r" \n ^AK@$A$$$gA@@R@@@@@$@@@D@$@@@@$@$QMZ@$@7e_am \n ~b8kB$$BRB@@$$@@@B@@$g@@g$$@$$$$H$$$W$MMs( \n `"?4@@K4@g$@$@$@W$@$@@$g@$@$gB@@s@W$&@2l? \n `0}3y_`M$@$$@$$BPd@50@@@@@@@$@@@TWT\' \n ^z"4R$JBR_$5aR?@@2$@$@HBMA0#BF^ \n `^ FTT"$A#$RW$Z$y=Y%1@ \' \' \n \'~~A\'FZ7I0~7?^^\' \n \n \n'
408
+ },
409
+ {
410
+ index: 31,
411
+ distance_km: 404638.4,
412
+ libration_elat: 2.826,
413
+ libration_elon: 0.232,
414
+ ascii: " \n \n . . >r - \n ._:z m;-y., = . \n n\\F` ^ `'3ggLtg$ p w5,r \n ` jygM@Ea@GWyYMZ$_ i \n M@E$$R`4@Z@dM^$RxI': \n _qN$ \"_ . __pA@@$F `` a#92@@&8K? \n `L- jyggSss_$B@@@D$ ^ @$$$$@$gC \n ;@m_dR@@$@@@$@$$@@0yr R ;1@$@@@V3~?< \n _0@@$@@@@@@@$@@@$$@@$g@$>+ Mt\" z@@0~ , \n .j t@$@@@@@@@@@@@@$@$@@@$@m _4^. .~~@@_ ' \n </ . ~@M$@@@@@@@@@@@@@@$@@$M$-xw,, '1J~#>,=| \n +_' 1$@@$$@@@@@@@@@@@@@@$@@M$a@gu$Y ~TV\" \n >Z@__, __y' r~@@@@@@@@@@@@@@@@@@@@@$$@$@HL ` \n h4N@@JM$@$E^ ty@@@$@@@@@@@@@@@@@$@@@@@@@@R{ ,`( \n \"R#B@$$$F` '@@$@@$@@@@@@@@@@@@@$@#@@$@B@W7gy {Y, \n A$T@$$2- -gK$$$@@@@@@@@@@$@@$@@@@@@$@@IRF4yU~: \n tdaN$@$@ym@&@@@@@@@$@$@@@0$@$$W@$@@@R@6$g@BD/+' \n \" V8PMRB@@$@@@B@$@@@$@@$$@@@@$$@E@$R$Kb$A0s$W/ \n ~wX@@MB$B@A@B@B@@M$Bg@$$@@@B@@@R@@@$B#B@MM\"' \n 'Js$d@$$@$@@%$@$@@@$@$@$$@@$$R@9$MBMG#!' \n ~4MR+e~Tb@@@@@@@$@@a@@R$@@9$m$Qm[Xn \n `!~E6$5gM5W_RW@@@R$ER@b0bCs\"Q~ \n `~-'UR?@9@-ER$@@5g2_wuhX - \n 'FFF'\"Z\"@MGR^^'` \n \n \n"
415
+ }
416
+ ]
417
+ };
418
+ }
419
+ });
420
+
421
+ // src/render/renderer.ts
422
+ function asciiMoonDim(asciiArt) {
423
+ const lines = asciiArt.split("\n");
424
+ let minX = Infinity;
425
+ let maxX = -Infinity;
426
+ let minY = Infinity;
427
+ let maxY = -Infinity;
428
+ lines.forEach((line, y) => {
429
+ const firstNonSpace = line.search(/\S/);
430
+ if (firstNonSpace !== -1) {
431
+ const lastNonSpace = line.search(/\s+$/);
432
+ minX = Math.min(minX, firstNonSpace);
433
+ maxX = Math.max(maxX, lastNonSpace === -1 ? line.length - 1 : lastNonSpace - 1);
434
+ if (minY === Infinity) minY = y;
435
+ maxY = y;
436
+ }
437
+ });
438
+ if (minX === Infinity) {
439
+ return {
440
+ width: FRAME_W,
441
+ height: FRAME_H,
442
+ centerX: Math.floor(FRAME_W / 2),
443
+ centerY: Math.floor(FRAME_H / 2)
444
+ };
445
+ }
446
+ const width = maxX - minX + 1;
447
+ const height = maxY - minY + 1;
448
+ return {
449
+ width,
450
+ height,
451
+ centerX: minX + Math.floor(width / 2),
452
+ centerY: minY + Math.floor(height / 2)
453
+ };
454
+ }
455
+ function clamp(v, lo, hi) {
456
+ return Math.min(hi, Math.max(lo, v));
457
+ }
458
+ function rad(d) {
459
+ return d * Math.PI / 180;
460
+ }
461
+ function phaseSunVector(phaseAngleDeg, isWaxing, elatDeg = 0) {
462
+ const a = rad(phaseAngleDeg);
463
+ const elat = rad(elatDeg);
464
+ const sign = isWaxing ? 1 : -1;
465
+ const sx = sign * Math.sin(a);
466
+ let sy = 0;
467
+ let sz = Math.cos(a);
468
+ const sy1 = -sz * Math.sin(elat);
469
+ const sz1 = sz * Math.cos(elat);
470
+ sy = sy1;
471
+ sz = sz1;
472
+ const mag = Math.sqrt(sx * sx + sy * sy + sz * sz);
473
+ return {
474
+ sx: sx / mag,
475
+ sy: sy / mag,
476
+ sz: sz / mag
477
+ };
478
+ }
479
+ function litIntensity(xn, yn, sx, sy, sz) {
480
+ const dx = 1 / FRAME_W;
481
+ const dy = 1 / FRAME_H;
482
+ const offsets = [-0.5, -0.25, 0, 0.25, 0.5];
483
+ let total = 0;
484
+ let samples = 0;
485
+ for (const ox of offsets) {
486
+ for (const oy of offsets) {
487
+ const x = xn + ox * dx;
488
+ const y = yn + oy * dy;
489
+ const rsq = x * x + y * y;
490
+ if (rsq > 1) continue;
491
+ const nz = Math.sqrt(Math.max(0, 1 - rsq));
492
+ const dot = x * sx + y * sy + nz * sz;
493
+ total += Math.max(0, dot);
494
+ samples++;
495
+ }
496
+ }
497
+ if (samples === 0) return 0;
498
+ return total / samples;
499
+ }
500
+ function findNearestMoonState(state) {
501
+ const DISTANCE_WEIGHT = 1;
502
+ const LIBRATION_WEIGHT = 1e4;
503
+ let bestIndex = 0;
504
+ let bestDistance = Infinity;
505
+ for (let i = 0; i < ascii_default.moons.length; i++) {
506
+ const moon = ascii_default.moons[i];
507
+ const distDiff = Math.abs(moon.distance_km - state.size.distanceKm) * DISTANCE_WEIGHT;
508
+ const elatDiff = Math.abs(moon.libration_elat - state.libration.elat) * LIBRATION_WEIGHT;
509
+ const elonDiff = Math.abs(moon.libration_elon - state.libration.elon) * LIBRATION_WEIGHT;
510
+ const totalDiff = distDiff + elatDiff + elonDiff;
511
+ if (totalDiff < bestDistance) {
512
+ bestDistance = totalDiff;
513
+ bestIndex = i;
514
+ }
515
+ }
516
+ return ascii_default.moons[bestIndex];
517
+ }
518
+ function renderMoon(state, _options = {}) {
519
+ const nearestMoon = findNearestMoonState(state);
520
+ const asciiLines = nearestMoon.ascii.split("\n");
521
+ const dim = asciiMoonDim(nearestMoon.ascii);
522
+ const { sx, sy, sz } = phaseSunVector(
523
+ state.phase.phaseAngleDeg,
524
+ state.phase.isWaxing,
525
+ state.libration.elat
526
+ );
527
+ const intens = Array.from({ length: FRAME_H }, () => Array(FRAME_W).fill(0));
528
+ const rawInc = Array.from({ length: FRAME_H }, () => Array(FRAME_W).fill(-1));
529
+ const inDisc = Array.from({ length: FRAME_H }, () => Array(FRAME_W).fill(false));
530
+ let discCells = 0;
531
+ let litCells = 0;
532
+ for (let iy = 0; iy < FRAME_H; iy++) {
533
+ for (let ix = 0; ix < FRAME_W; ix++) {
534
+ const moonX = ix - dim.centerX;
535
+ const moonY = iy - dim.centerY;
536
+ const xn = moonX / (dim.width / 2);
537
+ const yn = moonY / (dim.height / 2);
538
+ const r2 = xn * xn + yn * yn;
539
+ if (r2 > 1) {
540
+ intens[iy][ix] = 0;
541
+ rawInc[iy][ix] = -1;
542
+ continue;
543
+ }
544
+ inDisc[iy][ix] = true;
545
+ discCells++;
546
+ const I = litIntensity(xn, yn, sx, sy, sz);
547
+ intens[iy][ix] = I;
548
+ if (I > 0) litCells++;
549
+ const nz = Math.sqrt(Math.max(0, 1 - r2));
550
+ rawInc[iy][ix] = xn * sx + yn * sy + nz * sz;
551
+ }
552
+ }
553
+ const litMask = Array.from({ length: FRAME_H }, () => Array(FRAME_W).fill(false));
554
+ if (litCells > 0) {
555
+ for (let iy = 0; iy < FRAME_H; iy++) {
556
+ for (let ix = 0; ix < FRAME_W; ix++) {
557
+ litMask[iy][ix] = intens[iy][ix] > 0;
558
+ }
559
+ }
560
+ } else {
561
+ const frac = clamp(state.phase.illuminatedFraction ?? 0, 0, 1);
562
+ const target = Math.max(1, Math.round(frac * discCells));
563
+ const candidates = [];
564
+ for (let iy = 0; iy < FRAME_H; iy++) {
565
+ for (let ix = 0; ix < FRAME_W; ix++) {
566
+ if (!inDisc[iy][ix]) continue;
567
+ candidates.push({ ix, iy, v: rawInc[iy][ix] });
568
+ }
569
+ }
570
+ candidates.sort((a, b) => b.v - a.v);
571
+ for (let k = 0; k < Math.min(target, candidates.length); k++) {
572
+ const { ix, iy } = candidates[k];
573
+ litMask[iy][ix] = true;
574
+ }
575
+ }
576
+ const out = [];
577
+ for (let iy = 0; iy < FRAME_H; iy++) {
578
+ let row = "";
579
+ const src = asciiLines[iy] ?? "";
580
+ for (let ix = 0; ix < FRAME_W; ix++) {
581
+ if (litMask[iy][ix]) {
582
+ row += src[ix] ?? " ";
583
+ } else {
584
+ row += " ";
585
+ }
586
+ }
587
+ out.push(row);
588
+ }
589
+ return out.join("\n");
590
+ }
591
+ var FRAME_W, FRAME_H;
592
+ var init_renderer = __esm({
593
+ "src/render/renderer.ts"() {
594
+ "use strict";
595
+ init_ascii();
596
+ FRAME_W = 60;
597
+ FRAME_H = 29;
598
+ }
599
+ });
600
+
601
+ // src/index.ts
602
+ var index_exports = {};
603
+ __export(index_exports, {
604
+ getMoonState: () => getMoonState,
605
+ renderMoon: () => renderMoon
606
+ });
607
+ var init_index = __esm({
608
+ "src/index.ts"() {
609
+ "use strict";
610
+ init_astronomy();
611
+ init_renderer();
612
+ }
613
+ });
614
+
615
+ // src/cli.ts
616
+ var { getMoonState: getMoonState2, renderMoon: renderMoon2 } = (init_index(), __toCommonJS(index_exports));
617
+ function main() {
618
+ const args = process.argv.slice(2);
619
+ const dateArg = args[0];
620
+ let date;
621
+ if (dateArg) {
622
+ const parsedDate = new Date(dateArg);
623
+ if (isNaN(parsedDate.getTime())) {
624
+ console.error(`Invalid date format: ${dateArg}`);
625
+ console.error("Please use format: YYYY-MM-DD (e.g., 2025-01-01)");
626
+ process.exit(1);
627
+ }
628
+ date = parsedDate;
629
+ } else {
630
+ date = /* @__PURE__ */ new Date();
631
+ }
632
+ try {
633
+ const moonState = getMoonState2(date);
634
+ const asciiMoon = renderMoon2(moonState);
635
+ console.log(asciiMoon);
636
+ } catch (error) {
637
+ console.error("Error rendering moon:", error);
638
+ process.exit(1);
639
+ }
640
+ }
641
+ if (require.main === module) {
642
+ main();
643
+ }
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "ascii-side-of-the-moon",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "Tiny Moon phase/size/libration + Unicode terminal renderer. Zero runtime deps; dev-only almanac generated with astronomy-engine.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.mjs",
8
8
  "types": "./dist/index.d.ts",
9
+ "bin": {
10
+ "ascii-side-of-the-moon": "./dist/cli.cjs"
11
+ },
9
12
  "exports": {
10
13
  ".": {
11
14
  "import": "./dist/index.mjs",