astronomy-oracle 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +142 -0
  3. package/data/NGC.csv +13970 -0
  4. package/data/addendum.csv +65 -0
  5. package/dist/astro/coordinates.d.ts +20 -0
  6. package/dist/astro/coordinates.d.ts.map +1 -0
  7. package/dist/astro/coordinates.js +45 -0
  8. package/dist/astro/coordinates.js.map +1 -0
  9. package/dist/astro/time.d.ts +20 -0
  10. package/dist/astro/time.d.ts.map +1 -0
  11. package/dist/astro/time.js +53 -0
  12. package/dist/astro/time.js.map +1 -0
  13. package/dist/astro/visibility.d.ts +25 -0
  14. package/dist/astro/visibility.d.ts.map +1 -0
  15. package/dist/astro/visibility.js +119 -0
  16. package/dist/astro/visibility.js.map +1 -0
  17. package/dist/data/catalog.d.ts +20 -0
  18. package/dist/data/catalog.d.ts.map +1 -0
  19. package/dist/data/catalog.js +127 -0
  20. package/dist/data/catalog.js.map +1 -0
  21. package/dist/data/parse-coordinates.d.ts +13 -0
  22. package/dist/data/parse-coordinates.d.ts.map +1 -0
  23. package/dist/data/parse-coordinates.js +39 -0
  24. package/dist/data/parse-coordinates.js.map +1 -0
  25. package/dist/format.d.ts +20 -0
  26. package/dist/format.d.ts.map +1 -0
  27. package/dist/format.js +204 -0
  28. package/dist/format.js.map +1 -0
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +21 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/lib/search.d.ts +11 -0
  34. package/dist/lib/search.d.ts.map +1 -0
  35. package/dist/lib/search.js +21 -0
  36. package/dist/lib/search.js.map +1 -0
  37. package/dist/register-tools.d.ts +6 -0
  38. package/dist/register-tools.d.ts.map +1 -0
  39. package/dist/register-tools.js +12 -0
  40. package/dist/register-tools.js.map +1 -0
  41. package/dist/server.d.ts +6 -0
  42. package/dist/server.d.ts.map +1 -0
  43. package/dist/server.js +14 -0
  44. package/dist/server.js.map +1 -0
  45. package/dist/tools/lookup-object.d.ts +6 -0
  46. package/dist/tools/lookup-object.d.ts.map +1 -0
  47. package/dist/tools/lookup-object.js +82 -0
  48. package/dist/tools/lookup-object.js.map +1 -0
  49. package/dist/tools/plan-session.d.ts +6 -0
  50. package/dist/tools/plan-session.d.ts.map +1 -0
  51. package/dist/tools/plan-session.js +118 -0
  52. package/dist/tools/plan-session.js.map +1 -0
  53. package/dist/tools/search-objects.d.ts +6 -0
  54. package/dist/tools/search-objects.d.ts.map +1 -0
  55. package/dist/tools/search-objects.js +108 -0
  56. package/dist/tools/search-objects.js.map +1 -0
  57. package/dist/types.d.ts +72 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/types.js +28 -0
  60. package/dist/types.js.map +1 -0
  61. package/package.json +43 -0
@@ -0,0 +1,65 @@
1
+ Name;Type;RA;Dec;Const;MajAx;MinAx;PosAng;B-Mag;V-Mag;J-Mag;H-Mag;K-Mag;SurfBr;Hubble;Pax;Pm-RA;Pm-Dec;RadVel;Redshift;Cstar U-Mag;Cstar B-Mag;Cstar V-Mag;M;NGC;IC;Cstar Names;Identifiers;Common names;NED notes;OpenNGC notes;Sources
2
+ B033;DrkN;05:40:59.0;-02:27:30;Ori;6.00;4.00;90;;;;;;;;;;;;;;;;;;;;;Horsehead Nebula;;;Type:2|RA:2|Dec:2|Const:99|MajAx:2|MinAx:2|PosAng:2
3
+ C009;HII;22:57:54.0;+62:31:06;Cep;50.00;30.00;;;;;;;;;;;;;;;;;;;;;LBN 529,SH 2-155;Cave Nebula;;;Type:2|RA:2|Dec:2|Const:99|MajAx:9|MinAx:9
4
+ C014;*Ass;02:20:42.0;+57:08:15;Per;50.00;50.00;;;;;;;;;;;;;;;;;;;;;;Double Cluster,h & chi Persei;;;Type:99|RA:99|Dec:99|Const:99|MajAx:99|MinAx:99
5
+ C041;OCl;04:26:54.0;+15:52:00;Tau;329.00;;;;;;;;;;;104.920;-28.000;40;0.000133;;;;;;;;Cl 050,Mel 025;Hyades;;;Type:2|RA:2|Dec:2|Const:99|MajAx:11|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
6
+ C099;DrkN;12:31:19.0;-63:44:36;Cru;;;;;;;;;;;;;;;;;;;;;;;;Coalsack Nebula;;;Type:2|RA:2|Dec:2|Const:99
7
+ Cl399;*Ass;19:25:24.0;+20:11:00;Vul;70.00;;;3.93;3.60;;;;;;;;;;;;;;;;;;;Brocchi's Cluster,Al Sufi's Cluster,Coathanger Asterism;;;Type:2|RA:2|Dec:2|Const:99|MajAx:99|B-Mag:2|V-Mag:2
8
+ ESO056-115;G;05:23:34.5;-69:45:22;Dor;646.00;550.00;170;0.80;0.29;;;;23.45;SBm;;1.910;0.229;262;0.000875;;;;;;;;ESO-LV 0561150,IRAS 05240-6948,PGC 017223;Large Magellanic Cloud,Nubecula Major;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
9
+ ESO097-013;G;14:13:09.95;-65:20:21.2;Cir;8.71;4.27;37;12.02;10.56;6.24;5.35;4.98;24.94;Sb;;;;434;0.001449;;;;;;;;2MASXJ 14130990-6520204,ESO-LV 0970130, IRAS 14092-6506,PGC 050779;Circinus Galaxy;Within 10 degrees of the galactic plane.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
10
+ ESO107-004;G;21:03:29.62;-67:10:52.8;Pav;2.14;1.74;135;12.89;11.97;10.07;9.41;9.11;23.38;E;0.2301;-0.089;0.065;3166;0.010617;;;;;;;;2MASX J21032958-6710528,ESO-LV 1070040,PGC 066000;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
11
+ ESO121-006;G;06:07:29.86;-61:48:27.3;Pic;4.17;0.79;42;10.57;12.6;10.12;9.37;8.98;21.11;Sc;;;;1203;0.004020;;;;;;;;2MASX J06072985-6148272,ESO-LV 1210060,IRAS 06070-6147,PGC 018437;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
12
+ ESO121-026;G;06:21:38.75;-59:44:23.7;Pic;2.40;1.78;113;12.58;11.94;9.90;9.25;9.01;22.99;SBbc;0.8216;1.852;-2.222;2274;0.007615;;;;;;;;2MASX J06213875-5944236,ESO-LV 1210260,IRAS 06210-5942,PGC 018880;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
13
+ ESO138-010;G;16:59:02.95;-60:12:57.7;Ara;5.50;3.98;56;11.68;11.42;9.08;8.48;8.21;23.85;Sd;;;;1147;0.003833;;;;;;;;2MASX J16590295-6012576,ESO-LV 1380100,IRAS 16545-6008,PGC 059373;;Extended HIPASS source.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
14
+ ESO142-019;G;19:33:18.96;-58:06:51.3;Pav;2.45;1.05;161;13.15;11.93;9.96;9.10;8.85;23.32;Sab;;;;4374;0.014697;;;;;;;;2MASX J19331895-5806513,ESO-LV 1420190,PGC 063351;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
15
+ ESO183-030;G;18:56:55.94;-54:32:43.6;Tel;2.34;1.95;25;12.62;11.67;9.21;8.53;8.33;23.19;E-S0;;;;2694;0.009026;;;;;;;;2MASX J18565595-5432435,ESO-LV 1830300,PGC 062600;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
16
+ ESO185-054;G;20:03:27.03;-55:56:49.8;Tel;2.09;0.87;131;12.11;11.24;8.87;8.19;7.93;22.52;E;;;;4379;0.014714;;;;;;;;2MASX J20032702-5556498,ESO-LV 1850540,PGC 064041;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
17
+ ESO208-021;G;07:33:56.25;-50:26:34.9;Pup;3.80;2.75;109;12.17;11.22;8.84;8.13;7.88;23.81;E-S0;;;;1049;0.003506;;;;;;;;2MASX J07335622-5026345,ESO-LV 2080210,PGC 021293;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
18
+ ESO213-011;G;10:16:55.52;-48:52:51.9;Vel;3.55;2.09;10;12.24;11.87;9.61;9.04;8.63;23.27;Sc;;;;2738;0.009174;;;;;;;;2MASX J10165552-4852518,IRAS 10149-4837,PGC 030022;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
19
+ ESO221-026;G;14:08:23.81;-47:58:13.7;Cen;3.16;2.19;0;12.07;11.06;8.49;7.80;7.54;23.42;E;0.0222;-0.042;0.295;1416;0.004734;;;;;;;;2MASX J14082374-4758149,ESO-LV 2210260,PGC 050448;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
20
+ ESO265-007;G;11:07:49.57;-46:31:27.5;Cen;4.68;1.26;143;12.34;11.38;9.33;8.66;8.39;23.35;SBc;;;;1068;0.003567;;;;;;;;2MASX J11074847-4631334,ESO-LV 265-0070,IRAS 11055-4615,PGC 033705;;RC3 gives V = 1640 +- 60 km/sec.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
21
+ ESO269-057;G;13:10:04.43;-46:26:14.4;Cen;3.71;2.14;47;12.51;11.86;9.82;9.10;8.78;23.76;SABa;;;;3103;0.010406;;;;;;;;2MASX J13100442-4626143,ESO-LV 269-0570,PGC 045683;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
22
+ ESO270-017;G;13:34:47.30;-45:32:51.0;Cen;11.48;1.45;111;11.76;11.72;;;;24.00;SBm;;;;827;0.002764;;;;;;;;ESO-LV 2700170,IRAS 13317-4517,MCG-07-28-004,PGC 047847;Fourcade-Figueroa;Extended HIPASS source.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
23
+ ESO273-014;G;14:58:30.37;-47:41:56.2;Lup;4.79;3.55;89;12.89;11.96;10.73;10.42;9.79;24.77;IB;;;;1050;0.003509;;;;;;;;2MASX J14583037-4741561,IRAS 14550-4730,PGC 053500;;Two entries for this object in the ESO/Uppsala Catalogue.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
24
+ ESO274-001;G;15:14:13.84;-46:48:28.6;Lup;9.77;1.55;39;11.72;11.19;8.93;8.42;8.36;23.86;Scd;;;;524;0.001751;;;;;;;;2MASX J15141342-4648331,ESO-LV 2740010,IRAS 15108-4637,PGC 054392;;The 2MASX position is centered on two knots southwest of the center.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
25
+ ESO311-012;G;07:47:34.05;-41:27:07.7;Pup;4.37;0.72;15;12.78;11.83;8.92;8.11;7.88;24.36;S0-a;;;;1128;0.003769;;;;;;;;2MASX J07473405-4127077,ESO-LV 3110120,MCG-07-16-001,PGC 021815;;|b| < 10 degrees.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
26
+ ESO351-030;G;01:00:09.35;-33:42:32.5;Scl;15.26;15.26;99;10.37;8.60;;;5.98;19.51;E;;0.090;0.020;111;0.000372;;;;;;;;ESO-LV 3510300,MCG-06-03-015,PGC 003589;Sculptor Dwarf Elliptical;;;Type:1|RA:1|Dec:1|Const:99|MajAx:2|MinAx:2|PosAng:3|B-Mag:3|V-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
27
+ ESO356-004;G;02:39:59.33;-34:26:57.1;For;12.88;10.47;48;9.03;7.40;;;6.62;23.42;E;;0.476;-0.360;55;0.000184;;;;;;;;ESO-LV 3560040,MCG-06-07-001,PGC 010074,PGC 010093;Fornax Dwarf Spheroidal;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|K-Mag:2|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
28
+ ESO358-063;G;03:46:19.01;-34:56:36.8;For;4.27;1.26;132;12.61;11.89;10.18;9.44;9.14;23.44;Scd;;;;1943;0.006502;;;;;;;;2MASX J03461900-3456368,ESO-LV 3580630,IRAS 03444-3505,MCG-06-09-030,PGC 013809;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
29
+ ESO373-008;G;09:33:21.51;-33:02:00.6;Ant;3.72;0.98;90;12.71;11.93;9.86;9.21;8.88;23.17;Sc;;;;922;0.003079;;;;;;;;2MASX J09332150-3302006,IRAS 09312-3248,MCG-05-23-006,PGC 027135;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
30
+ ESO380-001;G;12:14:45.12;-35:30:35.3;Hya;2.14;1.62;18;12.89;11.89;9.67;8.97;8.75;23.09;Sb;;;;2707;0.009069;;;;;;;;2MASX J12144510-3530352,ESO-LV 3800010,IRAS 12121-3513,MCG-06-27-009,PGC 039125;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
31
+ ESO380-006;G;12:15:34.27;-35:37:47.1;Hya;3.63;1.62;79;12.60;11.54;9.13;8.43;8.16;23.57;Sb;;;;3133;0.010504;;;;;;;;2MASX J12153426-3537470,ESO-LV 3800060,IRAS 12129-3521,MCG-06-27-011,PGC 039212;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
32
+ ESO383-087;G;13:49:17.50;-36:03:48.4;Cen;4.27;3.31;86;11.29;10.91;10.63;9.99;9.88;22.97;Sd;1.2763;-2.300;0.266;333;0.001110;;;;;;;;2MASX J13491749-3603483,ESO-LV 3830870,IRAS 13463-3548,MCG-06-30-025,PGC 049050;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
33
+ ESO390-006;GCl;16:28:40.10;-35:21:13.0;Sco;5.40;;;;12.00;;;;;;0.1330;-5.577;-1.760;-135.7;-0.000453;;;;;;;;MWSC 2414;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
34
+ ESO428-011;G;07:15:31.28;-29:21:32.5;CMa;1.82;1.38;23;12.94;11.89;9.62;8.90;8.64;22.97;E-S0;;;;2115;0.007080;;;;;;;;2MASX J07153127-2921324,ESO-LV 4280110,MCG-05-18-001,PGC 020514;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
35
+ ESO443-024;G;13:01:00.79;-32:26:28.7;Cen;2.34;2.00;166;12.91;11.84;9.48;8.77;8.51;23.49;E-S0;;;;5016;0.016874;;;;;;;;2MASX J13010079-3226289,ESO-LV 4430240,MCG-05-31-012,PGC 044852;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
36
+ ESO462-015;G;20:23:13.84;-27:42:52.4;Sgr;2.14;1.74;166;12.95;11.92;9.80;9.10;8.81;23.48;E;;;;5741;0.019337;;;;;;;;2MASX J20231383-2742525,ESO-LV 4620150,MCG-05-48-009,PGC 064584;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
37
+ ESO494-026;G;08:06:11.09;-27:31:42.3;Pup;4.07;2.69;146;12.45;11.51;8.91;8.21;7.88;23.93;SABb;;;;964;0.003221;;;;;;;;2MASX J08061109-2731422,ESO-LV 4940260,IRAS 08041-2723,PGC 022746;;|b| < 10 degrees.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
38
+ ESO495-021;G;08:36:15.13;-26:24:33.8;Pyx;1.95;1.41;136;12.46;11.83;9.88;9.27;9.00;22.66;E-S0;;;;880;0.002941;;;;;;;;2MASX J08361519-2624336,ESO-LV 4950210,IRAS 08341-2614,MCG-04-21-005,PGC 024171;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
39
+ ESO507-025;G;12:51:31.84;-26:27:07.5;Hya;2.63;2.14;98;12.61;11.60;9.27;8.59;8.31;23.45;E-S0;;;;3237;0.010855;;;;;;;;2MASX J12513184-2627077,ESO-LV 5070250,MCG-04-30-029,PGC 043557;;Extended HIPASS source.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
40
+ ESO556-015;G;06:21:05.56;-20:02:54.3;CMa;2.57;2.19;130;12.62;11.83;9.86;9.18;8.84;23.31;SBab;;;;1980;0.006625;;;;;;;;2MASX J06210556-2002543,ESO-LV 5560150,IRAS 06189-2001,MCG-03-17-002,PGC 018858,UGCA 128;;Extended HIPASS source.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
41
+ H05;OCl;12:27:16.0;-60:46:42;Cru;6.00;;;7.39;7.10;;;;;;0.7640;-7.051;-0.288;-14;-0.000048;;;;;;;;Cl 258,MWSC 2033;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|B-Mag:2|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
42
+ H13;OCl;17:03:51.0;-48:05:00;Ara;4.50;;;;;;;;;;0.8070;-2.766;-7.190;-4;-0.000014;;;;;;;;MWSC 2523;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
43
+ H20;OCl;19:53:06.0;+18:20:00;Sge;5.10;;;8.40;7.70;;;;;;0.4610;-1.732;-4.447;6;0.000021;;;;;;;;Cl 408,MWSC 3198;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|B-Mag:2|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
44
+ H21;OCl;23:54:13.2;+61:44:24;Cas;1.80;;;;9.00;;;;;;;0.050;-3.470;;;;;;;;;;MWSC 3774;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:2|Pm-RA:2|Pm-Dec:2
45
+ HCG079;GGroup;15:59:11.9;+20:45:31;Se1;2.80;;;;;;;;;;;;;4256;0.014300;;;;;;;;IRAS 15570+2053;Seyfert's Sextet;;;Type:1|RA:1|Dec:1|Const:99|MajAx:99|RadVel:2|Redshift:2
46
+ HCG092;GGroup;22:35:59.0;+33:57:30;Peg;4.40;;;;;;;;;;;;;6376;0.021500;;;;;;;;IRAS 22337+3342;Stephan's Quintet;Contains the GPair NGC 7318.;;Type:1|RA:1|Dec:1|Const:99|MajAx:99|RadVel:2|Redshift:2
47
+ M040;**;12:22:16.1;+58:05:04;UMa;;;;;8.00;;;;;;;;;;;;;;040;;;;WDS J12222+5805AB;;;;Type:1|RA:1|Dec:1|Const:99|V-Mag:10
48
+ M102;Dup;14:03:12.54;+54:20:56.2;UMa;;;;;;;;;;;;;;;;;;;101;;;;;;;Identification is controversial, here we take NED assumption.;Type:1|RA:1|Dec:1|Const:99
49
+ Mel022;OCl;03:47:28.6;+24:06:19;Tau;150.00;150.00;90;;1.20;;;;;;7.3640;19.997;-45.548;7;0.000022;;;;045;;;;MWSC 0305;Pleiades;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:10|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
50
+ Mel071;OCl;07:37:33.6;-12:03:18;Pup;14.40;;;7.44;7.10;;;;;;0.4340;-2.446;4.210;50;0.000167;;;;;;;;MWSC 1287;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|B-Mag:2|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
51
+ Mel072;OCl;07:28:38.8;-10:42:00;Mon;7.50;;;;10.10;;;;;;0.3690;-4.159;3.680;72;0.000239;;;;;;;;MWSC 1293;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
52
+ Mel101;OCl;10:42:12.0;-65:06:00;Car;8.40;;;8.50;8.00;;;;;;0.4390;-6.307;3.483;20;0.000068;;;;;;;;MWSC 1840;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|B-Mag:2|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
53
+ Mel105;OCl;11:19:42.0;-63:29:00;Car;5.40;;;9.05;8.50;;;;;;0.4070;-6.771;2.133;1;0.000003;;;;;;;;MWSC 1933;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|B-Mag:2|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
54
+ Mel111;OCl;12:25:06.0;+26:06:00;Com;253.50;;;;;;;;;;11.6400;-12.111;-8.996;0;-0.000002;;;;;;;;;Coma Star Cluster;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
55
+ MWSC3156;GCl;19:41:44.41;-33:59:58.1;Sgr;3.90;;;;11.54;;;;;;0.0500;-2.440;-1.550;148;0.000494;;;;;;;;;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
56
+ MWSC3171;GCl;19:45:14.40;-08:00:26.0;Aql;5.40;;;;7.54;;;;;;0.1090;-1.766;-4.971;-68;-0.000226;;;;;;;;;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
57
+ MWSC3561;GCl;21:46:38.84;-21:15:09.4;Cap;2.70;;;;11.89;;;;;;0.0500;-3.220;-3.333;28;0.000094;;;;;;;;;;;;Type:2|RA:2|Dec:2|Const:99|MajAx:5|V-Mag:2|Pax:2|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
58
+ PGC000143;G;00:01:58.16;-15:27:39.3;Cet;10.47;3.55;5;11.04;10.76;;;;23.91;IB;;;;-130;-0.000434;;;;;;;;MCG-03-01-015,UGCA 444;Wolf-Lundmark-Melotte,WLM Galaxy;Position is for superposed star close to center.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
59
+ PGC003853;G;01:05:04.88;-06:12:44.6;Cet;4.27;3.16;57;12.42;11.69;10.15;9.67;9.33;24.03;SABc;;;;1098;0.003668;;;;;;;;2MASX J01050487-0612445,IRAS 01025-0628,MCG-01-03-085;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
60
+ PGC025886;G;09:10:49.46;-08:53:26.5;Hya;5.75;0.83;30;11.93;11.52;8.75;8.04;7.70;23.17;SABb;;;;1868;0.006250;;;;;;;;2MASX J09104945-0853265,IRAS 09083-0841,MCG-01-24-001,UGCA 150;;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
61
+ PGC029653;G;10:11:00.80;-04:41:34.0;Sex;5.25;4.47;180;12.32;11.77;;;;24.52;IB;;;;324;0.001081;;;;;;;;MCG-01-26-030,UGCA 205;Sextans A;Position in 1975A&A....19....1G refers to a starcloud southeast of the center.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|SurfBr:3|Hubble:3|RadVel:2|Redshift:2
62
+ PGC088608;G;10:13:02.9;-01:36:53.0;Sex;30.20;12.02;56;12.00;10.40;;;8.13;28.07;E-S0;;-0.260;0.100;224;0.000748;;;;;;;;;Sextans Dwarf Spheroidal;;;Type:1|RA:2|Dec:2|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|K-Mag:2|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
63
+ UGC04305;G;08:19:04.98;+70:43:12.1;UMa;7.94;5.62;15;11.16;10.75;10.09;8.92;8.80;24.08;I;;-0.246;0.735;157;0.000524;;;;;;;;2MASX J08190497+7043121,IRAS 08140+7052,MCG+12-08-033,PGC 023324,;;Position in 1999ApJS..125..409C refers to a knot east of the center.;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|J-Mag:2|H-Mag:2|K-Mag:2|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
64
+ UGC05373;G;10:00:00.10;+05:19:56.0;Sex;4.90;3.09;101;11.92;11.51;;;;23.68;IB;;-1.535;2.430;304;0.001015;;;;;;;;MCG+01-26-005,PGC 028913,SDSS J100000.82+052009.5;Sextans B;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
65
+ UGC05470;G;10:08:28.10;+12:18:23.0;Leo;11.75;8.51;81;11.16;10.36;;;7.31;25.35;E;;-0.114;-0.126;283;0.000943;;;;;;;;MCG+02-26-027,PGC 029488;Leo I;;;Type:1|RA:1|Dec:1|Const:99|MajAx:3|MinAx:3|PosAng:3|B-Mag:3|V-Mag:3|K-Mag:2|SurfBr:3|Hubble:3|Pm-RA:2|Pm-Dec:2|RadVel:2|Redshift:2
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Horizontal coordinate (Alt/Az) conversion from equatorial coordinates.
3
+ * All input/output angles in degrees.
4
+ */
5
+ /**
6
+ * Compute hour angle from local sidereal time and right ascension.
7
+ * All values in degrees. Result normalized to 0-360.
8
+ */
9
+ export declare function hourAngle(lst: number, ra: number): number;
10
+ /**
11
+ * Convert hour angle, declination, and latitude to altitude and azimuth.
12
+ * All inputs in degrees. Returns altitude and azimuth in degrees.
13
+ *
14
+ * Standard spherical trigonometry formulas.
15
+ */
16
+ export declare function altAz(ha: number, dec: number, lat: number): {
17
+ altitude: number;
18
+ azimuth: number;
19
+ };
20
+ //# sourceMappingURL=coordinates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinates.d.ts","sourceRoot":"","sources":["../../src/astro/coordinates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CACnB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAmCvC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Horizontal coordinate (Alt/Az) conversion from equatorial coordinates.
3
+ * All input/output angles in degrees.
4
+ */
5
+ const DEG_TO_RAD = Math.PI / 180;
6
+ const RAD_TO_DEG = 180 / Math.PI;
7
+ /**
8
+ * Compute hour angle from local sidereal time and right ascension.
9
+ * All values in degrees. Result normalized to 0-360.
10
+ */
11
+ export function hourAngle(lst, ra) {
12
+ return ((lst - ra) % 360 + 360) % 360;
13
+ }
14
+ /**
15
+ * Convert hour angle, declination, and latitude to altitude and azimuth.
16
+ * All inputs in degrees. Returns altitude and azimuth in degrees.
17
+ *
18
+ * Standard spherical trigonometry formulas.
19
+ */
20
+ export function altAz(ha, dec, lat) {
21
+ const haRad = ha * DEG_TO_RAD;
22
+ const decRad = dec * DEG_TO_RAD;
23
+ const latRad = lat * DEG_TO_RAD;
24
+ const sinAlt = Math.sin(decRad) * Math.sin(latRad) +
25
+ Math.cos(decRad) * Math.cos(latRad) * Math.cos(haRad);
26
+ const altitude = Math.asin(sinAlt) * RAD_TO_DEG;
27
+ const cosAlt = Math.cos(altitude * DEG_TO_RAD);
28
+ // Avoid division by zero when object is at zenith
29
+ if (cosAlt === 0 || Math.cos(latRad) === 0) {
30
+ return { altitude, azimuth: 0 };
31
+ }
32
+ let cosAz = (Math.sin(decRad) - Math.sin(latRad) * sinAlt) /
33
+ (Math.cos(latRad) * cosAlt);
34
+ // Clamp to [-1, 1] to handle floating-point errors
35
+ cosAz = Math.max(-1, Math.min(1, cosAz));
36
+ let azimuth = Math.acos(cosAz) * RAD_TO_DEG;
37
+ // If hour angle indicates object is west of meridian, flip azimuth
38
+ if (Math.sin(haRad) > 0) {
39
+ azimuth = 360 - azimuth;
40
+ }
41
+ // Normalize to [0, 360)
42
+ azimuth = ((azimuth % 360) + 360) % 360;
43
+ return { altitude, azimuth };
44
+ }
45
+ //# sourceMappingURL=coordinates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinates.js","sourceRoot":"","sources":["../../src/astro/coordinates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AACjC,MAAM,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,EAAU;IAC/C,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CACnB,EAAU,EACV,GAAW,EACX,GAAW;IAEX,MAAM,KAAK,GAAG,EAAE,GAAG,UAAU,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC;IAEhC,MAAM,MAAM,GACV,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;IAE/C,kDAAkD;IAClD,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,GACP,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QAC9C,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IAE9B,mDAAmD;IACnD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;IAE5C,mEAAmE;IACnE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,wBAAwB;IACxB,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAExC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Julian Date and Sidereal Time calculations.
3
+ * Based on Jean Meeus, "Astronomical Algorithms".
4
+ */
5
+ /**
6
+ * Convert a calendar date/time to Julian Date.
7
+ * Standard Meeus algorithm (ch. 7).
8
+ */
9
+ export declare function julianDate(date: Date): number;
10
+ /**
11
+ * Greenwich Mean Sidereal Time in degrees (0-360).
12
+ * Meeus ch. 12 formula.
13
+ */
14
+ export declare function greenwichMeanSiderealTime(jd: number): number;
15
+ /**
16
+ * Local Sidereal Time in degrees (0-360).
17
+ * LST = GMST + longitude.
18
+ */
19
+ export declare function localSiderealTime(date: Date, longitude: number): number;
20
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/astro/time.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAyB7C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAW5D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKvE"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Julian Date and Sidereal Time calculations.
3
+ * Based on Jean Meeus, "Astronomical Algorithms".
4
+ */
5
+ /**
6
+ * Convert a calendar date/time to Julian Date.
7
+ * Standard Meeus algorithm (ch. 7).
8
+ */
9
+ export function julianDate(date) {
10
+ let y = date.getUTCFullYear();
11
+ let m = date.getUTCMonth() + 1; // JS months are 0-based
12
+ const d = date.getUTCDate() +
13
+ date.getUTCHours() / 24 +
14
+ date.getUTCMinutes() / 1440 +
15
+ date.getUTCSeconds() / 86400 +
16
+ date.getUTCMilliseconds() / 86400000;
17
+ if (m <= 2) {
18
+ y -= 1;
19
+ m += 12;
20
+ }
21
+ const A = Math.floor(y / 100);
22
+ const B = 2 - A + Math.floor(A / 4);
23
+ return (Math.floor(365.25 * (y + 4716)) +
24
+ Math.floor(30.6001 * (m + 1)) +
25
+ d +
26
+ B -
27
+ 1524.5);
28
+ }
29
+ /**
30
+ * Greenwich Mean Sidereal Time in degrees (0-360).
31
+ * Meeus ch. 12 formula.
32
+ */
33
+ export function greenwichMeanSiderealTime(jd) {
34
+ const T = (jd - 2451545.0) / 36525.0;
35
+ let gmst = 280.46061837 +
36
+ 360.98564736629 * (jd - 2451545.0) +
37
+ 0.000387933 * T * T -
38
+ (T * T * T) / 38710000;
39
+ // Normalize to 0-360
40
+ gmst = ((gmst % 360) + 360) % 360;
41
+ return gmst;
42
+ }
43
+ /**
44
+ * Local Sidereal Time in degrees (0-360).
45
+ * LST = GMST + longitude.
46
+ */
47
+ export function localSiderealTime(date, longitude) {
48
+ const jd = julianDate(date);
49
+ const gmst = greenwichMeanSiderealTime(jd);
50
+ const lst = ((gmst + longitude) % 360 + 360) % 360;
51
+ return lst;
52
+ }
53
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/astro/time.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,wBAAwB;IACxD,MAAM,CAAC,GACL,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACvB,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI;QAC3B,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK;QAC5B,IAAI,CAAC,kBAAkB,EAAE,GAAG,QAAQ,CAAC;IAEvC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,CAAC,IAAI,CAAC,CAAC;QACP,CAAC,IAAI,EAAE,CAAC;IACV,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,CAAC;QACD,MAAM,CACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,EAAU;IAClD,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC;IACrC,IAAI,IAAI,GACN,YAAY;QACZ,eAAe,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;QAClC,WAAW,GAAG,CAAC,GAAG,CAAC;QACnB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAEzB,qBAAqB;IACrB,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAClC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAU,EAAE,SAAiB;IAC7D,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Rise, transit, and set time calculations for celestial objects.
3
+ * All angles in degrees unless noted otherwise.
4
+ */
5
+ import type { VisibilityInfo } from "../types.js";
6
+ /**
7
+ * Compute rise, transit, and set times for a celestial object.
8
+ *
9
+ * @param ra - Right ascension in degrees
10
+ * @param dec - Declination in degrees
11
+ * @param lat - Observer latitude in degrees (positive north)
12
+ * @param lon - Observer longitude in degrees (positive east)
13
+ * @param date - Date/time for the calculation
14
+ * @param altitudeThreshold - Minimum altitude in degrees (default 0)
15
+ * @returns VisibilityInfo with rise/transit/set times and current position
16
+ */
17
+ export declare function riseTransitSet(ra: number, dec: number, lat: number, lon: number, date: Date, altitudeThreshold?: number): VisibilityInfo;
18
+ /**
19
+ * Compute the current altitude and azimuth of a celestial object.
20
+ */
21
+ export declare function currentPosition(ra: number, dec: number, lat: number, lon: number, date: Date): {
22
+ altitude: number;
23
+ azimuth: number;
24
+ };
25
+ //# sourceMappingURL=visibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility.d.ts","sourceRoot":"","sources":["../../src/astro/visibility.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,IAAI,EACV,iBAAiB,GAAE,MAAU,GAC5B,cAAc,CAiEhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,IAAI,GACT;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAIvC"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Rise, transit, and set time calculations for celestial objects.
3
+ * All angles in degrees unless noted otherwise.
4
+ */
5
+ import { julianDate, greenwichMeanSiderealTime, localSiderealTime, } from "./time.js";
6
+ import { hourAngle, altAz } from "./coordinates.js";
7
+ const DEG_TO_RAD = Math.PI / 180;
8
+ const RAD_TO_DEG = 180 / Math.PI;
9
+ /**
10
+ * Compute rise, transit, and set times for a celestial object.
11
+ *
12
+ * @param ra - Right ascension in degrees
13
+ * @param dec - Declination in degrees
14
+ * @param lat - Observer latitude in degrees (positive north)
15
+ * @param lon - Observer longitude in degrees (positive east)
16
+ * @param date - Date/time for the calculation
17
+ * @param altitudeThreshold - Minimum altitude in degrees (default 0)
18
+ * @returns VisibilityInfo with rise/transit/set times and current position
19
+ */
20
+ export function riseTransitSet(ra, dec, lat, lon, date, altitudeThreshold = 0) {
21
+ const decRad = dec * DEG_TO_RAD;
22
+ const latRad = lat * DEG_TO_RAD;
23
+ const thresholdRad = altitudeThreshold * DEG_TO_RAD;
24
+ // Current position
25
+ const pos = currentPosition(ra, dec, lat, lon, date);
26
+ // Compute cosH0: the hour angle at rise/set
27
+ const cosH0 = (Math.sin(thresholdRad) - Math.sin(latRad) * Math.sin(decRad)) /
28
+ (Math.cos(latRad) * Math.cos(decRad));
29
+ // Circumpolar: always above threshold
30
+ if (cosH0 < -1) {
31
+ // Still compute transit time for circumpolar objects
32
+ const transitTime = computeTransitTime(ra, lon, date);
33
+ return {
34
+ altitude: pos.altitude,
35
+ azimuth: pos.azimuth,
36
+ riseTime: null,
37
+ transitTime,
38
+ setTime: null,
39
+ isCircumpolar: true,
40
+ neverRises: false,
41
+ };
42
+ }
43
+ // Never rises above threshold
44
+ if (cosH0 > 1) {
45
+ return {
46
+ altitude: pos.altitude,
47
+ azimuth: pos.azimuth,
48
+ riseTime: null,
49
+ transitTime: null,
50
+ setTime: null,
51
+ isCircumpolar: false,
52
+ neverRises: true,
53
+ };
54
+ }
55
+ // Normal case: compute semi-diurnal arc
56
+ const H0 = Math.acos(cosH0) * RAD_TO_DEG; // in degrees
57
+ // Transit time: when LST = RA
58
+ const transitTime = computeTransitTime(ra, lon, date);
59
+ // Rise = transit - H0/360 days, Set = transit + H0/360 days
60
+ const arcDaysMs = (H0 / 360) * 86400000; // H0 in degrees → fraction of day → ms
61
+ // Sidereal day is ~23h56m, so scale by sidereal/solar ratio
62
+ const siderealRatio = 0.99726958;
63
+ const arcMs = arcDaysMs * siderealRatio;
64
+ const riseTime = new Date(transitTime.getTime() - arcMs);
65
+ const setTime = new Date(transitTime.getTime() + arcMs);
66
+ return {
67
+ altitude: pos.altitude,
68
+ azimuth: pos.azimuth,
69
+ riseTime,
70
+ transitTime,
71
+ setTime,
72
+ isCircumpolar: false,
73
+ neverRises: false,
74
+ };
75
+ }
76
+ /**
77
+ * Compute the current altitude and azimuth of a celestial object.
78
+ */
79
+ export function currentPosition(ra, dec, lat, lon, date) {
80
+ const lst = localSiderealTime(date, lon);
81
+ const ha = hourAngle(lst, ra);
82
+ return altAz(ha, dec, lat);
83
+ }
84
+ /**
85
+ * Compute the UTC time when an object transits (LST = RA) on the
86
+ * sidereal day containing the given date.
87
+ *
88
+ * Strategy: find the GMST at transit (GMST = RA - lon), then solve
89
+ * for the JD when GMST has that value, and convert to a Date near
90
+ * the given date.
91
+ */
92
+ function computeTransitTime(ra, lon, date) {
93
+ // We need the time when LST = RA, i.e., GMST = RA - lon
94
+ const targetGMST = ((ra - lon) % 360 + 360) % 360;
95
+ // Get GMST at the start of the UTC day
96
+ const dayStart = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
97
+ const jd0 = julianDate(dayStart);
98
+ const gmst0 = greenwichMeanSiderealTime(jd0);
99
+ // GMST advances ~360.985647° per solar day, so find hours until target
100
+ // Difference in GMST degrees needed
101
+ let dgmst = ((targetGMST - gmst0) % 360 + 360) % 360;
102
+ // Convert sidereal degrees to solar hours: 360.985647°/24h solar
103
+ // hours = dgmst / 360.985647 * 24
104
+ const solarHours = (dgmst / 360.98564736629) * 24;
105
+ const transitMs = dayStart.getTime() + solarHours * 3600000;
106
+ // Ensure the transit is within ~12 hours of the given date
107
+ let transit = new Date(transitMs);
108
+ const diffMs = transit.getTime() - date.getTime();
109
+ // If transit is more than 12h in the future, go back one sidereal day
110
+ if (diffMs > 12 * 3600000) {
111
+ transit = new Date(transit.getTime() - 86164091); // sidereal day in ms
112
+ }
113
+ // If transit is more than 12h in the past, go forward one sidereal day
114
+ if (diffMs < -12 * 3600000) {
115
+ transit = new Date(transit.getTime() + 86164091);
116
+ }
117
+ return transit;
118
+ }
119
+ //# sourceMappingURL=visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibility.js","sourceRoot":"","sources":["../../src/astro/visibility.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CSV parser and catalog store for OpenNGC data.
3
+ */
4
+ import { type CelestialObject } from "../types.js";
5
+ /** Indexed catalog store for fast lookups. */
6
+ export interface CatalogStore {
7
+ /** All objects keyed by primary name (e.g., "NGC0224", "IC0001", "Mel022"). */
8
+ all: Map<string, CelestialObject>;
9
+ /** Objects keyed by primary name — same as all. */
10
+ byName: Map<string, CelestialObject>;
11
+ /** Objects keyed by Messier designation (e.g., "M31"). */
12
+ byMessier: Map<string, CelestialObject>;
13
+ /** Objects keyed by lowercase common name (e.g., "andromeda galaxy"). */
14
+ byCommonName: Map<string, CelestialObject>;
15
+ }
16
+ /** Get the shared catalog instance (lazy-loaded singleton). */
17
+ export declare function getCatalog(): Promise<CatalogStore>;
18
+ /** Load both NGC.csv and addendum.csv, build indexed catalog store. */
19
+ export declare function loadCatalog(): Promise<CatalogStore>;
20
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/data/catalog.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAgB,KAAK,eAAe,EAAuB,MAAM,aAAa,CAAC;AAGtF,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAClC,mDAAmD;IACnD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrC,0DAA0D;IAC1D,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,yEAAyE;IACzE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC5C;AAgGD,+DAA+D;AAC/D,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAGxD;AAED,uEAAuE;AACvE,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,CAgCzD"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * CSV parser and catalog store for OpenNGC data.
3
+ */
4
+ import { readFile } from "node:fs/promises";
5
+ import { OBJECT_TYPES } from "../types.js";
6
+ import { parseRA, parseDec } from "./parse-coordinates.js";
7
+ // CSV column indices (0-based, semicolon-delimited)
8
+ const COL = {
9
+ NAME: 0,
10
+ TYPE: 1,
11
+ RA: 2,
12
+ DEC: 3,
13
+ CONST: 4,
14
+ MAJ_AX: 5,
15
+ MIN_AX: 6,
16
+ POS_ANG: 7,
17
+ V_MAG: 9,
18
+ SURF_BR: 13,
19
+ HUBBLE: 14,
20
+ M: 23,
21
+ NGC: 24,
22
+ IC: 25,
23
+ IDENTIFIERS: 27,
24
+ COMMON_NAMES: 28,
25
+ };
26
+ /** Parse a CSV field as a float, returning null for empty/invalid values. */
27
+ function parseOptionalFloat(value) {
28
+ if (!value || value.trim() === "")
29
+ return null;
30
+ const num = parseFloat(value);
31
+ return isNaN(num) ? null : num;
32
+ }
33
+ /** Parse a CSV field as a non-empty string, returning null for empty values. */
34
+ function parseOptionalString(value) {
35
+ if (!value || value.trim() === "")
36
+ return null;
37
+ return value.trim();
38
+ }
39
+ /** Parse a single CSV row into a CelestialObject, or null if it should be skipped. */
40
+ function parseRow(fields) {
41
+ const typeCode = fields[COL.TYPE];
42
+ // Filter out non-existent and duplicate entries
43
+ if (typeCode === "NonEx" || typeCode === "Dup")
44
+ return null;
45
+ // Validate type code
46
+ if (!(typeCode in OBJECT_TYPES))
47
+ return null;
48
+ // Parse coordinates — skip rows without valid RA/Dec
49
+ const ra = parseRA(fields[COL.RA]);
50
+ const dec = parseDec(fields[COL.DEC]);
51
+ if (ra === null || dec === null)
52
+ return null;
53
+ // Build Messier designation — CSV has bare numbers like "031"
54
+ const messierRaw = parseOptionalString(fields[COL.M]);
55
+ const messier = messierRaw ? `M${parseInt(messierRaw, 10)}` : null;
56
+ return {
57
+ name: fields[COL.NAME],
58
+ type: typeCode,
59
+ typeName: OBJECT_TYPES[typeCode],
60
+ ra,
61
+ dec,
62
+ constellation: fields[COL.CONST] || "",
63
+ magnitude: parseOptionalFloat(fields[COL.V_MAG]),
64
+ surfaceBrightness: parseOptionalFloat(fields[COL.SURF_BR]),
65
+ majorAxis: parseOptionalFloat(fields[COL.MAJ_AX]),
66
+ minorAxis: parseOptionalFloat(fields[COL.MIN_AX]),
67
+ positionAngle: parseOptionalFloat(fields[COL.POS_ANG]),
68
+ hubbleType: parseOptionalString(fields[COL.HUBBLE]),
69
+ messier,
70
+ ngcCrossRef: parseOptionalString(fields[COL.NGC]),
71
+ icCrossRef: parseOptionalString(fields[COL.IC]),
72
+ commonName: parseOptionalString(fields[COL.COMMON_NAMES]),
73
+ otherIdentifiers: parseOptionalString(fields[COL.IDENTIFIERS]),
74
+ };
75
+ }
76
+ /** Parse a semicolon-delimited CSV string into CelestialObject arrays. */
77
+ function parseCsv(content) {
78
+ const lines = content.split("\n");
79
+ const objects = [];
80
+ // Skip header row (line 0)
81
+ for (let i = 1; i < lines.length; i++) {
82
+ const line = lines[i].trim();
83
+ if (!line)
84
+ continue;
85
+ const fields = line.split(";");
86
+ const obj = parseRow(fields);
87
+ if (obj)
88
+ objects.push(obj);
89
+ }
90
+ return objects;
91
+ }
92
+ /** Module-level singleton for shared catalog access. */
93
+ let _catalog = null;
94
+ /** Get the shared catalog instance (lazy-loaded singleton). */
95
+ export async function getCatalog() {
96
+ if (!_catalog)
97
+ _catalog = await loadCatalog();
98
+ return _catalog;
99
+ }
100
+ /** Load both NGC.csv and addendum.csv, build indexed catalog store. */
101
+ export async function loadCatalog() {
102
+ const dataDir = new URL("../../data/", import.meta.url);
103
+ const [ngcContent, addendumContent] = await Promise.all([
104
+ readFile(new URL("NGC.csv", dataDir), "utf-8"),
105
+ readFile(new URL("addendum.csv", dataDir), "utf-8"),
106
+ ]);
107
+ const ngcObjects = parseCsv(ngcContent);
108
+ const addendumObjects = parseCsv(addendumContent);
109
+ const allObjects = [...ngcObjects, ...addendumObjects];
110
+ const all = new Map();
111
+ const byName = all; // Same reference — primary name index
112
+ const byMessier = new Map();
113
+ const byCommonName = new Map();
114
+ for (const obj of allObjects) {
115
+ all.set(obj.name, obj);
116
+ if (obj.messier) {
117
+ byMessier.set(obj.messier, obj);
118
+ }
119
+ if (obj.commonName) {
120
+ // Index each common name separately (some entries have multiple, comma-separated)
121
+ // But the field typically has a single primary name
122
+ byCommonName.set(obj.commonName.toLowerCase(), obj);
123
+ }
124
+ }
125
+ return { all, byName, byMessier, byCommonName };
126
+ }
127
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/data/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Coordinate parsing utilities for sexagesimal RA/Dec strings.
3
+ */
4
+ /**
5
+ * Parse a right ascension string "HH:MM:SS.SS" to degrees.
6
+ * RA hours are multiplied by 15 to convert to degrees.
7
+ */
8
+ export declare function parseRA(ra: string): number | null;
9
+ /**
10
+ * Parse a declination string "±DD:MM:SS.SS" to degrees.
11
+ */
12
+ export declare function parseDec(dec: string): number | null;
13
+ //# sourceMappingURL=parse-coordinates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-coordinates.d.ts","sourceRoot":"","sources":["../../src/data/parse-coordinates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAenD"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Coordinate parsing utilities for sexagesimal RA/Dec strings.
3
+ */
4
+ /**
5
+ * Parse a right ascension string "HH:MM:SS.SS" to degrees.
6
+ * RA hours are multiplied by 15 to convert to degrees.
7
+ */
8
+ export function parseRA(ra) {
9
+ if (!ra || typeof ra !== "string")
10
+ return null;
11
+ const parts = ra.split(":");
12
+ if (parts.length !== 3)
13
+ return null;
14
+ const hours = parseFloat(parts[0]);
15
+ const minutes = parseFloat(parts[1]);
16
+ const seconds = parseFloat(parts[2]);
17
+ if (isNaN(hours) || isNaN(minutes) || isNaN(seconds))
18
+ return null;
19
+ return (hours + minutes / 60 + seconds / 3600) * 15;
20
+ }
21
+ /**
22
+ * Parse a declination string "±DD:MM:SS.SS" to degrees.
23
+ */
24
+ export function parseDec(dec) {
25
+ if (!dec || typeof dec !== "string")
26
+ return null;
27
+ const sign = dec.startsWith("-") ? -1 : 1;
28
+ const stripped = dec.replace(/^[+-]/, "");
29
+ const parts = stripped.split(":");
30
+ if (parts.length !== 3)
31
+ return null;
32
+ const degrees = parseFloat(parts[0]);
33
+ const minutes = parseFloat(parts[1]);
34
+ const seconds = parseFloat(parts[2]);
35
+ if (isNaN(degrees) || isNaN(minutes) || isNaN(seconds))
36
+ return null;
37
+ return sign * (degrees + minutes / 60 + seconds / 3600);
38
+ }
39
+ //# sourceMappingURL=parse-coordinates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-coordinates.js","sourceRoot":"","sources":["../../src/data/parse-coordinates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU;IAChC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,OAAO,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpE,OAAO,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAC1D,CAAC"}