Vendor SGP4/SDP4 as pure C, drop g++ dependency

Replace the sat_code git submodule (lib/sat_code/) with vendored
sources in src/sgp4/. The upstream .cpp files are renamed to .c —
the code is valid C99 with zero C++ features. This eliminates the
g++ and -lstdc++ build dependencies.

Adds 518 Vallado test vectors (AIAA 2006-6753-Rev1) as a 13th
regression suite to verify byte-identical numerical output.

Updates all documentation (CLAUDE.md, DESIGN.md, 11 MDX pages,
Dockerfile) to reflect the new layout and pure-C compilation.
This commit is contained in:
Ryan Malloy 2026-02-17 12:45:39 -07:00
parent 27a6e7106f
commit cd338c3c64
30 changed files with 11208 additions and 131 deletions

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "lib/sat_code"]
path = lib/sat_code
url = https://github.com/Bill-Gray/sat_code.git

View File

@ -11,10 +11,10 @@ A PostgreSQL extension that moves orbital mechanics inside the database — the
```bash
make PG_CONFIG=/usr/bin/pg_config # Compile with PGXS
sudo make install PG_CONFIG=/usr/bin/pg_config # Install extension
make installcheck PG_CONFIG=/usr/bin/pg_config # Run 12 regression test suites
make installcheck PG_CONFIG=/usr/bin/pg_config # Run 13 regression test suites
```
Requires: PostgreSQL 17 development headers, GCC, G++ (for sat_code C++), Make.
Requires: PostgreSQL 17 development headers, GCC, Make.
### Docker
```bash
@ -68,11 +68,21 @@ src/
de_reader.h / de_reader.c # Clean-room JPL DE binary reader (Chebyshev/Clenshaw)
eph_provider.h / eph_provider.c # Provider dispatch, GUC, lazy init, frame rotation
de_funcs.c # All _de() SQL function implementations
lib/
sat_code/ # Bill Gray's SGP4/SDP4 (MIT, git submodule)
sgp4/ # Vendored SGP4/SDP4 (Bill Gray's sat_code, MIT license)
sgp4.c # Near-earth propagator (period < 225 min)
sdp4.c # Deep-space propagator (period >= 225 min)
deep.c # Lunar/solar perturbations, resonance integration
common.c # Shared initialization (Brouwer mean elements, Kepler solver)
basics.c # select_ephemeris(), FMod2p()
get_el.c # TLE parsing (parse_elements(), checksum)
tle_out.c # TLE output (write_elements_in_tle_format())
norad.h / norad_in.h # Public + internal headers
PROVENANCE.md # Vendoring decision, modifications, verification
LICENSE # MIT license (Bill Gray / Project Pluto)
test/
sql/ # 12 regression test suites
sql/ # 13 regression test suites
expected/ # Expected output
data/vallado_518.json # 518 Vallado test vectors (AIAA 2006-6753-Rev1)
docs/
DESIGN.md # Architecture decisions, theory-to-code mappings
Dockerfile # Starlight docs site (Astro + Caddy)
@ -210,21 +220,26 @@ Every `_de()` function mirrors an existing VSOP87 function:
| `mars_moon_observe_de()` | `mars_moon_observe()` | STABLE |
| `pg_orbit_ephemeris_info()` | — | STABLE |
## sat_code Submodule
## Vendored SGP4/SDP4
Bill Gray's SGP4/SDP4: https://github.com/Bill-Gray/sat_code (MIT license)
Bill Gray's sat_code (MIT license): https://github.com/Bill-Gray/sat_code
C++ sources compiled with `g++ -fPIC`, linked via `-lstdc++`. C linkage through `norad.h`.
Vendored into `src/sgp4/` from upstream commit `ff7b98957dfa2979700a482bde9de9542807293e`. The `.cpp` files were renamed to `.c` — the code is valid C99 with zero C++ features (no classes, templates, namespaces, exceptions, or STL). This eliminates the `g++` and `-lstdc++` dependencies.
```bash
git submodule update --init # Initialize
```
Modifications from upstream are minimal and documented in `src/sgp4/PROVENANCE.md`:
- Renamed `.cpp``.c` (no code changes — already valid C99)
- Stripped Win32 `DLL_FUNC`/`__stdcall` decorators
- Removed `extern "C"` wrapper (now compiled as C)
- Removed unused SGP/SGP8/SDP8 model prototypes
- Added forward declarations (`-Wmissing-prototypes`)
- Changed bare `inline` to `static inline` for C99 compliance
- Added equation citations referencing STR#3 and Vallado Rev-1
Key files: `sgp4.cpp`, `sdp4.cpp`, `deep.cpp`, `common.cpp`, `basics.cpp`, `norad.h`, `norad_in.h`
All numerical logic is byte-identical to upstream. Verified against 518 Vallado test vectors (AIAA 2006-6753-Rev1).
## Testing
12 regression test suites via `make installcheck`:
13 regression test suites via `make installcheck`:
| Suite | What it tests |
|-------|--------------|
@ -240,6 +255,7 @@ Key files: `sgp4.cpp`, `sdp4.cpp`, `deep.cpp`, `common.cpp`, `basics.cpp`, `nora
| moon_observe | Galilean/Saturn/Uranus/Mars moons, Io phase, Jupiter CML, burst probability |
| lambert_transfer | Lambert solver, lambert_c3, pork chop grid, error handling |
| de_ephemeris | DE function fallback to VSOP87, cross-provider consistency, error handling |
| vallado_518 | 518 Vallado test vectors (AIAA 2006-6753-Rev1), per-satellite breakdown |
## Error Handling Patterns
@ -305,7 +321,7 @@ cd docs && make prod
- `ereport(ERROR, ...)` for user-facing errors, never `elog(ERROR, ...)`
- All memory via `palloc`/`pfree` (PostgreSQL memory contexts)
- Comments explain "why", not "what"
- No global mutable state — all computation from function arguments (exception: per-backend DE handle, lazily initialized, cleaned up via `on_proc_exit`)
- No global mutable state — all computation from function arguments (exceptions: per-backend DE handle via `on_proc_exit`; 3 statics in vendored `deep.c` + 1 cache in `sdp4.c`, safe in PostgreSQL's fork model, never modified by pg_orbit)
- Every function handling SGP4 must check the error return code
- All functions marked `PARALLEL SAFE`
- DE functions: always fall back to VSOP87/ELP82B on any error

View File

@ -20,7 +20,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
apt-get update && apt-get install -y --no-install-recommends \
postgresql-${PG_MAJOR} \
postgresql-server-dev-${PG_MAJOR} \
gcc g++ make && \
gcc make && \
rm -rf /var/lib/apt/lists/*
# Copy source tree (submodule content included as regular files)
@ -35,7 +35,7 @@ RUN make PG_CONFIG=${PG_CONFIG}
# Install to system location (needed for installcheck)
RUN make PG_CONFIG=${PG_CONFIG} install
# Run all 12 regression test suites against a throwaway cluster
# Run all 13 regression test suites against a throwaway cluster
RUN su postgres -c "/usr/lib/postgresql/${PG_MAJOR}/bin/initdb -D /tmp/pgtest" && \
su postgres -c "/usr/lib/postgresql/${PG_MAJOR}/bin/pg_ctl -D /tmp/pgtest -l /tmp/pgtest.log start" && \
su postgres -c "/usr/lib/postgresql/${PG_MAJOR}/bin/createuser -s root" && \

View File

@ -49,14 +49,14 @@ prediction error of the TLE by an order of magnitude.
### Constant Inventory
| Constant | Source Paper | Value | pg_orbit Location | sat_code Location |
|----------|-------------|-------|-------------------|-------------------|
| ae (equatorial radius) | Hoots & Roehrich STR#3 | 6378.135 km | `types.h:20` (WGS72_AE) | `norad_in.h:64` (earth_radius_in_km) |
| J2 | Hoots & Roehrich STR#3 | 0.001082616 | `types.h:21` (WGS72_J2) | `norad_in.h:69` (xj2) |
| J3 | Hoots & Roehrich STR#3 | -2.53881e-6 | `types.h:22` (WGS72_J3) | `norad_in.h:63` (xj3) |
| J4 | Hoots & Roehrich STR#3 | -1.65597e-6 | `types.h:23` (WGS72_J4) | `norad_in.h:79` (xj4) |
| ke | Hoots & Roehrich STR#3 | 0.0743669161331734132 min^-1 | `types.h:24` (WGS72_KE) | `norad_in.h:83` (xke) |
| mu | Hoots & Roehrich STR#3 | 398600.8 km^3/s^2 | `types.h:19` (WGS72_MU) | (implicit in xke) |
| Constant | Source Paper | Value | pg_orbit Location | Vendored SGP4 Location |
|----------|-------------|-------|-------------------|------------------------|
| ae (equatorial radius) | Hoots & Roehrich STR#3 | 6378.135 km | `types.h` (WGS72_AE) | `src/sgp4/norad_in.h` (earth_radius_in_km) |
| J2 | Hoots & Roehrich STR#3 | 0.001082616 | `types.h` (WGS72_J2) | `src/sgp4/norad_in.h` (xj2) |
| J3 | Hoots & Roehrich STR#3 | -2.53881e-6 | `types.h` (WGS72_J3) | `src/sgp4/norad_in.h` (xj3) |
| J4 | Hoots & Roehrich STR#3 | -1.65597e-6 | `types.h` (WGS72_J4) | `src/sgp4/norad_in.h` (xj4) |
| ke | Hoots & Roehrich STR#3 | 0.0743669161331734132 min^-1 | `types.h` (WGS72_KE) | `src/sgp4/norad_in.h` (xke) |
| mu | Hoots & Roehrich STR#3 | 398600.8 km^3/s^2 | `types.h` (WGS72_MU) | (implicit in xke) |
| WGS-84 a | NIMA TR8350.2 | 6378.137 km | `types.h:31` (WGS84_A) | -- |
| WGS-84 f | NIMA TR8350.2 | 1/298.257223563 | `types.h:32` (WGS84_F) | -- |
@ -112,31 +112,30 @@ across function invocations.
3. **Includes deep-space SDP4.** Many SGP4 implementations only handle
near-earth orbits (period < 225 minutes). sat_code includes the full
SDP4 with lunar/solar perturbations via `deep.cpp`, handling GEO,
SDP4 with lunar/solar perturbations via `deep.c`, handling GEO,
Molniya, and GPS orbits.
4. **MIT license.** Compatible with the PostgreSQL License for embedding
in a shared library.
5. **Actively maintained.** Used in Bill Gray's Find_Orb production
astrometry software. Bug fixes reach us through the git submodule.
astrometry software.
### Build Integration
The Makefile compiles sat_code's `.cpp` files with `g++` and links the
resulting `.o` files into the PostgreSQL shared library alongside our C
sources. The `-lstdc++` link flag pulls in the C++ runtime. This is the
same pattern used by PostGIS for GEOS integration (C extension linking
C++ library objects).
The SGP4/SDP4 source is vendored into `src/sgp4/` — the `.cpp` files
renamed to `.c` (the code is valid C99 with zero C++ features). The
Makefile compiles everything with `gcc` and links with `-lm` only. No
C++ compiler or runtime is required.
```
src/*.c --> gcc --> .o --|
lib/sat_code/*.cpp -> g++ -> .o --|--> pg_orbit.so
-lstdc++ -lm
src/*.c --[gcc]--> .o --|
src/sgp4/*.c --[gcc]--> .o --|--> pg_orbit.so
-lm
```
The `-I$(SAT_CODE_DIR)` flag lets our C files `#include "norad.h"`
directly.
The `-I$(SGP4_DIR)` flag lets our C files `#include "norad.h"` directly.
Provenance is recorded in `src/sgp4/PROVENANCE.md`.
## 3. Type System Design
@ -573,18 +572,18 @@ initialize the propagator.
## 9. Theory-to-Code Mapping
This table maps key equations from the SGP4 theory papers to their
implementation in pg_orbit and sat_code.
implementation in pg_orbit and the vendored SGP4 code.
| Theory | Paper | What | Code Location |
|--------|-------|------|---------------|
| Mean element recovery | Brouwer (1959) | Recover original mean motion (xnodp) and semi-major axis (aodp) from input TLE elements, removing secular J2 perturbations | `sat_code/common.cpp:sxpall_common_init()` lines 17-35 |
| Secular perturbations | Lane & Cranford (1969), Hoots & Roehrich STR#3 | Secular rates of mean anomaly, argument of perigee, and RAAN due to J2, J4 | `sat_code/common.cpp:sxpx_common_init()` lines 86-101 |
| Atmospheric drag | Hoots & Roehrich STR#3 | B* formulation of drag, C1/C2/C4 coefficients, perigee-dependent s parameter | `sat_code/common.cpp:sxpx_common_init()` lines 47-84; `sat_code/sgp4.cpp:SGP4_init()` |
| Short-period perturbations | Lane & Cranford (1969), Brouwer (1959) | Oscillatory corrections to radius, argument of latitude, node, and inclination | `sat_code/common.cpp:sxpx_posn_vel()` lines 121-229 |
| Kepler equation | Classical | Newton-Raphson with second-order correction, bounded first step | `sat_code/common.cpp:sxpx_posn_vel()` lines 175-208 |
| Deep-space resonance | Hujsak (1979) | Lunar and solar gravitational perturbations, geopotential resonance for 12-hour and 24-hour orbits | `sat_code/deep.cpp:Deep_dpinit()`, `Deep_dpsec()`, `Deep_dpper()` |
| Near-earth propagation | Hoots & Roehrich STR#3 | SGP4 main loop: secular + short-period + drag terms | `sat_code/sgp4.cpp:SGP4()` |
| Deep-space propagation | Hoots & Roehrich STR#3 | SDP4: SGP4 core + deep-space secular/periodic corrections | `sat_code/sdp4.cpp:SDP4()` |
| Mean element recovery | Brouwer (1959) | Recover original mean motion (xnodp) and semi-major axis (aodp) from input TLE elements, removing secular J2 perturbations | `src/sgp4/common.c:sxpall_common_init()` lines 17-35 |
| Secular perturbations | Lane & Cranford (1969), Hoots & Roehrich STR#3 | Secular rates of mean anomaly, argument of perigee, and RAAN due to J2, J4 | `src/sgp4/common.c:sxpx_common_init()` lines 86-101 |
| Atmospheric drag | Hoots & Roehrich STR#3 | B* formulation of drag, C1/C2/C4 coefficients, perigee-dependent s parameter | `src/sgp4/common.c:sxpx_common_init()` lines 47-84; `src/sgp4/sgp4.c:SGP4_init()` |
| Short-period perturbations | Lane & Cranford (1969), Brouwer (1959) | Oscillatory corrections to radius, argument of latitude, node, and inclination | `src/sgp4/common.c:sxpx_posn_vel()` lines 121-229 |
| Kepler equation | Classical | Newton-Raphson with second-order correction, bounded first step | `src/sgp4/common.c:sxpx_posn_vel()` lines 175-208 |
| Deep-space resonance | Hujsak (1979) | Lunar and solar gravitational perturbations, geopotential resonance for 12-hour and 24-hour orbits | `src/sgp4/deep.c:Deep_dpinit()`, `Deep_dpsec()`, `Deep_dpper()` |
| Near-earth propagation | Hoots & Roehrich STR#3 | SGP4 main loop: secular + short-period + drag terms | `src/sgp4/sgp4.c:SGP4()` |
| Deep-space propagation | Hoots & Roehrich STR#3 | SDP4: SGP4 core + deep-space secular/periodic corrections | `src/sgp4/sdp4.c:SDP4()` |
| Semi-major axis from n | Kepler's third law | a = (KE / n)^(2/3) in earth radii | `src/tle_type.c:tle_perigee()` line 415; `src/gist_tle.c:tle_to_alt_range()` line 76 |
| GMST | Vallado (2013) Eq. 3-47 | Greenwich Mean Sidereal Time from Julian date | `src/coord_funcs.c:gmst_from_jd()` lines 59-73; `src/pass_funcs.c:gmst_from_jd()` lines 129-151 |
| TEME to ECEF | Vallado (2013) | Z-axis rotation by -GMST, velocity cross-product correction | `src/coord_funcs.c:teme_to_ecef()` lines 83-103; `src/pass_funcs.c:teme_to_ecef()` lines 157-179 |
@ -592,7 +591,7 @@ implementation in pg_orbit and sat_code.
| Topocentric transform | Standard SEZ | ECEF range vector rotated to South-East-Zenith, azimuth from north | `src/coord_funcs.c:ecef_to_topocentric()` lines 163-188 |
| Observer to ECEF | Geodesy standard | WGS-84 ellipsoid surface point to Cartesian | `src/coord_funcs.c:observer_to_ecef()` lines 143-156 |
| Range rate | Dot product | Projection of relative velocity onto line-of-sight unit vector | `src/coord_funcs.c:eci_to_topocentric()` line 618 |
| Near/deep selection | Hoots & Roehrich STR#3 | Period threshold: 225 minutes (n < 2*pi/225 rad/min) | `sat_code/norad.h:select_ephemeris()` |
| Near/deep selection | Hoots & Roehrich STR#3 | Period threshold: 225 minutes (n < 2*pi/225 rad/min) | `src/sgp4/norad.h:select_ephemeris()` |
## 10. JPL DE Ephemeris Architecture (v0.3.0)

View File

@ -24,7 +24,7 @@ Four rules govern constant usage across the entire codebase. No exceptions.
### Rule 1: WGS-72 for SGP4/SDP4 propagation
All propagation uses WGS-72 constants: $\mu$, $a_e$, $J_2$, $J_3$, $J_4$, $k_e$. These flow through sat_code's `norad_in.h` defines and are never overridden. The functions `SGP4_init()`, `SGP4()`, `SDP4_init()`, and `SDP4()` operate entirely in the WGS-72 domain.
All propagation uses WGS-72 constants: $\mu$, $a_e$, $J_2$, $J_3$, $J_4$, $k_e$. These flow through the vendored `src/sgp4/norad_in.h` defines and are never overridden. The functions `SGP4_init()`, `SGP4()`, `SDP4_init()`, and `SDP4()` operate entirely in the WGS-72 domain.
### Rule 2: WGS-84 for coordinate output
@ -40,7 +40,7 @@ WGS-72 for propagation, WGS-84 for output. Perigee and apogee altitudes use WGS-
## Constant inventory
The complete set of constants, with provenance and location in both pg_orbit and sat_code.
The complete set of constants, with provenance and location in both pg_orbit and the vendored SGP4 code.
### WGS-72 constants (propagation domain)
@ -75,9 +75,9 @@ Source: NIMA TR8350.2, "Department of Defense World Geodetic System 1984."
## Why two copies of AE?
`types.h` carries a parallel copy of the WGS-72 constants even though sat_code defines them in `norad_in.h`. This is intentional.
`types.h` carries a parallel copy of the WGS-72 constants even though the vendored SGP4 code defines them in `norad_in.h`. This is intentional.
`types.h` is the single header for all pg_orbit C sources. `norad_in.h` is an internal sat_code header not meant for external consumers. The GiST index (`gist_tle.c`) and TLE accessor functions (`tle_type.c`) need $k_e$ and $a_e$ without pulling in sat_code internals. The values **must** be identical.
`types.h` is the single header for all pg_orbit C sources. `norad_in.h` is an internal SGP4 header in `src/sgp4/` not meant for external consumers. The GiST index (`gist_tle.c`) and TLE accessor functions (`tle_type.c`) need $k_e$ and $a_e$ without pulling in sat_code internals. The values **must** be identical.
The perigee and apogee altitude computations derive from mean elements:

View File

@ -58,7 +58,7 @@ Every propagation function that can fail has a `_safe()` variant that returns `N
### SGP4 error classification
sat_code returns six distinct error codes. pg_orbit classifies them into two categories based on physical meaning:
The vendored SGP4/SDP4 library returns six distinct error codes. pg_orbit classifies them into two categories based on physical meaning:
| Code | Meaning | Severity | Response |
|------|---------|----------|----------|
@ -122,7 +122,7 @@ The [Theory-to-Code Mapping](/architecture/theory-to-code/) page provides the co
| Equation | Source | Code |
|----------|--------|------|
| SGP4/SDP4 propagation | Hoots & Roehrich, STR#3 (1980) | `sat_code/sgp4.cpp`, `sdp4.cpp` |
| SGP4/SDP4 propagation | Hoots & Roehrich, STR#3 (1980) | `src/sgp4/sgp4.c`, `sdp4.c` |
| VSOP87 planetary positions | Bretagnon & Francou (1988) | `src/vsop87.c` |
| GMST computation | Vallado (2013) Eq. 3-47 | `src/coord_funcs.c:gmst_from_jd()` |
| Lambert solver | Izzo (2015) | `src/lambert.c` |

View File

@ -116,9 +116,9 @@ PostgreSQL backends are long-lived processes that serve multiple sessions. A glo
Given the same TLE and timestamp, pg_orbit produces the same result regardless of what queries ran before, how many backends are active, or whether the function is running in a parallel worker. There is no path-dependent behavior.
## sat_code's memory model
## SGP4/SDP4 memory model
sat_code itself has no global mutable state. The propagator state lives entirely in two caller-provided structures:
The vendored SGP4/SDP4 code has no global mutable state. The propagator state lives entirely in two caller-provided structures:
| Structure | Size | Contains | Owner |
|-----------|------|----------|-------|
@ -157,7 +157,7 @@ All seven pg_orbit types are fixed-size with `STORAGE = plain`:
The TLE text format is 138+ bytes (two 69-character lines plus separator). The parsed struct is 112 bytes --- smaller than the text it came from, and it eliminates the ~10x parsing overhead that would be incurred on every propagation call if raw text were stored.
The text representation can be reconstructed from the parsed elements via sat_code's `write_elements_in_tle_format()`. The round-trip is lossless for all fields that affect propagation.
The text representation can be reconstructed from the parsed elements via the vendored `write_elements_in_tle_format()`. The round-trip is lossless for all fields that affect propagation.
## Memory usage in practice

View File

@ -6,7 +6,7 @@ sidebar:
import { Aside, Tabs, TabItem } from "@astrojs/starlight/components";
pg_orbit wraps Bill Gray's `sat_code` library (MIT license, Project Pluto) for SGP4/SDP4 propagation. This page covers why sat_code was chosen, how it integrates with PostgreSQL's build and execution model, and the error handling contract between the two codebases.
pg_orbit vendors Bill Gray's `sat_code` library (MIT license, Project Pluto) for SGP4/SDP4 propagation. The relevant source files are vendored into `src/sgp4/` with `.cpp` extensions renamed to `.c` --- the code contains zero C++ features and compiles as pure C99. This page covers why sat_code was chosen, how it integrates with PostgreSQL's build and execution model, and the error handling contract between the two codebases.
## Why sat_code
@ -14,7 +14,7 @@ Three SGP4 implementations were evaluated. The choice came down to one question:
<Tabs>
<TabItem label="sat_code (chosen)">
**Pure C linkage.** All public functions are declared `extern "C"` in `norad.h`. The library compiles as C++ but exposes a flat C function interface: `SGP4_init()`, `SGP4()`, `SDP4_init()`, `SDP4()`, `parse_elements()`, `select_ephemeris()`.
**Pure C.** Despite upstream's `.cpp` file extensions, the code contains zero C++ features. pg_orbit vendors the files as `.c` and compiles them with `gcc`. The public API in `norad.h` is a flat C function interface: `SGP4_init()`, `SGP4()`, `SDP4_init()`, `SDP4()`, `parse_elements()`, `select_ephemeris()`.
**No global mutable state.** The propagator state lives in a caller-allocated `double params[N_SAT_PARAMS]` array. This maps directly to PostgreSQL's `palloc`-based memory model.
@ -35,54 +35,48 @@ Three SGP4 implementations were evaluated. The choice came down to one question:
</TabItem>
</Tabs>
## The C/C++ boundary
## Compilation
sat_code is compiled as C++ but pg_orbit is a C extension. The integration works because sat_code's public API is `extern "C"`:
sat_code's upstream files use `.cpp` extensions but contain no C++ features --- no classes, templates, namespaces, exceptions, or STL. The vendored copies in `src/sgp4/` are renamed to `.c` and compile with `gcc` alongside the rest of pg_orbit. There is no C/C++ boundary, no `g++`, and no `-lstdc++`.
```
src/*.c --[gcc]--> .o --|
lib/sat_code/*.cpp --[g++]--> .o --|--> pg_orbit.so
-lstdc++ -lm
src/*.c --[gcc]--> .o --|
src/sgp4/*.c --[gcc]--> .o --|--> pg_orbit.so
-lm
```
The Makefile compiles sat_code's `.cpp` files with `g++` and links them alongside pg_orbit's `.c` files with `-lstdc++` for the C++ runtime. This is the same pattern PostGIS uses for GEOS integration.
### Build rules
```makefile
# sat_code C++ sources
SAT_CODE_DIR = lib/sat_code
SAT_CODE_SRCS = $(SAT_CODE_DIR)/sgp4.cpp $(SAT_CODE_DIR)/sdp4.cpp \
$(SAT_CODE_DIR)/deep.cpp $(SAT_CODE_DIR)/common.cpp \
$(SAT_CODE_DIR)/basics.cpp $(SAT_CODE_DIR)/get_el.cpp \
$(SAT_CODE_DIR)/tle_out.cpp
SAT_CODE_OBJS = $(SAT_CODE_SRCS:.cpp=.o)
# Vendored SGP4/SDP4 sources (pure C, from Bill Gray's sat_code, MIT license)
SGP4_DIR = src/sgp4
SGP4_SRCS = $(SGP4_DIR)/sgp4.c $(SGP4_DIR)/sdp4.c \
$(SGP4_DIR)/deep.c $(SGP4_DIR)/common.c \
$(SGP4_DIR)/basics.c $(SGP4_DIR)/get_el.c \
$(SGP4_DIR)/tle_out.c
SGP4_OBJS = $(SGP4_SRCS:.c=.o)
# Include sat_code headers for our C sources
PG_CPPFLAGS = -I$(SAT_CODE_DIR)
# Include vendored SGP4 headers for our C sources
PG_CPPFLAGS = -I$(SGP4_DIR)
# C++ runtime for sat_code
SHLIB_LINK += -lstdc++ -lm
# Compile C++ with position-independent code for shared library
$(SAT_CODE_DIR)/%.o: $(SAT_CODE_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -fPIC -I$(SAT_CODE_DIR) -c -o $@ $<
# Pure C — no C++ runtime needed
SHLIB_LINK += -lm
```
The `-fPIC` flag is required because the compiled objects become part of a shared library (`.so`). Without it, the linker would reject the C++ objects.
PGXS handles the `-fPIC` flag and pattern rules for `.c` to `.o` compilation, so the vendored SGP4 files need no special build rules.
### Header inclusion
pg_orbit's C files include `norad.h` directly:
```c
#include "norad.h" /* sat_code public API */
#include "norad.h" /* vendored SGP4 public API */
#include "types.h" /* pg_orbit types and WGS-72/84 constants */
```
The `PG_CPPFLAGS = -I$(SAT_CODE_DIR)` flag makes `norad.h` available without a path prefix.
The `PG_CPPFLAGS = -I$(SGP4_DIR)` flag makes `norad.h` available without a path prefix.
## The sat_code API surface
## The SGP4 API surface
pg_orbit uses a small subset of sat_code's public functions.
@ -193,26 +187,31 @@ The error response changes based on the calling context:
The pass prediction context is the most interesting. A TLE valid for part of a search window should not abort the entire pass search. Returning $-\pi$ radians (well below any physical horizon) causes the coarse scan to treat the time point as "satellite below horizon" and continue looking for passes at other times.
## The git submodule
## Build integration
sat_code is included as a git submodule at `lib/sat_code/`. This provides:
sat_code is vendored into `src/sgp4/` --- the minimal set of source files needed for SGP4/SDP4 propagation, committed directly into the pg_orbit repository. A `PROVENANCE.md` file in that directory records the upstream repository, the exact commit hash, and every modification made during vendoring.
- **Pinned version.** The submodule pointer records the exact commit. Upstream changes do not affect pg_orbit until the submodule is explicitly updated.
- **Clear provenance.** `git submodule status` shows the upstream repository (github.com/Bill-Gray/sat_code) and commit hash.
- **Easy updates.** `git submodule update --remote` pulls the latest upstream, which can then be tested against the Vallado 518 vectors before committing the update.
This approach provides:
### Files used from sat_code
- **Pinned version.** The vendored commit is recorded in `src/sgp4/PROVENANCE.md`. Upstream changes do not affect pg_orbit until the files are explicitly re-vendored.
- **Clear provenance.** `PROVENANCE.md` documents the upstream repository (github.com/Bill-Gray/sat_code), commit hash, the `.cpp` to `.c` rename rationale, and a line-by-line list of every modification.
- **No submodule complexity.** Cloning the repository gets a complete, buildable tree. No `git submodule update --init` step, no risk of missing submodule state.
- **Pure C build.** Renaming `.cpp` to `.c` eliminates the `g++` and `-lstdc++` dependencies. The entire extension compiles with a single C compiler.
### Vendored files
| File | Purpose |
|------|---------|
| `sgp4.cpp` | SGP4 near-earth propagator |
| `sdp4.cpp` | SDP4 deep-space propagator |
| `deep.cpp` | Lunar/solar perturbation routines for SDP4 |
| `common.cpp` | Shared initialization code for SGP4/SDP4 |
| `basics.cpp` | Utility functions (angle normalization, etc.) |
| `get_el.cpp` | TLE parsing (`parse_elements()`) |
| `tle_out.cpp` | TLE text reconstruction |
| `sgp4.c` | SGP4 near-earth propagator |
| `sdp4.c` | SDP4 deep-space propagator |
| `deep.c` | Lunar/solar perturbation routines for SDP4 |
| `common.c` | Shared initialization code for SGP4/SDP4 |
| `basics.c` | Utility functions (angle normalization, etc.) |
| `get_el.c` | TLE parsing (`parse_elements()`) |
| `tle_out.c` | TLE text reconstruction |
| `norad.h` | Public API declarations, `tle_t` struct, constants |
| `norad_in.h` | Internal constants (WGS-72 values) |
| `PROVENANCE.md` | Upstream commit, modifications, verification notes |
| `LICENSE` | MIT license from upstream |
Other sat_code files (obs_eph.cpp, sat_id.cpp, etc.) are not compiled. pg_orbit uses sat_code strictly as a propagation library, not as a satellite identification or observation planning tool.
Other sat_code files (obs_eph.cpp, sat_id.cpp, etc.) are not vendored. pg_orbit uses sat_code strictly as a propagation library, not as a satellite identification or observation planning tool.

View File

@ -12,19 +12,19 @@ If a constant, algorithm, or formula appears in the code without a citation, tha
## SGP4/SDP4 propagation
The core satellite propagation theory, implemented by Bill Gray's sat_code library.
The core satellite propagation theory, implemented by Bill Gray's sat_code library (vendored into src/sgp4/).
| Theory | Source Paper | What it computes | Code location |
|--------|-------------|------------------|---------------|
| Mean element recovery | Brouwer (1959) | Original mean motion $n_0'$ and semi-major axis $a_0'$ from input TLE, removing secular $J_2$ perturbations | `sat_code/common.cpp:sxpall_common_init()` |
| Secular perturbations | Lane & Cranford (1969); Hoots & Roehrich STR#3 | Secular rates of $M$, $\omega$, and $\Omega$ due to $J_2$, $J_4$ | `sat_code/common.cpp:sxpx_common_init()` |
| Atmospheric drag | Hoots & Roehrich STR#3 | $B^*$ formulation of drag; $C_1$, $C_2$, $C_4$ coefficients; perigee-dependent $s$ parameter | `sat_code/common.cpp:sxpx_common_init()`; `sat_code/sgp4.cpp:SGP4_init()` |
| Short-period perturbations | Lane & Cranford (1969); Brouwer (1959) | Oscillatory corrections to radius, argument of latitude, node, and inclination | `sat_code/common.cpp:sxpx_posn_vel()` |
| Kepler equation | Classical | Newton-Raphson with second-order correction, bounded first step | `sat_code/common.cpp:sxpx_posn_vel()` |
| Deep-space resonance | Hujsak (1979) | Lunar/solar gravitational perturbations; geopotential resonance for 12-hour and 24-hour orbits | `sat_code/deep.cpp:Deep_dpinit()`, `Deep_dpsec()`, `Deep_dpper()` |
| Near-earth propagation | Hoots & Roehrich STR#3 | SGP4 main loop: secular + short-period + drag terms | `sat_code/sgp4.cpp:SGP4()` |
| Deep-space propagation | Hoots & Roehrich STR#3 | SDP4: SGP4 core + deep-space secular/periodic corrections | `sat_code/sdp4.cpp:SDP4()` |
| Near/deep selection | Hoots & Roehrich STR#3 | Period threshold: 225 minutes ($n < 2\pi/225$ rad/min) | `sat_code/norad.h:select_ephemeris()` |
| Mean element recovery | Brouwer (1959) | Original mean motion $n_0'$ and semi-major axis $a_0'$ from input TLE, removing secular $J_2$ perturbations | `src/sgp4/common.c:sxpall_common_init()` |
| Secular perturbations | Lane & Cranford (1969); Hoots & Roehrich STR#3 | Secular rates of $M$, $\omega$, and $\Omega$ due to $J_2$, $J_4$ | `src/sgp4/common.c:sxpx_common_init()` |
| Atmospheric drag | Hoots & Roehrich STR#3 | $B^*$ formulation of drag; $C_1$, $C_2$, $C_4$ coefficients; perigee-dependent $s$ parameter | `src/sgp4/common.c:sxpx_common_init()`; `src/sgp4/sgp4.c:SGP4_init()` |
| Short-period perturbations | Lane & Cranford (1969); Brouwer (1959) | Oscillatory corrections to radius, argument of latitude, node, and inclination | `src/sgp4/common.c:sxpx_posn_vel()` |
| Kepler equation | Classical | Newton-Raphson with second-order correction, bounded first step | `src/sgp4/common.c:sxpx_posn_vel()` |
| Deep-space resonance | Hujsak (1979) | Lunar/solar gravitational perturbations; geopotential resonance for 12-hour and 24-hour orbits | `src/sgp4/deep.c:Deep_dpinit()`, `Deep_dpsec()`, `Deep_dpper()` |
| Near-earth propagation | Hoots & Roehrich STR#3 | SGP4 main loop: secular + short-period + drag terms | `src/sgp4/sgp4.c:SGP4()` |
| Deep-space propagation | Hoots & Roehrich STR#3 | SDP4: SGP4 core + deep-space secular/periodic corrections | `src/sgp4/sdp4.c:SDP4()` |
| Near/deep selection | Hoots & Roehrich STR#3 | Period threshold: 225 minutes ($n < 2\pi/225$ rad/min) | `src/sgp4/norad.h:select_ephemeris()` |
### Primary reference
@ -162,7 +162,7 @@ A quick reference for finding the implementation of a specific theory.
| `src/de_funcs.c` | All `_de()` SQL function implementations | ~650 |
| `src/astro_math.h` | Shared math: obliquity rotation, observation pipeline | ~220 |
| `src/radio_funcs.c` | Jupiter radio emission | ~200 |
| `sat_code/sgp4.cpp` | SGP4 near-earth propagator | ~300 |
| `sat_code/sdp4.cpp` | SDP4 deep-space propagator | ~200 |
| `sat_code/deep.cpp` | Deep-space perturbations | ~800 |
| `sat_code/common.cpp` | Shared SGP4/SDP4 initialization | ~250 |
| `src/sgp4/sgp4.c` | SGP4 near-earth propagator | ~300 |
| `src/sgp4/sdp4.c` | SDP4 deep-space propagator | ~200 |
| `src/sgp4/deep.c` | Deep-space perturbations | ~800 |
| `src/sgp4/common.c` | Shared SGP4/SDP4 initialization | ~250 |

View File

@ -36,7 +36,7 @@ import { Tabs, TabItem, Steps, Aside } from "@astrojs/starlight/components";
</TabItem>
<TabItem label="Build from Source">
Requires PostgreSQL 17 development headers and a C/C++ toolchain.
Requires PostgreSQL 17 development headers and a C toolchain.
<Steps>
1. Clone the repository:
@ -64,7 +64,7 @@ import { Tabs, TabItem, Steps, Aside } from "@astrojs/starlight/components";
</Steps>
<Aside type="note">
The build compiles both C source (pg_orbit) and C++ source (sat_code library for SGP4/SDP4). The C++ runtime (`-lstdc++`) is linked automatically.
The build compiles pure C throughout --- both pg_orbit and the vendored SGP4/SDP4 library in `src/sgp4/`. No C++ compiler or runtime is required.
</Aside>
</TabItem>

View File

@ -112,4 +112,5 @@ You've seen the five domains pg_orbit covers. For deeper dives:
- **[Tracking Satellites](/guides/tracking-satellites/)** — batch observation, conjunction screening, pass prediction workflows
- **[Observing the Solar System](/guides/observing-solar-system/)** — "what's up tonight?" queries, rise/set times, conjunctions
- **[JPL DE Ephemeris](/guides/de-ephemeris/)** — opt-in sub-milliarcsecond accuracy using JPL DE440/441 files
- **[The SQL Advantage](/workflow/sql-advantage/)** — why doing this in SQL changes what's possible

View File

@ -25,6 +25,7 @@ PostGIS added spatial awareness to PostgreSQL — suddenly your database underst
| Comets/asteroids | Two-body Keplerian | `kepler_propagate()`, `comet_observe()` | Varies with eccentricity |
| Jupiter radio | Carr et al. (1983) sources | `jupiter_burst_probability()` | Empirical probability |
| Transfers | Lambert (Izzo, 2015) | `lambert_transfer()`, `lambert_c3()` | Ballistic two-body |
| DE ephemeris (optional) | JPL DE440/441 | `planet_observe_de()`, `moon_observe_de()` | ~0.1 milliarcsecond |
## Who it's for
@ -54,10 +55,10 @@ pg_orbit is a computation engine, not a complete application. Understanding what
**Not a GUI.** pg_orbit returns numbers. Use Stellarium, GPredict, or STK for visualization. Use any plotting library to render its output.
**Not sub-arcsecond.** VSOP87 is accurate to about 1 arcsecond — sufficient for observation planning and visual astronomy, but not for dish pointing at GHz frequencies or precision astrometry. For that, use SPICE or Skyfield with DE441 ephemerides.
**Not sub-arcsecond by default.** The built-in VSOP87 pipeline is accurate to about 1 arcsecond — sufficient for observation planning and visual astronomy. For precision work (dish pointing, occultation timing, astrometry), pg_orbit v0.3.0 supports [optional JPL DE440/441 ephemeris files](/guides/de-ephemeris/) that bring accuracy to ~0.1 milliarcsecond. DE is opt-in and requires a one-time GUC configuration.
**Not a TLE source.** Bring your own TLEs from Space-Track, CelesTrak, or any other provider. pg_orbit parses and propagates them; it doesn't fetch them.
**Not a replacement for SPICE.** No BSP kernel support, no light-time iteration, no aberration corrections at the IAU 2000A level. pg_orbit trades those last few milliarcseconds of accuracy for the ability to run computations at SQL speed, in parallel, joined with your other data.
**Not a replacement for SPICE.** No BSP kernel support, no light-time iteration, no aberration corrections at the IAU 2000A level. With DE enabled, pg_orbit matches SPICE on raw planet position accuracy — the remaining gap is in apparent-position corrections (aberration, light-time, nutation) that matter for sub-arcsecond apparent coordinates.
**Not a full mission design tool.** The Lambert solver handles ballistic two-body transfers — no low-thrust trajectories, no gravity assists, no multi-body optimization. For full mission design, use GMAT or poliastro.

View File

@ -298,17 +298,17 @@ This is where the difference is most striking. Horizons doesn't compute transfer
## Where Horizons wins
<Aside type="note" title="Horizons remains essential for many use cases">
JPL Horizons uses the DE441 ephemeris (the current long-span planetary ephemeris) and applies the full suite of corrections. For precision work, it's irreplaceable.
<Aside type="note" title="Horizons remains essential for some use cases">
JPL Horizons uses DE441 and applies the full suite of apparent-position corrections. For certain applications, it's the right source — but the accuracy gap has narrowed significantly.
</Aside>
**Accuracy.** DE441 provides sub-milliarcsecond planetary positions. pg_orbit's VSOP87 is accurate to about 1 arcsecond — a factor of 1000 less precise. For spacecraft navigation, radar astrometry, or occultation timing, Horizons is the correct source.
**Apparent-position corrections.** Horizons applies light-time iteration, stellar aberration, and gravitational deflection of light. pg_orbit computes geometric positions. The difference is up to ~20 arcseconds for planets — irrelevant for observation planning, but significant for precision astrometry of apparent coordinates.
**Aberration corrections.** Horizons applies light-time iteration, stellar aberration, and gravitational deflection of light. pg_orbit uses geometric positions only.
**Positional accuracy.** With the built-in VSOP87 pipeline, pg_orbit is accurate to ~1 arcsecond. With [optional DE440/441 support](/guides/de-ephemeris/) (v0.3.0+), pg_orbit reads the same JPL ephemeris data that powers Horizons — matching it at ~0.1 milliarcsecond for geometric positions. The remaining gap is in the apparent-position corrections above, not in the underlying ephemeris.
**Physical properties.** Horizons can return visual magnitude, angular diameter, phase angle, illuminated fraction, and surface brightness. pg_orbit returns geometric position and range.
**Topographic corrections.** Horizons accounts for Earth's oblateness and topographic features at the observer's location using precise geodetic models. pg_orbit uses a WGS84 ellipsoid.
**Topographic corrections.** Horizons accounts for Earth's oblateness and topographic features at the observer's location using precise geodetic models. pg_orbit uses a WGS-84 ellipsoid.
**Body catalog.** Horizons knows about every numbered asteroid, every known comet, and spacecraft past and present. pg_orbit covers the 8 planets, the Sun, the Moon, 19 planetary moons, and whatever comets/asteroids you define with Keplerian elements.
@ -329,11 +329,13 @@ JPL Horizons uses the DE441 ephemeris (the current long-span planetary ephemeris
For many projects, the right approach uses both.
<Steps>
1. **Use Horizons for calibration.** Run the same computation in both systems and compare. pg_orbit should agree with Horizons to within about 1 arcsecond for planets and a few arcseconds for moons. If the difference matters for your application, use Horizons.
1. **Start with VSOP87 (the default).** No configuration needed. For observation planning, rise/set times, and "what's up tonight?" queries, ~1 arcsecond accuracy is more than sufficient.
2. **Use pg_orbit for surveys.** Any time you need positions for many bodies, many timestamps, or many observers — parameter sweeps, scheduling optimization, catalog screening — run it locally.
2. **Enable DE for precision work.** If you need sub-arcsecond planet positions — dish pointing, occultation timing, precision Lambert transfers — [configure a DE file](/guides/de-ephemeris/) and use the `_de()` function variants. You get Horizons-quality positions locally.
3. **Use pg_orbit for integration.** When orbital data needs to join with other database tables — observation logs, equipment schedules, frequency allocations — computing inside PostgreSQL eliminates the ETL step.
3. **Use pg_orbit for surveys.** Any time you need positions for many bodies, many timestamps, or many observers — parameter sweeps, scheduling optimization, catalog screening — run it locally. No rate limits, no network dependency.
4. **Use Horizons for exotic bodies.** If you need positions for Pluto, numbered asteroids with precise osculating elements, or decommissioned spacecraft, Horizons is the only option.
4. **Use pg_orbit for integration.** When orbital data needs to join with other database tables — observation logs, equipment schedules, frequency allocations — computing inside PostgreSQL eliminates the ETL step.
5. **Use Horizons for exotic bodies.** If you need positions for Pluto, numbered asteroids with precise osculating elements, or decommissioned spacecraft, Horizons is the only option.
</Steps>

View File

@ -273,7 +273,7 @@ Predict when a satellite will be visible from a location. This is where Skyfield
pg_orbit does not replace Skyfield for all use cases. Be clear about where the trade-offs fall.
</Aside>
**Precision.** Skyfield uses the full IAU 2000A nutation model, polar motion corrections, and delta-T from IERS data. When you need sub-arcsecond accuracy — dish pointing at microwave frequencies, occultation timing, precision astrometry — Skyfield with DE441 ephemerides is the right tool.
**Apparent-position corrections.** Skyfield uses the full IAU 2000A nutation model, polar motion corrections, delta-T from IERS data, and iterates for light-time and stellar aberration. pg_orbit v0.3.0 can [optionally use DE441](/guides/de-ephemeris/) for the same underlying geometric accuracy (~0.1 milliarcsecond), but Skyfield still applies corrections that pg_orbit does not — corrections that matter for precision apparent-coordinate work like occultation timing or sub-arcsecond astrometry.
**Rise/set finding.** `find_events()` uses numerical root-finding to pinpoint the exact moment a body crosses an elevation threshold. pg_orbit's `predict_passes` uses a step-and-refine approach that's fast for batches but less precise for individual events.
@ -300,11 +300,13 @@ pg_orbit does not replace Skyfield for all use cases. Be clear about where the t
You don't have to choose one or the other. A practical migration path:
<Steps>
1. **Keep Skyfield for precision work.** Anything requiring sub-arcsecond accuracy, aberration corrections, or custom BSP kernels stays in Python.
1. **Keep Skyfield for apparent-position work.** Anything requiring aberration corrections, polar motion, nutation at IAU 2000A level, or custom BSP kernels stays in Python. For raw geometric position accuracy, pg_orbit with [DE enabled](/guides/de-ephemeris/) matches Skyfield.
2. **Move batch observation to SQL.** If you're computing positions for hundreds of objects to filter or correlate with database records, pg_orbit eliminates the Python-to-PostgreSQL round trip.
3. **Move scheduling to SQL.** Pass prediction and visibility windows over time ranges are natural `generate_series` + `predict_passes` queries.
4. **Move reporting to SQL.** "What was above 20 degrees from each of our 5 observers last night?" is a single query with a CROSS JOIN, not a Python loop over observers and timestamps.
5. **Enable DE when accuracy matters.** If you find VSOP87's ~1 arcsecond isn't enough for a specific use case, [configure a DE file](/guides/de-ephemeris/) and switch to `_de()` function variants. Same SQL patterns, same parameters — just add `_de` to the function name.
</Steps>

View File

@ -342,6 +342,35 @@ ORDER BY a.tle <-> b.tle;
This is a screening filter, not a precision conjunction analysis. It identifies pairs worth investigating further — the ones where orbital elements suggest close approaches. Detailed conjunction assessment would then propagate those specific pairs at high time resolution.
## Provider switching: accuracy when you need it
pg_orbit v0.3.0 has two ephemeris providers — the built-in VSOP87 pipeline (~1 arcsecond) and optional [JPL DE440/441](/guides/de-ephemeris/) (~0.1 milliarcsecond). The SQL interface makes switching between them a one-character change.
```sql
-- VSOP87 (built-in, IMMUTABLE, no setup)
SELECT topo_elevation(planet_observe(5, '40.0N 105.3W 1655m'::observer, now()));
-- DE441 (opt-in, STABLE, sub-milliarcsecond)
SELECT topo_elevation(planet_observe_de(5, '40.0N 105.3W 1655m'::observer, now()));
```
Same parameters, same return type, same SQL patterns. Add `_de` and you get Horizons-quality positions. Remove it and you get zero-dependency speed.
The distinction matters at the SQL level because of **volatility**. VSOP87 functions are `IMMUTABLE` — their output depends only on their arguments. PostgreSQL can constant-fold them during planning, use them in expression indexes, and cache results aggressively. DE functions are `STABLE` — they depend on an external file, so the planner evaluates them once per row per statement but can't index on them.
```sql
-- This works: expression index on IMMUTABLE VSOP87 function
CREATE INDEX ON almanac (date)
WHERE topo_elevation(planet_observe(5, location, date)) > 0;
-- For DE queries, use a materialized view instead
CREATE MATERIALIZED VIEW almanac_de AS
SELECT date, topo_elevation(planet_observe_de(5, location, date)) AS el
FROM almanac WHERE topo_elevation(planet_observe_de(5, location, date)) > 0;
```
Use VSOP87 for indexes and fast screening. Use DE for final-answer queries where accuracy matters. Both compose with every other SQL pattern on this page.
## Window functions: tracking changes over time
SQL window functions let you compute values relative to neighboring rows — previous values, running averages, ranks within groups — without self-joins or subqueries.
@ -470,4 +499,4 @@ This query:
In a traditional workflow, each of these steps would be a separate script, a separate data file, and a separate tool. In SQL, they compose into a single declarative statement that the database engine optimizes and parallelizes.
That's the advantage. Not that SQL is a better programming language — it isn't. But for the specific pattern of "evaluate a function over structured parameter spaces and correlate the results with existing data," SQL is exactly the right tool. And pg_orbit puts the functions inside the tool.
That's the advantage. Not that SQL is a better programming language — it isn't. But for the specific pattern of "evaluate a function over structured parameter spaces and correlate the results with existing data," SQL is exactly the right tool. pg_orbit puts 68 functions inside that tool — from 17ms satellite batch propagation to sub-milliarcsecond DE441 planet positions — and every one of them composes with every SQL pattern on this page.

@ -1 +0,0 @@
Subproject commit ff7b98957dfa2979700a482bde9de9542807293e

21
src/sgp4/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020, Project Pluto
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

70
src/sgp4/PROVENANCE.md Normal file
View File

@ -0,0 +1,70 @@
# SGP4/SDP4 Provenance
## Origin
Bill Gray's **sat_code** library, MIT license.
- Repository: https://github.com/Bill-Gray/sat_code
- Commit: `ff7b98957dfa2979700a482bde9de9542807293e`
- License: MIT (see `LICENSE` in this directory)
## What was vendored
7 source files and 2 headers, the minimal set required by pg_orbit:
| Original file | Vendored as | Purpose |
|---------------|-------------|---------|
| `sgp4.cpp` | `sgp4.c` | Near-earth propagator (period < 225 min) |
| `sdp4.cpp` | `sdp4.c` | Deep-space propagator (period >= 225 min) |
| `deep.cpp` | `deep.c` | Lunar/solar perturbations, resonance integration |
| `common.cpp` | `common.c` | Shared initialization (Brouwer mean elements, Kepler solver) |
| `basics.cpp` | `basics.c` | `select_ephemeris()`, `FMod2p()`, library version |
| `get_el.cpp` | `get_el.c` | TLE parsing (`parse_elements()`, checksum) |
| `tle_out.cpp` | `tle_out.c` | TLE output (`write_elements_in_tle_format()`) |
| `norad.h` | `norad.h` | Public interface (tle_t, function prototypes) |
| `norad_in.h` | `norad_in.h` | Internal structures (deep_arg_t, init_t, constants) |
## The `.cpp` to `.c` rename
sat_code uses `.cpp` file extensions but contains **zero C++ features** — no classes,
templates, namespaces, exceptions, or STL usage. The code compiles cleanly under
`gcc -std=c99` with no modifications to the logic. Renaming to `.c` eliminates the
phantom dependency on `g++` and `-lstdc++`.
## Modifications from upstream
1. **Renamed `.cpp` to `.c`** — no code changes required (already valid C99).
2. **Stripped `DLL_FUNC` / `__stdcall`** — Win32 DLL export decorators, not needed
on Linux/PGXS.
3. **Removed `extern "C"` wrapper** in `norad.h` — no longer compiling as C++.
4. **Removed unused model prototypes** from `norad.h``SGP_init()`, `SGP()`,
`SGP8_init()`, `SGP8()`, `SDP8_init()`, `SDP8()`, and Win32 dynamic loading
functions. pg_orbit uses only SGP4/SDP4.
5. **Added forward declarations** to suppress `-Wmissing-prototypes`:
- `common.c`: `sxpall_common_init()` declared before definition
- `basics.c`: `sxpx_library_version()` declared before definition
6. **Changed `inline` to `static inline`** for `centralize_angle()` in `common.c`.
In C (vs C++), bare `inline` requires an external definition; `static inline`
gives the intended behavior.
## What was NOT changed
- All numerical logic is **byte-identical** to upstream commit `ff7b989`.
- The `deep.c` resonance integration (574 lines) is untouched.
- Global statics in `deep.c` (`dpsec_integration_step`, `dpsec_integration_order`,
`is_dundee_compliant`) and the cache in `sdp4.c` (`lunar_solar_position`) are
preserved. These are safe in PostgreSQL's process-per-connection fork model.
- `N_SAT_PARAMS` retains its original value for binary compatibility.
- Ephemeris type detection in `select_ephemeris()` still recognizes SGP8/SDP8 types
even though their implementations are stripped.
## Verification
All 12 existing regression test suites produce **byte-identical output** to the
submodule-based build. The vendored code was additionally verified against the 518
Vallado test vectors (AIAA 2006-6753-Rev1).

79
src/sgp4/basics.c Normal file
View File

@ -0,0 +1,79 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* basics.c - Ephemeris type selection and utility functions
*
* select_ephemeris(): Determines whether a TLE should use the near-earth
* (SGP4, period < 225 min) or deep-space (SDP4, period >= 225 min)
* propagator. STR#3 p. 74, Vallado Rev-1 Section II.
*
* FMod2p(): Reduces angle to [0, 2*pi). Used throughout propagation.
*/
#include <math.h>
#include "norad.h"
#include "norad_in.h"
/*------------------------------------------------------------------*/
/* FMOD2P */
double FMod2p( const double x)
{
double rval = fmod( x, twopi);
if( rval < 0.)
rval += twopi;
return( rval);
} /* fmod2p */
#define EPHEM_TYPE_DEFAULT '0'
#define EPHEM_TYPE_SGP '1'
#define EPHEM_TYPE_SGP4 '2'
#define EPHEM_TYPE_SDP4 '3'
#define EPHEM_TYPE_SGP8 '4'
#define EPHEM_TYPE_SDP8 '5'
#define EPHEM_TYPE_HIGH 'H'
/*------------------------------------------------------------------*/
void sxpall_common_init( const tle_t *tle, deep_arg_t *deep_arg);
/* common.c */
/* Selects the type of ephemeris to be used (SGP*-SDP*) */
int select_ephemeris( const tle_t *tle)
{
int rval;
if( tle->ephemeris_type == EPHEM_TYPE_HIGH)
rval = 1; /* force high-orbit state vector model */
else if( tle->xno <= 0. || tle->eo > 1. || tle->eo < 0.)
rval = -1; /* error in input data */
else if( tle->ephemeris_type == EPHEM_TYPE_SGP4
|| tle->ephemeris_type == EPHEM_TYPE_SGP8)
rval = 0; /* specifically marked non-deep */
else if( tle->ephemeris_type == EPHEM_TYPE_SDP4
|| tle->ephemeris_type == EPHEM_TYPE_SDP8)
rval = 1; /* specifically marked deep */
else
{
deep_arg_t deep_arg;
sxpall_common_init( tle, &deep_arg);
/* Select a deep-space/near-earth ephemeris */
/* If the orbital period is greater than 225 minutes... */
if (twopi / deep_arg.xnodp >= 225.)
rval = 1; /* yes, it should be a deep-space (SDPx) ephemeris */
else
rval = 0; /* no, you can go with an SGPx ephemeris */
}
return( rval);
} /* End of select_ephemeris() */
/*------------------------------------------------------------------*/
/* Forward declaration to suppress -Wmissing-prototypes */
long sxpx_library_version( void);
long sxpx_library_version( void)
{
return( 0x100);
}

283
src/sgp4/common.c Normal file
View File

@ -0,0 +1,283 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* common.c - Shared initialization for SGP4 and SDP4
*
* Implements the Brouwer mean element recovery (STR#3 pp. 77-78) and the
* Kepler equation solver with Newton-Raphson iteration (STR#3 Eq. 2-35).
*
* sxpall_common_init(): Recovers original mean motion (xnodp) and
* semimajor axis (aodp) from the TLE elements. STR#3 Eqs. 12-1..12-6.
*
* sxpx_common_init(): Computes drag and secular perturbation coefficients
* shared between SGP4 and SDP4. STR#3 pp. 77-78, Vallado Rev-1 Sec. II.
*
* sxpx_posn_vel(): Solves Kepler's equation and applies short-period
* corrections to compute final position/velocity. STR#3 Eqs. 2-35..2-47,
* Vallado Rev-1 Eqs. 2-4.
*/
#include <math.h>
#include <assert.h>
#include "norad.h"
#include "norad_in.h"
/* params[1] and [6]-[9] were used in earlier implementations, but are
now unused */
#define c2 params[0]
#define c1 params[2]
#define c4 params[3]
#define xnodcf params[4]
#define t2cof params[5]
/* Forward declaration to suppress -Wmissing-prototypes */
void sxpall_common_init( const tle_t *tle, deep_arg_t *deep_arg);
void sxpall_common_init( const tle_t *tle, deep_arg_t *deep_arg)
{
const double a1 = pow(xke / tle->xno, two_thirds); /* in Earth radii */
double del1, ao, delo, tval;
/* Recover original mean motion (xnodp) and */
/* semimajor axis (aodp) from input elements. */
deep_arg->cosio = cos( tle->xincl);
deep_arg->cosio2 = deep_arg->cosio * deep_arg->cosio;
deep_arg->eosq = tle->eo*tle->eo;
deep_arg->betao2 = 1-deep_arg->eosq;
deep_arg->betao = sqrt(deep_arg->betao2);
tval = 1.5 * ck2 * (3. * deep_arg->cosio2 - 1.) / (deep_arg->betao * deep_arg->betao2);
del1 = tval / (a1 * a1);
ao = a1 * (1. - del1 * (1. / 3. + del1 * ( 1. + 134./81. * del1)));
delo = tval / (ao * ao);
deep_arg->xnodp = tle->xno / (1+delo); /* in radians/minute */
deep_arg->aodp = ao / (1-delo);
}
void sxpx_common_init( double *params, const tle_t *tle,
init_t *init, deep_arg_t *deep_arg)
{
double
eeta, etasq, perige, pinv, pinvsq,
psisq, qoms24, temp1, temp2, temp3,
cosio4, tsi_squared, x3thm1, xhdot1;
sxpall_common_init( tle, deep_arg);
x3thm1 = 3. * deep_arg->cosio2 - 1.;
/* For perigee below 156 km, the values */
/* of s and qoms2t are altered. */
init->s4 = s_const;
qoms24 = qoms2t;
perige = (deep_arg->aodp * (1-tle->eo) - ae) * earth_radius_in_km;
if( perige < 156.)
{
double temp_val, temp_val_squared;
if(perige <= 98.)
init->s4 = 20;
else
init->s4 = perige-78.;
temp_val = (120. - init->s4) * ae / earth_radius_in_km;
temp_val_squared = temp_val * temp_val;
qoms24 = temp_val_squared * temp_val_squared;
init->s4 = init->s4 / earth_radius_in_km + ae;
} /* End of if(perige <= 156) */
pinv = 1. / (deep_arg->aodp * deep_arg->betao2);
pinvsq = pinv * pinv;
init->tsi = 1. / (deep_arg->aodp - init->s4);
init->eta = deep_arg->aodp*tle->eo*init->tsi;
etasq = init->eta*init->eta;
eeta = tle->eo*init->eta;
psisq = fabs(1-etasq);
tsi_squared = init->tsi * init->tsi;
init->coef = qoms24 * tsi_squared * tsi_squared;
init->coef1 = init->coef / pow(psisq,3.5);
c2 = init->coef1 * deep_arg->xnodp * (deep_arg->aodp*(1+1.5*etasq+eeta*
(4+etasq))+0.75*ck2*init->tsi/psisq*x3thm1*(8+3*etasq*(8+etasq)));
c1 = tle->bstar*c2;
deep_arg->sinio = sin(tle->xincl);
c4 = 2*deep_arg->xnodp*init->coef1*deep_arg->aodp*deep_arg->betao2*
(init->eta*(2+0.5*etasq)+tle->eo*(0.5+2*etasq)-2*ck2*init->tsi/
(deep_arg->aodp*psisq)*(-3*x3thm1*(1-2*eeta+etasq*
(1.5-0.5*eeta))+0.75*(1. - deep_arg->cosio2) *(2*etasq-eeta*(1+etasq))*
cos(2*tle->omegao)));
cosio4 = deep_arg->cosio2 * deep_arg->cosio2;
temp1 = 3*ck2*pinvsq*deep_arg->xnodp;
temp2 = temp1 * ck2 * pinvsq;
temp3 = 1.25 * ck4 * pinvsq * pinvsq * deep_arg->xnodp;
deep_arg->xmdot = deep_arg->xnodp
+ temp1 * deep_arg->betao* x3thm1 / 2.
+ temp2 * deep_arg->betao*
(13-78*deep_arg->cosio2+137*cosio4) / 16.;
deep_arg->omgdot = -temp1 * (1. - 5 * deep_arg->cosio2) / 2.
+ temp2 * (7-114*deep_arg->cosio2+395*cosio4) / 16.
+ temp3 * (3-36*deep_arg->cosio2+49*cosio4);
xhdot1 = -temp1*deep_arg->cosio;
deep_arg->xnodot = xhdot1+(temp2*(4-19*deep_arg->cosio2) / 2.
+ 2*temp3*(3-7*deep_arg->cosio2))*deep_arg->cosio;
xnodcf = 3.5*deep_arg->betao2*xhdot1*c1;
t2cof = 1.5*c1;
}
static inline double centralize_angle( const double ival)
{
double rval = fmod( ival, twopi);
if( rval > pi)
rval -= twopi;
else if( rval < - pi)
rval += twopi;
return( rval);
}
#define MAX_KEPLER_ITER 10
int sxpx_posn_vel( const double xnode, const double a, const double ecc,
const double cosio, const double sinio,
const double xincl, const double omega,
const double xl, double *pos, double *vel)
{
/* Long period periodics */
const double axn = ecc*cos(omega);
double temp = 1/(a*(1.-ecc*ecc));
const double xlcof = .125 * a3ovk2 * sinio * (3+5*cosio)/ (1. + cosio);
const double aycof = 0.25 * a3ovk2 * sinio;
const double xll = temp*xlcof*axn;
const double aynl = temp*aycof;
const double xlt = xl+xll;
const double ayn = ecc*sin(omega)+aynl;
const double elsq = axn*axn+ayn*ayn;
const double capu = centralize_angle( xlt - xnode);
const double chicken_factor_on_eccentricity = 1.e-6;
double epw = capu;
double temp1, temp2;
double ecosE, esinE, pl, r;
double betal;
double u, sinu, cosu, sin2u, cos2u;
double rk, uk, xnodek, xinck;
double sinuk, cosuk, sinik, cosik, sinnok, cosnok, xmx, xmy;
double sinEPW, cosEPW;
double ux, uy, uz;
int i, rval = 0;
/* Dundee changes: items dependent on cosio get recomputed: */
const double cosio_squared = cosio * cosio;
const double x3thm1 = 3.0 * cosio_squared - 1.0;
const double sinio2 = 1.0 - cosio_squared;
const double x7thm1 = 7.0 * cosio_squared - 1.0;
/* Added 29 Mar 2003, modified 26 Sep 2006: extremely */
/* decayed satellites can end up "orbiting" within the */
/* earth. Eventually, the semimajor axis becomes zero, */
/* then negative. In that case, or if the orbit is near */
/* to parabolic, we zero the posn/vel and quit. If the */
/* object has a perigee or apogee indicating a crash, we */
/* just flag it. Revised 28 Oct 2006. */
if( a < 0.)
rval = SXPX_ERR_NEGATIVE_MAJOR_AXIS;
if( elsq > 1. - chicken_factor_on_eccentricity)
rval = SXPX_ERR_NEARLY_PARABOLIC;
for( i = 0; i < 3; i++)
{
pos[i] = 0.;
if( vel)
vel[i] = 0.;
}
if( rval)
return( rval);
if( a * (1. - ecc) < 1. && a * (1. + ecc) < 1.) /* entirely within earth */
rval = SXPX_WARN_ORBIT_WITHIN_EARTH; /* remember, e can be negative */
if( a * (1. - ecc) < 1. || a * (1. + ecc) < 1.) /* perigee within earth */
rval = SXPX_WARN_PERIGEE_WITHIN_EARTH;
/* Solve Kepler's' Equation */
for( i = 0; i < MAX_KEPLER_ITER; i++)
{
const double newton_raphson_epsilon = 1e-12;
double f, fdot, delta_epw;
int do_second_order_newton_raphson = 1;
sinEPW = sin( epw);
cosEPW = cos( epw);
ecosE = axn * cosEPW + ayn * sinEPW;
esinE = axn * sinEPW - ayn * cosEPW;
f = capu - epw + esinE;
if (fabs(f) < newton_raphson_epsilon) break;
fdot = 1. - ecosE;
delta_epw = f / fdot;
if( !i)
{
const double max_newton_raphson = 1.25 * fabs( ecc);
do_second_order_newton_raphson = 0;
if( delta_epw > max_newton_raphson)
delta_epw = max_newton_raphson;
else if( delta_epw < -max_newton_raphson)
delta_epw = -max_newton_raphson;
else
do_second_order_newton_raphson = 1;
}
if( do_second_order_newton_raphson)
delta_epw = f / (fdot + 0.5*esinE*delta_epw);
/* f/(fdot - 0.5*fdotdot * f / fdot) */
epw += delta_epw;
}
if( i == MAX_KEPLER_ITER)
return( SXPX_ERR_CONVERGENCE_FAIL);
/* Short period preliminary quantities */
temp = 1-elsq;
pl = a*temp;
r = a*(1-ecosE);
temp2 = a / r;
betal = sqrt(temp);
temp = esinE/(1+betal);
cosu = temp2 * (cosEPW - axn + ayn * temp);
sinu = temp2 * (sinEPW - ayn - axn * temp);
u = atan2( sinu, cosu);
sin2u = 2*sinu*cosu;
cos2u = 2*cosu*cosu-1;
temp1 = ck2 / pl;
temp2 = temp1 / pl;
/* Update for short periodics */
rk = r*(1-1.5*temp2*betal*x3thm1)+0.5*temp1*sinio2*cos2u;
uk = u-0.25*temp2*x7thm1*sin2u;
xnodek = xnode+1.5*temp2*cosio*sin2u;
xinck = xincl+1.5*temp2*cosio*sinio*cos2u;
/* Orientation vectors */
sinuk = sin(uk);
cosuk = cos(uk);
sinik = sin(xinck);
cosik = cos(xinck);
sinnok = sin(xnodek);
cosnok = cos(xnodek);
xmx = -sinnok*cosik;
xmy = cosnok*cosik;
ux = xmx*sinuk+cosnok*cosuk;
uy = xmy*sinuk+sinnok*cosuk;
uz = sinik*sinuk;
/* Position and velocity */
pos[0] = rk * ux * earth_radius_in_km;
pos[1] = rk * uy * earth_radius_in_km;
pos[2] = rk * uz * earth_radius_in_km;
if( vel)
{
const double rdot = xke * sqrt(a) * esinE / r;
const double rfdot = xke * sqrt(pl) / r;
const double xn = xke / (a * sqrt(a));
const double rdotk = rdot - xn * temp1 * sinio2 * sin2u;
const double rfdotk = rfdot + xn * temp1 * (sinio2 * cos2u + 1.5 * x3thm1);
const double vx = xmx * cosuk - cosnok * sinuk;
const double vy = xmy * cosuk - sinnok * sinuk;
const double vz = sinik*cosuk;
vel[0] = (rdotk * ux + rfdotk * vx) * earth_radius_in_km;
vel[1] = (rdotk * uy + rfdotk * vy) * earth_radius_in_km;
vel[2] = (rdotk * uz + rfdotk * vz) * earth_radius_in_km;
}
return( rval);
} /*SGP4*/

781
src/sgp4/deep.c Normal file
View File

@ -0,0 +1,781 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* deep.c - Deep-space lunar/solar perturbations and resonance integration
*
* Implements the deep-space model from STR#1 (Hujsak 1979, 72pp) and
* STR#3 (Hoots & Roehrich 1980) Chapter 8. This is the most complex
* module: 80+ intermediate variables, 3 resonance modes.
*
* Deep_dpinit(): Lunar/solar perturbation initialization with 2-pass
* refinement. Computes solar terms, then lunar terms, then recomputes
* solar with improved data. Determines resonance mode:
* - Synchronous (GEO): period ~1436 min, mean motion ~1 rev/day
* - Half-day (Molniya): period ~720 min, e >= 0.5, ~2 rev/day
* - Non-resonant: all other deep-space orbits
* STR#1 Chapter 4, STR#3 Eqs. 8-1..8-47.
*
* Deep_dpsec(): Secular perturbation updates. For resonant orbits, performs
* numerical integration of mean motion and longitude in 720-minute steps.
* STR#1 Chapter 5, STR#3 Eqs. 8-48..8-62.
*
* Deep_dpper(): Periodic perturbation corrections (lunar + solar).
* Includes Lyddane modification for near-zero inclination to avoid
* singularity in node/perigee. STR#1 Chapter 6, STR#3 Eqs. 8-63..8-80.
*
* Global statics (safe in PostgreSQL fork model):
* dpsec_integration_step = 720.0 (minutes, never modified by pg_orbit)
* dpsec_integration_order = 2 (never modified by pg_orbit)
* is_dundee_compliant = 0 (never modified by pg_orbit)
*/
#include <math.h>
#include "norad.h"
#include "norad_in.h"
/* omega_E = number of (sidereal) rotations of the earth per UT day: */
const double omega_E = 1.00273790934;
#ifdef USE_ACCURATE_ANOMALISTICS
/* The anomalistic month is the mean time it takes the moon to go
from perigee to perigee. The anomalistic year is the mean time
it takes the earth to go from perihelion to perihelion.
The following lines compute the "correct" mean motions of
the earth and sun: zns_per_day is the rate of change of
the earth's mean anomaly, in radians per day, and the 'znl'
quantities give similar rates for the moon.
Problem is, the original SxPx sources give values that are
close to, but not exactly equal to, these values. The
"new" values are probably improvements from further observations,
but if you actually used them, you'd break compatibility with
older implementations, and wouldn't match up with the way
NORAD and others actually compute TLEs. So the following few
lines should be regarded as explanatory; we're stuck with using
the older, less accurate SxPx values. */
const double days_per_anomalistic_month = 27.554551;
const double days_per_anomalistic_year = 365.259635864;
const double zns_per_day = twopi / days_per_anomalistic_year;
const double zns_per_min = zns_per_day / minutes_per_day;
const double znl_per_day = twopi / days_per_anomalistic_month;
const double znl_per_min = znl_per_day / minutes_per_day;
/* thdt = angular velocity of the earth, in radians/minute. */
/* Again, we have to use a less accurate value from the original */
/* SxPx, to replicate everybody else's results. */
const double thdt = twopi * omega_E / minutes_per_day;
#else
const double zns_per_min = 1.19459E-5;
const double zns_per_day = 0.017201977;
const double znl_per_day = 0.228027132;
const double znl_per_min = 1.5835218E-4;
const double thdt = 4.37526908801129966e-3;
#endif
/* zes = mean eccentricity of earth's orbit */
/* zel = mean eccentricity of the moon's orbit */
#define zes 0.01675
#define zel 0.05490
/* thetag: computes Greenwich sidereal time, as an angle in radians
from 0 to 2*pi, for a given UT0 JD. */
static inline double ThetaG( const double jd)
{
/* Reference: The 1992 Astronomical Almanac, page B6. */
/* Earth rotations per sidereal day (non-constant) */
const double UT = fmod( jd + .5, 1.);
const double seconds_per_day = 86400.;
const double jd_2000 = 2451545.0; /* 1.5 Jan 2000 = JD 2451545. */
double t_cen, GMST, rval;
t_cen = (jd - UT - jd_2000) / 36525.;
GMST = 24110.54841 + t_cen * (8640184.812866 + t_cen *
(0.093104 - t_cen * 6.2E-6));
GMST = fmod( GMST / seconds_per_day + omega_E * UT, 1.);
if( GMST < 0.)
GMST += 1.;
rval = twopi * GMST;
return( rval);
} /*Function thetag*/
/* Previously, the integration step was given as two variables: */
/* 'stepp' (positive step = +720) and 'stepn' (negative step = -720). */
/* Exactly why this should be made a variable, much less _different_ */
/* variables for positive and negative, is entirely unclear... */
/* (8 Apr 2003) INTEGRATION_STEP is now a maximum integration step. */
/* The code in 'dpsec' splits the integration range into equally-sized */
/* pieces of 720 minutes (half a day) or smaller. */
/* (25 Aug 2006) INTEGRATION_STEP is now the variable */
/* 'dpsec_integration_step' so I can experiment with different */
/* integration techniques & evaluate their errors. */
static double dpsec_integration_step = 720.;
static int dpsec_integration_order = 2;
static int is_dundee_compliant = 0;
void sxpx_set_implementation_param( const int param_index,
const int new_param)
{
switch( param_index)
{
case SXPX_DPSEC_INTEGRATION_ORDER:
dpsec_integration_order = new_param;
break;
case SXPX_DUNDEE_COMPLIANCE:
is_dundee_compliant = new_param;
break;
}
}
void sxpx_set_dpsec_integration_step( const double new_step_size)
{
dpsec_integration_step = new_step_size;
}
static inline double eval_cubic_poly( const double x, const double constant,
const double linear, const double quadratic_term,
const double cubic_term)
{
return( constant + x * (linear + x * (quadratic_term + x * cubic_term)));
}
/* DEEP */
void Deep_dpinit( const tle_t *tle, deep_arg_t *deep_arg)
{
const double sinq = sin(tle->xnodeo);
const double cosq = cos(tle->xnodeo);
const double aqnv = 1/deep_arg->aodp;
const double c1ss = 2.9864797E-6;
/* 1900 Jan 0.5 = JD 2415020. */
const double days_since_1900 = tle->epoch - 2415020.;
/* zcosi, zsini start as cos & sin of obliquity of earth's */
/* orbit = 23.444100 degrees... matches obliquity in 1963; */
/* probably just a slightly inaccurate value: */
const double zcosi0 = 0.91744867;
const double zsini0 = 0.39785416;
double zcosi = zcosi0;
double zsini = zsini0;
/* zcosg, zsing start as cos & sin of -78.779197 degrees */
double zsing = -0.98088458;
double zcosg = 0.1945905;
double bfact, cc = c1ss, se;
double ze = zes, zn = zns_per_min;
double sgh, sh, si;
double zsinh = sinq, zcosh = cosq;
double zcosil, zsinil, zcoshl, zsinhl;
double zcosgl, zsingl;
double sl;
int iteration;
deep_arg->thgr = ThetaG( tle->epoch);
deep_arg->xnq = deep_arg->xnodp;
deep_arg->omegaq = tle->omegao;
/* if( days_since_1900 != deep_arg->preep) */
{
const double lunar_asc_node = 4.5236020 - 9.2422029E-4 * days_since_1900;
const double sin_asc_node = sin(lunar_asc_node);
const double cos_asc_node = cos(lunar_asc_node);
const double c_minus_gam = znl_per_day * days_since_1900 - 1.1151842;
/* gam = longitude of perigee for the moon, in radians: */
const double gam = 5.8351514 + 0.0019443680 * days_since_1900;
double zx, zy;
deep_arg->preep = days_since_1900;
zcosil = 0.91375164 - 0.03568096 * cos_asc_node;
zsinil = sqrt(1. - zcosil * zcosil);
zsinhl = 0.089683511 * sin_asc_node / zsinil;
zcoshl = sqrt(1. - zsinhl*zsinhl);
deep_arg->zmol = FMod2p( c_minus_gam);
zx = zsini0 * sin_asc_node / zsinil;
zy = zcoshl * cos_asc_node + zcosi0 * zsinhl * sin_asc_node;
zx = atan2( zx, zy) + gam - lunar_asc_node;
zcosgl = cos( zx);
zsingl = sin( zx);
deep_arg->zmos = FMod2p( 6.2565837
+ zns_per_day * days_since_1900);
} /* End if( days_since_1900 != deep_arg->preep) */
/* Do solar terms */
deep_arg->savtsn = 1E20;
/* There was previously some convoluted logic here, but it boils */
/* down to this: we compute the solar terms, then the lunar terms. */
/* On a second pass, we recompute the solar terms, taking advantage */
/* of the improved data that resulted from computing lunar terms. */
for( iteration = 0; iteration < 2; iteration++)
{
const double c1l = 4.7968065E-7;
const double a1 = zcosg * zcosh + zsing * zcosi * zsinh;
const double a3 = -zsing * zcosh + zcosg * zcosi * zsinh;
const double a7 = -zcosg * zsinh + zsing * zcosi * zcosh;
const double a8 = zsing * zsini;
const double a9 = zsing * zsinh + zcosg * zcosi * zcosh;
const double a10 = zcosg * zsini;
const double a2 = deep_arg->cosio * a7 + deep_arg->sinio * a8;
const double a4 = deep_arg->cosio * a9 + deep_arg->sinio * a10;
const double a5 = -deep_arg->sinio * a7 + deep_arg->cosio * a8;
const double a6 = -deep_arg->sinio * a9 + deep_arg->cosio * a10;
const double x1 = a1 * deep_arg->cosg + a2 * deep_arg->sing;
const double x2 = a3 * deep_arg->cosg + a4 * deep_arg->sing;
const double x3 = -a1 * deep_arg->sing + a2 * deep_arg->cosg;
const double x4 = -a3 * deep_arg->sing + a4 * deep_arg->cosg;
const double x5 = a5 * deep_arg->sing;
const double x6 = a6 * deep_arg->sing;
const double x7 = a5 * deep_arg->cosg;
const double x8 = a6 * deep_arg->cosg;
const double z31 = 12 * x1 * x1 - 3 * x3 * x3;
const double z32 = 24 * x1 * x2 - 6 * x3 * x4;
const double z33 = 12 * x2 * x2 - 3 * x4 * x4;
const double z11 = -6 * a1 * a5 + deep_arg->eosq * (-24 * x1 * x7 - 6 * x3 * x5);
const double z12 = -6 * (a1 * a6 + a3 * a5) + deep_arg->eosq *
(-24 * (x2 * x7 + x1 * x8) - 6 * (x3 * x6 + x4 * x5));
const double z13 = -6 * a3 * a6 + deep_arg->eosq * (-24 * x2 * x8 - 6 * x4 * x6);
const double z21 = 6 * a2 * a5 + deep_arg->eosq * (24 * x1 * x5 - 6 * x3 * x7);
const double z22 = 6 * (a4 * a5 + a2 * a6) + deep_arg->eosq *
(24 * (x2 * x5 + x1 * x6) - 6 * (x4 * x7 + x3 * x8));
const double z23 = 6 * a4 * a6 + deep_arg->eosq * (24 * x2 * x6 - 6 * x4 * x8);
const double s3 = cc / deep_arg->xnq;
const double s2 = -0.5 * s3 / deep_arg->betao;
const double s4 = s3 * deep_arg->betao;
const double s1 = -15 * tle->eo * s4;
const double s5 = x1 * x3 + x2 * x4;
const double s6 = x2 * x3 + x1 * x4;
const double s7 = x2 * x4 - x1 * x3;
double z1 = 3 * (a1 * a1 + a2 * a2) + z31 * deep_arg->eosq;
double z2 = 6 * (a1 * a3 + a2 * a4) + z32 * deep_arg->eosq;
double z3 = 3 * (a3 * a3 + a4 * a4) + z33 * deep_arg->eosq;
z1 = z1 + z1 + deep_arg->betao2 * z31;
z2 = z2 + z2 + deep_arg->betao2 * z32;
z3 = z3 + z3 + deep_arg->betao2 * z33;
se = s1*zn*s5;
si = s2*zn*(z11+z13);
sl = -zn*s3*(z1+z3-14-6*deep_arg->eosq);
sgh = s4*zn*(z31+z33-6);
if( tle->xincl < pi / 60.) /* pi / 60 radians = 3 degrees */
sh = 0;
else
sh = -zn*s2*(z21+z23);
deep_arg->ee2 = 2*s1*s6;
deep_arg->e3 = 2*s1*s7;
deep_arg->xi2 = 2*s2*z12;
deep_arg->xi3 = 2*s2*(z13-z11);
deep_arg->xl2 = -2*s3*z2;
deep_arg->xl3 = -2*s3*(z3-z1);
deep_arg->xl4 = -2*s3*(-21-9*deep_arg->eosq)*ze;
deep_arg->xgh2 = 2*s4*z32;
deep_arg->xgh3 = 2*s4*(z33-z31);
deep_arg->xgh4 = -18*s4*ze;
deep_arg->xh2 = -2*s2*z22;
deep_arg->xh3 = -2*s2*(z23-z21);
if( !iteration) /* we compute lunar terms only on the first pass: */
{
deep_arg->sse = se;
deep_arg->ssi = si;
deep_arg->ssl = sl;
deep_arg->ssh = (deep_arg->sinio ? sh / deep_arg->sinio : 0.);
deep_arg->ssg = sgh-deep_arg->cosio*deep_arg->ssh;
deep_arg->se2 = deep_arg->ee2;
deep_arg->si2 = deep_arg->xi2;
deep_arg->sl2 = deep_arg->xl2;
deep_arg->sgh2 = deep_arg->xgh2;
deep_arg->sh2 = deep_arg->xh2;
deep_arg->se3 = deep_arg->e3;
deep_arg->si3 = deep_arg->xi3;
deep_arg->sl3 = deep_arg->xl3;
deep_arg->sgh3 = deep_arg->xgh3;
deep_arg->sh3 = deep_arg->xh3;
deep_arg->sl4 = deep_arg->xl4;
deep_arg->sgh4 = deep_arg->xgh4;
zcosg = zcosgl;
zsing = zsingl;
zcosi = zcosil;
zsini = zsinil;
zcosh = zcoshl * cosq + zsinhl * sinq;
zsinh = sinq * zcoshl - cosq * zsinhl;
zn = znl_per_min;
cc = c1l;
ze = zel;
}
}
deep_arg->sse += se;
deep_arg->ssi += si;
deep_arg->ssl += sl;
deep_arg->ssg += sgh;
if( deep_arg->sinio)
{
deep_arg->ssg -= sh * deep_arg->cosio / deep_arg->sinio;
deep_arg->ssh += sh / deep_arg->sinio;
}
/* "if mean motion is 1.893053 to 2.117652 revs/day, and ecc >= .5" */
if( deep_arg->xnq >= 0.00826 && deep_arg->xnq <= 0.00924 && tle->eo >= .5)
{ /* start of 12-hour orbit, e >.5 section */
/* 'root##' variables are somewhat inaccurate values for */
/* a few fully normalized sectorial/tesseral spherical */
/* harmonics of the Earth's gravitational potential: */
const double root22 = 1.7891679E-6;
const double root32 = 3.7393792E-7;
const double root44 = 7.3636953E-9;
const double root52 = 1.1428639E-7;
const double root54 = 2.1765803E-9;
const double g201 = -0.306 - (tle->eo - 0.64) * 0.440;
const double sini2 = deep_arg->sinio*deep_arg->sinio;
const double f220 = 0.75*(1+2*deep_arg->cosio+deep_arg->cosio2);
const double f221 = 1.5 * sini2;
const double f321 = 1.875 * deep_arg->sinio * (1 - 2 *\
deep_arg->cosio - 3 * deep_arg->cosio2);
const double f322 = -1.875*deep_arg->sinio*(1+2*
deep_arg->cosio-3*deep_arg->cosio2);
const double f441 = 35 * sini2 * f220;
const double f442 = 39.3750 * sini2 * sini2;
const double f522 = 9.84375*deep_arg->sinio*(sini2*(1-2*deep_arg->cosio-5*
deep_arg->cosio2)+0.33333333*(-2+4*deep_arg->cosio+
6*deep_arg->cosio2));
const double f523 = deep_arg->sinio*(4.92187512*sini2*(-2-4*
deep_arg->cosio+10*deep_arg->cosio2)+6.56250012
*(1+2*deep_arg->cosio-3*deep_arg->cosio2));
const double f542 = 29.53125*deep_arg->sinio*(2-8*
deep_arg->cosio+deep_arg->cosio2*
(-12+8*deep_arg->cosio+10*deep_arg->cosio2));
const double f543 = 29.53125*deep_arg->sinio*(-2-8*deep_arg->cosio+
deep_arg->cosio2*(12+8*deep_arg->cosio-10*
deep_arg->cosio2));
double g410, g422, g520, g521, g532, g533;
double g211, g310, g322;
double temp, temp1;
deep_arg->resonance_flag = 1; /* it _is_ resonant... */
deep_arg->synchronous_flag = 0; /* but it's not synchronous */
/* Geopotential resonance initialization for 12 hour orbits: */
if (tle->eo <= 0.65)
{
g211 = 3.616-13.247*tle->eo+16.290*deep_arg->eosq;
g310 = eval_cubic_poly( tle->eo, -19.302, 117.390, -228.419, 156.591);
g322 = eval_cubic_poly( tle->eo, -18.9068, 109.7927, -214.6334, 146.5816);
g410 = eval_cubic_poly( tle->eo, -41.122, 242.694, -471.094, 313.953);
g422 = eval_cubic_poly( tle->eo, -146.407, 841.880, -1629.014, 1083.435);
g520 = eval_cubic_poly( tle->eo, -532.114, 3017.977, -5740.032, 3708.276);
/* NOTE: quadratic coeff was 5740 */
}
else
{
g211 = eval_cubic_poly( tle->eo, -72.099, 331.819, -508.738, 266.724);
g310 = eval_cubic_poly( tle->eo, -346.844, 1582.851, -2415.925, 1246.113);
g322 = eval_cubic_poly( tle->eo, -342.585, 1554.908, -2366.899, 1215.972);
g410 = eval_cubic_poly( tle->eo, -1052.797, 4758.686, -7193.992, 3651.957);
g422 = eval_cubic_poly( tle->eo, -3581.69, 16178.11, -24462.77, 12422.52);
if (tle->eo <= 0.715)
g520 = eval_cubic_poly( tle->eo, 1464.74, -4664.75, 3763.64, 0.);
else
g520 = eval_cubic_poly( tle->eo, -5149.66, 29936.92, -54087.36, 31324.56);
} /* End if (tle->eo <= 0.65) */
if (tle->eo < 0.7)
{
g533 = eval_cubic_poly( tle->eo, -919.2277, 4988.61, -9064.77, 5542.21);
g521 = eval_cubic_poly( tle->eo, -822.71072, 4568.6173, -8491.4146, 5337.524);
g532 = eval_cubic_poly( tle->eo, -853.666, 4690.25, -8624.77, 5341.4);
}
else
{
g533 = eval_cubic_poly( tle->eo, -37995.78, 161616.52, -229838.2, 109377.94);
g521 = eval_cubic_poly( tle->eo, -51752.104, 218913.95, -309468.16, 146349.42);
g532 = eval_cubic_poly( tle->eo, -40023.88, 170470.89, -242699.48, 115605.82);
} /* End if (tle->eo <= 0.7) */
temp1 = 3 * deep_arg->xnq * deep_arg->xnq * aqnv * aqnv;
temp = temp1*root22;
deep_arg->d2201 = temp * f220 * g201;
deep_arg->d2211 = temp * f221 * g211;
temp1 *= aqnv;
temp = temp1*root32;
deep_arg->d3210 = temp * f321 * g310;
deep_arg->d3222 = temp * f322 * g322;
temp1 *= aqnv;
temp = 2*temp1*root44;
deep_arg->d4410 = temp * f441 * g410;
deep_arg->d4422 = temp * f442 * g422;
temp1 *= aqnv;
temp = temp1*root52;
deep_arg->d5220 = temp * f522 * g520;
deep_arg->d5232 = temp * f523 * g532;
temp = 2*temp1*root54;
deep_arg->d5421 = temp * f542 * g521;
deep_arg->d5433 = temp * f543 * g533;
deep_arg->xlamo = tle->xmo+tle->xnodeo+tle->xnodeo-deep_arg->thgr-deep_arg->thgr;
bfact = deep_arg->xmdot + deep_arg->xnodot+
deep_arg->xnodot - thdt - thdt;
bfact += deep_arg->ssl + deep_arg->ssh + deep_arg->ssh;
} /* end of 12-hour orbit, e >.5 section */
else if( deep_arg->xnq < 1.2 * twopi / minutes_per_day &&
deep_arg->xnq > 0.8 * twopi / minutes_per_day)
{ /* "if mean motion is .8 to 1.2 revs/day" */
const double q22 = 1.7891679E-6;
const double q31 = 2.1460748E-6;
const double q33 = 2.2123015E-7;
const double cosio_plus_1 = 1. + deep_arg->cosio;
const double g200 = 1+deep_arg->eosq*(-2.5+0.8125*deep_arg->eosq);
const double g300 = 1+deep_arg->eosq*(-6+6.60937*deep_arg->eosq);
const double f311 = 0.9375*deep_arg->sinio*deep_arg->sinio*
(1+3*deep_arg->cosio)-0.75*cosio_plus_1;
const double g310 = 1+2*deep_arg->eosq;
const double f220 = 0.75 * cosio_plus_1 * cosio_plus_1;
const double f330 = 2.5 * f220 * cosio_plus_1;
deep_arg->resonance_flag = deep_arg->synchronous_flag = 1;
/* Synchronous resonance terms initialization */
deep_arg->del1 = 3*deep_arg->xnq*deep_arg->xnq*aqnv*aqnv;
deep_arg->del2 = 2*deep_arg->del1*f220*g200*q22;
deep_arg->del3 = 3*deep_arg->del1*f330*g300*q33*aqnv;
deep_arg->del1 *= f311*g310*q31*aqnv;
deep_arg->xlamo = tle->xmo+tle->xnodeo+tle->omegao-deep_arg->thgr;
bfact = deep_arg->xmdot + deep_arg->omgdot + deep_arg->xnodot - thdt;
bfact = bfact+deep_arg->ssl+deep_arg->ssg+deep_arg->ssh;
} /* End of geosych case */
else /* it's neither a high-e 12-hr orbit nor a geosynch: */
deep_arg->resonance_flag = deep_arg->synchronous_flag = 0;
if( deep_arg->resonance_flag)
{
deep_arg->xfact = bfact-deep_arg->xnq;
/* Initialize integrator */
deep_arg->xli = deep_arg->xlamo;
deep_arg->xni = deep_arg->xnq;
deep_arg->atime = 0;
}
/* End case dpinit: */
}
/* 'dpsec' is unavoidably confusing. See https://projectpluto.com/dpsec.htm
for some commentary on what's going on here. */
static inline void compute_dpsec_derivs( const deep_arg_t *deep_arg,
double *derivs)
{
const double sin_li = sin( deep_arg->xli);
const double cos_li = cos( deep_arg->xli);
const double sin_2li = 2. * sin_li * cos_li;
const double cos_2li = 2. * cos_li * cos_li - 1.;
int i;
derivs[0] = 0.;
/* Dot terms calculated, using a lot of trig add/subtract */
/* identities to reduce the computational load... at the */
/* cost of making the code somewhat hard to follow: */
if( deep_arg->synchronous_flag )
{
/* const double fasx2 = 0.1313091 radians = 7.523456 degrees */
/* const double fasx4 = 2.8843198 radians = 165.259351 degrees */
/* const double fasx6 = 0.3744809 radians = 21.456173 degrees */
const double c_fasx2 = 0.99139134268488593;
const double s_fasx2 = 0.13093206501640101;
const double c_2fasx4 = 0.87051638752972937;
const double s_2fasx4 = -0.49213943048915526;
const double c_3fasx6 = 0.43258117585763334;
const double s_3fasx6 = 0.90159499016666422;
const double sin_3li = sin_2li * cos_li + cos_2li * sin_li;
const double cos_3li = cos_2li * cos_li - sin_2li * sin_li;
double term1a = deep_arg->del1 * (sin_li * c_fasx2 - cos_li * s_fasx2);
double term2a = deep_arg->del2 * (sin_2li * c_2fasx4 - cos_2li * s_2fasx4);
double term3a = deep_arg->del3 * (sin_3li * c_3fasx6 - cos_3li * s_3fasx6);
double term1b = deep_arg->del1 * (cos_li * c_fasx2 + sin_li * s_fasx2);
double term2b = 2. * deep_arg->del2 * (cos_2li * c_2fasx4 + sin_2li * s_2fasx4);
double term3b = 3. * deep_arg->del3 * (cos_3li * c_3fasx6 + sin_3li * s_3fasx6);
for( i = 0; i < dpsec_integration_order; i += 2)
{
*derivs++ = term1a + term2a + term3a;
*derivs++ = term1b + term2b + term3b;
if( i + 2 < dpsec_integration_order)
{
term1a = -term1a;
term2a *= -4.;
term3a *= -9.;
term1b = -term1b;
term2b *= -4.;
term3b *= -9.;
}
}
} /* end of geosynch case */
else
{ /* orbit is a 12-hour resonant one: */
/* const double g22 = 5.7686396; */
/* const double g32 = 0.95240898; */
/* const double g44 = 1.8014998; */
/* const double g52 = 1.0508330; */
/* const double g54 = 4.4108898; */
const double c_g22 = 0.87051638752972937;
const double s_g22 = -0.49213943048915526;
const double c_g32 = 0.57972190187001149;
const double s_g32 = 0.81481440616389245;
const double c_g44 = -0.22866241528815548;
const double s_g44 = 0.97350577801807991;
const double c_g52 = 0.49684831179884198;
const double s_g52 = 0.86783740128127729;
const double c_g54 = -0.29695209575316894;
const double s_g54 = -0.95489237761529999;
const double xomi =
deep_arg->omegaq + deep_arg->omgdot * deep_arg->atime;
const double sin_omi = sin( xomi), cos_omi = cos( xomi);
const double sin_li_m_omi = sin_li * cos_omi - sin_omi * cos_li;
const double sin_li_p_omi = sin_li * cos_omi + sin_omi * cos_li;
const double cos_li_m_omi = cos_li * cos_omi + sin_omi * sin_li;
const double cos_li_p_omi = cos_li * cos_omi - sin_omi * sin_li;
const double sin_2omi = 2. * sin_omi * cos_omi;
const double cos_2omi = 2. * cos_omi * cos_omi - 1.;
const double sin_2li_m_omi = sin_2li * cos_omi - sin_omi * cos_2li;
const double sin_2li_p_omi = sin_2li * cos_omi + sin_omi * cos_2li;
const double cos_2li_m_omi = cos_2li * cos_omi + sin_omi * sin_2li;
const double cos_2li_p_omi = cos_2li * cos_omi - sin_omi * sin_2li;
const double sin_2li_p_2omi = sin_2li * cos_2omi + sin_2omi * cos_2li;
const double cos_2li_p_2omi = cos_2li * cos_2omi - sin_2omi * sin_2li;
const double sin_2omi_p_li = sin_li * cos_2omi + sin_2omi * cos_li;
const double cos_2omi_p_li = cos_li * cos_2omi - sin_2omi * sin_li;
double term1a =
deep_arg->d2201 * (sin_2omi_p_li*c_g22 - cos_2omi_p_li*s_g22)
+ deep_arg->d2211 * (sin_li * c_g22 - cos_li * s_g22)
+ deep_arg->d3210 * (sin_li_p_omi*c_g32 - cos_li_p_omi*s_g32)
+ deep_arg->d3222 * (sin_li_m_omi*c_g32 - cos_li_m_omi*s_g32)
+ deep_arg->d5220 * (sin_li_p_omi*c_g52 - cos_li_p_omi*s_g52)
+ deep_arg->d5232 * (sin_li_m_omi*c_g52 - cos_li_m_omi*s_g52);
double term2a =
deep_arg->d4410 * (sin_2li_p_2omi*c_g44 - cos_2li_p_2omi*s_g44)
+ deep_arg->d4422 * (sin_2li * c_g44 - cos_2li * s_g44)
+ deep_arg->d5421 * (sin_2li_p_omi*c_g54 - cos_2li_p_omi*s_g54)
+ deep_arg->d5433 * (sin_2li_m_omi*c_g54 - cos_2li_m_omi*s_g54);
double term1b =
(deep_arg->d2201 * (cos_2omi_p_li*c_g22 + sin_2omi_p_li*s_g22)
+ deep_arg->d2211 * (cos_li * c_g22 + sin_li * s_g22)
+ deep_arg->d3210 * (cos_li_p_omi*c_g32 + sin_li_p_omi*s_g32)
+ deep_arg->d3222 * (cos_li_m_omi*c_g32 + sin_li_m_omi*s_g32)
+ deep_arg->d5220 * (cos_li_p_omi*c_g52 + sin_li_p_omi*s_g52)
+ deep_arg->d5232 * (cos_li_m_omi*c_g52 + sin_li_m_omi*s_g52));
double term2b = 2. *
(deep_arg->d4410 * (cos_2li_p_2omi*c_g44 + sin_2li_p_2omi*s_g44)
+ deep_arg->d4422 * (cos_2li * c_g44 + sin_2li * s_g44)
+ deep_arg->d5421 * (cos_2li_p_omi*c_g54 + sin_2li_p_omi*s_g54)
+ deep_arg->d5433 * (cos_2li_m_omi*c_g54 + sin_2li_m_omi*s_g54));
for( i = 0; i < dpsec_integration_order; i += 2)
{
*derivs++ = term1a + term2a;
*derivs++ = term1b + term2b;
if( i + 2 < dpsec_integration_order)
{
term1a = -term1a;
term2a *= -4.;
term1b = -term1b;
term2b *= -4.;
}
}
} /* End of 12-hr resonant case */
}
void Deep_dpsec( const tle_t *tle, deep_arg_t *deep_arg)
{
double temp, xni, xli;
int final_integration_step = 0;
deep_arg->xll += deep_arg->ssl*deep_arg->t;
deep_arg->omgadf += deep_arg->ssg*deep_arg->t;
deep_arg->xnode += deep_arg->ssh*deep_arg->t;
deep_arg->em = tle->eo+deep_arg->sse*deep_arg->t;
deep_arg->xinc = tle->xincl+deep_arg->ssi*deep_arg->t;
if( !deep_arg->resonance_flag ) return;
/* If we're closer to t=0 than to the currently-stored data
from the previous call to this function, then we're
better off "restarting", going back to the initial data.
The Dundee code rigs things up to _always_ take 720-minute
steps from epoch to end time, except for the final step.
So if we'd have to integrate "backwards" (toward the epoch),
we gotta do a restart if we're to be Dundee-compliant. */
if( fabs( deep_arg->t) < fabs( deep_arg->t - deep_arg->atime)
|| (is_dundee_compliant && fabs( deep_arg->t) < fabs( deep_arg->atime)))
{ /* Epoch restart */
deep_arg->atime = 0.;
xni = deep_arg->xnq;
xli = deep_arg->xlamo;
}
else /* use xni, xli from previous runs: */
{
xni = deep_arg->xni;
xli = deep_arg->xli;
}
while( !final_integration_step)
{
double xldot, derivs[20], xlpow = 1., delt_factor;
double delt = deep_arg->t - deep_arg->atime;
int i;
deep_arg->xni = xni;
deep_arg->xli = xli;
compute_dpsec_derivs( deep_arg, derivs);
if( delt > dpsec_integration_step)
delt = dpsec_integration_step;
else if( delt < -dpsec_integration_step)
delt = -dpsec_integration_step;
else
final_integration_step = 1;
xldot = xni+deep_arg->xfact;
xli += delt * xldot;
xni += delt * derivs[0];
delt_factor = delt;
for( i = 2; i <= dpsec_integration_order; i++)
{
xlpow *= xldot;
derivs[i - 1] *= xlpow;
delt_factor *= delt / (double)i;
xli += delt_factor * derivs[i - 2];
xni += delt_factor * derivs[i - 1];
}
if( !is_dundee_compliant || !final_integration_step)
{
deep_arg->xni = xni;
deep_arg->xli = xli;
deep_arg->atime += delt;
}
}
deep_arg->xn = xni;
temp = -deep_arg->xnode + deep_arg->thgr + deep_arg->t * thdt;
deep_arg->xll = xli + temp
+ (deep_arg->synchronous_flag ? -deep_arg->omgadf : temp);
/*End case dpsec: */
}
void Deep_dpper( const tle_t *tle, deep_arg_t *deep_arg)
{
double sinis, cosis;
/* If the time didn't change by more than 30 minutes, */
/* there's no good reason to recompute the perturbations; */
/* they don't change enough over so short a time span. */
/* However, the Dundee code _always_ recomputes, so if */
/* we're attempting to replicate its results, we've gotta */
/* recompute everything, too. */
if( fabs(deep_arg->savtsn-deep_arg->t) >= 30. || is_dundee_compliant)
{
double zf, zm, sinzf, ses, sis, sil, sel, sll, sls;
double f2, f3, sghl, sghs, shs, sh1;
deep_arg->savtsn = deep_arg->t;
/* Update solar perturbations for time T: */
zm = deep_arg->zmos+zns_per_min*deep_arg->t;
zf = zm+2*zes*sin(zm);
sinzf = sin(zf);
f2 = 0.5*sinzf*sinzf-0.25;
f3 = -0.5*sinzf*cos(zf);
ses = deep_arg->se2*f2+deep_arg->se3*f3;
sis = deep_arg->si2*f2+deep_arg->si3*f3;
sls = deep_arg->sl2*f2+deep_arg->sl3*f3+deep_arg->sl4*sinzf;
sghs = deep_arg->sgh2*f2+deep_arg->sgh3*f3+deep_arg->sgh4*sinzf;
shs = deep_arg->sh2*f2+deep_arg->sh3*f3;
/* Update lunar perturbations for time T: */
zm = deep_arg->zmol+znl_per_min*deep_arg->t;
zf = zm+2*zel*sin(zm);
sinzf = sin(zf);
f2 = 0.5*sinzf*sinzf-0.25;
f3 = -0.5*sinzf*cos(zf);
sel = deep_arg->ee2*f2+deep_arg->e3*f3;
sil = deep_arg->xi2*f2+deep_arg->xi3*f3;
sll = deep_arg->xl2*f2+deep_arg->xl3*f3+deep_arg->xl4*sinzf;
sghl = deep_arg->xgh2*f2+deep_arg->xgh3*f3+deep_arg->xgh4*sinzf;
sh1 = deep_arg->xh2*f2+deep_arg->xh3*f3;
/* Sum the solar and lunar contributions: */
deep_arg->pe = ses+sel;
deep_arg->pinc = sis+sil;
deep_arg->pl = sls+sll;
deep_arg->pgh = sghs+sghl;
deep_arg->ph = shs+sh1;
#ifdef RETAIN_PERTURBATION_VALUES_AT_EPOCH
if( deep_arg->solar_lunar_init_flag)
{
deep_arg->pe0 = deep_arg->pe;
deep_arg->pinc0 = deep_arg->pinc;
deep_arg->pl0 = deep_arg->pl;
deep_arg->pgh0 = deep_arg->pgh;
deep_arg->ph0 = deep_arg->ph;
}
deep_arg->pe -= deep_arg->pe0;
deep_arg->pinc -= deep_arg->pinc0;
deep_arg->pl -= deep_arg->pl0;
deep_arg->pgh -= deep_arg->pgh0;
deep_arg->ph -= deep_arg->ph0;
if( deep_arg->solar_lunar_init_flag)
return; /* done all we really need to do here... */
#endif
}
/* In Spacetrack 3, sinis & cosis were initialized */
/* _before_ perturbations were added to xinc. In */
/* Spacetrack 6, it's the other way around (see below). */
#ifndef SPACETRACK_3
deep_arg->xinc += deep_arg->pinc;
#endif
sinis = sin( deep_arg->xinc);
cosis = cos( deep_arg->xinc);
#ifdef SPACETRACK_3
deep_arg->xinc += deep_arg->pinc;
#endif
/* Add solar/lunar perturbation correction to eccentricity: */
deep_arg->em += deep_arg->pe;
deep_arg->xll += deep_arg->pl;
deep_arg->omgadf += deep_arg->pgh;
if( tle->xincl >= 0.2)
{ /* Apply periodics directly */
double temp_val;
#ifdef SPACETRACK_3
sinis = sin(deep_arg->xinc);
cosis = cos(deep_arg->xinc);
#endif
temp_val = deep_arg->ph / sinis;
deep_arg->omgadf -= cosis * temp_val;
deep_arg->xnode += temp_val;
}
else
{
/* Apply periodics with Lyddane modification */
const double sinok = sin(deep_arg->xnode);
const double cosok = cos(deep_arg->xnode);
const double alfdp = deep_arg->ph * cosok
+ (deep_arg->pinc * cosis + sinis) * sinok;
const double betdp = - deep_arg->ph * sinok
+ (deep_arg->pinc * cosis + sinis) * cosok;
double dls, delta_xnode;
// deep_arg->xnode = FMod2p(deep_arg->xnode);
delta_xnode = atan2(alfdp,betdp) - deep_arg->xnode;
/* This is a patch to Lyddane modification suggested */
/* by Rob Matson, streamlined very slightly by BJG, to */
/* keep 'delta_xnode' between +/- 180 degrees: */
if( delta_xnode < - pi)
delta_xnode += twopi;
else if( delta_xnode > pi)
delta_xnode -= twopi;
dls = -deep_arg->xnode * sinis * deep_arg->pinc;
#ifdef SPACETRACK_3
deep_arg->omgadf += dls
+ cosis * deep_arg->xnode -
- cos( deep_arg->xinc) * (deep_arg->xnode + delta_xnode);
#else
deep_arg->omgadf += dls - cosis * delta_xnode;
#endif
deep_arg->xnode += delta_xnode;
} /* End case dpper: */
}

392
src/sgp4/get_el.c Normal file
View File

@ -0,0 +1,392 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* get_el.c - TLE (Two-Line Element) parsing
*
* Parses the standard NORAD/18th SDS two-line element format into the
* in-memory tle_t structure. Format defined in STR#3 Appendix (pp. 83-91)
* and Vallado Rev-1 Appendix B.
*
* Key conversions performed during parsing:
* - Angles (inclination, RAAN, arg perigee, mean anomaly): deg -> rad
* - Mean motion: rev/day -> rad/min
* - Mean motion derivatives: rev/day^n -> rad/min^n
* - Eccentricity: implied decimal point (e.g., "1859667" -> 0.1859667)
* - B* drag: quasi-scientific notation -> double, multiplied by AE
* - Epoch: YY+DDD.DDDDDDDD -> Julian Date
*
* Also handles Alpha-5 and Super-5 NORAD catalog number extensions,
* and Bill Gray's 'H' ephemeris type (state vector in base-36 encoding).
*/
#include <string.h>
#include <stdint.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "norad.h"
#define PI 3.141592653589793238462643383279502884197
#define TWOPI (2. * PI)
#define MINUTES_PER_DAY 1440.
#define MINUTES_PER_DAY_SQUARED (MINUTES_PER_DAY * MINUTES_PER_DAY)
#define MINUTES_PER_DAY_CUBED (MINUTES_PER_DAY * MINUTES_PER_DAY_SQUARED)
#define AE 1.0
/* distance units, earth radii */
/* TLEs have four angles on line 2, given in the form DDD.DDDD. This
can be parsed more quickly as an integer, then cast to double and
converted to radians, all in one step. */
static int get_angle( const char *buff)
{
int rval = 0;
while( *buff == ' ')
buff++;
while( *buff != ' ')
{
if( *buff != '.')
rval = rval * 10 + (int)( *buff - '0');
buff++;
}
return( rval);
}
/* Converts the quasi scientific notation of the "Motion Dot Dot/6" or
"BSTAR" field to double. The input will always be of the form
sdddddSe
....where s is blank or + or -; ddddd is a five-digit mantissa;
S is + or - or blank; and e is a single-digit exponent. A decimal
point is assumed before the five-digit mantissa. */
static double sci( const char *string)
{
double rval = 0.;
if( string[1] != ' ')
{
const int ival = atoi( string);
if( ival)
{
rval = (double)ival * 1.e-5;
if( string[7] != '0')
{
int exponent = string[7] - '0';
if( string[6] == '-')
while( exponent--)
rval *= .1;
else
while( exponent--)
rval *= 10.;
}
}
}
return( rval);
}
/* Does a checksum modulo 10 on the given line. Digits = their
value, '-' = 1, all other chars = 0. Returns 0 if ok, a negative
value if it's definitely not a TLE line, positive if it's all OK
except the checksum. This last was added because people sometimes
want to use TLEs without worrying about the checksum. */
int tle_checksum( const char *buff)
{
int rval = 0;
int count = 69;
if( (*buff != '1' && *buff != '2') || buff[1] != ' ')
return( -1);
while( --count)
{
if( *buff > '0' && *buff <= '9')
rval += *buff - '0';
else if( *buff == '-')
rval++;
if( *buff < ' ' || *buff > 'z') /* invalid character */
return( -2);
buff++;
}
rval -= *buff++ - '0';
if( *buff > ' ') /* line unterminated */
rval = -3;
else
{
rval %= 10;
if( rval < 0)
rval += 10;
}
return( rval);
}
static inline int mutant_dehex( const char ichar)
{
int rval;
if( ichar <= '9' && ichar >= '0')
rval = ichar - '0';
else if( ichar >= 'A' && ichar <= 'Z')
rval = ichar + 10 - 'A';
else
rval = -1;
return( rval);
}
/* The "standard" SDP4 model fails badly for very high-flying satellites
(mostly, but not always, those with orbital periods of greater than
about a week). Highly eccentric orbits are more likely to fail than
near-circular ones. And of course, hyperbolic orbits never work with
SGP4/SDP4.
As a non-standard extension, I'm simply storing state vectors for
such orbits, using the following somewhat odd scheme :
1 40391U 15007B 15091.99922241 sxxxxxxxx syyyyyyyy szzzzzzzzH 9997
2 49391 [valid range, accuracy] saaaaaaaa sbbbbbbbb scccccccc 0 8
Epoch, int'l & NORAD IDs are stored in the standard manner. The
'ephemeris type' is H (rather than the otherwise universal 0). The
xyz position and vx, vy, vz velocity are stored as 8-digit signed
base-36 integers, hence a range of +/- 36^8 = about +/- 2.82x10^12.
x, y, z are in meters, and hence cover a range +/- 18.9 AU.
vx, vy, vz are in 10^-4 m/s, range +/- 94% c. The state vectors
are in the geocentric ecliptic plane of date. See 'sdp4.cpp' for
a discussion of how they're actually used. */
static double get_high_value( const char *iptr)
{
int64_t rval = 0;
assert( *iptr == '+' || *iptr == '-');
if( *iptr == '+' || *iptr == '-')
{
int i, digit;
for( i = 1; i < 9; i++)
{
digit = mutant_dehex( iptr[i]);
assert( digit >= 0);
rval = rval * (int64_t)36 + (int64_t)digit;
}
if( *iptr == '-')
rval = -rval;
}
return( (double)rval);
}
/* Traditionally, NORAD numbers were stored as five digits. In 2020, new
detectors threatened to go past 100K objects; the 'Alpha-5' scheme allows
the first byte to be replaced by an uppercase letter, with I and O
skipped. That gets us to 339999 :
https://www.space-track.org/documentation#tle-alpha5
Note that Alpha-5 is referred to as a "stopgap". Near the bottom of
the above link, "space-track.org encourages users to switch to... XML,
KVN, or JSON", (partly) because these will handle nine-digit catalog
numbers.
To go beyond the Alpha-5 limit of 340000 possible numbers and store
all nine-digit numbers in five bytes, I have added options 3 and 4
below. To do so, we need a 'base64'-like scheme, using all ten
digits, 26 uppercase and 26 lowercase letters, and + and /.
d = digit, L = uppercase letter, x = any base64 character
X = non-digit base-64 character
(1) ddddd = 'traditional' scheme provides 100000 combinations;
Numbers 0 to 99999
(2) Ldddd = Alpha-5 scheme adds 240000
Numbers 100000 to 339999; A0000 to Z9999
(3) xxxxX = 64^4*54 = 905969664 more (start of 'Super-5' range)
Numbers 340000 to 906309663; 0000A to -----
(4) xxxXd = 64^3*54*10 = 141557760 more
Numbers 906309664 to 1047867423; 000A0 and up
(going slightly past the billion we actually need) */
static int base64_to_int( const char c)
{
int offset;
if( c >= 'A')
{
if( c <= 'Z')
offset = 'A' - 10;
else if( c >= 'a' && c <= 'z')
offset = 'a' - 10 - 26;
else
return( -1);
}
else
{
if( c >= '0' && c <= '9')
offset = '0';
else if( c == ' ')
return( 0);
else if( c == '+')
return( 62);
else if( c == '-')
return( 63);
else
return( -1);
}
return( c - offset);
}
static int get_norad_number( const char *buff)
{
size_t i;
int digits[5], rval = 0;
for( i = 0; i < 5; i++)
{
digits[i] = base64_to_int( buff[i]);
if( digits[i] == -1) /* not a valid number */
return( 0);
}
if( digits[4] > 9) /* case (3): last char is uppercase */
rval = 340000 + (digits[4] - 10)
+ 54 * (digits[3] + (digits[2] << 6) + (digits[1] << 12) + (digits[0] << 18));
else if( digits[3] > 9) /* case (4) above */
rval = 340000 + 905969664 + digits[4] + (digits[3] - 10) * 10
+ 540 * (digits[2] + (digits[1] << 6) + (digits[0] << 12));
else /* last four digits are 0-9; 'standard' NORAD desig */
{
for( i = 1; i <= 4; i++)
assert( (buff[i] >= '0' && buff[i] <= '9') || buff[i] == ' ');
if( *buff > 'I')
{
digits[0]--;
if( *buff > 'O')
digits[0]--;
}
rval = digits[0] * 10000 + atoi( buff + 1);
}
return( rval);
}
static inline double get_eight_places( const char *ptr)
{
return( (double)atoi( ptr) + (double)atoi(ptr + 4) * 1e-8);
}
/* Meteor 2-08 */
/* 1 13113U 88245.60005115 0.00000076 63463-4 0 5998 */
/* 2 13113 82.5386 288.0994 0015973 147.1294 213.0868 13.83869004325321 */
#define J2000 2451545.5
#define J1900 (J2000 - 36525. - 1.)
/* parse_elements returns:
0 if the elements are parsed without error;
1 if they're OK except the first line has a checksum error;
2 if they're OK except the second line has a checksum error;
3 if they're OK except both lines have checksum errors;
a negative value if the lines aren't at all parseable */
int parse_elements( const char *line1, const char *line2, tle_t *sat)
{
int rval, checksum_problem = 0;
if( *line1 != '1' || *line2 != '2')
rval = -4;
else
{
rval = tle_checksum( line1);
if( rval > 0)
{
checksum_problem = 1; /* there's a checksum problem, but it's */
rval = 0; /* not fatal; continue processing the TLE */
}
}
if( rval)
rval -= 100;
else
{
rval = tle_checksum( line2);
if( rval > 0)
{
checksum_problem |= 2; /* there's a checksum problem, but it's */
rval = 0; /* not fatal; continue processing the TLE */
}
}
if( !rval)
{
char tbuff[13];
int year = line1[19] - '0';
if( line1[18] >= '0')
year += (line1[18] - '0') * 10;
if( year < 57) /* cycle around Y2K */
year += 100;
sat->epoch = get_eight_places( line1 + 20) + J1900
+ (double)( year * 365 + (year - 1) / 4);
sat->norad_number = get_norad_number( line1 + 2);
memcpy( tbuff, line1 + 64, 4);
tbuff[4] = '\0';
sat->bulletin_number = atoi( tbuff);
sat->classification = line1[7]; /* almost always 'U' */
memcpy( sat->intl_desig, line1 + 9, 8);
if( !memcmp( sat->intl_desig, " ", 5))
{ /* usually 'analyst' object w/o international (COSPAR) desig; */
int i, n = sat->norad_number; /* set launch 000, year/part */
/* data mapped from NORAD # */
for( i = 7; i > 4; i--, n /= 26)
sat->intl_desig[i] = 'A' + n % 26;
sat->intl_desig[2] = sat->intl_desig[3] = sat->intl_desig[4] = '0';
sat->intl_desig[1] = '0' + n % 10;
sat->intl_desig[0] = '0' + n / 10;
}
sat->intl_desig[8] = '\0';
memcpy( tbuff, line2 + 63, 5);
tbuff[5] = '\0';
sat->revolution_number = atoi( tbuff);
sat->ephemeris_type = line1[62];
if( sat->ephemeris_type == 'H')
{
size_t i;
double *state_vect = &sat->xincl;
for( i = 0; i < 3; i++)
{
state_vect[i] = get_high_value( line1 + 33 + i * 10);
state_vect[i + 3] = get_high_value( line2 + 33 + i * 10) * 1e-4;
}
return( 0);
}
sat->xmo = (double)get_angle( line2 + 43) * (PI / 180e+4);
sat->xnodeo = (double)get_angle( line2 + 17) * (PI / 180e+4);
sat->omegao = (double)get_angle( line2 + 34) * (PI / 180e+4);
sat->xincl = (double)get_angle( line2 + 8) * (PI / 180e+4);
sat->eo = atoi( line2 + 26) * 1.e-7;
/* Make sure mean motion is null-terminated, since rev. no.
may immediately follow. */
memcpy( tbuff, line2 + 51, 12);
tbuff[12] = '\0';
/* Input mean motion, derivative of mean motion and second */
/* deriv of mean motion, are all in revolutions and days. */
/* Convert them here to radians and minutes: */
sat->xno = get_eight_places( tbuff) * TWOPI / MINUTES_PER_DAY;
sat->xndt2o = (double)atoi( line1 + 35)
* 1.e-8 * TWOPI / MINUTES_PER_DAY_SQUARED;
if( line1[33] == '-')
sat->xndt2o *= -1.;
sat->xndd6o = sci( line1 + 44) * TWOPI / MINUTES_PER_DAY_CUBED;
sat->bstar = sci( line1 + 53) * AE;
}
return( rval ? rval : checksum_problem);
}

90
src/sgp4/norad.h Normal file
View File

@ -0,0 +1,90 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* norad.h - SGP4/SDP4 satellite propagation interface
*
* Public API for the SGP4/SDP4 orbital propagators as described in:
* - Hoots & Roehrich, "Spacetrack Report No. 3" (1980)
* - Vallado, Crawford, Hujsak, Kelso, AIAA 2006-6753-Rev1
*
* Vendored from Bill Gray's sat_code (commit ff7b989, MIT license).
* Stripped: SGP, SGP8, SDP8 model prototypes (pg_orbit uses only SGP4/SDP4).
* Stripped: Win32 DLL_FUNC/__stdcall and dynamic loading support.
* Stripped: extern "C" wrapper (now compiled as C, not C++).
* N_SAT_PARAMS kept at its original value for binary compatibility.
*/
#ifndef NORAD_H
#define NORAD_H 1
/* Two-line-element satellite orbital data */
typedef struct
{
double epoch, xndt2o, xndd6o, bstar;
double xincl, xnodeo, eo, omegao, xmo, xno;
int norad_number, bulletin_number, revolution_number;
char classification; /* "U" = unclassified; only type I've seen */
char ephemeris_type;
char intl_desig[9];
} tle_t;
/* epoch is a Julian Day, UTC */
/* xmo = mean anomaly at epoch, radians */
/* xno = mean motion at epoch, radians/minute */
#ifdef RETAIN_PERTURBATION_VALUES_AT_EPOCH
#define DEEP_ARG_T_PARAMS 87
#else
#define DEEP_ARG_T_PARAMS 81
#endif
#define N_SGP4_PARAMS 30
#define N_SDP4_PARAMS (10 + DEEP_ARG_T_PARAMS)
/* Maximum params array size — covers both SGP4 and SDP4.
* Kept at original sat_code value (11 + DEEP_ARG_T_PARAMS)
* even though SDP4 only needs 10; do not shrink. */
#define N_SAT_PARAMS (11 + DEEP_ARG_T_PARAMS)
/* Ephemeris type codes from TLE line 1, column 63. */
#define TLE_EPHEMERIS_TYPE_DEFAULT 0
#define TLE_EPHEMERIS_TYPE_SGP4 2
#define TLE_EPHEMERIS_TYPE_SDP4 3
/* Configuration parameter indices for sxpx_set_implementation_param() */
#define SXPX_DPSEC_INTEGRATION_ORDER 0
#define SXPX_DUNDEE_COMPLIANCE 1
#define SXPX_ZERO_PERTURBATIONS_AT_EPOCH 2
/* SGP4/SDP4 error and warning codes.
* Warnings: a mathematically reasonable value is still returned.
* Errors: no reasonable position/velocity was determined. */
#define SXPX_ERR_NEARLY_PARABOLIC -1
#define SXPX_ERR_NEGATIVE_MAJOR_AXIS -2
#define SXPX_WARN_ORBIT_WITHIN_EARTH -3
#define SXPX_WARN_PERIGEE_WITHIN_EARTH -4
#define SXPX_ERR_NEGATIVE_XN -5
#define SXPX_ERR_CONVERGENCE_FAIL -6
/* --- SGP4 (near-earth, period < 225 min) --- */
void SGP4_init( double *params, const tle_t *tle);
int SGP4( const double tsince, const tle_t *tle, const double *params,
double *pos, double *vel);
/* --- SDP4 (deep-space, period >= 225 min) --- */
void SDP4_init( double *params, const tle_t *tle);
int SDP4( const double tsince, const tle_t *tle, const double *params,
double *pos, double *vel);
/* --- Shared utilities --- */
int select_ephemeris( const tle_t *tle);
int parse_elements( const char *line1, const char *line2, tle_t *sat);
int tle_checksum( const char *buff);
void write_elements_in_tle_format( char *buff, const tle_t *tle);
void sxpx_set_implementation_param( const int param_index,
const int new_param);
void sxpx_set_dpsec_integration_step( const double new_step_size);
void lunar_solar_position( const double jd,
double *lunar_xyzr, double *solar_xyzr);
#endif /* NORAD_H */

110
src/sgp4/norad_in.h Normal file
View File

@ -0,0 +1,110 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* norad_in.h - Internal structures and constants for SGP4/SDP4
*
* Theory chain:
* Brouwer (1959) - mean element theory for artificial satellites
* Kozai (1959) - secular and long-period perturbations
* Lyddane (1963) - singularity-free formulation near zero inclination
* Lane & Cranford (1969) - atmospheric drag model
* Hujsak (1979) - STR#1: deep-space lunar/solar perturbations
* Lane & Hoots (1979) - STR#2: near-earth SGP4 model
* Hoots & Roehrich (1980) - STR#3: combined SGP4/SDP4 reference
* Vallado et al. (2006) - AIAA 2006-6753-Rev1: modern implementation
*
* Constants from STR#3 Chapter 12 (pp. 79-81, "Users Guide, Constants,
* and Symbols"), compiled by T.S. Kelso (1988). All constants use the
* WGS-72 geodetic model do NOT substitute WGS-84 values.
*/
#ifndef NORAD_IN_H
#define NORAD_IN_H
/* Common "internal" arguments between deep-space functions; users of */
/* the satellite routines shouldn't need to bother with any of this */
typedef struct
{
double
/* Common between SGP4 and SDP4: */
aodp, cosio, sinio, omgdot, xmdot, xnodot, xnodp,
/* Used by dpinit part of Deep() */
eosq, betao, cosio2, sing, cosg, betao2,
/* Used by dpsec and dpper parts of Deep() */
xll, omgadf, xnode, em, xinc, xn, t,
/* 'd####' secular coeffs for 12-hour, e>.5 orbits: */
d2201, d2211, d3210, d3222, d4410, d4422, d5220, d5232, d5421, d5433,
/* formerly static to Deep( ), but more logically part of this struct: */
atime, del1, del2, del3, e3, ee2, omegaq, pe, pgh, ph, pinc, pl, preep,
savtsn, se2, se3, sgh2, sgh3, sgh4, sh2, sh3, si2, si3, sl2, sl3,
sl4, sse, ssg, ssh, ssi, ssl, thgr, xfact, xgh2, xgh3, xgh4, xh2,
xh3, xi2, xi3, xl2, xl3, xl4, xlamo, xli, xni, xnq,
zmol, zmos;
/* Epoch offsets, described by Rob Matson, added by BJG, */
/* then commented out; I don't think they really ought to */
/* be used... */
#ifdef RETAIN_PERTURBATION_VALUES_AT_EPOCH
double pe0, pinc0, pl0, pgh0, ph0;
int solar_lunar_init_flag;
#endif
int resonance_flag, synchronous_flag;
} deep_arg_t;
double FMod2p( const double x);
void Deep_dpinit( const tle_t *tle, deep_arg_t *deep_arg);
void Deep_dpsec( const tle_t *tle, deep_arg_t *deep_arg);
void Deep_dpper( const tle_t *tle, deep_arg_t *deep_arg);
int sxpx_posn_vel( const double xnode, const double a, const double e,
const double cosio, const double sinio,
const double xincl, const double omega,
const double xl, double *pos, double *vel);
typedef struct
{
double coef, coef1, tsi, s4, unused_a3ovk2, eta;
} init_t;
void sxpx_common_init( double *params, const tle_t *tle,
init_t *init, deep_arg_t *deep_arg);
/* Table of constant values — STR#3 Chapter 12 (pp. 79-81)
*
* WGS-72 geodetic constants. These are baked into every TLE ever published
* by NORAD/18th Space Defense Squadron. Changing them silently corrupts
* positions by kilometers. See CLAUDE.md "Constant Chain of Custody". */
#define pi 3.141592653589793238462643383279502884197
#define twopi (pi*2.)
#define e6a 1.0E-6
#define two_thirds (2. / 3.)
#define xj3 -2.53881E-6 /* J3: third gravitational zonal harmonic */
#define minus_xj3 2.53881E-6
#define earth_radius_in_km 6378.135 /* WGS-72 equatorial radius (km) */
#ifndef minutes_per_day
#define minutes_per_day 1440.
#endif
#define ae 1.0 /* distance units per Earth radius */
#define xj2 1.082616e-3 /* J2: second gravitational zonal harmonic */
#define ck2 (.5 * xj2 * ae * ae) /* CK2 = (1/2)*J2*aE^2 */
/* xke = sqrt(GM) in Earth-radii^(3/2) / minute.
* STR#3: ke*(er/min)^(3/2), derived from mu = 398600.8 km^3/s^2 (WGS-72) */
#ifdef OLD_CONSTANTS
#define ck4 6.209887E-7
#define s 1.012229
#define qoms2t 1.880279E-09
#define xke 7.43669161E-2
#else
#define xj4 (-1.65597e-6) /* J4: fourth gravitational zonal harmonic */
#define ck4 (-.375 * xj4 * ae * ae * ae * ae) /* CK4 = -(3/8)*J4*aE^4 */
#define s_const (ae * (1. + 78. / earth_radius_in_km)) /* atmospheric parameter s (er) */
#define qoms2t 1.880279159015270643865e-9 /* (qo - s)^4 in er^4 */
#define xke 0.0743669161331734132 /* ke = sqrt(3.986008e14) * 60 / 6378135^(3/2) */
#endif
#define a3ovk2 (minus_xj3/ck2*ae*ae*ae) /* -J3/(2*CK2) * aE^3 */
#endif /* #ifndef NORAD_IN_H */

378
src/sgp4/sdp4.c Normal file
View File

@ -0,0 +1,378 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* sdp4.c - Deep-space satellite propagator (orbital period >= 225 min)
*
* Implements the SDP4 model from STR#3 (Hoots & Roehrich 1980) Chapter 7
* (pp. 33-42), with deep-space perturbations from STR#1 (Hujsak 1979).
*
* SDP4_init(): Initializes deep-space perturbation terms via Deep_dpinit().
* STR#3 Eqs. 7-1..7-5, Vallado Rev-1 Section IV.
*
* SDP4(): Applies secular gravity/drag updates, then calls Deep_dpsec()
* for deep-space secular effects and Deep_dpper() for periodic effects.
* Final position via sxpx_posn_vel(). STR#3 Eqs. 7-6..7-18.
*
* high_ephemeris(): Bill Gray extension for very high orbits (ephemeris
* type 'H'). RK4 numerical integration with simplified Earth+Moon+Sun
* gravity model. Not part of STR#3; state vectors stored in TLE fields.
*
* Global state (safe in PostgreSQL fork model):
* lunar_solar_position() cache in raw_lunar_solar_position() memoizes
* the most recent JD computation to avoid recomputing during RK4 steps.
*/
#include <stddef.h>
#include <math.h>
#include "norad.h"
#include "norad_in.h"
#include <stdio.h>
/* For high satellites, we do a numerical integration that uses a
rather drastic set of simplifications. We include the earth,
moon, and sun, but with low-precision approximations for the
positions of those last two. References are to Meeus' _Astronomical
Algorithms_, 2nd edition. Results are in meters from the center
of the earth, in ecliptic coordinates of date.
The numerical integration is done using the 'classic' RK4 algorithm,
as described at (for example)
https://en.wikipedia.org/wiki/RungeKutta_methods
The solar and lunar positions are computed using Meeus' formulae, which
are a little computationally intensive. RK4 has the slight advantage of
requiring us to compute lunar/solar positions only for the steps
themselves and their midpoints.
You probably know that the 'elements' for traditional TLEs are fitted to
the SGP4 and SDP4 models : if you tried to numerically integrate TLEs
using a more sophisticated model, you'd actually get _worse_ results.
Similarly, the state vectors for my modified TLEs are integrated using
the following model, which tries to balance accuracy and speed. Just as
you shouldn't try to "improve" SGP4/SDP4, you shouldn't try to "improve"
the following; it'll only break backward compatibility. */
static void raw_lunar_solar_position( const double jd, double *lunar_xyzr, double *solar_xyzr)
{
const double j2000 = 2451545; /* 1.5 Jan 2000 = JD 2451545 */
const double t_cen = (jd - j2000) / 36525.;
/* Mean lunar longitude, (47.1) */
const double l_prime = 218.3164477 * pi / 180.
+ (481267.88123421 * pi / 180.) * t_cen;
/* Lunar mean anomaly, (47.4) */
const double m_prime = 134.9633964 * pi / 180.
+ (477198.8675055 * pi / 180.) * t_cen;
/* Solar mean longitude, (25.2) */
const double l_solar = 280.46646 * pi / 180.
+ (36000.76983 * pi / 180.) * t_cen;
/* Solar mean anomaly, (47.3) */
const double m_solar = 357.5291092 * pi / 180.
+ (35999.0502909 * pi / 180.) * t_cen;
/* Lunar mean argument of latitude (47.5) */
const double f = 93.2720950 * pi / 180.
+ (483202.0175233 * pi / 180.) * t_cen;
const double lunar_mean_elong = (297.8501921 * pi / 180.)
+ (445267.1114034 * pi / 180.) * t_cen;
const double term2 = 2. * lunar_mean_elong - m_prime;
const double lunar_lon = l_prime /* See table 47.A */
+ (6.288774 * pi / 180.) * sin( m_prime)
+ (1.274027 * pi / 180.) * sin( term2)
+ (0.658314 * pi / 180.) * sin( 2. * lunar_mean_elong)
+ (0.213618 * pi / 180.) * sin( 2. * m_prime)
- (0.185166 * pi / 180.) * sin( m_solar)
- (0.114332 * pi / 180.) * sin( 2. * f);
const double lunar_lat = (5.128122 * pi / 180.) * sin( f)
+ (0.280602 * pi / 180.) * sin( m_prime + f)
+ (0.277693 * pi / 180.) * sin( m_prime - f)
+ (0.173237 * pi / 180.) * sin( 2. * lunar_mean_elong - f);
const double lunar_r = 385000560. /* in meters */
- 20905355. * cos( m_prime)
- 3699111. * cos( term2)
- 2955968 * cos( 2. * lunar_mean_elong)
- 569925 * cos( 2. * m_solar);
const double solar_ecc = 0.016708634; /* (25.4) */
const double solar_lon = l_solar /* (above (25.5)) */
+ (1.914602 * pi / 180.) * sin( m_solar);
const double au_in_meters = 1.495978707e+11;
const double solar_r = au_in_meters * (1. - solar_ecc * cos( m_solar));
double tval;
tval = lunar_r * cos( lunar_lat);
*lunar_xyzr++ = tval * cos( lunar_lon);
*lunar_xyzr++ = tval * sin( lunar_lon);
*lunar_xyzr++ = lunar_r * sin( lunar_lat);
*lunar_xyzr++ = lunar_r;
*solar_xyzr++ = solar_r * cos( solar_lon);
*solar_xyzr++ = solar_r * sin( solar_lon);
*solar_xyzr++ = 0.;
*solar_xyzr++ = solar_r;
}
/* For the RK4 integration, we're frequently asking for the sun and
moon positions at the exact same time we needed for the preceding step.
Caching those positions saves recomputing them. */
void lunar_solar_position( const double jd,
double *lunar_xyzr, double *solar_xyzr)
{
static double curr_jd = 0., lunar[4], solar[4];
size_t i;
if( curr_jd != jd)
{
curr_jd = jd;
raw_lunar_solar_position( jd, lunar, solar);
}
for( i = 0; i < 4; i++)
{
if( lunar_xyzr)
lunar_xyzr[i] = lunar[i];
if( solar_xyzr)
solar_xyzr[i] = solar[i];
}
}
static const double sin_obliq_2000 = 0.397777155931913701597179975942380896684;
static const double cos_obliq_2000 = 0.917482062069181825744000384639406458043;
static void equatorial_to_ecliptic( double *vect)
{
double temp;
temp = vect[2] * cos_obliq_2000 - vect[1] * sin_obliq_2000;
vect[1] = vect[1] * cos_obliq_2000 + vect[2] * sin_obliq_2000;
vect[2] = temp;
}
static void ecliptic_to_equatorial( double *vect)
{
double temp;
temp = vect[2] * cos_obliq_2000 + vect[1] * sin_obliq_2000;
vect[1] = vect[1] * cos_obliq_2000 - vect[2] * sin_obliq_2000;
vect[2] = temp;
}
static void init_high_ephemeris( double *params, const tle_t *tle)
{
const double *state_vect = &tle->xincl; /* position at epoch, in meters */
size_t i;
for( i = 0; i < 6; i++)
params[i] = state_vect[i];
equatorial_to_ecliptic( params);
equatorial_to_ecliptic( params + 3);
}
#define c1 params[2]
#define c4 params[3]
#define xnodcf params[4]
#define t2cof params[5]
#define deep_arg ((deep_arg_t *)( params + 10))
void SDP4_init( double *params, const tle_t *tle)
{
init_t init;
if( tle->ephemeris_type == 'H')
{
init_high_ephemeris( params, tle);
return;
}
sxpx_common_init( params, tle, &init, deep_arg);
deep_arg->sing = sin(tle->omegao);
deep_arg->cosg = cos(tle->omegao);
/* initialize Deep() */
Deep_dpinit( tle, deep_arg);
#ifdef RETAIN_PERTURBATION_VALUES_AT_EPOCH
/* initialize lunisolar perturbations: */
deep_arg->t = 0.; /* added 30 Dec 2003 */
deep_arg->solar_lunar_init_flag = 1;
Deep_dpper( tle, deep_arg);
deep_arg->solar_lunar_init_flag = 0;
#endif
} /*End of SDP4() initialization */
static inline double vector_len( const double *vect)
{
double len2 = vect[0] * vect[0] + vect[1] * vect[1] + vect[2] * vect[2];
return( sqrt( len2));
}
/* Input position is in meters, accel is in m/sec^2 */
static int calc_accel( const double jd, const double *pos, double *accel)
{
size_t i;
const double earth_gm = 3.9860044e+14; /* in m^3/s^2 */
const double solar_gm = 1.3271243994e+20; /* m^3/s^2 */
const double lunar_gm = 4.902798e+12; /* m^3/s^2 */
double r = vector_len( pos);
double accel_factor = -earth_gm / (r * r * r);
double lunar_xyzr[4], solar_xyzr[4];
unsigned obj_idx;
for( i = 0; i < 3; i++)
accel[i] = accel_factor * pos[i];
lunar_solar_position( jd, lunar_xyzr, solar_xyzr);
for( obj_idx = 0; obj_idx < 2; obj_idx++)
{
double *opos = (obj_idx ? lunar_xyzr : solar_xyzr);
double delta[3], d;
const double gm = (obj_idx ? lunar_gm : solar_gm);
double accel_factor2;
accel_factor = gm / (opos[3] * opos[3] * opos[3]);
for( i = 0; i < 3; i++)
delta[i] = opos[i] - pos[i];
d = vector_len( delta);
accel_factor2 = gm / (d * d * d);
for( i = 0; i < 3; i++)
accel[i] -= accel_factor * opos[i] - accel_factor2 * delta[i];
}
return( 0);
}
static int calc_state_vector_deriv( const double jd,
const double state_vect[6], double deriv[6])
{
deriv[0] = state_vect[3];
deriv[1] = state_vect[4];
deriv[2] = state_vect[5];
return( calc_accel( jd, state_vect, deriv + 3));
}
/* NOTE: t_since is in minutes, posn is in km, vel is in km/minutes.
State vector is in meters and m/s. Hence some conversions...
'high_ephemeris()' does the actual RK4 numerical integration, using a
simplified model of the earth and moon and a quite basic integration
step size adjustment so that it can take small steps when the object is
close to the earth or moon and larger steps when far away. As described
above, any temptation to "improve" the integration should be resisted. */
static int high_ephemeris( double tsince, const tle_t *tle, const double *params,
double *pos, double *vel)
{
const double meters_per_km = 1000.;
const double seconds_per_minute = 60.;
const double seconds_per_day =
seconds_per_minute * minutes_per_day; /* a.k.a. 86400 */
size_t i, j;
double jd = tle->epoch, state_vect[6];
for( i = 0; i < 6; i++)
state_vect[i] = params[i];
tsince /= minutes_per_day; /* input was in minutes; days are */
while( tsince) /* more convenient hereforth */
{
double dt = tsince, dt_in_seconds;
double max_step = 1.;
double kvects[4][6];
calc_state_vector_deriv( jd, state_vect, kvects[0]);
for( j = 3; j < 6; j++)
if( max_step > 1e-3 / fabs( kvects[0][j]))
max_step = 1e-3 / fabs( kvects[0][j]);
if( max_step < 1e-5)
max_step = 1e-5;
if( tsince > max_step)
dt = max_step;
else if( tsince < -max_step)
dt = -max_step;
dt_in_seconds = dt * seconds_per_day;
for( j = 1; j < 4; j++)
{
const double step = (j == 3 ? dt_in_seconds : dt_in_seconds * .5);
double tstate[6];
for( i = 0; i < 6; i++)
tstate[i] = state_vect[i] + step * kvects[j - 1][i];
calc_state_vector_deriv( jd + (j == 3 ? dt : dt / 2.),
tstate, kvects[j]);
}
for( i = 0; i < 6; i++)
state_vect[i] += (dt_in_seconds / 6.) *
(kvects[0][i] + 2. * (kvects[1][i] + kvects[2][i]) + kvects[3][i]);
jd += dt;
tsince -= dt;
}
for( i = 0; i < 3; i++)
{
pos[i] = state_vect[i];
vel[i] = state_vect[i + 3];
}
ecliptic_to_equatorial( vel);
ecliptic_to_equatorial( pos);
/* Now, cvt meters to km, meters/second to km/minute: */
for( i = 0; i < 3; i++)
{
pos[i] /= meters_per_km;
vel[i] *= seconds_per_minute / meters_per_km;
}
return( 0);
}
int SDP4( const double tsince, const tle_t *tle, const double *params,
double *pos, double *vel)
{
double
a, tempa, tsince_squared,
xl, xnoddf;
if( tle->ephemeris_type == 'H')
{
double unused_vel[3];
return( high_ephemeris( tsince, tle, params, pos, (vel ? vel : unused_vel)));
}
/* Update for secular gravity and atmospheric drag */
deep_arg->omgadf = tle->omegao + deep_arg->omgdot * tsince;
xnoddf = tle->xnodeo + deep_arg->xnodot * tsince;
tsince_squared = tsince*tsince;
deep_arg->xnode = xnoddf + xnodcf * tsince_squared;
deep_arg->xn = deep_arg->xnodp;
/* Update for deep-space secular effects */
deep_arg->xll = tle->xmo + deep_arg->xmdot * tsince;
deep_arg->t = tsince;
Deep_dpsec( tle, deep_arg);
tempa = 1-c1*tsince;
if( deep_arg->xn < 0.)
return( SXPX_ERR_NEGATIVE_XN);
a = pow(xke/deep_arg->xn,two_thirds)*tempa*tempa;
deep_arg->em -= tle->bstar*c4*tsince;
/* Update for deep-space periodic effects */
deep_arg->xll += deep_arg->xnodp * t2cof * tsince_squared;
Deep_dpper( tle, deep_arg);
/* Keeping xinc positive is not really necessary, unless */
/* you're displaying elements and dislike negative inclinations. */
#ifdef KEEP_INCLINATION_POSITIVE
if (deep_arg->xinc < 0.) /* Begin April 1983 errata correction: */
{
deep_arg->xinc = -deep_arg->xinc;
deep_arg->sinio = -deep_arg->sinio;
deep_arg->xnode += pi;
deep_arg->omgadf -= pi;
} /* End April 1983 errata correction. */
#endif
xl = deep_arg->xll + deep_arg->omgadf + deep_arg->xnode;
/* Dundee change: Reset cosio, sinio for new xinc: */
deep_arg->cosio = cos( deep_arg->xinc);
deep_arg->sinio = sin( deep_arg->xinc);
return( sxpx_posn_vel( deep_arg->xnode, a, deep_arg->em, deep_arg->cosio,
deep_arg->sinio, deep_arg->xinc, deep_arg->omgadf,
xl, pos, vel));
} /* SDP4 */

150
src/sgp4/sgp4.c Normal file
View File

@ -0,0 +1,150 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* sgp4.c - Near-earth satellite propagator (orbital period < 225 min)
*
* Implements the SGP4 model from STR#2 (Lane & Hoots 1979), as unified
* in STR#3 (Hoots & Roehrich 1980) Chapter 6 (pp. 25-32).
*
* SGP4_init(): Computes drag coefficients c1..c5, d2..d4, and the
* "simple" vs full mode flag (perigee < 220 km truncates to linear
* variation in sqrt(a) and quadratic in mean anomaly).
* STR#3 Eqs. 6-1..6-17, Vallado Rev-1 Section III.
*
* SGP4(): Secular updates for gravity + atmospheric drag, then delegates
* to sxpx_posn_vel() for Kepler solution and short-period corrections.
* STR#3 Eqs. 6-18..6-32, Vallado Rev-1 Eqs. 18-22.
*/
#include <math.h>
#include <stdio.h>
#include "norad.h"
#include "norad_in.h"
#define c1 params[2]
#define c4 params[3]
#define xnodcf params[4]
#define t2cof params[5]
#define p_aodp params[10]
#define p_cosio params[11]
#define p_sinio params[12]
#define p_omgdot params[13]
#define p_xmdot params[14]
#define p_xnodot params[15]
#define p_xnodp params[16]
#define c5 params[17]
#define d2 params[18]
#define d3 params[19]
#define d4 params[20]
#define delmo params[21]
#define p_eta params[22]
#define omgcof params[23]
#define sinmo params[24]
#define t3cof params[25]
#define t4cof params[26]
#define t5cof params[27]
#define xmcof params[28]
#define simple_flag *((int *)( params + 29))
#define MINIMAL_E 1.e-4
#define ECC_EPS 1.e-6 /* Too low for computing further drops. */
void SGP4_init( double *params, const tle_t *tle)
{
deep_arg_t deep_arg;
init_t init;
double eeta, etasq;
sxpx_common_init( params, tle, &init, &deep_arg);
p_aodp = deep_arg.aodp;
p_cosio = deep_arg.cosio;
p_sinio = deep_arg.sinio;
p_omgdot = deep_arg.omgdot;
p_xmdot = deep_arg.xmdot;
p_xnodot = deep_arg.xnodot;
p_xnodp = deep_arg.xnodp;
p_eta = deep_arg.aodp*tle->eo*init.tsi;
// p_eta = init.eta;
eeta = tle->eo*p_eta;
/* For perigee less than 220 kilometers, the "simple" flag is set */
/* and the equations are truncated to linear variation in sqrt a */
/* and quadratic variation in mean anomaly. Also, the c3 term, */
/* the delta omega term, and the delta m term are dropped. */
simple_flag = ((p_aodp*(1-tle->eo)/ae) < (220./earth_radius_in_km+ae));
if( !simple_flag)
{
const double c1sq = c1*c1;
double temp;
simple_flag = 0;
delmo = 1. + p_eta * cos(tle->xmo);
delmo *= delmo * delmo;
d2 = 4*p_aodp*init.tsi*c1sq;
temp = d2*init.tsi*c1/3;
d3 = (17*p_aodp+init.s4)*temp;
d4 = 0.5*temp*p_aodp*init.tsi*(221*p_aodp+31*init.s4)*c1;
t3cof = d2+2*c1sq;
t4cof = 0.25*(3*d3+c1*(12*d2+10*c1sq));
t5cof = 0.2*(3*d4+12*c1*d3+6*d2*d2+15*c1sq*(2*d2+c1sq));
sinmo = sin(tle->xmo);
if( tle->eo < MINIMAL_E)
omgcof = xmcof = 0.;
else
{
const double c3 =
init.coef * init.tsi * a3ovk2 * p_xnodp * ae * p_sinio / tle->eo;
xmcof = -two_thirds * init.coef * tle->bstar * ae / eeta;
omgcof = tle->bstar*c3*cos(tle->omegao);
}
} /* End of if (isFlagClear(SIMPLE_FLAG)) */
etasq = p_eta * p_eta;
c5 = 2*init.coef1*p_aodp * deep_arg.betao2*(1+2.75*(etasq+eeta)+eeta*etasq);
} /* End of SGP4() initialization */
int SGP4( const double tsince, const tle_t *tle, const double *params,
double *pos, double *vel)
{
double
a, e, omega, omgadf,
temp, tempa, tempe, templ, tsq,
xl, xmdf, xmp, xnoddf, xnode;
/* Update for secular gravity and atmospheric drag. */
xmdf = tle->xmo+p_xmdot*tsince;
omgadf = tle->omegao+p_omgdot*tsince;
xnoddf = tle->xnodeo+p_xnodot*tsince;
omega = omgadf;
xmp = xmdf;
tsq = tsince*tsince;
xnode = xnoddf+xnodcf*tsq;
tempa = 1-c1*tsince;
tempe = tle->bstar*c4*tsince;
templ = t2cof*tsq;
if( !simple_flag)
{
const double delomg = omgcof*tsince;
double delm = 1. + p_eta * cos(xmdf);
double tcube, tfour;
delm = xmcof * (delm * delm * delm - delmo);
temp = delomg+delm;
xmp = xmdf+temp;
omega = omgadf-temp;
tcube = tsq*tsince;
tfour = tsince*tcube;
tempa = tempa-d2*tsq-d3*tcube-d4*tfour;
tempe = tempe+tle->bstar*c5*(sin(xmp)-sinmo);
templ = templ+t3cof*tcube+tfour*(t4cof+tsince*t5cof);
}; /* End of if (isFlagClear(SIMPLE_FLAG)) */
a = p_aodp*tempa*tempa;
e = tle->eo-tempe;
/* A highly arbitrary lower limit on e, of 1e-6: */
if( e < ECC_EPS)
e = ECC_EPS;
xl = xmp+omega+xnode+p_xnodp*templ;
if( tempa < 0.) /* force negative a, to indicate error condition */
a = -a;
return( sxpx_posn_vel( xnode, a, e, p_cosio, p_sinio, tle->xincl,
omega, xl, pos, vel));
} /*SGP4*/

303
src/sgp4/tle_out.c Normal file
View File

@ -0,0 +1,303 @@
/* Copyright (C) 2018, Project Pluto. See LICENSE.
*
* tle_out.c - TLE (Two-Line Element) output formatting
*
* Converts in-memory tle_t structures back to the standard NORAD TLE
* text format. Inverse of get_el.c. Format per STR#3 Appendix (pp. 83-91).
*
* Key conversions (reverse of parsing):
* - Angles: radians -> degrees, normalized to [0, 360)
* - Mean motion: rad/min -> rev/day
* - B* drag: double -> quasi-scientific notation (sDDDDDSe)
* - Epoch: Julian Date -> YY+DDD.DDDDDDDD
*
* Also handles Alpha-5/Super-5 catalog numbers and 'H' state vectors.
* See: https://en.wikipedia.org/wiki/Two-line_elements
*/
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <math.h>
#include <assert.h>
#include "norad.h"
/* Useful constants to define, in case the value of PI or the number
of minutes in a day should change: */
#define PI 3.141592653589793238462643383279502884197169399375105
#define MINUTES_PER_DAY 1440.
#define MINUTES_PER_DAY_SQUARED (MINUTES_PER_DAY * MINUTES_PER_DAY)
#define MINUTES_PER_DAY_CUBED (MINUTES_PER_DAY_SQUARED * MINUTES_PER_DAY)
#define AE 1.0
#define J1900 (2451545.5 - 36525. - 1.)
static int add_tle_checksum_data( char *buff)
{
int count = 69, rval = 0;
if( (*buff != '1' && *buff != '2') || buff[1] != ' ')
return( 0); /* not a .TLE */
while( --count)
{
if( *buff < ' ' || *buff > 'z')
return( 0); /* wups! those shouldn't happen in .TLEs */
if( *buff > '0' && *buff <= '9')
rval += *buff - '0';
else if( *buff == '-')
rval++;
buff++;
}
if( *buff != 10 && buff[1] != 10 && buff[2] != 10)
return( 0); /* _still_ not a .TLE */
*buff++ = (char)( '0' + (rval % 10));
*buff++ = 13;
*buff++ = 10;
*buff++ = '\0';
return( 1);
}
static double zero_to_two_pi( double angle_in_radians)
{
angle_in_radians = fmod( angle_in_radians, PI + PI);
if( angle_in_radians < 0.)
angle_in_radians += PI + PI;
return( angle_in_radians);
}
/* See comments for get_high_value() in 'get_el.cpp'. Essentially, we are
writing out a state vector in a convoluted base-36 form. */
static void set_high_value( char *obuff, const double value)
{
int64_t oval = (int64_t)fabs( value);
int i;
*obuff++ = (value >= 0. ? '+' : '-');
for( i = 7; i >= 0; i--, oval /= (int64_t)36)
{
obuff[i] = (char)( oval % (int64_t)36);
if( obuff[i] < 10)
obuff[i] += '0';
else
obuff[i] += 'A' - 10;
}
obuff[8] = ' ';
}
/* The second derivative of the mean motion, 'xnddo6', and the 'bstar'
drag term, are stored in a simplified scientific notation. To save
valuable bytes, the decimal point and 'E' are assumed. */
static void put_sci( char *obuff, double ival)
{
if( !ival)
memcpy( obuff, " 00000-0", 7);
else
{
int oval, exponent = 0;
if( ival > 0.)
*obuff++ = ' ';
else
{
*obuff++ = '-';
ival = -ival;
}
while( 1)
{
if( ival > 1.) /* avoid integer overflow */
oval = 100000;
else
oval = (int)( ival * 100000. + .5);
if( oval > 99999)
{
ival /= 10;
exponent++;
}
else if( oval < 10000)
{
ival *= 10;
exponent--;
}
else
break;
}
snprintf( obuff, 7, "%5d", oval);
assert( 5 == strlen( obuff));
if( exponent > 0)
{
obuff[5] = '+';
obuff[6] = (char)( '0' + exponent);
}
else
{
obuff[5] = '-';
obuff[6] = (char)( '0' - exponent);
}
}
}
/* See comments for get_norad_number( ) in get_el.cpp. This
performs the reverse function of setting the five bytes corresponding
to a NORAD number, using the 'standard' Alpha-5 method for numbers
0 to 339000 and the nonstandard Super-5 method beyond that. */
static char int_to_base64( const int digit)
{
int rval;
assert( digit >= 0 && digit < 64);
if( digit < 0 || digit >= 64)
rval = ' ';
else if( digit < 10)
rval = '0' + digit;
else if( digit < 36)
rval = 'A' + digit - 10;
else if( digit < 62)
rval = 'a' + digit - 36;
else
rval = (digit == 62 ? '+' : '-');
return( rval);
}
static void store_norad_number_in_alpha5( char *obuff, const int norad_number)
{
const int N_TYPE_STANDARD = 340000; /* five digits plus Alpha-5 */
const int N_TYPE_2 = 64 * 64 * 64 * 64 * 54; /* xxxxL */
/* const int N_TYPE_3 = 64 * 64 * 64 * 54 * 10; xxxLd; we don't actually use this */
const int one_billion = 1000000000;
int i, tval = norad_number;
assert( norad_number >= 0 && norad_number < one_billion);
if( norad_number < 0 || norad_number >= one_billion)
strcpy( obuff, " "); /* outside representable range */
else if( norad_number < N_TYPE_STANDARD)
{
for( i = 4; i > 0; i--, tval /= 10)
obuff[i] = '0' + (tval % 10);
*obuff = int_to_base64( tval);
if( *obuff >= 'I')
(*obuff)++;
if( *obuff >= 'O')
(*obuff)++;
}
else if( norad_number < N_TYPE_STANDARD + N_TYPE_2)
{
tval -= N_TYPE_STANDARD;
obuff[4] = int_to_base64( tval % 54 + 10);
tval /= 54;
for( i = 3; i >= 0; i--, tval >>= 6)
obuff[i] = int_to_base64( tval & 0x3f);
}
else
{
tval -= N_TYPE_STANDARD + N_TYPE_2;
obuff[4] = int_to_base64( tval % 10);
obuff[3] = int_to_base64( (tval / 10) % 54 + 10);
tval /= 540;
for( i = 2; i >= 0; i--, tval >>= 6)
obuff[i] = int_to_base64( tval & 0x3f);
}
obuff[5] = '\0';
}
/* SpaceTrack TLEs have, on the second line, leading zeroes in front of the
inclination, ascending node, argument of perigee, and mean motion. Which
is why I've used this format string :
snprintf( line2 + 8, 57, "%08.4f %08.4f %07ld %08.4f %08.4f %011.8f", ...)
'classfd.tle' and some other sources don't use leading zeroes. For them,
one should use the following format string for those four quantities :
snprintf( line2 + 8, 57, "%8.4f %8.4f %07ld %8.4f %8.4f %11.8f", ...) */
void write_elements_in_tle_format( char *buff, const tle_t *tle)
{
long year = (long)( tle->epoch - J1900) / 365 + 1;
double day_of_year;
char *line2, norad_num_text[6];
do
{
double start_of_year;
year--;
start_of_year = J1900 + (double)year * 365. + (double)((year - 1) / 4);
day_of_year = tle->epoch - start_of_year;
}
while( day_of_year < 1.);
if( year < 0 || year > 200) /* bogus input */
{
year = 56;
day_of_year = 0.;
}
store_norad_number_in_alpha5( norad_num_text, tle->norad_number);
snprintf( buff, 72,
/* xndt2o xndd6o bstar eph bull */
"1 %5s%c %-8s %02ld%12.8f -.000hit00 +00000-0 +00000-0 %c %4dZ\n",
norad_num_text, tle->classification, tle->intl_desig,
year % 100L, day_of_year,
tle->ephemeris_type, tle->bulletin_number);
if( buff[20] == ' ') /* fill in leading zeroes for day of year */
buff[20] = '0';
if( buff[21] == ' ')
buff[21] = '0';
if( tle->ephemeris_type != 'H') /* "normal", standard TLEs */
{
double deriv_mean_motion = tle->xndt2o * MINUTES_PER_DAY_SQUARED / (2. * PI);
unsigned long lderiv;
if( deriv_mean_motion >= 0)
buff[33] = ' ';
lderiv = (unsigned long)( fabs( deriv_mean_motion * 100000000.) + .5);
assert( lderiv < 100000000);
snprintf( buff + 35, 10, "%08lu", lderiv);
assert( 8 == strlen( buff + 35));
buff[43] = ' ';
put_sci( buff + 44, tle->xndd6o * MINUTES_PER_DAY_CUBED / (2. * PI));
put_sci( buff + 53, tle->bstar / AE);
}
else
{
size_t i;
const double *posn = &tle->xincl;
for( i = 0; i < 3; i++)
set_high_value( buff + 33 + i * 10, posn[i]);
buff[62] = 'H';
}
add_tle_checksum_data( buff);
assert( 71 == strlen( buff));
line2 = buff + 71;
snprintf( line2, 10, "2 %5s ", norad_num_text);
assert( 8 == strlen( line2));
if( tle->ephemeris_type != 'H') /* "normal", standard TLEs */
{
const double revs_per_day = tle->xno * MINUTES_PER_DAY / (2. * PI);
assert( revs_per_day > 0. && revs_per_day < 99.);
snprintf( line2 + 8, 57, "%08.4f %08.4f %07ld %08.4f %08.4f %011.8f",
zero_to_two_pi( tle->xincl) * 180. / PI,
zero_to_two_pi( tle->xnodeo) * 180. / PI,
(long)( tle->eo * 10000000. + .5),
zero_to_two_pi( tle->omegao) * 180. / PI,
zero_to_two_pi( tle->xmo) * 180. / PI,
revs_per_day);
assert( 55 == strlen( line2 + 8));
}
else
{
size_t i;
const double *vel = &tle->xincl + 3;
memset( line2 + 8, ' ', 25); /* reserved for future use */
for( i = 0; i < 3; i++)
set_high_value( line2 + 33 + i * 10, vel[i] * 1e+4);
}
assert( tle->revolution_number >= 0 && tle->revolution_number < 100000);
snprintf( line2 + 63, 8, "%5dZ\n", tle->revolution_number);
add_tle_checksum_data( line2);
}

7068
test/data/vallado_518.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,671 @@
-- Vallado 518 Test Vectors (AIAA 2006-6753-Rev1, Appendices D & E)
--
-- 518 propagation predictions across 29 satellites, covering both
-- SGP4 (near-earth) and SDP4 (deep-space) models. Reference values
-- from Vallado, Crawford, Hujsak, and Kelso's definitive SGP4 paper.
--
-- The reference vectors use Vallado's "AFSPC (option 'a')" mode with
-- "perturbed inclination (GSFC)" Lyddane choice. Bill Gray's sat_code
-- takes a different path through the Lyddane singularity and deep-space
-- resonance logic, producing small numerical differences for most
-- satellites and larger divergences for 4 known edge cases:
--
-- 20413 (e=0.79, Molniya-like): up to 1694 km at large tsince
-- 04632 (deep-space, e=0.15): up to 7.5 km
-- 14128 (deep-space): up to 1.7 km
-- 23599 (deep-space, GEO): up to 1.0 km
--
-- These differences are expected and documented. This test detects
-- regressions — if any number changes, the vendored SGP4/SDP4 code
-- was inadvertently modified.
--
-- Tolerances for the summary check:
-- Position: 1e-4 km (0.1 m) — catches marginal velocity-only failures
-- Velocity: 1e-7 km/s (0.1 mm/s) — tight enough for regression detection
CREATE EXTENSION IF NOT EXISTS pg_orbit;
NOTICE: extension "pg_orbit" already exists, skipping
-- Helper: convert Julian date + minutes-since-epoch to timestamptz.
-- JD 2440587.5 = 1970-01-01 00:00:00 UTC (Unix epoch).
CREATE OR REPLACE FUNCTION _vallado_jd_plus_min(jd float8, tsince_min float8)
RETURNS timestamptz AS $$
SELECT to_timestamp((jd + tsince_min / 1440.0 - 2440587.5) * 86400.0)
$$ LANGUAGE sql IMMUTABLE STRICT;
-- Test vector table
CREATE TEMP TABLE vallado_vectors (
satnum text,
tle_line1 text,
tle_line2 text,
tsince_min float8,
ref_x float8, ref_y float8, ref_z float8,
ref_vx float8, ref_vy float8, ref_vz float8
);
INSERT INTO vallado_vectors VALUES
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',0.0,7022.46529266,-1400.08296755,0.03995155,1.893841015,6.405893759,4.534807250),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',360.0,-7154.03120202,-3783.17682504,-3536.19412294,4.741887409,-4.151817765,-2.093935425),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',720.0,-7134.59340119,6531.68641334,3260.27186483,-4.113793027,-2.911922039,-2.557327851),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',1080.0,5568.53901181,4492.06992591,3863.87641983,-4.209106476,5.159719888,2.744852980),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',1440.0,-938.55923943,-6268.18748831,-4294.02924751,7.536105209,-0.427127707,0.989878080),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',1800.0,-9680.56121728,2802.47771354,124.10688038,-0.905874102,-4.659467970,-3.227347517),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',2160.0,190.19796988,7746.96653614,5110.00675412,-6.112325142,1.527008184,-0.139152358),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',2520.0,5579.55640116,-3995.61396789,-1518.82108966,4.767927483,5.123185301,4.276837355),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',2880.0,-8650.73082219,-1914.93811525,-3007.03603443,3.067165127,-4.828384068,-2.515322836),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',3240.0,-5429.79204164,7574.36493792,3747.39305236,-4.999442110,-1.800561422,-2.229392830),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',3600.0,6759.04583722,2001.58198220,2783.55192533,-2.180993947,6.402085603,3.644723952),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',3960.0,-3791.44531559,-5712.95617894,-4533.48630714,6.668817493,-2.516382327,-0.082384354),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',4320.0,-9060.47373569,4658.70952502,813.68673153,-2.232832783,-4.110453490,-3.157345433),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',0.0,2334.11450085,-41920.44035349,-0.03867437,2.826321032,-0.065091664,0.570936053),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-5184.0,-29020.02587128,13819.84419063,-5713.33679183,-1.768068390,-3.235371192,-0.395206135),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-5064.0,-32982.56870101,-11125.54996609,-6803.28472771,0.617446996,-3.379240041,0.085954707),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-4944.0,-22097.68730513,-31583.13829284,-4836.34329328,2.230597499,-2.166594667,0.426443070),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-4896.0,-15129.94694545,-36907.74526221,-3487.56256701,2.581167187,-1.524204737,0.504805763),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',0.0,3988.31022699,5498.96657235,0.90055879,-3.290032738,2.357652820,6.496623475),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',120.0,-3935.69800083,409.10980837,5471.33577327,-3.374784183,-6.635211043,-1.942056221),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',240.0,-1675.12766915,-5683.30432352,-3286.21510937,5.282496925,1.508674259,-5.354872978),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',360.0,4993.62642836,2890.54969900,-3600.40145627,0.347333429,5.707031557,5.070699638),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',480.0,-1115.07959514,4015.11691491,5326.99727718,-5.524279443,-4.765738774,2.402255961),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',600.0,-4329.10008198,-5176.70287935,409.65313857,2.858408303,-2.933091792,-6.509690397),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',720.0,3692.60030028,-976.24265255,-5623.36447493,3.897257243,6.415554948,1.429112190),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',840.0,2301.83510037,5723.92394553,2814.61514580,-5.110924966,-0.764510559,5.662120145),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',960.0,-4990.91637950,-2303.42547880,3920.86335598,-0.993439372,-5.967458360,-4.759110856),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1080.0,642.27769977,-4332.89821901,-5183.31523910,5.720542579,4.216573838,-2.846576139),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1200.0,4719.78335752,4798.06938996,-943.58851062,-2.294860662,3.492499389,6.408334723),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1320.0,-3299.16993602,1576.83168320,5678.67840638,-4.460347074,-6.202025196,-0.885874586),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1440.0,-2777.14682335,-5663.16031708,-2462.54889123,4.915493146,0.123328992,-5.896495091),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1560.0,4992.31573893,1716.62356770,-4287.86065581,1.640717189,6.071570434,4.338797931),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1680.0,-8.22384755,4662.21521668,4905.66411857,-5.891011274,-3.593173872,3.365100460),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1800.0,-4966.20137963,-4379.59155037,1349.33347502,1.763172581,-3.981456387,-6.343279443),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1920.0,2954.49390331,-2080.65984650,-5754.75038057,4.895893306,5.858184322,0.375474825),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2040.0,3363.28794321,5559.55841180,1956.05542266,-4.587378863,0.591943403,6.107838605),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2160.0,-4856.66780070,-1107.03450192,4557.21258241,-2.304158557,-6.186437070,-3.956549542),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2280.0,-497.84480071,-4863.46005312,-4700.81211217,5.960065407,2.996683369,-3.767123329),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2400.0,5241.61936096,3910.75960683,-1857.93473952,-1.124834806,4.406213160,6.148161299),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2520.0,-2451.38045953,2610.60463261,5729.79022069,-5.366560525,-5.500855666,0.187958716),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2640.0,-3791.87520638,-5378.82851382,-1575.82737930,4.266273592,-1.199162551,-6.276154080),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2760.0,4730.53958356,524.05006433,-4857.29369725,2.918056288,6.135412849,3.495115636),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2880.0,1159.27802897,5056.60175495,4353.49418579,-5.968060341,-2.314790406,4.230722669),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',0.0,2349.89483350,-14785.93811562,0.02119378,2.721488096,-3.256811655,4.498416672),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',120.0,15223.91713658,-17852.95881713,25280.39558224,1.079041732,0.875187372,2.485682813),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',240.0,19752.78050009,-8600.07130962,37522.72921090,0.238105279,1.546110924,0.986410447),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',360.0,19089.29762968,3107.89495018,39958.14661370,-0.410308034,1.640332277,-0.306873818),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',480.0,13829.66070574,13977.39999817,32736.32082508,-1.065096849,1.279983299,-1.760166075),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',600.0,3333.05838525,18395.31728674,12738.25031238,-1.882432221,-0.611623333,-4.039586549),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',720.0,2622.13222207,-15125.15464924,474.51048398,2.688287199,-3.078426664,4.494979530),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',840.0,15320.56770017,-17777.32564586,25539.53198382,1.064346229,0.892184771,2.459822414),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',960.0,19769.70267785,-8458.65104454,37624.20130236,0.229304396,1.550363884,0.966993056),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1080.0,19048.56201523,3260.43223119,39923.39143967,-0.418015536,1.639346953,-0.326094840),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1200.0,13729.19205837,14097.70014810,32547.52799890,-1.074511043,1.270505211,-1.785099927),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1320.0,3148.86165643,18323.19841703,12305.75195578,-1.895271701,-0.678343847,-4.086577951),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1440.0,2890.80638268,-15446.43952300,948.77010176,2.654407490,-2.909344895,4.486437362),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1560.0,15415.98410712,-17699.90714437,25796.19644689,1.049818334,0.908822332,2.434107329),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1680.0,19786.00618538,-8316.74570581,37723.74539119,0.220539813,1.554518900,0.947601047),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1800.0,19007.28688729,3412.85948715,39886.66579255,-0.425733568,1.638276809,-0.345353807),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1920.0,13627.93015254,14216.95401307,32356.13706868,-1.083991976,1.260802347,-1.810193903),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2040.0,2963.26486560,18243.85063641,11868.25797486,-1.908015447,-0.747870342,-4.134004492),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2160.0,3155.85126036,-15750.70393364,1422.32496953,2.620085624,-2.748990396,4.473527039),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2280.0,15510.15191770,-17620.71002219,26050.43525345,1.035454678,0.925111006,2.408534465),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2400.0,19801.67198812,-8174.33337167,37821.38577439,0.211812700,1.558576937,0.928231880),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2520.0,18965.46529379,3565.19666242,39847.97510998,-0.433459945,1.637120585,-0.364653213),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2640.0,13525.88227400,14335.15978787,32162.13236536,-1.093537945,1.250868256,-1.835451681),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2760.0,2776.30574260,18156.98538451,11425.73046481,-1.920632199,-0.820370733,-4.181839232),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2880.0,3417.20931587,-16038.79510665,1894.74934058,2.585515864,-2.596818146,4.456882556),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',0.0,13020.06750784,-2449.07193500,1.15896030,4.247363935,1.597178501,4.956708611),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',120.0,19190.32482476,9249.01266902,26596.71345328,-0.624960193,1.324550562,2.495697637),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',240.0,11332.67806218,16517.99124008,38569.78482991,-1.400974747,0.710947006,0.923935636),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',360.0,328.74217398,19554.92047380,40558.26246145,-1.593281066,0.126772913,-0.359627307),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',480.0,-10684.90590680,18057.15728839,33158.75253886,-1.383205997,-0.582328999,-1.744412556),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',600.0,-17069.78000550,9944.86797897,13885.91649059,0.044133354,-1.853448464,-3.815303117),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',720.0,13725.09398980,-2180.70877090,863.29684523,3.878478111,1.656846496,4.944867241),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',840.0,19089.63879226,9456.29670247,27026.79562883,-0.656614299,1.309112636,2.449371941),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',960.0,11106.41248373,16627.60874079,38727.35140296,-1.409722680,0.698582526,0.891383535),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1080.0,72.40958621,19575.08054144,40492.12544001,-1.593394604,0.113655142,-0.390556063),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1200.0,-10905.89252576,17965.41205111,32850.07298244,-1.371396120,-0.601706604,-1.782817058),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1320.0,-17044.61207568,9635.48491849,13212.59462953,0.129244030,-1.903551430,-3.884569098),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1440.0,14369.90303735,-1903.85601062,1722.15319853,3.543393116,1.701687176,4.913881358),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1560.0,18983.96210441,9661.12233804,27448.99557732,-0.687189304,1.293808870,2.403630759),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1680.0,10878.79336704,16735.31433954,38879.23434264,-1.418239666,0.686235750,0.858951848),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1800.0,-184.03743100,19593.09371709,40420.40606889,-1.593348925,0.100448697,-0.421571993),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1920.0,-11125.12138631,17870.19488928,32534.21521208,-1.359116236,-0.621413776,-1.821629856),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2040.0,-17004.43272827,9316.53926351,12526.11883812,0.220330736,-1.955594322,-3.955058575),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2160.0,14960.06492693,-1620.68430805,2574.96359381,3.238634028,1.734723385,4.868880331),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2280.0,18873.46347257,9863.57004586,27863.46574735,-0.716736981,1.278632817,2.358448535),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2400.0,10649.86857581,16841.14172669,39025.48035006,-1.426527152,0.673901057,0.826632332),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2520.0,-440.53459323,19608.95524423,40343.10675451,-1.593138597,0.087147884,-0.452680559),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2640.0,-11342.45028909,17771.44223942,32211.12535721,-1.346344015,-0.641464291,-1.860864234),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2760.0,-16948.06005711,8987.64254880,11826.28284367,0.318007297,-2.009693492,-4.026726648),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2880.0,15500.53445068,-1332.90981042,3419.72315308,2.960917974,1.758331634,4.813698638),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',0.0,25532.98947267,-27244.26327953,-1.11572421,2.410283885,2.194175683,0.545888526),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1440.0,-11362.18265118,-35117.55867813,-5413.62537994,3.137861261,-1.011678260,0.267510059),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1380.0,309.25349929,-36960.43090143,-4198.48007670,3.292429375,-0.002166046,0.402111628),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1320.0,11949.04009077,-35127.37816804,-2565.89806468,3.119942784,1.012096444,0.497284100),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1260.0,22400.45329336,-29798.63236321,-677.91515122,2.638533344,1.922477736,0.542792913),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1200.0,30640.84752458,-21525.02340201,1277.34808722,1.903464941,2.634294312,0.534540934),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1140.0,35899.56788035,-11152.71158138,3108.72535238,0.997393045,3.079858548,0.474873291),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1080.0,37732.45438600,288.18821054,4643.87587495,0.016652226,3.225184410,0.371669746),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1020.0,36045.92961699,11706.61816230,5746.32646574,-0.942409065,3.069888941,0.236662980),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-960.0,31076.77273609,22063.44379776,6325.93403705,-1.794027976,2.642072476,0.083556127),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-900.0,23341.26015320,30460.88002531,6342.91707895,-2.469409743,1.990861658,-0.073612096),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-840.0,13568.39733054,36204.45930900,5806.79548733,-2.919354203,1.178920217,-0.221646814),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-780.0,2628.58762420,38840.10855897,4771.91979854,-3.114400514,0.276239109,-0.348926401),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-720.0,-8535.81598158,38171.79073851,3331.00311285,-3.043839958,-0.644462527,-0.445808894),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',0.0,7473.37102491,428.94748312,5828.74846783,5.107155391,6.444680305,-0.186133297),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',360.0,-3305.22148694,32410.84323331,-24697.16974954,-1.301137319,-1.151315600,-0.283335823),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',720.0,14271.29083858,24110.44309009,-4725.76320143,-0.320504528,2.679841539,-2.084054355),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',1080.0,-9990.05800009,22717.34212448,-23616.88515553,-1.016674392,-2.290267981,0.728923337),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',1440.0,9787.87836256,33753.32249667,-15030.79874625,-1.094251553,0.923589906,-1.522311008),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',0.0,34747.57932696,24502.37114079,-1.32832986,-1.731642662,2.452772615,0.608510081),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',120.0,18263.33439094,38159.96004751,4186.18304085,-2.744396611,1.255583260,0.528558932),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',240.0,-3023.38840703,41783.13186459,7273.03412906,-3.035574793,-0.271656544,0.309645251),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',360.0,-23516.34391907,34424.42065671,8448.49867693,-2.529120477,-1.726186020,0.009582303),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',480.0,-37837.46699511,18028.39727170,7406.25540271,-1.360069525,-2.725794686,-0.292555349),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',600.0,-42243.58460661,-3093.72887774,4422.91711801,0.163110919,-3.009980598,-0.517584362),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',720.0,-35597.57919549,-23407.91145393,282.09554383,1.641405246,-2.506773678,-0.606963478),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',840.0,-19649.19834455,-37606.11623860,-3932.71525948,2.689647056,-1.349150016,-0.537710698),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',960.0,1431.30912160,-41982.04949668,-7120.45467057,3.035263353,0.160882945,-0.327993994),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1080.0,22136.97605384,-35388.19823762,-8447.62393401,2.587624889,1.630097136,-0.032349004),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1200.0,37050.15790219,-19537.23321425,-7564.83463543,1.461844494,2.674654256,0.272202191),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1320.0,42253.81760945,1431.81867593,-4699.87621174,-0.049247334,3.019518960,0.505890058),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1440.0,36366.59147396,22023.54245720,-601.47121821,-1.549681546,2.571788981,0.607057418),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1560.0,20922.12287985,36826.33975981,3654.91125886,-2.644070068,1.447521216,0.548722983),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1680.0,-23.77224182,41945.51688402,6950.29891751,-3.043358385,-0.057417440,0.346112094),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1800.0,-20964.17821076,36039.06206172,8418.91984963,-2.642795221,-1.546099886,0.052725852),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1920.0,-36401.63863057,20669.75286162,7677.19769359,-1.549488154,-2.627052310,-0.254079652),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2040.0,-42298.30327543,-119.03351118,4922.96388841,-0.052232768,-3.018152669,-0.493827331),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2160.0,-37125.62383511,-20879.63058368,879.86971348,1.456499841,-2.619358421,-0.604081694),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2280.0,-22250.12320553,-36182.74736487,-3393.15365183,2.583161226,-1.536647628,-0.556404555),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2400.0,-1563.06258654,-42035.43179159,-6780.02161760,3.034917506,-0.052702046,-0.363395654),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2520.0,19531.64069587,-36905.65470956,-8395.46892032,2.693682199,1.446079999,-0.075256054),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2640.0,35516.53506142,-22123.71916638,-7815.04516935,1.646882125,2.568416058,0.232985912),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2760.0,42196.03535976,-1547.32646751,-5187.39401981,0.166491841,3.019211549,0.480665780),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2880.0,37802.25393045,19433.57330019,-1198.66634226,-1.359930580,2.677830903,0.602507466),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',0.0,5559.11686836,-11941.04090781,-19.41235206,3.392116762,-1.946985124,4.250755852),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',120.0,12339.83273749,-2771.14447871,18904.57603433,-0.871247614,2.600917693,0.581560002),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',240.0,-3385.00215658,7538.13955729,200.59008616,-2.023512865,-4.261808344,-6.856385787),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',360.0,12805.22442200,-10258.94667177,13780.16486738,0.619279224,1.821510542,2.507365975),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',480.0,5682.46556318,7199.30270473,15437.67134070,-2.474365406,2.087897336,-2.583767460),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',600.0,7628.94243982,-12852.72097492,2902.87208981,2.748131081,-0.740084579,4.125307943),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',720.0,11531.64866625,-858.27542736,19086.85993771,-1.170071901,2.660311986,0.096005705),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',840.0,-3866.98069515,2603.73442786,-4577.36484577,1.157257298,-8.453281164,-4.683959407),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',960.0,13054.77732721,-8707.92757730,15537.63259903,0.229846748,2.119467054,2.063396852),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1080.0,3496.91064652,8712.83919778,12845.81838327,-2.782184997,1.552950644,-3.554436131),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1200.0,9593.07424729,-13023.75963608,6250.46484931,2.072666376,0.278735334,3.778111073),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1320.0,10284.79205084,1487.89914169,18824.37381327,-1.530335053,2.663107730,-0.542205966),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1440.0,-984.62035146,-5187.03480813,-5745.59594144,4.340271916,-7.266811354,1.777668888),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',0.0,25123.29290741,-13225.49966286,3249.40351869,0.488683419,4.797897593,-0.961119693),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1440.0,-151669.05280515,-5645.20454550,-2198.51592118,-0.869182889,-0.870759872,0.156508219),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1560.0,-157497.71657495,-11884.99595074,-1061.44439402,-0.749657961,-0.864016715,0.157766101),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1680.0,-162498.32255577,-18062.99733167,81.00915253,-0.638980378,-0.853687105,0.158098992),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1800.0,-166728.76010920,-24155.99648299,1222.84128677,-0.535600687,-0.840455444,0.157680857),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1920.0,-169935.81924592,-31767.29787964,2749.01540345,-0.430050431,-0.828904183,0.157812340),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2040.0,-172703.07831815,-37662.95639336,3883.60052579,-0.338004891,-0.810277487,0.156020035),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2160.0,-174823.19337404,-43417.55605219,5003.26312809,-0.250258622,-0.789828672,0.153764903),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2280.0,-176324.63925775,-49018.51958648,6104.85025002,-0.166136613,-0.767706262,0.151092242),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2400.0,-177231.42142458,-54454.12699497,7185.48661607,-0.085067854,-0.744001567,0.148033403),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2520.0,-177563.73583232,-59713.14859144,8242.48472591,-0.006561730,-0.718760309,0.144608676),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2640.0,-177338.48026483,-64784.54644698,9273.27220003,0.069809946,-0.691990238,0.140829236),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2760.0,-176569.65151461,-69657.21976255,10275.33063459,0.144426878,-0.663665876,0.136698419),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2880.0,-175268.65299073,-74319.77625463,11246.14177160,0.217631370,-0.633731091,0.132212491),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3000.0,-173444.53039609,-78760.31560396,12183.13775212,0.289737325,-0.602099929,0.127361017),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3120.0,-171104.14813653,-82966.21323591,13083.65278381,0.361037779,-0.568655903,0.122126889),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3240.0,-168252.31543803,-86923.89363433,13944.87382716,0.431811396,-0.533249797,0.116486022),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3360.0,-164891.86832887,-90618.58225954,14763.78794247,0.502328269,-0.495695896,0.110406725),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3480.0,-161023.71139825,-94034.02398835,15537.12375729,0.572855321,-0.455766412,0.103848688),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3600.0,-156646.82136726,-97152.15370791,16261.28409305,0.643661538,-0.413183688,0.096761524),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3720.0,-151758.21285737,-99952.70098346,16932.26607548,0.715023254,-0.367609561,0.089082727),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3840.0,-146352.86521283,-102412.70506284,17545.56394158,0.787229695,-0.318630913,0.080734873),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3960.0,-140423.60777444,-104505.90799734,18096.04807097,0.860588979,-0.265739987,0.071621768),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',4080.0,-133960.95961851,-106201.98091318,18577.81121953,0.935434758,-0.208307307,0.061623110),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',4200.0,-126952.91860010,-107465.51906186,18983.96903112,1.012133628,-0.145543878,0.050587007),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',4320.0,-119384.69396454,-108254.71115372,19306.39581892,1.091093313,-0.076447479,0.038319282),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',0.0,-14464.72135182,-4699.19517587,0.06681686,-3.249312013,-3.281032707,4.007046940),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',120.0,-19410.46286123,-19143.03318969,23114.05522619,0.508602237,-1.156882269,2.379923455),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',240.0,-12686.06129708,-23853.75335645,35529.81733588,1.231633829,-0.221718202,1.118440291),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',360.0,-2775.46649359,-22839.64574119,39494.64689967,1.468963405,0.489481769,-0.023972788),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',480.0,7679.87883570,-16780.50760106,34686.21815555,1.364171080,1.211183897,-1.385151371),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',600.0,14552.40023028,-4819.50121461,17154.70672449,0.109201591,2.176124494,-3.854856805),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',720.0,-15302.38845375,-5556.43440300,1095.95088753,-2.838224312,-3.134231137,3.992596326),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',840.0,-19289.20066748,-19427.04851118,23759.45685636,0.552495087,-1.112499437,2.325112654),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',960.0,-12376.21976437,-23893.38020018,35831.33691892,1.246701529,-0.194294048,1.074867282),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1080.0,-2400.55677665,-22698.62264640,39482.75964390,1.472582922,0.513555654,-0.069306561),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1200.0,8031.66819252,-16455.77592085,34298.94391742,1.351357426,1.239633234,-1.448195324),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1320.0,14559.48780372,-4238.43773813,16079.23154704,-0.026409655,2.218938770,-4.012628896),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1440.0,-16036.04980660,-6372.51406468,2183.44834232,-2.485113443,-2.994994355,3.955891272),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1560.0,-19156.71583814,-19698.89059957,24389.29473934,0.594278133,-1.069418599,2.271152044),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1680.0,-12062.72925552,-23925.82362911,36120.66680667,1.261238798,-0.167201856,1.031478939),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1800.0,-2024.96136966,-22551.56626703,39458.50085787,1.475816889,0.537615764,-0.114887472),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1920.0,8379.80916204,-16123.95878459,33894.75123231,1.337468254,1.268432783,-1.512473301),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2040.0,14527.86748873,-3646.33817120,14960.74306518,-0.180035839,2.261273515,-4.179355590),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2160.0,-16680.12147335,-7149.80800425,3257.64227208,-2.178897351,-2.863927095,3.904876943),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2280.0,-19013.58793448,-19958.93766022,25003.81778666,0.634100431,-1.027559823,2.218002685),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2400.0,-11745.76155818,-23951.19438627,36397.87676581,1.275261813,-0.140425132,0.988259441),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2520.0,-1648.81945070,-22398.50594576,39421.83273890,1.478660174,0.561671519,-0.160733093),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2640.0,8723.97652795,-15784.99406275,33473.35215527,1.322433593,1.297602497,-1.578055493),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2760.0,14452.25571587,-3043.42332645,13796.84870805,-0.355190169,2.302485443,-4.355767077),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2880.0,-17246.31075678,-7890.72601508,4315.39410307,-1.910968458,-2.740945672,3.844722726),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',0.0,1442.10132912,6510.23625449,8.83145885,-3.475714837,0.997262768,6.835860345),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',54.2028672,306.10478453,-5816.45655525,-2979.55846068,3.950663855,3.415332543,-5.879974329),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',74.2028672,3282.82085464,2077.46972905,-5189.17988770,0.097342701,7.375135692,2.900196702),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',94.2028672,530.82729176,6426.20790003,1712.37076793,-3.837120395,-1.252430637,6.561602577),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',114.2028672,-3191.69170212,170.27219912,5956.29807775,-1.394956872,-7.438073471,-0.557553115),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',134.2028672,-1818.99222465,-6322.45146616,681.95247154,3.349795173,-1.530140265,-6.831522765),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',154.2028672,2515.66448634,-2158.83091224,-5552.13320544,2.571979660,7.311930509,-1.639865620),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',174.2028672,2414.52833210,5749.10150922,-1998.59693165,-2.681032960,3.527589301,6.452951429),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',194.2028672,-1877.98944331,3862.27848302,5112.48435863,-3.261489804,-6.026859137,3.433254768),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',214.2028672,-3117.36584395,-4419.74773864,3840.85960912,1.545479182,-5.475416581,-5.207913748),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',234.2028672,815.32034678,-5231.67692249,-3760.04690354,3.870864200,4.455588552,-5.211082191),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',254.2028672,3269.54341810,3029.00081083,-4704.67969713,-0.526711345,6.812157950,3.929825087),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',274.2028672,-10.18099756,6026.23341453,2643.50518407,-3.953623254,-2.616070012,6.145637500),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',294.2028672,-3320.58819584,-1248.42679945,5563.06017927,-0.637046974,-7.417786044,-2.076120187),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',314.2028672,-1025.48974616,-6366.98945782,-911.23559153,3.811771909,0.438071490,-6.829260617),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',334.2028672,3003.75996128,-413.85708003,-5706.15591435,1.674350083,7.694169068,0.316915204),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',354.2028672,1731.42816980,6258.27676925,-409.32527982,-3.400497806,1.447945424,6.904010052),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',374.2028672,-2582.52111460,2024.19020680,5647.55650268,-2.530348121,-7.221719393,1.438141553),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',394.2028672,-2440.56848578,-5702.77311877,1934.81094689,2.731792947,-3.350576075,-6.527773339),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',414.2028672,1951.22934391,-3423.59443045,-5121.67808201,3.249039133,6.465974362,-3.069806659),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',434.2028672,2886.50939356,4888.68626216,-3096.29885989,-1.973162139,4.877039020,5.832414910),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',454.2028672,-1276.55532182,4553.26898463,4406.19787375,-3.715146421,-5.320176914,4.418210777),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',474.2028672,-3181.54698042,-3831.29976506,4096.80242787,1.114159970,-6.104773578,-4.829967400),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',0.0,14712.22023280,-1443.81061850,0.83497888,4.418965470,1.629592098,4.115531802),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',120.0,25418.88807860,9342.60307989,23611.46690798,0.051284086,1.213127306,2.429004159),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',240.0,21619.59550749,16125.24978864,36396.79365831,-0.963604380,0.685454965,1.177181937),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',360.0,12721.50543331,19258.96193362,40898.47648359,-1.457448565,0.179955469,0.071502601),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',480.0,1272.80760054,18458.41971897,37044.74742696,-1.674863386,-0.436454983,-1.201040990),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',600.0,-10058.43188619,11906.60764454,21739.62097733,-1.245829683,-1.543789125,-3.324449221),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',720.0,10924.40116466,-2571.92414170,-2956.34856294,6.071727751,1.349579102,3.898430260),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',840.0,25332.14851525,8398.91099924,21783.90654357,0.222320754,1.272214306,2.580527192),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',960.0,22317.71926039,15574.82086129,35495.77144092,-0.892750056,0.737383381,1.291738834),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1080.0,13795.68675885,19088.83051008,40803.69584385,-1.420277669,0.235599456,0.185517056),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1200.0,2515.17145049,18746.63776282,37864.58088636,-1.668016053,-0.360431458,-1.052854596),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1320.0,-9084.48602106,12982.62608646,24045.63900249,-1.378032363,-1.373184736,-3.013963835),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1440.0,5647.00909495,-3293.90518693,-5425.85235063,8.507977176,0.414560797,2.543322806),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1560.0,25111.63372210,7412.55109488,19844.25781729,0.416496290,1.332106006,2.739301737),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1680.0,22961.47461641,14985.74459578,34511.09257381,-0.816711048,0.789391108,1.407901804),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1800.0,14841.15301459,18876.91439870,40626.25901619,-1.380403341,0.290228810,0.298258120),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1920.0,3750.70174081,18978.57939698,38578.11783220,-1.656939412,-0.287930881,-0.910825599),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2040.0,-8027.30219489,13939.54436955,26136.49045637,-1.474476061,-1.222693624,-2.737178731),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2160.0,-1296.95657092,-2813.69369768,-5871.09587258,9.881929371,-1.978467207,-1.922261005),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2280.0,24738.60364819,6383.41644019,17787.27631900,0.639556952,1.392554379,2.906206324),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2400.0,23546.85388669,14358.15602832,33441.67679479,-0.734895006,0.841564851,1.526009909),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2520.0,15855.87696303,18624.05633582,40367.13420574,-1.337753546,0.343969522,0.410018472),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2640.0,4976.44933591,19156.75504042,39189.68603184,-1.642084365,-0.218525096,-0.774148204),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2760.0,-6909.20746210,14790.44707042,28034.46732222,-1.545152610,-1.088119523,-2.487447214),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2880.0,-7331.65006707,-604.17323419,-2723.51014575,6.168997265,-3.634011554,-5.963531682),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',0.0,-8801.60046706,-0.03357557,-0.44522743,-3.835279101,-7.662552175,0.944561323),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',120.0,-1684.34352858,-31555.95196340,3888.99944319,2.023055719,-2.151306405,0.265065778),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',240.0,12325.51410155,-38982.15046244,4802.88832275,1.763224157,-0.102514446,0.012397139),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',360.0,22773.66831936,-34348.02176606,4228.77407391,1.067616787,1.352427865,-0.166956367),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',480.0,26194.40441089,-19482.94203672,2393.84774063,-0.313732186,2.808771328,-0.346204118),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',600.0,8893.50573448,5763.38890561,-713.69884164,-7.037399220,3.022613131,-0.370272416),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',720.0,-6028.75686537,-25648.99913786,3164.37107274,1.883159288,-3.177051976,0.390793162),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',840.0,8313.57299056,-38146.45710922,4697.80777535,1.905002133,-0.625883074,0.076098187),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',960.0,20181.29108622,-36842.60674073,4529.12568218,1.326244476,0.921916487,-0.114527455),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1080.0,26302.61794569,-25173.39539436,3084.65309986,0.245398835,2.329974347,-0.287495880),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1200.0,19365.07045602,-2700.00490122,317.42727417,-3.009733018,3.902496058,-0.478928582),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1320.0,-9667.81878780,-16930.19112642,2095.87469034,1.279288285,-4.736005905,0.582878255),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1440.0,4021.31438583,-36066.09209609,4442.91587411,2.007322354,-1.227461376,0.149383897),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',0.0,-9301.24542292,3326.10200382,2318.36441127,-8.729303005,-0.828225037,-0.122314827),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',120.0,-44672.91239680,-6213.11996581,-1738.80131727,-3.719475070,-1.336673022,-0.621888261),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',240.0,-67053.08885388,-14994.69685946,-5897.99072793,-2.860576613,-1.183771565,-0.568473909),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',360.0,-85227.84253168,-22897.08484471,-9722.59184564,-2.426469823,-1.078592475,-0.525341431),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',480.0,-100986.00419136,-30171.19698695,-13283.77044765,-2.147108978,-1.000530827,-0.491587582),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',600.0,-115093.00686387,-36962.56316477,-16634.15682929,-1.945446188,-0.938947736,-0.464199202),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',720.0,-127965.80064891,-43363.32967165,-19809.90480432,-1.789652016,-0.888278463,-0.441254468),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',840.0,-139863.28332207,-49436.45704153,-22836.80438139,-1.663762568,-0.845315913,-0.421548627),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',960.0,-150960.22978259,-55227.45413896,-25734.01408879,-1.558730986,-0.808061065,-0.404293846),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1080.0,-161381.71414630,-60770.64040903,-28516.26290017,-1.468977174,-0.775190459,-0.388951810),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1200.0,-171221.18736947,-66092.76474442,-31195.19847387,-1.390837596,-0.745785633,-0.375140398),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1320.0,-180550.82888746,-71215.23290630,-33780.24938270,-1.321788672,-0.719184752,-0.362579495),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1440.0,-189427.87533074,-76155.54943344,-36279.19882816,-1.260024473,-0.694896053,-0.351058133),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1560.0,-197898.69401409,-80928.29015181,-38698.57972447,-1.204211888,-0.672544709,-0.340413731),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1600.0,-200638.82986236,-82484.14969882,-39488.34331447,-1.186748462,-0.665472422,-0.337037582),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',0.0,9892.63794341,35.76144969,-1.08228838,3.556643237,6.456009375,0.783610890),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',20.0,11931.95642997,7340.74973750,886.46365987,0.308329116,5.532328972,0.672887281),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',40.0,11321.71039205,13222.84749156,1602.40119049,-1.151973982,4.285810871,0.521919425),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',60.0,9438.29395675,17688.05450261,2146.59293402,-1.907904054,3.179955046,0.387692479),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',80.0,6872.08634639,20910.11016811,2539.79945034,-2.323995367,2.207398462,0.269506121),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',100.0,3933.37509798,23024.07662542,2798.25966746,-2.542860616,1.327134966,0.162450076),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',120.0,816.64091546,24118.98675475,2932.69459428,-2.626838010,0.504502763,0.062344306),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',140.0,-2334.41705804,24246.86096326,2949.36448841,-2.602259646,-0.288058266,-0.034145135),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',160.0,-5394.31798039,23429.42716149,2850.86832586,-2.474434068,-1.074055982,-0.129868366),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',180.0,-8233.35130237,21661.24480883,2636.51456118,-2.230845533,-1.875742344,-0.227528603),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',200.0,-10693.96497348,18909.88168891,2302.33707548,-1.835912433,-2.716169865,-0.329931880),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',220.0,-12553.89669904,15114.63990716,1840.93573231,-1.212478879,-3.619036996,-0.439970633),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',240.0,-13450.20591864,10190.57904289,1241.95958736,-0.189082511,-4.596701971,-0.559173899),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',260.0,-12686.60437121,4079.31106161,498.27078614,1.664498211,-5.559889865,-0.676747779),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',280.0,-8672.55867753,-2827.56823315,-342.59644716,5.515079852,-5.551222962,-0.676360044),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',300.0,1153.31498060,-6411.98692060,-779.87288941,9.689818102,1.388598425,0.167868798),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',320.0,9542.79201056,-533.71253081,-65.73165428,3.926947087,6.459583539,0.785686755),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',340.0,11868.80960100,6861.59590848,833.72780602,0.452957852,5.632811328,0.685262323),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',360.0,11376.23941678,12858.97121366,1563.40660172,-1.087665695,4.374693347,0.532207051),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',380.0,9547.70300782,17421.48570758,2118.56907515,-1.876540262,3.253891728,0.395810243),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',400.0,7008.51470263,20725.47471227,2520.56064289,-2.308703599,2.270724438,0.276138613),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',420.0,4083.18551180,22910.88306802,2786.35642660,-2.536610941,1.383768875,0.168165414),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',440.0,970.13107533,24071.19896282,2927.30875440,-2.626673095,0.557274717,0.067549303),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',460.0,-2183.75499348,24261.30188126,2950.09189560,-2.607082241,-0.236785937,-0.029112844),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',480.0,-5252.49066783,23505.58108388,2857.68628654,-2.484465059,-1.022158411,-0.124702643),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',500.0,-8107.41437587,21801.13395060,2649.76852683,-2.247669530,-1.821071275,-0.221914939),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',520.0,-10594.01813094,19118.22269010,2322.77197767,-1.863224062,-2.656353699,-0.323512642),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',540.0,-12496.70758499,15399.13096351,1869.75958053,-1.258272118,-3.551534022,-0.432332913),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',560.0,-13467.50382653,10561.43040038,1280.84842178,-0.272050695,-4.520503543,-0.550014833),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',580.0,-12848.00717497,4541.72432009,548.59976478,1.493938056,-5.489644146,-0.667479244),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',600.0,-9152.79920397,-2343.88902799,-287.93741332,5.127695273,-5.650584983,-0.686013644),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',620.0,280.12478642,-6500.11368508,-790.36236302,9.779642904,0.581430120,0.074124421),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',640.0,9166.21406115,-1093.48756223,-129.53833135,4.316926785,6.438465969,0.785095966),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',660.0,11794.74563870,6381.74484842,780.82775971,0.604642523,5.731705440,0.697571522),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',680.0,11424.80363789,12493.80833338,1524.27683836,-1.021148661,4.463489406,0.542537702),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',700.0,9652.78920084,17153.46470428,2090.43413681,-1.844382696,3.327595388,0.403924198),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',720.0,7141.24742526,20538.97115158,2501.18059966,-2.293079623,2.333598993,0.282727441),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',0.0,7534.10987189,41266.39266843,-0.10801028,-3.027168008,0.558848996,0.207982755),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',120.0,-14289.19940414,39469.05530051,1428.62838591,-2.893205245,-1.045447840,0.179634249),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',240.0,-32222.92014955,26916.25425799,2468.59996594,-1.973007929,-2.359335071,0.102539376),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',360.0,-41413.95109398,7055.51656639,2838.90906671,-0.521665080,-3.029172207,-0.002066843),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',480.0,-39402.72251896,-14716.42475223,2441.32678358,1.066928187,-2.878714619,-0.105865729),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',600.0,-26751.08889828,-32515.13982431,1384.38865570,2.366228869,-1.951032799,-0.181018498),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',720.0,-6874.77975542,-41530.38329422,-46.60245459,3.027415087,-0.494671177,-0.207337260),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',840.0,14859.52039042,-39302.58907247,-1465.02482524,2.869609883,1.100123969,-0.177514425),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',960.0,32553.14863770,-26398.88401807,-2485.45866002,1.930064459,2.401574539,-0.099250520),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1080.0,41365.67576837,-6298.09965811,-2828.05254033,0.459741276,3.051680214,0.006431872),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1200.0,38858.83295070,15523.39314924,-2396.86850752,-1.140211488,2.867567143,0.110637217),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1320.0,25701.46068162,33089.42617648,-1308.68556638,-2.428713821,1.897381431,0.184605907),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1440.0,5501.08137100,41590.27784405,138.32522930,-3.050691874,0.409203052,0.207958133),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',0.0,8827.15660472,-41223.00971237,3.63482963,3.007087319,0.643701323,0.000941663),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1440.0,8118.18519221,-41368.40537378,4.11046687,3.017696741,0.591994297,0.000933016),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1320.0,27766.34015328,-31724.97000557,9.93297846,2.314236153,2.024903193,0.000660861),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1200.0,39932.57237973,-13532.60040454,13.12958252,0.987382819,2.911942843,0.000213298),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1080.0,41341.01365441,8305.71681955,12.84988501,-0.605098224,3.014378268,-0.000291034),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-960.0,31614.99210558,27907.29155353,9.16618797,-2.034243523,2.305014102,-0.000718418),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-840.0,13375.75227587,39994.27017651,3.05416854,-2.915424366,0.975119874,-0.000955576),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-720.0,-8464.89963309,41312.93549892,-3.86622919,-3.011600615,-0.617275050,-0.000939664),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-600.0,-28026.23406158,31507.89995661,-9.76047869,-2.296840160,-2.043607595,-0.000674889),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-480.0,-40040.01314363,13218.00579413,-13.06594832,-0.963328772,-2.919827983,-0.000231414),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-360.0,-41268.43291976,-8632.06859693,-12.90661266,0.630042315,-3.009677376,0.000273163),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-240.0,-31377.85317015,-28156.13970334,-9.32605530,2.054021717,-2.288554158,0.000704959),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-120.0,-13031.41552688,-40092.33381029,-3.27636660,2.924657466,-0.950541167,0.000949381),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',0.0,8827.15660472,-41223.00971237,3.63482963,3.007087319,0.643701323,0.000941663),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',120.0,28306.85426674,-31243.80147394,9.57216891,2.279137743,2.064316875,0.000684127),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',240.0,40159.05128805,-12845.39151157,12.96086316,0.937265422,2.928448287,0.000245505),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',360.0,41192.55903455,9013.79606759,12.90495666,-0.656727442,3.003543458,-0.000257479),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',480.0,31131.69755798,28445.55681731,9.42419238,-2.073484842,2.269770851,-0.000691233),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',600.0,12687.81846530,40217.83324639,3.44726249,-2.931721827,0.924962230,-0.000940766),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',720.0,-9172.23500245,41161.63475527,-3.43575757,-3.000571486,-0.668847508,-0.000940101),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',840.0,-28562.51093192,31022.45987587,-9.39562161,-2.261449202,-2.082713897,-0.000689669),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',960.0,-40260.77504549,12529.11484344,-12.84915105,-0.913097031,-2.935933528,-0.000256181),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1080.0,-41114.14376538,-9338.87194483,-12.87952404,0.681588815,-2.998432565,0.000245006),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1200.0,-30890.01512240,-28690.40750792,-9.48037212,2.092989805,-2.252978152,0.000680459),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1320.0,-12341.46194020,-40310.06316386,-3.55833201,2.940537098,-0.900219523,0.000934170),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1440.0,9533.27750818,-41065.52390214,3.30756482,2.995596171,0.695200236,0.000938525),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',0.0,-42014.83795787,3702.34357772,-26.67500257,-0.269775247,-3.061854393,0.000336726),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',9300.0,40968.68133298,-9905.99156086,11.84946837,0.722756848,2.989645389,-0.000161261),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',9360.0,42135.66858481,1072.99195618,10.83481752,-0.078150602,3.074772455,-0.000380063),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',9400.0,41304.75156132,8398.27742944,9.74006214,-0.612515135,3.014117469,-0.000511575),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',0.0,-14506.92313768,-21613.56043281,10.05018894,2.212943308,1.159970892,3.020600202),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',120.0,7309.62197950,6076.00713664,6800.08705263,1.300543383,5.322579615,-4.788746312),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',240.0,-3882.62933791,11960.00543452,-25088.14383845,-2.146773699,-1.372461491,-2.579382089),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',360.0,-16785.45507465,-734.79159704,-34300.57085853,-1.386528125,-1.907762641,-0.220949641),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',480.0,-23524.16689356,-13629.45124622,-30246.27899200,-0.462846784,-1.586139830,1.269293624),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',600.0,-22890.23597092,-22209.35900155,-16769.91946116,0.704351342,-0.671112594,2.432433851),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',720.0,-11646.39698980,-19855.44222106,3574.00109607,2.626712727,1.815887329,2.960883901),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',840.0,7665.76124241,11159.78946577,345.93813117,-0.584818007,3.193514161,-5.750338922),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',960.0,-6369.35388112,10204.80073022,-27844.52150384,-2.050573276,-1.582940542,-2.076075232),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1080.0,-18345.64763145,-2977.76684430,-34394.90760612,-1.243589864,-1.892050757,0.060372061),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1200.0,-23979.74839255,-15436.44139571,-28616.50540218,-0.294973425,-1.482987916,1.478255628),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1320.0,-21921.97167880,-22852.45147658,-13784.85308485,0.945455629,-0.428940995,2.596964378),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1440.0,-8266.43821031,-17210.74590112,6967.95546070,3.082244069,2.665881872,2.712555075),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1560.0,6286.85464535,13809.56328971,-6321.60663781,-1.615964016,1.383135377,-5.358719132),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1680.0,-8730.87526788,8244.63344365,-30039.92372791,-1.935622871,-1.724162072,-1.631224738),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1800.0,-19735.81883249,-5191.76593007,-34166.14974143,-1.097835530,-1.860148418,0.324401050),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1920.0,-24232.73847703,-17112.08243255,-26742.88893252,-0.119786184,-1.364365317,1.680220468),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2040.0,-20654.45640708,-23184.54386047,-10611.55144716,1.209238113,-0.144169639,2.748054938),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2160.0,-4337.15988957,-13410.46817244,9870.45949215,3.532753095,3.772236461,2.088424247),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2280.0,4074.62263523,14698.07548285,-12248.65327973,-2.053824693,0.203325817,-4.607867718),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2400.0,-10950.23438984,6148.66879447,-31736.65532865,-1.809875605,-1.816179062,-1.233364913),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2520.0,-20952.40702045,-7358.71507895,-33633.06643074,-0.948973031,-1.813594137,0.573893078),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2640.0,-24273.48944134,-18637.15546906,-24633.27702390,0.064161440,-1.228537560,1.875728935),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2760.0,-19057.55468077,-23148.29322082,-7269.38614178,1.500802809,0.195383037,2.879031237),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2880.0,43.69305308,-8145.90299207,11634.57079913,3.780661682,5.105315423,0.714401345),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',0.0,-2715.28237486,-6619.26436889,-0.01341443,-1.008587273,0.422782003,7.385272942),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',120.0,-1816.87920942,-1835.78762132,6661.07926465,2.325140071,6.655669329,2.463394512),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',240.0,1483.17364291,5395.21248786,4448.65907172,2.560540387,4.039025766,-5.736648561),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',360.0,2801.25607157,5455.03931333,-3692.12865695,-0.595095864,-3.951923117,-6.298799125),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',480.0,411.09332812,-1728.99769152,-6935.45548810,-2.935970964,-6.684085058,1.492800886),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',600.0,-2506.52558454,-6628.98655094,-988.07784497,-1.390577189,-0.556164143,7.312736468),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',720.0,-2090.79884266,-2723.22832193,6266.13356576,1.992640665,6.337529519,3.411803080),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',840.0,1091.80560222,4809.88229503,5172.42897894,2.717483546,4.805518977,-5.030019896),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',960.0,2811.14062300,5950.65707171,-2813.23705389,-0.159662742,-3.121215491,-6.775341949),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1080.0,805.72698304,-812.16627907,-7067.58483968,-2.798936020,-6.889265977,0.472770873),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1200.0,-2249.59837532,-6505.84890714,-1956.72365062,-1.731234729,-1.528750230,7.096660885),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1320.0,-2311.57375797,-3560.99112891,5748.16749600,1.626569751,5.890482233,4.293545048),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1440.0,688.16056594,4124.87618964,5794.55994449,2.810973665,5.479585563,-4.224866316),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1560.0,2759.94088230,6329.87271798,-1879.19518331,0.266930672,-2.222670878,-7.119390567),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1680.0,1171.50677137,125.82053748,-7061.96626202,-2.605687852,-6.958489749,-0.556333225),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1800.0,-1951.43708472,-6251.71945820,-2886.95472355,-2.024131483,-2.475214272,6.741537478),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1920.0,-2475.70722288,-4331.90569958,5117.31234924,1.235823539,5.322743371,5.091281211),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2040.0,281.46097847,3353.51057102,6302.87900650,2.840647273,6.047222485,-3.337085992),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2160.0,2650.33118860,6584.33434851,-908.29027134,0.675457235,-1.274044972,-7.323921567),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2280.0,1501.17226597,1066.31132756,-6918.71472952,-2.361891904,-6.889669974,-1.574718619),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2400.0,-1619.73468334,-5871.14051991,-3760.56587071,-2.264093975,-3.376316601,6.254622256),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2520.0,-2581.04202505,-5020.05572531,4385.92329047,0.829668458,4.645048038,5.789262667),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2640.0,-119.22080628,2510.90620488,6687.45615459,2.807575712,6.496549689,-2.384136661),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2760.0,2486.23806726,6708.18210028,80.43349581,1.057274905,-0.294294027,-7.384689123),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2880.0,1788.42334580,1990.50530957,-6640.59337725,-2.074169091,-6.683381288,-2.562777776),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',0.0,21707.46412351,-15318.61752390,0.13551152,1.304029214,1.816904974,3.161919976),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',120.0,18616.75971861,3166.15177043,18833.41523210,-2.076122016,2.838457575,1.586210535),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',240.0,-3006.50596328,18522.20742011,18941.84078154,-3.375452789,1.032680773,-1.559324534),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',360.0,-21607.02086957,15432.59962630,206.62470309,-1.306049851,-1.817011568,-3.163725018),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',480.0,-18453.06134549,-3150.83256134,-18685.83030936,2.106017925,-2.860236337,-1.586151870),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',600.0,3425.11742384,-18514.73232706,-18588.67200557,3.394666340,-1.003072030,1.610061295),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',720.0,21858.23838148,-15101.51661554,387.34517048,1.247973967,1.856017403,3.161439948),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',840.0,18360.69935796,3506.55256762,19024.81678979,-2.122684184,2.830618605,1.537510677),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',960.0,-3412.84765409,18646.85269710,18748.00359987,-3.366815728,0.986039922,-1.607874972),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1080.0,-21758.08331586,15215.44829478,-180.82181406,-1.250144680,-1.856490448,-3.163774870),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1200.0,-18193.41290284,-3493.85876912,-18877.14757717,2.153326942,-2.852221264,-1.536617760),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1320.0,3833.57386848,-18635.77026711,-18388.68722885,3.384748179,-0.955363841,1.658785020),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1440.0,22002.20074562,-14879.72595593,774.32827099,1.191573619,1.894561165,3.159953047),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',0.0,6333.08123128,-1580.82852326,90.69355720,0.714634423,3.224246550,7.083128132),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',120.0,-3990.93845855,3052.98341907,4155.32700629,-5.909006188,-0.876307966,-5.039131404),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',240.0,-603.55232010,-2685.13474569,-5891.70274282,7.572519907,-1.975656726,0.121722605),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',360.0,4788.22345627,782.56169214,4335.14284621,-4.954509026,3.683346464,4.804645839),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',480.0,-6291.84601644,1547.82790772,-453.67116498,-0.308625588,-3.341538574,-7.082659115),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',600.0,4480.74573428,-3028.55200374,-3586.94343641,5.320920857,1.199736275,5.626350481),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',720.0,-446.42460916,2932.28872588,5759.19389757,-7.561000245,1.550975493,-1.374970885),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',840.0,-3713.79581831,-1382.66125130,-5122.45131136,6.090931626,-3.512629733,-3.467571746),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',960.0,6058.32017522,-827.47406722,2104.04678651,-1.798403024,3.787067272,6.641439744),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1080.0,-5631.73659006,2623.70953644,1766.49125084,-3.216401578,-2.309140959,-6.788609120),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1200.0,2776.84991560,-3255.36941953,-4837.19667790,6.748135564,-0.193044825,4.005718698),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1320.0,1148.04430837,2486.07343386,5826.34075913,-7.420162295,2.589456382,0.356350006),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1440.0,-4527.90871828,-723.29199041,-4527.44608319,5.121674217,-3.909895427,-4.500218556),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',0.0,-11665.70902324,24943.61433357,25.80543633,-1.596228621,-1.476127961,1.126059754),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',120.0,-11645.35454950,979.37668356,5517.89500058,3.407743502,-5.183094988,-0.492983277),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',240.0,5619.19252274,19651.44862280,-7261.38496765,-2.013634213,3.106842861,0.284235517),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',360.0,-9708.68629714,26306.14553149,-1204.29478856,-1.824164290,-0.931909596,1.113419052),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',480.0,-14394.03162892,6659.30765074,5593.38345858,1.556522911,-4.681657614,0.296912248),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',600.0,7712.09476270,15565.72627434,-7342.40465571,-1.646800364,4.070313571,-0.109483081),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',720.0,-7558.36739603,27035.11367962,-2385.12054184,-1.999583791,-0.393409283,1.078093515),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',840.0,-15495.61862220,11550.15897828,5053.83178121,0.469277336,-4.029761073,0.679054742),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',960.0,9167.02568222,10363.65204210,-6871.52576042,-0.881621027,5.223361510,-0.740696297),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1080.0,-5275.80272094,27151.78486008,-3494.50687216,-2.129609388,0.150196480,1.021038089),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1200.0,-15601.37656145,15641.29379850,4217.03266850,-0.249183123,-3.405238557,0.888214503),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1320.0,9301.05872300,3883.15265574,-5477.86477017,0.871447821,6.493677331,-1.885545282),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1440.0,-2914.31065828,26665.20392758,-4511.09814335,-2.216261909,0.710067769,0.940691824),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',0.0,42080.71852213,-2646.86387436,0.81851294,0.193105177,3.068688251,0.000438449),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',120.0,37740.00085593,18802.76872802,3.45512584,-1.371035206,2.752105932,0.000336883),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',240.0,23232.82515008,35187.33981802,4.98927428,-2.565776620,1.694193132,0.000163365),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',360.0,2467.44290178,42093.60909959,5.15062987,-3.069341800,0.179976276,-0.000031739),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',480.0,-18962.59052991,37661.66243819,4.04433258,-2.746151982,-1.382675777,-0.000197633),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',600.0,-35285.00095313,23085.44402778,2.08711880,-1.683277908,-2.572893625,-0.000296282),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',720.0,-42103.20138132,2291.06228893,-0.13274964,-0.166974816,-3.070104560,-0.000311007),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',840.0,-37580.31858370,-19120.40485693,-2.02755702,1.394367848,-2.740341612,-0.000248591),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',960.0,-22934.20761876,-35381.23870806,-3.16495932,2.580167539,-1.672360951,-0.000134907),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1080.0,-2109.90332389,-42110.71508198,-3.36507889,3.070935369,-0.153808390,-0.000005855),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1200.0,19282.77774728,-37495.59250598,-2.71861462,2.734400524,1.406220933,0.000103486),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1320.0,35480.60990600,-22779.03375285,-1.52841859,1.661210676,2.587414593,0.000168300),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1440.0,42119.96263499,-1925.77567263,-0.19827433,0.140521206,3.071541613,0.000179561),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',0.0,-6131.82730456,2446.52815528,-253.64211033,-0.144920228,0.995100963,7.658645067),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',5.0,-5799.24256134,2589.14811119,2011.54515100,2.325207364,-0.047125672,7.296234071),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',10.0,-4769.05061967,2420.46580562,4035.30855837,4.464585796,-1.060923209,6.070907874),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',15.0,-3175.45157340,1965.98738086,5582.12569607,6.049639376,-1.935777558,4.148607019),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',20.0,-1210.19024802,1281.54541294,6474.68172772,6.920746273,-2.580517337,1.748783868),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',25.0,896.73799533,447.12357305,6607.22400507,6.983396282,-2.925846168,-0.872655207),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',30.0,2896.99663534,-440.04738594,5954.92675486,6.211488246,-2.926949815,-3.433959806),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',35.0,4545.78970167,-1273.55952872,4580.16512984,4.656984233,-2.568711513,-5.638510954),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',40.0,5627.43299371,-1947.94282469,2634.16714930,2.464141047,-1.873985161,-7.195743032),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',45.0,5984.72318534,-2371.37691609,349.87996209,-0.121276950,-0.911981546,-7.859613894),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',50.0,5548.43325922,-2480.16469245,-1979.24314527,-2.763269534,0.199691915,-7.482796996),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',0.0,423.99295524,-6658.12256149,136.13040356,1.006373613,0.217309983,7.662587892),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',20.0,931.80883587,-1017.17852239,6529.19244527,-0.298847918,7.613891977,1.226399480),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',40.0,-83.44906141,6286.20208453,2223.49837161,-1.113515974,2.530970283,-7.219445568),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',60.0,-958.57681221,3259.26005348,-5722.63732467,-0.101225813,-6.735338321,-3.804851872),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',80.0,-255.25619985,-5132.59762974,-4221.27233118,1.077709303,-4.905938824,5.892521264),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',100.0,867.44295097,-5038.40402933,4256.73810533,0.479447535,5.032326446,5.857126248),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',120.0,559.16882013,3376.30587937,5699.22017391,-0.906749328,6.646149867,-3.852331832),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',140.0,-669.85184205,6196.00229484,-2281.95741770,-0.795804092,-2.752114827,-7.202478520),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',160.0,-784.20708019,-1278.53125553,-6449.19892596,0.636702380,-7.595425203,1.431090802),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',180.0,406.15811659,-6607.03115799,148.33021477,1.009818575,0.231843765,7.692047844),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',200.0,916.34911813,-884.08649248,6491.09810362,-0.302163049,7.669887109,1.084336909),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',220.0,-104.02490970,6304.31821405,1960.08739882,-1.108873823,2.259522809,-7.351147710),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',240.0,-944.61642849,2872.17248379,-5846.94103362,-0.051117686,-6.989747076,-3.413102600),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',260.0,-187.16569888,-5404.86163467,-3731.97057618,1.094696706,-4.412110995,6.326060952),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',280.0,884.59720467,-4465.74516163,4725.83632696,0.380656028,5.691554046,5.303910983),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',300.0,446.40767236,4086.66839620,5093.05596650,-0.982424447,6.072965199,-4.791630682),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',320.0,-752.24467495,5588.35473301,-3275.04092573,-0.661161370,-4.016290740,-6.676898026),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',340.0,-643.72872525,-2585.02528560,-5923.01306608,0.807922142,-7.171597814,3.041115058),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',360.0,584.40295819,-6202.35605817,1781.00536019,0.869250450,2.226927514,7.471676765),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',380.0,779.59211765,1100.73728301,6311.59529480,-0.599552305,7.721032522,-1.275153027),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',400.0,-403.03155588,6399.18000837,-364.12735875,-1.008861924,-0.516636615,-7.799812287),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',420.0,-852.93910071,192.65232023,-6322.47054784,0.396006194,-7.882964919,-0.289331517),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',0.0,-5566.59512819,-3789.75991159,67.60382245,2.873759367,-3.825340523,6.023253926),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',120.0,4474.27915495,-1447.72286142,4619.83927235,4.712595822,5.668306153,-2.701606741),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',240.0,1922.17712474,5113.01138342,-4087.08470203,-6.490769651,-0.522350158,-3.896001154),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',360.0,-6157.93546882,-2094.70798790,-1941.63730960,0.149900661,-5.175192523,5.604262034),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',480.0,2482.64052411,-3268.45944555,5146.38006190,6.501814698,4.402848754,-0.350943511),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',600.0,4036.26455287,4827.43347201,-2507.99063955,-5.184409515,1.772280695,-5.331390168),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',720.0,-5776.81371622,-118.64155319,-3641.22052418,-2.539917207,-5.622701582,4.403125405),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',840.0,67.98699487,-4456.49213473,4863.71794283,7.183809420,2.418917791,2.015642495),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',960.0,5520.62207038,3782.38203554,-596.73193161,-3.027966069,3.754152525,-6.013506363),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1080.0,-4528.05104455,1808.46273329,-4816.99727762,-4.808419763,-5.185789345,2.642104494),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1200.0,-2356.61468078,-4852.51202272,3856.53816184,6.688446735,0.118520958,4.021854210),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1320.0,6149.65800134,2173.59423261,1369.29488732,-0.345832777,5.109857861,-5.842951828),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1440.0,-2629.55011449,3400.98040158,-5344.38217129,-6.368548448,-3.998963509,0.577253064),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',0.0,2328.96975262,-5995.22051338,1719.97297192,2.912073281,-0.983417956,-7.090816210),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',120.0,1020.69234558,2286.56260634,-6191.55565927,-3.746543902,6.467532721,1.827985678),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',240.0,-3226.54349155,3503.70977525,4532.80979343,1.000992116,-5.788042888,5.162585826),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',360.0,2456.10706533,-6071.93855503,1222.89768554,2.679390040,-0.448290811,-7.228792155),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',480.0,787.16457349,2719.91800946,-6043.86662024,-3.759883839,6.277439314,2.397897864),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',600.0,-3110.97648029,3121.73026235,4878.15217035,1.244916056,-6.124880425,4.700576353),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',720.0,2567.56229695,-6112.50383922,713.96374435,2.440245751,0.098109002,-7.319959258),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',840.0,556.05661780,3144.52288201,-5855.34636178,-3.754660143,6.044752775,2.957941672),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',960.0,-2982.47940539,2712.61663711,5192.32330472,1.475566773,-6.427737014,4.202420227),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1080.0,2663.08964352,-6115.48290885,196.40072866,2.196121564,0.652415093,-7.362824152),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1200.0,328.54999674,3557.09490552,-5626.21427211,-3.731193288,5.769341172,3.504058731),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1320.0,-2842.06876757,2278.42343492,5472.33437150,1.691852635,-6.693216335,3.671022712),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1440.0,2742.55398832,-6079.67009123,-326.39012649,1.948497651,1.211072678,-7.356193131);
-- Verify we loaded all 518 vectors
SELECT count(*) AS vectors_loaded FROM vallado_vectors;
vectors_loaded
----------------
518
(1 row)
-- Materialize propagation results (avoid recomputing per query)
CREATE TEMP TABLE vallado_results AS
SELECT
v.satnum,
v.tsince_min,
sgp4_propagate_safe(
tle_from_lines(v.tle_line1, v.tle_line2),
_vallado_jd_plus_min(
tle_epoch(tle_from_lines(v.tle_line1, v.tle_line2)),
v.tsince_min
)
) AS eci,
v.ref_x, v.ref_y, v.ref_z,
v.ref_vx, v.ref_vy, v.ref_vz
FROM vallado_vectors v;
-- Summary: all 518 must propagate; 434 match at tight tolerance.
-- These numbers are the regression baseline for Bill Gray's sat_code.
SELECT
count(*) AS total,
count(*) FILTER (WHERE eci IS NOT NULL) AS propagated,
count(*) FILTER (WHERE eci IS NOT NULL
AND greatest(abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)) < 1e-4
AND greatest(abs(eci_vx(eci) - ref_vx),
abs(eci_vy(eci) - ref_vy),
abs(eci_vz(eci) - ref_vz)) < 1e-7
) AS tight_pass,
round(max(CASE WHEN eci IS NOT NULL THEN greatest(
abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)
) END)::numeric, 8) AS worst_pos_km,
round(max(CASE WHEN eci IS NOT NULL THEN greatest(
abs(eci_vx(eci) - ref_vx),
abs(eci_vy(eci) - ref_vy),
abs(eci_vz(eci) - ref_vz)
) END)::numeric, 10) AS worst_vel_kms
FROM vallado_results;
total | propagated | tight_pass | worst_pos_km | worst_vel_kms
-------+------------+------------+---------------+---------------
518 | 518 | 434 | 1694.24999701 | 0.0100228769
(1 row)
-- Per-satellite breakdown: position vs velocity pass counts.
-- Satellites with worst_pos > 0.1 km have known implementation differences
-- vs Vallado's AFSPC mode (see header comments).
SELECT
satnum,
count(*) AS vectors,
count(*) FILTER (WHERE eci IS NOT NULL
AND greatest(abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)) < 1e-4
) AS pos_pass,
count(*) FILTER (WHERE eci IS NOT NULL
AND greatest(abs(eci_vx(eci) - ref_vx),
abs(eci_vy(eci) - ref_vy),
abs(eci_vz(eci) - ref_vz)) < 1e-7
) AS vel_pass,
count(*) FILTER (WHERE eci IS NULL) AS errors,
round(max(CASE WHEN eci IS NOT NULL THEN greatest(
abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)
) END)::numeric, 6) AS worst_pos_km
FROM vallado_results
GROUP BY satnum
ORDER BY satnum;
satnum | vectors | pos_pass | vel_pass | errors | worst_pos_km
--------+---------+----------+----------+--------+--------------
00005 | 13 | 13 | 13 | 0 | 0.000000
04632 | 5 | 1 | 1 | 0 | 7.536284
06251 | 25 | 25 | 25 | 0 | 0.000089
08195 | 25 | 25 | 25 | 0 | 0.000056
09880 | 25 | 25 | 25 | 0 | 0.000054
09998 | 14 | 14 | 14 | 0 | 0.000044
11801 | 5 | 5 | 5 | 0 | 0.000000
14128 | 25 | 18 | 18 | 0 | 1.655480
16925 | 13 | 12 | 13 | 0 | 0.000113
20413 | 26 | 5 | 5 | 0 | 1694.249997
21897 | 25 | 25 | 25 | 0 | 0.000058
22312 | 23 | 17 | 17 | 0 | 0.000127
22674 | 25 | 25 | 25 | 0 | 0.000045
23177 | 13 | 13 | 13 | 0 | 0.000094
23333 | 15 | 15 | 15 | 0 | 0.000048
23599 | 37 | 19 | 20 | 0 | 0.960173
24208 | 13 | 13 | 13 | 0 | 0.000039
25954 | 26 | 26 | 26 | 0 | 0.000039
26900 | 4 | 4 | 4 | 0 | 0.000054
26975 | 25 | 25 | 25 | 0 | 0.000077
28057 | 25 | 25 | 22 | 0 | 0.000099
28129 | 13 | 13 | 13 | 0 | 0.000046
28350 | 13 | 12 | 8 | 0 | 0.000102
28623 | 13 | 13 | 13 | 0 | 0.000087
28626 | 13 | 13 | 13 | 0 | 0.000037
28872 | 11 | 8 | 7 | 0 | 0.000134
29141 | 22 | 16 | 13 | 0 | 0.000138
29238 | 13 | 13 | 12 | 0 | 0.000096
88888 | 13 | 13 | 8 | 0 | 0.000090
(29 rows)
-- Clean up
DROP FUNCTION _vallado_jd_plus_min(float8, float8);

636
test/sql/vallado_518.sql Normal file
View File

@ -0,0 +1,636 @@
-- Vallado 518 Test Vectors (AIAA 2006-6753-Rev1, Appendices D & E)
--
-- 518 propagation predictions across 29 satellites, covering both
-- SGP4 (near-earth) and SDP4 (deep-space) models. Reference values
-- from Vallado, Crawford, Hujsak, and Kelso's definitive SGP4 paper.
--
-- The reference vectors use Vallado's "AFSPC (option 'a')" mode with
-- "perturbed inclination (GSFC)" Lyddane choice. Bill Gray's sat_code
-- takes a different path through the Lyddane singularity and deep-space
-- resonance logic, producing small numerical differences for most
-- satellites and larger divergences for 4 known edge cases:
--
-- 20413 (e=0.79, Molniya-like): up to 1694 km at large tsince
-- 04632 (deep-space, e=0.15): up to 7.5 km
-- 14128 (deep-space): up to 1.7 km
-- 23599 (deep-space, GEO): up to 1.0 km
--
-- These differences are expected and documented. This test detects
-- regressions — if any number changes, the vendored SGP4/SDP4 code
-- was inadvertently modified.
--
-- Tolerances for the summary check:
-- Position: 1e-4 km (0.1 m) — catches marginal velocity-only failures
-- Velocity: 1e-7 km/s (0.1 mm/s) — tight enough for regression detection
CREATE EXTENSION IF NOT EXISTS pg_orbit;
-- Helper: convert Julian date + minutes-since-epoch to timestamptz.
-- JD 2440587.5 = 1970-01-01 00:00:00 UTC (Unix epoch).
CREATE OR REPLACE FUNCTION _vallado_jd_plus_min(jd float8, tsince_min float8)
RETURNS timestamptz AS $$
SELECT to_timestamp((jd + tsince_min / 1440.0 - 2440587.5) * 86400.0)
$$ LANGUAGE sql IMMUTABLE STRICT;
-- Test vector table
CREATE TEMP TABLE vallado_vectors (
satnum text,
tle_line1 text,
tle_line2 text,
tsince_min float8,
ref_x float8, ref_y float8, ref_z float8,
ref_vx float8, ref_vy float8, ref_vz float8
);
INSERT INTO vallado_vectors VALUES
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',0.0,7022.46529266,-1400.08296755,0.03995155,1.893841015,6.405893759,4.534807250),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',360.0,-7154.03120202,-3783.17682504,-3536.19412294,4.741887409,-4.151817765,-2.093935425),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',720.0,-7134.59340119,6531.68641334,3260.27186483,-4.113793027,-2.911922039,-2.557327851),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',1080.0,5568.53901181,4492.06992591,3863.87641983,-4.209106476,5.159719888,2.744852980),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',1440.0,-938.55923943,-6268.18748831,-4294.02924751,7.536105209,-0.427127707,0.989878080),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',1800.0,-9680.56121728,2802.47771354,124.10688038,-0.905874102,-4.659467970,-3.227347517),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',2160.0,190.19796988,7746.96653614,5110.00675412,-6.112325142,1.527008184,-0.139152358),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',2520.0,5579.55640116,-3995.61396789,-1518.82108966,4.767927483,5.123185301,4.276837355),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',2880.0,-8650.73082219,-1914.93811525,-3007.03603443,3.067165127,-4.828384068,-2.515322836),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',3240.0,-5429.79204164,7574.36493792,3747.39305236,-4.999442110,-1.800561422,-2.229392830),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',3600.0,6759.04583722,2001.58198220,2783.55192533,-2.180993947,6.402085603,3.644723952),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',3960.0,-3791.44531559,-5712.95617894,-4533.48630714,6.668817493,-2.516382327,-0.082384354),
('00005','1 00005U 58002B 00179.78495062 .00000023 00000-0 28098-4 0 4753','2 00005 34.2682 348.7242 1859667 331.7664 19.3264 10.82419157413667',4320.0,-9060.47373569,4658.70952502,813.68673153,-2.232832783,-4.110453490,-3.157345433),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',0.0,2334.11450085,-41920.44035349,-0.03867437,2.826321032,-0.065091664,0.570936053),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-5184.0,-29020.02587128,13819.84419063,-5713.33679183,-1.768068390,-3.235371192,-0.395206135),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-5064.0,-32982.56870101,-11125.54996609,-6803.28472771,0.617446996,-3.379240041,0.085954707),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-4944.0,-22097.68730513,-31583.13829284,-4836.34329328,2.230597499,-2.166594667,0.426443070),
('04632','1 04632U 70093B 04031.91070959 -.00000084 00000-0 10000-3 0 9955','2 04632 11.4628 273.1101 1450506 207.6000 143.9350 1.20231981 44145',-4896.0,-15129.94694545,-36907.74526221,-3487.56256701,2.581167187,-1.524204737,0.504805763),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',0.0,3988.31022699,5498.96657235,0.90055879,-3.290032738,2.357652820,6.496623475),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',120.0,-3935.69800083,409.10980837,5471.33577327,-3.374784183,-6.635211043,-1.942056221),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',240.0,-1675.12766915,-5683.30432352,-3286.21510937,5.282496925,1.508674259,-5.354872978),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',360.0,4993.62642836,2890.54969900,-3600.40145627,0.347333429,5.707031557,5.070699638),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',480.0,-1115.07959514,4015.11691491,5326.99727718,-5.524279443,-4.765738774,2.402255961),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',600.0,-4329.10008198,-5176.70287935,409.65313857,2.858408303,-2.933091792,-6.509690397),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',720.0,3692.60030028,-976.24265255,-5623.36447493,3.897257243,6.415554948,1.429112190),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',840.0,2301.83510037,5723.92394553,2814.61514580,-5.110924966,-0.764510559,5.662120145),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',960.0,-4990.91637950,-2303.42547880,3920.86335598,-0.993439372,-5.967458360,-4.759110856),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1080.0,642.27769977,-4332.89821901,-5183.31523910,5.720542579,4.216573838,-2.846576139),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1200.0,4719.78335752,4798.06938996,-943.58851062,-2.294860662,3.492499389,6.408334723),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1320.0,-3299.16993602,1576.83168320,5678.67840638,-4.460347074,-6.202025196,-0.885874586),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1440.0,-2777.14682335,-5663.16031708,-2462.54889123,4.915493146,0.123328992,-5.896495091),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1560.0,4992.31573893,1716.62356770,-4287.86065581,1.640717189,6.071570434,4.338797931),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1680.0,-8.22384755,4662.21521668,4905.66411857,-5.891011274,-3.593173872,3.365100460),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1800.0,-4966.20137963,-4379.59155037,1349.33347502,1.763172581,-3.981456387,-6.343279443),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',1920.0,2954.49390331,-2080.65984650,-5754.75038057,4.895893306,5.858184322,0.375474825),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2040.0,3363.28794321,5559.55841180,1956.05542266,-4.587378863,0.591943403,6.107838605),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2160.0,-4856.66780070,-1107.03450192,4557.21258241,-2.304158557,-6.186437070,-3.956549542),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2280.0,-497.84480071,-4863.46005312,-4700.81211217,5.960065407,2.996683369,-3.767123329),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2400.0,5241.61936096,3910.75960683,-1857.93473952,-1.124834806,4.406213160,6.148161299),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2520.0,-2451.38045953,2610.60463261,5729.79022069,-5.366560525,-5.500855666,0.187958716),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2640.0,-3791.87520638,-5378.82851382,-1575.82737930,4.266273592,-1.199162551,-6.276154080),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2760.0,4730.53958356,524.05006433,-4857.29369725,2.918056288,6.135412849,3.495115636),
('06251','1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985','2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774',2880.0,1159.27802897,5056.60175495,4353.49418579,-5.968060341,-2.314790406,4.230722669),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',0.0,2349.89483350,-14785.93811562,0.02119378,2.721488096,-3.256811655,4.498416672),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',120.0,15223.91713658,-17852.95881713,25280.39558224,1.079041732,0.875187372,2.485682813),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',240.0,19752.78050009,-8600.07130962,37522.72921090,0.238105279,1.546110924,0.986410447),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',360.0,19089.29762968,3107.89495018,39958.14661370,-0.410308034,1.640332277,-0.306873818),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',480.0,13829.66070574,13977.39999817,32736.32082508,-1.065096849,1.279983299,-1.760166075),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',600.0,3333.05838525,18395.31728674,12738.25031238,-1.882432221,-0.611623333,-4.039586549),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',720.0,2622.13222207,-15125.15464924,474.51048398,2.688287199,-3.078426664,4.494979530),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',840.0,15320.56770017,-17777.32564586,25539.53198382,1.064346229,0.892184771,2.459822414),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',960.0,19769.70267785,-8458.65104454,37624.20130236,0.229304396,1.550363884,0.966993056),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1080.0,19048.56201523,3260.43223119,39923.39143967,-0.418015536,1.639346953,-0.326094840),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1200.0,13729.19205837,14097.70014810,32547.52799890,-1.074511043,1.270505211,-1.785099927),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1320.0,3148.86165643,18323.19841703,12305.75195578,-1.895271701,-0.678343847,-4.086577951),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1440.0,2890.80638268,-15446.43952300,948.77010176,2.654407490,-2.909344895,4.486437362),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1560.0,15415.98410712,-17699.90714437,25796.19644689,1.049818334,0.908822332,2.434107329),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1680.0,19786.00618538,-8316.74570581,37723.74539119,0.220539813,1.554518900,0.947601047),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1800.0,19007.28688729,3412.85948715,39886.66579255,-0.425733568,1.638276809,-0.345353807),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',1920.0,13627.93015254,14216.95401307,32356.13706868,-1.083991976,1.260802347,-1.810193903),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2040.0,2963.26486560,18243.85063641,11868.25797486,-1.908015447,-0.747870342,-4.134004492),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2160.0,3155.85126036,-15750.70393364,1422.32496953,2.620085624,-2.748990396,4.473527039),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2280.0,15510.15191770,-17620.71002219,26050.43525345,1.035454678,0.925111006,2.408534465),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2400.0,19801.67198812,-8174.33337167,37821.38577439,0.211812700,1.558576937,0.928231880),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2520.0,18965.46529379,3565.19666242,39847.97510998,-0.433459945,1.637120585,-0.364653213),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2640.0,13525.88227400,14335.15978787,32162.13236536,-1.093537945,1.250868256,-1.835451681),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2760.0,2776.30574260,18156.98538451,11425.73046481,-1.920632199,-0.820370733,-4.181839232),
('08195','1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813','2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656',2880.0,3417.20931587,-16038.79510665,1894.74934058,2.585515864,-2.596818146,4.456882556),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',0.0,13020.06750784,-2449.07193500,1.15896030,4.247363935,1.597178501,4.956708611),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',120.0,19190.32482476,9249.01266902,26596.71345328,-0.624960193,1.324550562,2.495697637),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',240.0,11332.67806218,16517.99124008,38569.78482991,-1.400974747,0.710947006,0.923935636),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',360.0,328.74217398,19554.92047380,40558.26246145,-1.593281066,0.126772913,-0.359627307),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',480.0,-10684.90590680,18057.15728839,33158.75253886,-1.383205997,-0.582328999,-1.744412556),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',600.0,-17069.78000550,9944.86797897,13885.91649059,0.044133354,-1.853448464,-3.815303117),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',720.0,13725.09398980,-2180.70877090,863.29684523,3.878478111,1.656846496,4.944867241),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',840.0,19089.63879226,9456.29670247,27026.79562883,-0.656614299,1.309112636,2.449371941),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',960.0,11106.41248373,16627.60874079,38727.35140296,-1.409722680,0.698582526,0.891383535),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1080.0,72.40958621,19575.08054144,40492.12544001,-1.593394604,0.113655142,-0.390556063),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1200.0,-10905.89252576,17965.41205111,32850.07298244,-1.371396120,-0.601706604,-1.782817058),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1320.0,-17044.61207568,9635.48491849,13212.59462953,0.129244030,-1.903551430,-3.884569098),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1440.0,14369.90303735,-1903.85601062,1722.15319853,3.543393116,1.701687176,4.913881358),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1560.0,18983.96210441,9661.12233804,27448.99557732,-0.687189304,1.293808870,2.403630759),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1680.0,10878.79336704,16735.31433954,38879.23434264,-1.418239666,0.686235750,0.858951848),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1800.0,-184.03743100,19593.09371709,40420.40606889,-1.593348925,0.100448697,-0.421571993),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',1920.0,-11125.12138631,17870.19488928,32534.21521208,-1.359116236,-0.621413776,-1.821629856),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2040.0,-17004.43272827,9316.53926351,12526.11883812,0.220330736,-1.955594322,-3.955058575),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2160.0,14960.06492693,-1620.68430805,2574.96359381,3.238634028,1.734723385,4.868880331),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2280.0,18873.46347257,9863.57004586,27863.46574735,-0.716736981,1.278632817,2.358448535),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2400.0,10649.86857581,16841.14172669,39025.48035006,-1.426527152,0.673901057,0.826632332),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2520.0,-440.53459323,19608.95524423,40343.10675451,-1.593138597,0.087147884,-0.452680559),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2640.0,-11342.45028909,17771.44223942,32211.12535721,-1.346344015,-0.641464291,-1.860864234),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2760.0,-16948.06005711,8987.64254880,11826.28284367,0.318007297,-2.009693492,-4.026726648),
('09880','1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814','2 09880 64.5968 349.3786 7069051 270.0229 16.3320 2.00813614112380',2880.0,15500.53445068,-1332.90981042,3419.72315308,2.960917974,1.758331634,4.813698638),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',0.0,25532.98947267,-27244.26327953,-1.11572421,2.410283885,2.194175683,0.545888526),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1440.0,-11362.18265118,-35117.55867813,-5413.62537994,3.137861261,-1.011678260,0.267510059),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1380.0,309.25349929,-36960.43090143,-4198.48007670,3.292429375,-0.002166046,0.402111628),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1320.0,11949.04009077,-35127.37816804,-2565.89806468,3.119942784,1.012096444,0.497284100),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1260.0,22400.45329336,-29798.63236321,-677.91515122,2.638533344,1.922477736,0.542792913),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1200.0,30640.84752458,-21525.02340201,1277.34808722,1.903464941,2.634294312,0.534540934),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1140.0,35899.56788035,-11152.71158138,3108.72535238,0.997393045,3.079858548,0.474873291),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1080.0,37732.45438600,288.18821054,4643.87587495,0.016652226,3.225184410,0.371669746),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-1020.0,36045.92961699,11706.61816230,5746.32646574,-0.942409065,3.069888941,0.236662980),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-960.0,31076.77273609,22063.44379776,6325.93403705,-1.794027976,2.642072476,0.083556127),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-900.0,23341.26015320,30460.88002531,6342.91707895,-2.469409743,1.990861658,-0.073612096),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-840.0,13568.39733054,36204.45930900,5806.79548733,-2.919354203,1.178920217,-0.221646814),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-780.0,2628.58762420,38840.10855897,4771.91979854,-3.114400514,0.276239109,-0.348926401),
('09998','1 09998U 74033F 05148.79417928 -.00000112 00000-0 00000+0 0 4480','2 09998 9.4958 313.1750 0270971 327.5225 30.8097 1.16186785 45878',-720.0,-8535.81598158,38171.79073851,3331.00311285,-3.043839958,-0.644462527,-0.445808894),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',0.0,7473.37102491,428.94748312,5828.74846783,5.107155391,6.444680305,-0.186133297),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',360.0,-3305.22148694,32410.84323331,-24697.16974954,-1.301137319,-1.151315600,-0.283335823),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',720.0,14271.29083858,24110.44309009,-4725.76320143,-0.320504528,2.679841539,-2.084054355),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',1080.0,-9990.05800009,22717.34212448,-23616.88515553,-1.016674392,-2.290267981,0.728923337),
('11801','1 11801U 80230.29629788 .01431103 00000-0 14311-1 13','2 11801 46.7916 230.4354 7318036 47.4722 10.4117 2.28537848 13',1440.0,9787.87836256,33753.32249667,-15030.79874625,-1.094251553,0.923589906,-1.522311008),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',0.0,34747.57932696,24502.37114079,-1.32832986,-1.731642662,2.452772615,0.608510081),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',120.0,18263.33439094,38159.96004751,4186.18304085,-2.744396611,1.255583260,0.528558932),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',240.0,-3023.38840703,41783.13186459,7273.03412906,-3.035574793,-0.271656544,0.309645251),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',360.0,-23516.34391907,34424.42065671,8448.49867693,-2.529120477,-1.726186020,0.009582303),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',480.0,-37837.46699511,18028.39727170,7406.25540271,-1.360069525,-2.725794686,-0.292555349),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',600.0,-42243.58460661,-3093.72887774,4422.91711801,0.163110919,-3.009980598,-0.517584362),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',720.0,-35597.57919549,-23407.91145393,282.09554383,1.641405246,-2.506773678,-0.606963478),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',840.0,-19649.19834455,-37606.11623860,-3932.71525948,2.689647056,-1.349150016,-0.537710698),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',960.0,1431.30912160,-41982.04949668,-7120.45467057,3.035263353,0.160882945,-0.327993994),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1080.0,22136.97605384,-35388.19823762,-8447.62393401,2.587624889,1.630097136,-0.032349004),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1200.0,37050.15790219,-19537.23321425,-7564.83463543,1.461844494,2.674654256,0.272202191),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1320.0,42253.81760945,1431.81867593,-4699.87621174,-0.049247334,3.019518960,0.505890058),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1440.0,36366.59147396,22023.54245720,-601.47121821,-1.549681546,2.571788981,0.607057418),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1560.0,20922.12287985,36826.33975981,3654.91125886,-2.644070068,1.447521216,0.548722983),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1680.0,-23.77224182,41945.51688402,6950.29891751,-3.043358385,-0.057417440,0.346112094),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1800.0,-20964.17821076,36039.06206172,8418.91984963,-2.642795221,-1.546099886,0.052725852),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',1920.0,-36401.63863057,20669.75286162,7677.19769359,-1.549488154,-2.627052310,-0.254079652),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2040.0,-42298.30327543,-119.03351118,4922.96388841,-0.052232768,-3.018152669,-0.493827331),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2160.0,-37125.62383511,-20879.63058368,879.86971348,1.456499841,-2.619358421,-0.604081694),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2280.0,-22250.12320553,-36182.74736487,-3393.15365183,2.583161226,-1.536647628,-0.556404555),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2400.0,-1563.06258654,-42035.43179159,-6780.02161760,3.034917506,-0.052702046,-0.363395654),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2520.0,19531.64069587,-36905.65470956,-8395.46892032,2.693682199,1.446079999,-0.075256054),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2640.0,35516.53506142,-22123.71916638,-7815.04516935,1.646882125,2.568416058,0.232985912),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2760.0,42196.03535976,-1547.32646751,-5187.39401981,0.166491841,3.019211549,0.480665780),
('14128','1 14128U 83058A 06176.02844893 -.00000158 00000-0 10000-3 0 9627','2 14128 11.4384 35.2134 0011562 26.4582 333.5652 0.98870114 46093',2880.0,37802.25393045,19433.57330019,-1198.66634226,-1.359930580,2.677830903,0.602507466),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',0.0,5559.11686836,-11941.04090781,-19.41235206,3.392116762,-1.946985124,4.250755852),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',120.0,12339.83273749,-2771.14447871,18904.57603433,-0.871247614,2.600917693,0.581560002),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',240.0,-3385.00215658,7538.13955729,200.59008616,-2.023512865,-4.261808344,-6.856385787),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',360.0,12805.22442200,-10258.94667177,13780.16486738,0.619279224,1.821510542,2.507365975),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',480.0,5682.46556318,7199.30270473,15437.67134070,-2.474365406,2.087897336,-2.583767460),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',600.0,7628.94243982,-12852.72097492,2902.87208981,2.748131081,-0.740084579,4.125307943),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',720.0,11531.64866625,-858.27542736,19086.85993771,-1.170071901,2.660311986,0.096005705),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',840.0,-3866.98069515,2603.73442786,-4577.36484577,1.157257298,-8.453281164,-4.683959407),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',960.0,13054.77732721,-8707.92757730,15537.63259903,0.229846748,2.119467054,2.063396852),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1080.0,3496.91064652,8712.83919778,12845.81838327,-2.782184997,1.552950644,-3.554436131),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1200.0,9593.07424729,-13023.75963608,6250.46484931,2.072666376,0.278735334,3.778111073),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1320.0,10284.79205084,1487.89914169,18824.37381327,-1.530335053,2.663107730,-0.542205966),
('16925','1 16925U 86065D 06151.67415771 .02550794 -30915-6 18784-3 0 4486','2 16925 62.0906 295.0239 5596327 245.1593 47.9690 4.88511875148616',1440.0,-984.62035146,-5187.03480813,-5745.59594144,4.340271916,-7.266811354,1.777668888),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',0.0,25123.29290741,-13225.49966286,3249.40351869,0.488683419,4.797897593,-0.961119693),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1440.0,-151669.05280515,-5645.20454550,-2198.51592118,-0.869182889,-0.870759872,0.156508219),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1560.0,-157497.71657495,-11884.99595074,-1061.44439402,-0.749657961,-0.864016715,0.157766101),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1680.0,-162498.32255577,-18062.99733167,81.00915253,-0.638980378,-0.853687105,0.158098992),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1800.0,-166728.76010920,-24155.99648299,1222.84128677,-0.535600687,-0.840455444,0.157680857),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',1920.0,-169935.81924592,-31767.29787964,2749.01540345,-0.430050431,-0.828904183,0.157812340),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2040.0,-172703.07831815,-37662.95639336,3883.60052579,-0.338004891,-0.810277487,0.156020035),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2160.0,-174823.19337404,-43417.55605219,5003.26312809,-0.250258622,-0.789828672,0.153764903),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2280.0,-176324.63925775,-49018.51958648,6104.85025002,-0.166136613,-0.767706262,0.151092242),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2400.0,-177231.42142458,-54454.12699497,7185.48661607,-0.085067854,-0.744001567,0.148033403),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2520.0,-177563.73583232,-59713.14859144,8242.48472591,-0.006561730,-0.718760309,0.144608676),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2640.0,-177338.48026483,-64784.54644698,9273.27220003,0.069809946,-0.691990238,0.140829236),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2760.0,-176569.65151461,-69657.21976255,10275.33063459,0.144426878,-0.663665876,0.136698419),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',2880.0,-175268.65299073,-74319.77625463,11246.14177160,0.217631370,-0.633731091,0.132212491),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3000.0,-173444.53039609,-78760.31560396,12183.13775212,0.289737325,-0.602099929,0.127361017),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3120.0,-171104.14813653,-82966.21323591,13083.65278381,0.361037779,-0.568655903,0.122126889),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3240.0,-168252.31543803,-86923.89363433,13944.87382716,0.431811396,-0.533249797,0.116486022),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3360.0,-164891.86832887,-90618.58225954,14763.78794247,0.502328269,-0.495695896,0.110406725),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3480.0,-161023.71139825,-94034.02398835,15537.12375729,0.572855321,-0.455766412,0.103848688),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3600.0,-156646.82136726,-97152.15370791,16261.28409305,0.643661538,-0.413183688,0.096761524),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3720.0,-151758.21285737,-99952.70098346,16932.26607548,0.715023254,-0.367609561,0.089082727),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3840.0,-146352.86521283,-102412.70506284,17545.56394158,0.787229695,-0.318630913,0.080734873),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',3960.0,-140423.60777444,-104505.90799734,18096.04807097,0.860588979,-0.265739987,0.071621768),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',4080.0,-133960.95961851,-106201.98091318,18577.81121953,0.935434758,-0.208307307,0.061623110),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',4200.0,-126952.91860010,-107465.51906186,18983.96903112,1.012133628,-0.145543878,0.050587007),
('20413','1 20413U 83020D 05363.79166667 .00000000 00000-0 00000+0 0 7041','2 20413 12.3514 187.4253 7864447 196.3027 356.5478 0.24690082 7978',4320.0,-119384.69396454,-108254.71115372,19306.39581892,1.091093313,-0.076447479,0.038319282),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',0.0,-14464.72135182,-4699.19517587,0.06681686,-3.249312013,-3.281032707,4.007046940),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',120.0,-19410.46286123,-19143.03318969,23114.05522619,0.508602237,-1.156882269,2.379923455),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',240.0,-12686.06129708,-23853.75335645,35529.81733588,1.231633829,-0.221718202,1.118440291),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',360.0,-2775.46649359,-22839.64574119,39494.64689967,1.468963405,0.489481769,-0.023972788),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',480.0,7679.87883570,-16780.50760106,34686.21815555,1.364171080,1.211183897,-1.385151371),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',600.0,14552.40023028,-4819.50121461,17154.70672449,0.109201591,2.176124494,-3.854856805),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',720.0,-15302.38845375,-5556.43440300,1095.95088753,-2.838224312,-3.134231137,3.992596326),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',840.0,-19289.20066748,-19427.04851118,23759.45685636,0.552495087,-1.112499437,2.325112654),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',960.0,-12376.21976437,-23893.38020018,35831.33691892,1.246701529,-0.194294048,1.074867282),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1080.0,-2400.55677665,-22698.62264640,39482.75964390,1.472582922,0.513555654,-0.069306561),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1200.0,8031.66819252,-16455.77592085,34298.94391742,1.351357426,1.239633234,-1.448195324),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1320.0,14559.48780372,-4238.43773813,16079.23154704,-0.026409655,2.218938770,-4.012628896),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1440.0,-16036.04980660,-6372.51406468,2183.44834232,-2.485113443,-2.994994355,3.955891272),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1560.0,-19156.71583814,-19698.89059957,24389.29473934,0.594278133,-1.069418599,2.271152044),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1680.0,-12062.72925552,-23925.82362911,36120.66680667,1.261238798,-0.167201856,1.031478939),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1800.0,-2024.96136966,-22551.56626703,39458.50085787,1.475816889,0.537615764,-0.114887472),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',1920.0,8379.80916204,-16123.95878459,33894.75123231,1.337468254,1.268432783,-1.512473301),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2040.0,14527.86748873,-3646.33817120,14960.74306518,-0.180035839,2.261273515,-4.179355590),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2160.0,-16680.12147335,-7149.80800425,3257.64227208,-2.178897351,-2.863927095,3.904876943),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2280.0,-19013.58793448,-19958.93766022,25003.81778666,0.634100431,-1.027559823,2.218002685),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2400.0,-11745.76155818,-23951.19438627,36397.87676581,1.275261813,-0.140425132,0.988259441),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2520.0,-1648.81945070,-22398.50594576,39421.83273890,1.478660174,0.561671519,-0.160733093),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2640.0,8723.97652795,-15784.99406275,33473.35215527,1.322433593,1.297602497,-1.578055493),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2760.0,14452.25571587,-3043.42332645,13796.84870805,-0.355190169,2.302485443,-4.355767077),
('21897','1 21897U 92011A 06176.02341244 -.00001273 00000-0 -13525-3 0 3044','2 21897 62.1749 198.0096 7421690 253.0462 20.1561 2.01269994104880',2880.0,-17246.31075678,-7890.72601508,4315.39410307,-1.910968458,-2.740945672,3.844722726),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',0.0,1442.10132912,6510.23625449,8.83145885,-3.475714837,0.997262768,6.835860345),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',54.2028672,306.10478453,-5816.45655525,-2979.55846068,3.950663855,3.415332543,-5.879974329),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',74.2028672,3282.82085464,2077.46972905,-5189.17988770,0.097342701,7.375135692,2.900196702),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',94.2028672,530.82729176,6426.20790003,1712.37076793,-3.837120395,-1.252430637,6.561602577),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',114.2028672,-3191.69170212,170.27219912,5956.29807775,-1.394956872,-7.438073471,-0.557553115),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',134.2028672,-1818.99222465,-6322.45146616,681.95247154,3.349795173,-1.530140265,-6.831522765),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',154.2028672,2515.66448634,-2158.83091224,-5552.13320544,2.571979660,7.311930509,-1.639865620),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',174.2028672,2414.52833210,5749.10150922,-1998.59693165,-2.681032960,3.527589301,6.452951429),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',194.2028672,-1877.98944331,3862.27848302,5112.48435863,-3.261489804,-6.026859137,3.433254768),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',214.2028672,-3117.36584395,-4419.74773864,3840.85960912,1.545479182,-5.475416581,-5.207913748),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',234.2028672,815.32034678,-5231.67692249,-3760.04690354,3.870864200,4.455588552,-5.211082191),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',254.2028672,3269.54341810,3029.00081083,-4704.67969713,-0.526711345,6.812157950,3.929825087),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',274.2028672,-10.18099756,6026.23341453,2643.50518407,-3.953623254,-2.616070012,6.145637500),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',294.2028672,-3320.58819584,-1248.42679945,5563.06017927,-0.637046974,-7.417786044,-2.076120187),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',314.2028672,-1025.48974616,-6366.98945782,-911.23559153,3.811771909,0.438071490,-6.829260617),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',334.2028672,3003.75996128,-413.85708003,-5706.15591435,1.674350083,7.694169068,0.316915204),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',354.2028672,1731.42816980,6258.27676925,-409.32527982,-3.400497806,1.447945424,6.904010052),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',374.2028672,-2582.52111460,2024.19020680,5647.55650268,-2.530348121,-7.221719393,1.438141553),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',394.2028672,-2440.56848578,-5702.77311877,1934.81094689,2.731792947,-3.350576075,-6.527773339),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',414.2028672,1951.22934391,-3423.59443045,-5121.67808201,3.249039133,6.465974362,-3.069806659),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',434.2028672,2886.50939356,4888.68626216,-3096.29885989,-1.973162139,4.877039020,5.832414910),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',454.2028672,-1276.55532182,4553.26898463,4406.19787375,-3.715146421,-5.320176914,4.418210777),
('22312','1 22312U 93002D 06094.46235912 .99999999 81888-5 49949-3 0 3953','2 22312 62.1486 77.4698 0308723 267.9229 88.7392 15.95744531 98783',474.2028672,-3181.54698042,-3831.29976506,4096.80242787,1.114159970,-6.104773578,-4.829967400),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',0.0,14712.22023280,-1443.81061850,0.83497888,4.418965470,1.629592098,4.115531802),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',120.0,25418.88807860,9342.60307989,23611.46690798,0.051284086,1.213127306,2.429004159),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',240.0,21619.59550749,16125.24978864,36396.79365831,-0.963604380,0.685454965,1.177181937),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',360.0,12721.50543331,19258.96193362,40898.47648359,-1.457448565,0.179955469,0.071502601),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',480.0,1272.80760054,18458.41971897,37044.74742696,-1.674863386,-0.436454983,-1.201040990),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',600.0,-10058.43188619,11906.60764454,21739.62097733,-1.245829683,-1.543789125,-3.324449221),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',720.0,10924.40116466,-2571.92414170,-2956.34856294,6.071727751,1.349579102,3.898430260),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',840.0,25332.14851525,8398.91099924,21783.90654357,0.222320754,1.272214306,2.580527192),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',960.0,22317.71926039,15574.82086129,35495.77144092,-0.892750056,0.737383381,1.291738834),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1080.0,13795.68675885,19088.83051008,40803.69584385,-1.420277669,0.235599456,0.185517056),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1200.0,2515.17145049,18746.63776282,37864.58088636,-1.668016053,-0.360431458,-1.052854596),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1320.0,-9084.48602106,12982.62608646,24045.63900249,-1.378032363,-1.373184736,-3.013963835),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1440.0,5647.00909495,-3293.90518693,-5425.85235063,8.507977176,0.414560797,2.543322806),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1560.0,25111.63372210,7412.55109488,19844.25781729,0.416496290,1.332106006,2.739301737),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1680.0,22961.47461641,14985.74459578,34511.09257381,-0.816711048,0.789391108,1.407901804),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1800.0,14841.15301459,18876.91439870,40626.25901619,-1.380403341,0.290228810,0.298258120),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',1920.0,3750.70174081,18978.57939698,38578.11783220,-1.656939412,-0.287930881,-0.910825599),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2040.0,-8027.30219489,13939.54436955,26136.49045637,-1.474476061,-1.222693624,-2.737178731),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2160.0,-1296.95657092,-2813.69369768,-5871.09587258,9.881929371,-1.978467207,-1.922261005),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2280.0,24738.60364819,6383.41644019,17787.27631900,0.639556952,1.392554379,2.906206324),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2400.0,23546.85388669,14358.15602832,33441.67679479,-0.734895006,0.841564851,1.526009909),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2520.0,15855.87696303,18624.05633582,40367.13420574,-1.337753546,0.343969522,0.410018472),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2640.0,4976.44933591,19156.75504042,39189.68603184,-1.642084365,-0.218525096,-0.774148204),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2760.0,-6909.20746210,14790.44707042,28034.46732222,-1.545152610,-1.088119523,-2.487447214),
('22674','1 22674U 93035D 06176.55909107 .00002121 00000-0 29868-3 0 6569','2 22674 63.5035 354.4452 7541712 253.3264 18.7754 1.96679808 93877',2880.0,-7331.65006707,-604.17323419,-2723.51014575,6.168997265,-3.634011554,-5.963531682),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',0.0,-8801.60046706,-0.03357557,-0.44522743,-3.835279101,-7.662552175,0.944561323),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',120.0,-1684.34352858,-31555.95196340,3888.99944319,2.023055719,-2.151306405,0.265065778),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',240.0,12325.51410155,-38982.15046244,4802.88832275,1.763224157,-0.102514446,0.012397139),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',360.0,22773.66831936,-34348.02176606,4228.77407391,1.067616787,1.352427865,-0.166956367),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',480.0,26194.40441089,-19482.94203672,2393.84774063,-0.313732186,2.808771328,-0.346204118),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',600.0,8893.50573448,5763.38890561,-713.69884164,-7.037399220,3.022613131,-0.370272416),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',720.0,-6028.75686537,-25648.99913786,3164.37107274,1.883159288,-3.177051976,0.390793162),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',840.0,8313.57299056,-38146.45710922,4697.80777535,1.905002133,-0.625883074,0.076098187),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',960.0,20181.29108622,-36842.60674073,4529.12568218,1.326244476,0.921916487,-0.114527455),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1080.0,26302.61794569,-25173.39539436,3084.65309986,0.245398835,2.329974347,-0.287495880),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1200.0,19365.07045602,-2700.00490122,317.42727417,-3.009733018,3.902496058,-0.478928582),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1320.0,-9667.81878780,-16930.19112642,2095.87469034,1.279288285,-4.736005905,0.582878255),
('23177','1 23177U 94040C 06175.45752052 .00000386 00000-0 76590-3 0 95','2 23177 7.0496 179.8238 7258491 296.0482 8.3061 2.25906668 97438',1440.0,4021.31438583,-36066.09209609,4442.91587411,2.007322354,-1.227461376,0.149383897),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',0.0,-9301.24542292,3326.10200382,2318.36441127,-8.729303005,-0.828225037,-0.122314827),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',120.0,-44672.91239680,-6213.11996581,-1738.80131727,-3.719475070,-1.336673022,-0.621888261),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',240.0,-67053.08885388,-14994.69685946,-5897.99072793,-2.860576613,-1.183771565,-0.568473909),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',360.0,-85227.84253168,-22897.08484471,-9722.59184564,-2.426469823,-1.078592475,-0.525341431),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',480.0,-100986.00419136,-30171.19698695,-13283.77044765,-2.147108978,-1.000530827,-0.491587582),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',600.0,-115093.00686387,-36962.56316477,-16634.15682929,-1.945446188,-0.938947736,-0.464199202),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',720.0,-127965.80064891,-43363.32967165,-19809.90480432,-1.789652016,-0.888278463,-0.441254468),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',840.0,-139863.28332207,-49436.45704153,-22836.80438139,-1.663762568,-0.845315913,-0.421548627),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',960.0,-150960.22978259,-55227.45413896,-25734.01408879,-1.558730986,-0.808061065,-0.404293846),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1080.0,-161381.71414630,-60770.64040903,-28516.26290017,-1.468977174,-0.775190459,-0.388951810),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1200.0,-171221.18736947,-66092.76474442,-31195.19847387,-1.390837596,-0.745785633,-0.375140398),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1320.0,-180550.82888746,-71215.23290630,-33780.24938270,-1.321788672,-0.719184752,-0.362579495),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1440.0,-189427.87533074,-76155.54943344,-36279.19882816,-1.260024473,-0.694896053,-0.351058133),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1560.0,-197898.69401409,-80928.29015181,-38698.57972447,-1.204211888,-0.672544709,-0.340413731),
('23333','1 23333U 94071A 94305.49999999 -.00172956 26967-3 10000-3 0 15','2 23333 28.7490 2.3720 9728298 30.4360 1.3500 0.07309491 70',1600.0,-200638.82986236,-82484.14969882,-39488.34331447,-1.186748462,-0.665472422,-0.337037582),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',0.0,9892.63794341,35.76144969,-1.08228838,3.556643237,6.456009375,0.783610890),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',20.0,11931.95642997,7340.74973750,886.46365987,0.308329116,5.532328972,0.672887281),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',40.0,11321.71039205,13222.84749156,1602.40119049,-1.151973982,4.285810871,0.521919425),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',60.0,9438.29395675,17688.05450261,2146.59293402,-1.907904054,3.179955046,0.387692479),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',80.0,6872.08634639,20910.11016811,2539.79945034,-2.323995367,2.207398462,0.269506121),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',100.0,3933.37509798,23024.07662542,2798.25966746,-2.542860616,1.327134966,0.162450076),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',120.0,816.64091546,24118.98675475,2932.69459428,-2.626838010,0.504502763,0.062344306),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',140.0,-2334.41705804,24246.86096326,2949.36448841,-2.602259646,-0.288058266,-0.034145135),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',160.0,-5394.31798039,23429.42716149,2850.86832586,-2.474434068,-1.074055982,-0.129868366),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',180.0,-8233.35130237,21661.24480883,2636.51456118,-2.230845533,-1.875742344,-0.227528603),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',200.0,-10693.96497348,18909.88168891,2302.33707548,-1.835912433,-2.716169865,-0.329931880),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',220.0,-12553.89669904,15114.63990716,1840.93573231,-1.212478879,-3.619036996,-0.439970633),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',240.0,-13450.20591864,10190.57904289,1241.95958736,-0.189082511,-4.596701971,-0.559173899),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',260.0,-12686.60437121,4079.31106161,498.27078614,1.664498211,-5.559889865,-0.676747779),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',280.0,-8672.55867753,-2827.56823315,-342.59644716,5.515079852,-5.551222962,-0.676360044),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',300.0,1153.31498060,-6411.98692060,-779.87288941,9.689818102,1.388598425,0.167868798),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',320.0,9542.79201056,-533.71253081,-65.73165428,3.926947087,6.459583539,0.785686755),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',340.0,11868.80960100,6861.59590848,833.72780602,0.452957852,5.632811328,0.685262323),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',360.0,11376.23941678,12858.97121366,1563.40660172,-1.087665695,4.374693347,0.532207051),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',380.0,9547.70300782,17421.48570758,2118.56907515,-1.876540262,3.253891728,0.395810243),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',400.0,7008.51470263,20725.47471227,2520.56064289,-2.308703599,2.270724438,0.276138613),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',420.0,4083.18551180,22910.88306802,2786.35642660,-2.536610941,1.383768875,0.168165414),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',440.0,970.13107533,24071.19896282,2927.30875440,-2.626673095,0.557274717,0.067549303),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',460.0,-2183.75499348,24261.30188126,2950.09189560,-2.607082241,-0.236785937,-0.029112844),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',480.0,-5252.49066783,23505.58108388,2857.68628654,-2.484465059,-1.022158411,-0.124702643),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',500.0,-8107.41437587,21801.13395060,2649.76852683,-2.247669530,-1.821071275,-0.221914939),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',520.0,-10594.01813094,19118.22269010,2322.77197767,-1.863224062,-2.656353699,-0.323512642),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',540.0,-12496.70758499,15399.13096351,1869.75958053,-1.258272118,-3.551534022,-0.432332913),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',560.0,-13467.50382653,10561.43040038,1280.84842178,-0.272050695,-4.520503543,-0.550014833),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',580.0,-12848.00717497,4541.72432009,548.59976478,1.493938056,-5.489644146,-0.667479244),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',600.0,-9152.79920397,-2343.88902799,-287.93741332,5.127695273,-5.650584983,-0.686013644),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',620.0,280.12478642,-6500.11368508,-790.36236302,9.779642904,0.581430120,0.074124421),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',640.0,9166.21406115,-1093.48756223,-129.53833135,4.316926785,6.438465969,0.785095966),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',660.0,11794.74563870,6381.74484842,780.82775971,0.604642523,5.731705440,0.697571522),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',680.0,11424.80363789,12493.80833338,1524.27683836,-1.021148661,4.463489406,0.542537702),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',700.0,9652.78920084,17153.46470428,2090.43413681,-1.844382696,3.327595388,0.403924198),
('23599','1 23599U 95029B 06171.76535463 .00085586 12891-6 12956-2 0 2905','2 23599 6.9327 0.2849 5782022 274.4436 25.2425 4.47796565123555',720.0,7141.24742526,20538.97115158,2501.18059966,-2.293079623,2.333598993,0.282727441),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',0.0,7534.10987189,41266.39266843,-0.10801028,-3.027168008,0.558848996,0.207982755),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',120.0,-14289.19940414,39469.05530051,1428.62838591,-2.893205245,-1.045447840,0.179634249),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',240.0,-32222.92014955,26916.25425799,2468.59996594,-1.973007929,-2.359335071,0.102539376),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',360.0,-41413.95109398,7055.51656639,2838.90906671,-0.521665080,-3.029172207,-0.002066843),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',480.0,-39402.72251896,-14716.42475223,2441.32678358,1.066928187,-2.878714619,-0.105865729),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',600.0,-26751.08889828,-32515.13982431,1384.38865570,2.366228869,-1.951032799,-0.181018498),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',720.0,-6874.77975542,-41530.38329422,-46.60245459,3.027415087,-0.494671177,-0.207337260),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',840.0,14859.52039042,-39302.58907247,-1465.02482524,2.869609883,1.100123969,-0.177514425),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',960.0,32553.14863770,-26398.88401807,-2485.45866002,1.930064459,2.401574539,-0.099250520),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1080.0,41365.67576837,-6298.09965811,-2828.05254033,0.459741276,3.051680214,0.006431872),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1200.0,38858.83295070,15523.39314924,-2396.86850752,-1.140211488,2.867567143,0.110637217),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1320.0,25701.46068162,33089.42617648,-1308.68556638,-2.428713821,1.897381431,0.184605907),
('24208','1 24208U 96044A 06177.04061740 -.00000094 00000-0 10000-3 0 1600','2 24208 3.8536 80.0121 0026640 311.0977 48.3000 1.00778054 36119',1440.0,5501.08137100,41590.27784405,138.32522930,-3.050691874,0.409203052,0.207958133),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',0.0,8827.15660472,-41223.00971237,3.63482963,3.007087319,0.643701323,0.000941663),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1440.0,8118.18519221,-41368.40537378,4.11046687,3.017696741,0.591994297,0.000933016),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1320.0,27766.34015328,-31724.97000557,9.93297846,2.314236153,2.024903193,0.000660861),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1200.0,39932.57237973,-13532.60040454,13.12958252,0.987382819,2.911942843,0.000213298),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-1080.0,41341.01365441,8305.71681955,12.84988501,-0.605098224,3.014378268,-0.000291034),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-960.0,31614.99210558,27907.29155353,9.16618797,-2.034243523,2.305014102,-0.000718418),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-840.0,13375.75227587,39994.27017651,3.05416854,-2.915424366,0.975119874,-0.000955576),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-720.0,-8464.89963309,41312.93549892,-3.86622919,-3.011600615,-0.617275050,-0.000939664),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-600.0,-28026.23406158,31507.89995661,-9.76047869,-2.296840160,-2.043607595,-0.000674889),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-480.0,-40040.01314363,13218.00579413,-13.06594832,-0.963328772,-2.919827983,-0.000231414),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-360.0,-41268.43291976,-8632.06859693,-12.90661266,0.630042315,-3.009677376,0.000273163),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-240.0,-31377.85317015,-28156.13970334,-9.32605530,2.054021717,-2.288554158,0.000704959),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',-120.0,-13031.41552688,-40092.33381029,-3.27636660,2.924657466,-0.950541167,0.000949381),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',0.0,8827.15660472,-41223.00971237,3.63482963,3.007087319,0.643701323,0.000941663),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',120.0,28306.85426674,-31243.80147394,9.57216891,2.279137743,2.064316875,0.000684127),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',240.0,40159.05128805,-12845.39151157,12.96086316,0.937265422,2.928448287,0.000245505),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',360.0,41192.55903455,9013.79606759,12.90495666,-0.656727442,3.003543458,-0.000257479),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',480.0,31131.69755798,28445.55681731,9.42419238,-2.073484842,2.269770851,-0.000691233),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',600.0,12687.81846530,40217.83324639,3.44726249,-2.931721827,0.924962230,-0.000940766),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',720.0,-9172.23500245,41161.63475527,-3.43575757,-3.000571486,-0.668847508,-0.000940101),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',840.0,-28562.51093192,31022.45987587,-9.39562161,-2.261449202,-2.082713897,-0.000689669),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',960.0,-40260.77504549,12529.11484344,-12.84915105,-0.913097031,-2.935933528,-0.000256181),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1080.0,-41114.14376538,-9338.87194483,-12.87952404,0.681588815,-2.998432565,0.000245006),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1200.0,-30890.01512240,-28690.40750792,-9.48037212,2.092989805,-2.252978152,0.000680459),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1320.0,-12341.46194020,-40310.06316386,-3.55833201,2.940537098,-0.900219523,0.000934170),
('25954','1 25954U 99060A 04039.68057285 -.00000108 00000-0 00000-0 0 6847','2 25954 0.0004 243.8136 0001765 15.5294 22.7134 1.00271289 15615',1440.0,9533.27750818,-41065.52390214,3.30756482,2.995596171,0.695200236,0.000938525),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',0.0,-42014.83795787,3702.34357772,-26.67500257,-0.269775247,-3.061854393,0.000336726),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',9300.0,40968.68133298,-9905.99156086,11.84946837,0.722756848,2.989645389,-0.000161261),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',9360.0,42135.66858481,1072.99195618,10.83481752,-0.078150602,3.074772455,-0.000380063),
('26900','1 26900U 01039A 06106.74503247 .00000045 00000-0 10000-3 0 8290','2 26900 0.0164 266.5378 0003319 86.1794 182.2590 1.00273847 16981',9400.0,41304.75156132,8398.27742944,9.74006214,-0.612515135,3.014117469,-0.000511575),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',0.0,-14506.92313768,-21613.56043281,10.05018894,2.212943308,1.159970892,3.020600202),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',120.0,7309.62197950,6076.00713664,6800.08705263,1.300543383,5.322579615,-4.788746312),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',240.0,-3882.62933791,11960.00543452,-25088.14383845,-2.146773699,-1.372461491,-2.579382089),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',360.0,-16785.45507465,-734.79159704,-34300.57085853,-1.386528125,-1.907762641,-0.220949641),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',480.0,-23524.16689356,-13629.45124622,-30246.27899200,-0.462846784,-1.586139830,1.269293624),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',600.0,-22890.23597092,-22209.35900155,-16769.91946116,0.704351342,-0.671112594,2.432433851),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',720.0,-11646.39698980,-19855.44222106,3574.00109607,2.626712727,1.815887329,2.960883901),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',840.0,7665.76124241,11159.78946577,345.93813117,-0.584818007,3.193514161,-5.750338922),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',960.0,-6369.35388112,10204.80073022,-27844.52150384,-2.050573276,-1.582940542,-2.076075232),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1080.0,-18345.64763145,-2977.76684430,-34394.90760612,-1.243589864,-1.892050757,0.060372061),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1200.0,-23979.74839255,-15436.44139571,-28616.50540218,-0.294973425,-1.482987916,1.478255628),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1320.0,-21921.97167880,-22852.45147658,-13784.85308485,0.945455629,-0.428940995,2.596964378),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1440.0,-8266.43821031,-17210.74590112,6967.95546070,3.082244069,2.665881872,2.712555075),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1560.0,6286.85464535,13809.56328971,-6321.60663781,-1.615964016,1.383135377,-5.358719132),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1680.0,-8730.87526788,8244.63344365,-30039.92372791,-1.935622871,-1.724162072,-1.631224738),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1800.0,-19735.81883249,-5191.76593007,-34166.14974143,-1.097835530,-1.860148418,0.324401050),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',1920.0,-24232.73847703,-17112.08243255,-26742.88893252,-0.119786184,-1.364365317,1.680220468),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2040.0,-20654.45640708,-23184.54386047,-10611.55144716,1.209238113,-0.144169639,2.748054938),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2160.0,-4337.15988957,-13410.46817244,9870.45949215,3.532753095,3.772236461,2.088424247),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2280.0,4074.62263523,14698.07548285,-12248.65327973,-2.053824693,0.203325817,-4.607867718),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2400.0,-10950.23438984,6148.66879447,-31736.65532865,-1.809875605,-1.816179062,-1.233364913),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2520.0,-20952.40702045,-7358.71507895,-33633.06643074,-0.948973031,-1.813594137,0.573893078),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2640.0,-24273.48944134,-18637.15546906,-24633.27702390,0.064161440,-1.228537560,1.875728935),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2760.0,-19057.55468077,-23148.29322082,-7269.38614178,1.500802809,0.195383037,2.879031237),
('26975','1 26975U 78066F 06174.85818871 .00000620 00000-0 10000-3 0 6809','2 26975 68.4714 236.1303 5602877 123.7484 302.5767 2.05657553 67521',2880.0,43.69305308,-8145.90299207,11634.57079913,3.780661682,5.105315423,0.714401345),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',0.0,-2715.28237486,-6619.26436889,-0.01341443,-1.008587273,0.422782003,7.385272942),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',120.0,-1816.87920942,-1835.78762132,6661.07926465,2.325140071,6.655669329,2.463394512),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',240.0,1483.17364291,5395.21248786,4448.65907172,2.560540387,4.039025766,-5.736648561),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',360.0,2801.25607157,5455.03931333,-3692.12865695,-0.595095864,-3.951923117,-6.298799125),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',480.0,411.09332812,-1728.99769152,-6935.45548810,-2.935970964,-6.684085058,1.492800886),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',600.0,-2506.52558454,-6628.98655094,-988.07784497,-1.390577189,-0.556164143,7.312736468),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',720.0,-2090.79884266,-2723.22832193,6266.13356576,1.992640665,6.337529519,3.411803080),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',840.0,1091.80560222,4809.88229503,5172.42897894,2.717483546,4.805518977,-5.030019896),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',960.0,2811.14062300,5950.65707171,-2813.23705389,-0.159662742,-3.121215491,-6.775341949),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1080.0,805.72698304,-812.16627907,-7067.58483968,-2.798936020,-6.889265977,0.472770873),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1200.0,-2249.59837532,-6505.84890714,-1956.72365062,-1.731234729,-1.528750230,7.096660885),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1320.0,-2311.57375797,-3560.99112891,5748.16749600,1.626569751,5.890482233,4.293545048),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1440.0,688.16056594,4124.87618964,5794.55994449,2.810973665,5.479585563,-4.224866316),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1560.0,2759.94088230,6329.87271798,-1879.19518331,0.266930672,-2.222670878,-7.119390567),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1680.0,1171.50677137,125.82053748,-7061.96626202,-2.605687852,-6.958489749,-0.556333225),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1800.0,-1951.43708472,-6251.71945820,-2886.95472355,-2.024131483,-2.475214272,6.741537478),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',1920.0,-2475.70722288,-4331.90569958,5117.31234924,1.235823539,5.322743371,5.091281211),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2040.0,281.46097847,3353.51057102,6302.87900650,2.840647273,6.047222485,-3.337085992),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2160.0,2650.33118860,6584.33434851,-908.29027134,0.675457235,-1.274044972,-7.323921567),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2280.0,1501.17226597,1066.31132756,-6918.71472952,-2.361891904,-6.889669974,-1.574718619),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2400.0,-1619.73468334,-5871.14051991,-3760.56587071,-2.264093975,-3.376316601,6.254622256),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2520.0,-2581.04202505,-5020.05572531,4385.92329047,0.829668458,4.645048038,5.789262667),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2640.0,-119.22080628,2510.90620488,6687.45615459,2.807575712,6.496549689,-2.384136661),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2760.0,2486.23806726,6708.18210028,80.43349581,1.057274905,-0.294294027,-7.384689123),
('28057','1 28057U 03049A 06177.78615833 .00000060 00000-0 35940-4 0 1836','2 28057 98.4283 247.6961 0000884 88.1964 271.9322 14.35478080140550',2880.0,1788.42334580,1990.50530957,-6640.59337725,-2.074169091,-6.683381288,-2.562777776),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',0.0,21707.46412351,-15318.61752390,0.13551152,1.304029214,1.816904974,3.161919976),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',120.0,18616.75971861,3166.15177043,18833.41523210,-2.076122016,2.838457575,1.586210535),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',240.0,-3006.50596328,18522.20742011,18941.84078154,-3.375452789,1.032680773,-1.559324534),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',360.0,-21607.02086957,15432.59962630,206.62470309,-1.306049851,-1.817011568,-3.163725018),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',480.0,-18453.06134549,-3150.83256134,-18685.83030936,2.106017925,-2.860236337,-1.586151870),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',600.0,3425.11742384,-18514.73232706,-18588.67200557,3.394666340,-1.003072030,1.610061295),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',720.0,21858.23838148,-15101.51661554,387.34517048,1.247973967,1.856017403,3.161439948),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',840.0,18360.69935796,3506.55256762,19024.81678979,-2.122684184,2.830618605,1.537510677),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',960.0,-3412.84765409,18646.85269710,18748.00359987,-3.366815728,0.986039922,-1.607874972),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1080.0,-21758.08331586,15215.44829478,-180.82181406,-1.250144680,-1.856490448,-3.163774870),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1200.0,-18193.41290284,-3493.85876912,-18877.14757717,2.153326942,-2.852221264,-1.536617760),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1320.0,3833.57386848,-18635.77026711,-18388.68722885,3.384748179,-0.955363841,1.658785020),
('28129','1 28129U 03058A 06175.57071136 -.00000104 00000-0 10000-3 0 459','2 28129 54.7298 324.8098 0048506 266.2640 93.1663 2.00562768 18443',1440.0,22002.20074562,-14879.72595593,774.32827099,1.191573619,1.894561165,3.159953047),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',0.0,6333.08123128,-1580.82852326,90.69355720,0.714634423,3.224246550,7.083128132),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',120.0,-3990.93845855,3052.98341907,4155.32700629,-5.909006188,-0.876307966,-5.039131404),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',240.0,-603.55232010,-2685.13474569,-5891.70274282,7.572519907,-1.975656726,0.121722605),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',360.0,4788.22345627,782.56169214,4335.14284621,-4.954509026,3.683346464,4.804645839),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',480.0,-6291.84601644,1547.82790772,-453.67116498,-0.308625588,-3.341538574,-7.082659115),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',600.0,4480.74573428,-3028.55200374,-3586.94343641,5.320920857,1.199736275,5.626350481),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',720.0,-446.42460916,2932.28872588,5759.19389757,-7.561000245,1.550975493,-1.374970885),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',840.0,-3713.79581831,-1382.66125130,-5122.45131136,6.090931626,-3.512629733,-3.467571746),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',960.0,6058.32017522,-827.47406722,2104.04678651,-1.798403024,3.787067272,6.641439744),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1080.0,-5631.73659006,2623.70953644,1766.49125084,-3.216401578,-2.309140959,-6.788609120),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1200.0,2776.84991560,-3255.36941953,-4837.19667790,6.748135564,-0.193044825,4.005718698),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1320.0,1148.04430837,2486.07343386,5826.34075913,-7.420162295,2.589456382,0.356350006),
('28350','1 28350U 04020A 06167.21788666 .16154492 76267-5 18678-3 0 8894','2 28350 64.9977 345.6130 0024870 260.7578 99.9590 16.47856722116490',1440.0,-4527.90871828,-723.29199041,-4527.44608319,5.121674217,-3.909895427,-4.500218556),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',0.0,-11665.70902324,24943.61433357,25.80543633,-1.596228621,-1.476127961,1.126059754),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',120.0,-11645.35454950,979.37668356,5517.89500058,3.407743502,-5.183094988,-0.492983277),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',240.0,5619.19252274,19651.44862280,-7261.38496765,-2.013634213,3.106842861,0.284235517),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',360.0,-9708.68629714,26306.14553149,-1204.29478856,-1.824164290,-0.931909596,1.113419052),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',480.0,-14394.03162892,6659.30765074,5593.38345858,1.556522911,-4.681657614,0.296912248),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',600.0,7712.09476270,15565.72627434,-7342.40465571,-1.646800364,4.070313571,-0.109483081),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',720.0,-7558.36739603,27035.11367962,-2385.12054184,-1.999583791,-0.393409283,1.078093515),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',840.0,-15495.61862220,11550.15897828,5053.83178121,0.469277336,-4.029761073,0.679054742),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',960.0,9167.02568222,10363.65204210,-6871.52576042,-0.881621027,5.223361510,-0.740696297),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1080.0,-5275.80272094,27151.78486008,-3494.50687216,-2.129609388,0.150196480,1.021038089),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1200.0,-15601.37656145,15641.29379850,4217.03266850,-0.249183123,-3.405238557,0.888214503),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1320.0,9301.05872300,3883.15265574,-5477.86477017,0.871447821,6.493677331,-1.885545282),
('28623','1 28623U 05006B 06177.81079184 .00637644 69054-6 96390-3 0 6000','2 28623 28.5200 114.9834 6249053 170.2550 212.8965 3.79477162 12753',1440.0,-2914.31065828,26665.20392758,-4511.09814335,-2.216261909,0.710067769,0.940691824),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',0.0,42080.71852213,-2646.86387436,0.81851294,0.193105177,3.068688251,0.000438449),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',120.0,37740.00085593,18802.76872802,3.45512584,-1.371035206,2.752105932,0.000336883),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',240.0,23232.82515008,35187.33981802,4.98927428,-2.565776620,1.694193132,0.000163365),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',360.0,2467.44290178,42093.60909959,5.15062987,-3.069341800,0.179976276,-0.000031739),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',480.0,-18962.59052991,37661.66243819,4.04433258,-2.746151982,-1.382675777,-0.000197633),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',600.0,-35285.00095313,23085.44402778,2.08711880,-1.683277908,-2.572893625,-0.000296282),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',720.0,-42103.20138132,2291.06228893,-0.13274964,-0.166974816,-3.070104560,-0.000311007),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',840.0,-37580.31858370,-19120.40485693,-2.02755702,1.394367848,-2.740341612,-0.000248591),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',960.0,-22934.20761876,-35381.23870806,-3.16495932,2.580167539,-1.672360951,-0.000134907),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1080.0,-2109.90332389,-42110.71508198,-3.36507889,3.070935369,-0.153808390,-0.000005855),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1200.0,19282.77774728,-37495.59250598,-2.71861462,2.734400524,1.406220933,0.000103486),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1320.0,35480.60990600,-22779.03375285,-1.52841859,1.661210676,2.587414593,0.000168300),
('28626','1 28626U 05008A 06176.46683397 -.00000205 00000-0 10000-3 0 2190','2 28626 0.0019 286.9433 0000335 13.7918 55.6504 1.00270176 4891',1440.0,42119.96263499,-1925.77567263,-0.19827433,0.140521206,3.071541613,0.000179561),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',0.0,-6131.82730456,2446.52815528,-253.64211033,-0.144920228,0.995100963,7.658645067),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',5.0,-5799.24256134,2589.14811119,2011.54515100,2.325207364,-0.047125672,7.296234071),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',10.0,-4769.05061967,2420.46580562,4035.30855837,4.464585796,-1.060923209,6.070907874),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',15.0,-3175.45157340,1965.98738086,5582.12569607,6.049639376,-1.935777558,4.148607019),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',20.0,-1210.19024802,1281.54541294,6474.68172772,6.920746273,-2.580517337,1.748783868),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',25.0,896.73799533,447.12357305,6607.22400507,6.983396282,-2.925846168,-0.872655207),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',30.0,2896.99663534,-440.04738594,5954.92675486,6.211488246,-2.926949815,-3.433959806),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',35.0,4545.78970167,-1273.55952872,4580.16512984,4.656984233,-2.568711513,-5.638510954),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',40.0,5627.43299371,-1947.94282469,2634.16714930,2.464141047,-1.873985161,-7.195743032),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',45.0,5984.72318534,-2371.37691609,349.87996209,-0.121276950,-0.911981546,-7.859613894),
('28872','1 28872U 05037B 05333.02012661 .25992681 00000-0 24476-3 0 1534','2 28872 96.4736 157.9986 0303955 244.0492 110.6523 16.46015938 10708',50.0,5548.43325922,-2480.16469245,-1979.24314527,-2.763269534,0.199691915,-7.482796996),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',0.0,423.99295524,-6658.12256149,136.13040356,1.006373613,0.217309983,7.662587892),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',20.0,931.80883587,-1017.17852239,6529.19244527,-0.298847918,7.613891977,1.226399480),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',40.0,-83.44906141,6286.20208453,2223.49837161,-1.113515974,2.530970283,-7.219445568),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',60.0,-958.57681221,3259.26005348,-5722.63732467,-0.101225813,-6.735338321,-3.804851872),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',80.0,-255.25619985,-5132.59762974,-4221.27233118,1.077709303,-4.905938824,5.892521264),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',100.0,867.44295097,-5038.40402933,4256.73810533,0.479447535,5.032326446,5.857126248),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',120.0,559.16882013,3376.30587937,5699.22017391,-0.906749328,6.646149867,-3.852331832),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',140.0,-669.85184205,6196.00229484,-2281.95741770,-0.795804092,-2.752114827,-7.202478520),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',160.0,-784.20708019,-1278.53125553,-6449.19892596,0.636702380,-7.595425203,1.431090802),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',180.0,406.15811659,-6607.03115799,148.33021477,1.009818575,0.231843765,7.692047844),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',200.0,916.34911813,-884.08649248,6491.09810362,-0.302163049,7.669887109,1.084336909),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',220.0,-104.02490970,6304.31821405,1960.08739882,-1.108873823,2.259522809,-7.351147710),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',240.0,-944.61642849,2872.17248379,-5846.94103362,-0.051117686,-6.989747076,-3.413102600),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',260.0,-187.16569888,-5404.86163467,-3731.97057618,1.094696706,-4.412110995,6.326060952),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',280.0,884.59720467,-4465.74516163,4725.83632696,0.380656028,5.691554046,5.303910983),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',300.0,446.40767236,4086.66839620,5093.05596650,-0.982424447,6.072965199,-4.791630682),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',320.0,-752.24467495,5588.35473301,-3275.04092573,-0.661161370,-4.016290740,-6.676898026),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',340.0,-643.72872525,-2585.02528560,-5923.01306608,0.807922142,-7.171597814,3.041115058),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',360.0,584.40295819,-6202.35605817,1781.00536019,0.869250450,2.226927514,7.471676765),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',380.0,779.59211765,1100.73728301,6311.59529480,-0.599552305,7.721032522,-1.275153027),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',400.0,-403.03155588,6399.18000837,-364.12735875,-1.008861924,-0.516636615,-7.799812287),
('29141','1 29141U 85108AA 06170.26783845 .99999999 00000-0 13519-0 0 718','2 29141 82.4288 273.4882 0015848 277.2124 83.9133 15.93343074 6828',420.0,-852.93910071,192.65232023,-6322.47054784,0.396006194,-7.882964919,-0.289331517),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',0.0,-5566.59512819,-3789.75991159,67.60382245,2.873759367,-3.825340523,6.023253926),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',120.0,4474.27915495,-1447.72286142,4619.83927235,4.712595822,5.668306153,-2.701606741),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',240.0,1922.17712474,5113.01138342,-4087.08470203,-6.490769651,-0.522350158,-3.896001154),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',360.0,-6157.93546882,-2094.70798790,-1941.63730960,0.149900661,-5.175192523,5.604262034),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',480.0,2482.64052411,-3268.45944555,5146.38006190,6.501814698,4.402848754,-0.350943511),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',600.0,4036.26455287,4827.43347201,-2507.99063955,-5.184409515,1.772280695,-5.331390168),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',720.0,-5776.81371622,-118.64155319,-3641.22052418,-2.539917207,-5.622701582,4.403125405),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',840.0,67.98699487,-4456.49213473,4863.71794283,7.183809420,2.418917791,2.015642495),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',960.0,5520.62207038,3782.38203554,-596.73193161,-3.027966069,3.754152525,-6.013506363),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1080.0,-4528.05104455,1808.46273329,-4816.99727762,-4.808419763,-5.185789345,2.642104494),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1200.0,-2356.61468078,-4852.51202272,3856.53816184,6.688446735,0.118520958,4.021854210),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1320.0,6149.65800134,2173.59423261,1369.29488732,-0.345832777,5.109857861,-5.842951828),
('29238','1 29238U 06022G 06177.28732010 .00766286 10823-4 13334-2 0 101','2 29238 51.5595 213.7903 0202579 95.2503 267.9010 15.73823839 1061',1440.0,-2629.55011449,3400.98040158,-5344.38217129,-6.368548448,-3.998963509,0.577253064),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',0.0,2328.96975262,-5995.22051338,1719.97297192,2.912073281,-0.983417956,-7.090816210),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',120.0,1020.69234558,2286.56260634,-6191.55565927,-3.746543902,6.467532721,1.827985678),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',240.0,-3226.54349155,3503.70977525,4532.80979343,1.000992116,-5.788042888,5.162585826),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',360.0,2456.10706533,-6071.93855503,1222.89768554,2.679390040,-0.448290811,-7.228792155),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',480.0,787.16457349,2719.91800946,-6043.86662024,-3.759883839,6.277439314,2.397897864),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',600.0,-3110.97648029,3121.73026235,4878.15217035,1.244916056,-6.124880425,4.700576353),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',720.0,2567.56229695,-6112.50383922,713.96374435,2.440245751,0.098109002,-7.319959258),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',840.0,556.05661780,3144.52288201,-5855.34636178,-3.754660143,6.044752775,2.957941672),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',960.0,-2982.47940539,2712.61663711,5192.32330472,1.475566773,-6.427737014,4.202420227),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1080.0,2663.08964352,-6115.48290885,196.40072866,2.196121564,0.652415093,-7.362824152),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1200.0,328.54999674,3557.09490552,-5626.21427211,-3.731193288,5.769341172,3.504058731),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1320.0,-2842.06876757,2278.42343492,5472.33437150,1.691852635,-6.693216335,3.671022712),
('88888','1 88888U 80275.98708465 .00073094 13844-3 66816-4 0 87','2 88888 72.8435 115.9689 0086731 52.6988 110.5714 16.05824518 1058',1440.0,2742.55398832,-6079.67009123,-326.39012649,1.948497651,1.211072678,-7.356193131);
-- Verify we loaded all 518 vectors
SELECT count(*) AS vectors_loaded FROM vallado_vectors;
-- Materialize propagation results (avoid recomputing per query)
CREATE TEMP TABLE vallado_results AS
SELECT
v.satnum,
v.tsince_min,
sgp4_propagate_safe(
tle_from_lines(v.tle_line1, v.tle_line2),
_vallado_jd_plus_min(
tle_epoch(tle_from_lines(v.tle_line1, v.tle_line2)),
v.tsince_min
)
) AS eci,
v.ref_x, v.ref_y, v.ref_z,
v.ref_vx, v.ref_vy, v.ref_vz
FROM vallado_vectors v;
-- Summary: all 518 must propagate; 434 match at tight tolerance.
-- These numbers are the regression baseline for Bill Gray's sat_code.
SELECT
count(*) AS total,
count(*) FILTER (WHERE eci IS NOT NULL) AS propagated,
count(*) FILTER (WHERE eci IS NOT NULL
AND greatest(abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)) < 1e-4
AND greatest(abs(eci_vx(eci) - ref_vx),
abs(eci_vy(eci) - ref_vy),
abs(eci_vz(eci) - ref_vz)) < 1e-7
) AS tight_pass,
round(max(CASE WHEN eci IS NOT NULL THEN greatest(
abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)
) END)::numeric, 8) AS worst_pos_km,
round(max(CASE WHEN eci IS NOT NULL THEN greatest(
abs(eci_vx(eci) - ref_vx),
abs(eci_vy(eci) - ref_vy),
abs(eci_vz(eci) - ref_vz)
) END)::numeric, 10) AS worst_vel_kms
FROM vallado_results;
-- Per-satellite breakdown: position vs velocity pass counts.
-- Satellites with worst_pos > 0.1 km have known implementation differences
-- vs Vallado's AFSPC mode (see header comments).
SELECT
satnum,
count(*) AS vectors,
count(*) FILTER (WHERE eci IS NOT NULL
AND greatest(abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)) < 1e-4
) AS pos_pass,
count(*) FILTER (WHERE eci IS NOT NULL
AND greatest(abs(eci_vx(eci) - ref_vx),
abs(eci_vy(eci) - ref_vy),
abs(eci_vz(eci) - ref_vz)) < 1e-7
) AS vel_pass,
count(*) FILTER (WHERE eci IS NULL) AS errors,
round(max(CASE WHEN eci IS NOT NULL THEN greatest(
abs(eci_x(eci) - ref_x),
abs(eci_y(eci) - ref_y),
abs(eci_z(eci) - ref_z)
) END)::numeric, 6) AS worst_pos_km
FROM vallado_results
GROUP BY satnum
ORDER BY satnum;
-- Clean up
DROP FUNCTION _vallado_jd_plus_min(float8, float8);